学哪一个计算机语言好?个人经验分享篇

来源: 兄贵 2022-11-09 12:41:24 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 次 (8648 bytes)

我几次分享学习计算机语言的经验,都会受到挤兑,比如:

  • 纠结电脑语言,都是马工的命。州大LS的CS混混就好了
  • 语言是载体,思想才是精华 
  • 学一门语言就够了
  • 掌握汇编语言和任何其他一门语言就够了
  • 所有语言最后都形成机器语言,所以一样快
  • 等等

其实我都已经分别回答过了这些迷思,不过觉得意犹未尽,所以再唠叨几句,供刚刚有小孩想学计算机的参考.

1)作为计算机专业,是不是就学一门语言就够了?

我的答案是否定的。如果找一个编程的工作,也许一门语言就够了。我九十年代进入一家银行,里面大多数都是没上过大学的程序员,只会Cobol,照样在银行工作了2、30年没问题。

但是一个年轻人主修计算机,显然是不够的。好比说,你一辈子只吃饭,也饿不死,但天底下这么多好吃的东西,为什么不去吃吃呢?再说,天底下那么多帅哥美女,如果你只交往过一个,你有可能成为情场高手吗?

不同的语言有不同的优势,不同的功能,新的语言不断的在创造出来,起码有了几千门计算机语言了。年轻人,你不希望自己被禁锢在一个语言里吧

80年代初,我在理论物理所跟郝柏林学计算机,他同时教我们C和LISP,还有用于数学推导的 Reduce语言。他说他是中国第一个懂C和Lisp的人,而且也是中国第一个懂Fortran的人,1972年经周总理批准,理论物理所进口了中国第一台小型机,他成了中国第一个在小型机上用FORTRAN编程的人,70年代他在中国推广了FORTRAN,80年代他在中国推广C,我们算是中国第一批学C的人,当时我已经有了在alpha小型机上编程Fortran的经验,我写Fortran的时候,程序是写在纸上,然后把程序给机房的小姐姐工作人员,由她打孔,然后再由机器读打孔卡片如下:


FORTRAN编程给我的感觉就是计算机编个程,太难了,经常要看小姐姐的脸色,她如果发脾气,不给你打孔,你的code就只是纸上谈兵。

而郝柏林给我们使用的Reduce语言,居然可以人机交互,给他一个多项式a^2-b^2要求因式分解,它能马上输出(a+b)(a-b). 给它一个5次方程,它马上给你给解了。太神奇了。

40年前就知道,作为年轻人,只学一门语言不行啊。想想看,一辈子只吃一道菜,睡一个人,可行吗?

2)是不是所有语言都一样?

如果所有语言都一样,为什么这么多的天才们还在创造新的语言呢?早期不同语言可以通过 link 把目标文件连起来,现在语言大部分都是产生Virtual Machine上的assembly. 所以不同语言运行的速度,安全性等等都是完全千差万别的。

3)汇编语言要不要学?

几乎没有汇编语言的工作,即使操作系统,从windows到linux, 97%以上都是用C来写的。所以学汇编语言肯定不能帮你找到工作,但是如果你想成为比其他编程员更厉害的人,你就得精通汇编语言。汇编语言也有高级汇编语言,和低级(或者说基础)汇编语言。现代语言(除了C/C++)基本上不容许Goto语句,而低级汇编语言只有Goto,没有子程序,没有for loop,没有 if else,所以要理解高级语言是如何通过低级语言来实现的。

绝大多数程序员,都会碰到一些bug后,束手无策。为什么?因为不了解底层语言,如果你懂了底层汇编语言,你就能帮他解决问题。另外,很多Code,都有安全漏洞、安全隐患,如果深入到汇编语言,你就比较容易的发现这些安全漏洞和安全隐患。

当年高校的汇编语言是非常重视的,从单板机的汇编语言,到Motorola 68000 汇编语言,到 RISC-V ASM, 到当年被瞧不起的x86, 到逐渐重视的 x64, 以前汇编语言是重中之重的必修课,现在好像很多计算机专业也就草草的浏览一下皮毛。

4)到底应该学哪些语言呢?

Java曾经如日中天,2004年之前,Java势不可挡,不仅横扫各种语言,甚至横扫所有操作系统。连微软都在搞Visual J++,而且从 VJ++1.0,直接跳到 VJ++6.0 不然就跟不上趟了。2003年圣诞节前的微软年会上,J++组粉墨登场,兴致勃勃的展示微软的JVM,完胜Sun Microsystems的JVM,计算机世界将真正进入 write once, run anywhere. 什么计算机语言,什么操作系统,都不重要了。Java将一统江湖,一统天下。 报告人没有等待到同事们的掌声,相反的是比尔盖茨上了讲台,问道:是谁给你发的工资?是Java吗?不是!而是 Windows!是Microsoft Office! 盖茨宣布,解散J++团队,下岗一半,分流一半,成立C#,搞 .NET,微软的口号是:write whatever you want, run Windows

今天的Java,已经行将就木,被批的无一是处。遥想1995年,Java因为推出Hotjava web browser 而一举大红大紫。Hotjava 是第一个动态浏览器,为了推广Java,很多java coding大赛,我当年也参加了,没得到千元大奖,但得到了厚厚Java书。Netscape受到严重威胁,不得不屈尊和Java达成协约,共同开发新的JavaScript作为浏览器客户端,再由Java,PHP,C#包装成OO给程序员用。时至今日,Java,PHP,越来越衰,C#转入游戏业,而JavaScript成了Full stack的不二选择。

所以现在学Java,不是与时俱进的选择,但无奈AP考试只考它,所以还是得学。

如果想参加USACO等等竞赛,C++是不二选择,不仅速度快,而且有强大的算法库 STL

数据的处理,你可以不必用SQL写,你可以用C,C++甚至任何一个语言写,通过产生的bytecode injection 到数据库产生 stored procedures 或者 user functions,但是这需要更高的权限,也需要一样对于数据库的理解,为什么不把SQL也学了呢。 而且SQL是NoSQL的基础,不需要Join而已,有了SQL,对写 key-value, Graph database 等等的 query,也是基本基础。

再者是functional programming language. 虽然业界用到的纯fp不多,但functional programming是完全不同的理念,图灵的state machine的理念是万物皆数,万物皆state。state可以是数,是table(SQL),是矩阵(量子力学),是各种数、array等等的组合(Object Oriented Languages), 而图灵的博士导师Alonzo Church 却认为 计算皆函数,计算机应该是 stateless machine,即没有State。只有你給它一个自变量,它给你一个返回函数值,计算机本身是干净的,没有痕迹的。很明显,functional programming有很多好处, 因为没有state, 所以没有 side effects, 不容许mutation,可以同时运行进行并行计算,debug非常简单,而且几乎没有什么隐藏的bug。

所以和汇编语言一样,学习functional programming,不是为了找相关的工作,而是写出更好的code。现在Java, Python, C#, C++,,,,等等都支持functional programming

同理,学习C语言,其目的之一是使你成为一名更好的程序员,即使不用C。所以也是值得学的,因为它帮助你理解计算机是如何运作的。

总结一下,学习计算机语言,要带着热情去学,带着探险的激情去学,而不是带着畏惧的心情去学。多多益善的学。学习各种语言的特点,特别是要注意学习各种不同类型的语言。比如在学 distributed system时,是否用Go语言去做作业,学操作系统的时候,用 Rust语言去练习,学游戏编程的时候,用一下C#,图像处理时用用Julia。。。。不仅Open your eyes开了眼界, 而且了解到很多你以为不能做,或者很难做的事情,其实其他语言易如反掌。

最后一点,尽量避免dying language, 比如 PHP,VB,LISP,甚至 Java

所有跟帖: 

美国CS本科生大部分都是用CPP的,大部分人很轻松自学JAVA,Python….语言确实不是个问题,至于汇编语言啥的,看自己的方 -青裁- 给 青裁 发送悄悄话 (44 bytes) () 11/09/2022 postreply 12:51:00

Go, Rust, Julia 都是潮流新语言 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 12:59:12

这是我背后的省略号代表的… -青裁- 给 青裁 发送悄悄话 (84 bytes) () 11/09/2022 postreply 13:00:00

据我所知,很多公司都在用Java. 一个公司要换编程语言很难。 -败了又败- 给 败了又败 发送悄悄话 (0 bytes) () 11/09/2022 postreply 12:54:00

说Java说正在死亡的语言, 好像早了一点。 看看各个IT行业的招人广告, -总要注册- 给 总要注册 发送悄悄话 (61 bytes) () 11/09/2022 postreply 13:00:00

COBOL招工一时吃紧,因为没有人学了,而很多银行还在用 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:13:33

Java跟COBOL不一样。 COBOL主要用于financial。 而 JAVA是真正的通用语言。 实际上它和C# -总要注册- 给 总要注册 发送悄悄话 (116 bytes) () 11/09/2022 postreply 13:22:50

哈哈,文章开头第一段最欢乐 -田园景色1230- 给 田园景色1230 发送悄悄话 田园景色1230 的博客首页 (0 bytes) () 11/09/2022 postreply 12:59:01

我只知道,一个语言越差,对使用者的要求越高 -avw- 给 avw 发送悄悄话 (0 bytes) () 11/09/2022 postreply 12:59:43

有道理,所以老牌 JavaScript 越来越吃香了 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:05:40

俺面试候选人,第一句话就是,你随便选语言,我也不纠结语法错误,嘿嘿 -skyport- 给 skyport 发送悄悄话 skyport 的博客首页 (0 bytes) () 11/09/2022 postreply 13:04:37

要看你做什么 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (332 bytes) () 11/09/2022 postreply 13:11:43

赞,80年代就在中科院物理所写code了, -DukeAB- 给 DukeAB 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:10:35

物理所为啥要写code? -avw- 给 avw 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:23:43

不是物理所。是理论物理所。完全不同的单位 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:40:35

当年的理论物理所,看不起物理所。(现在不知道了) -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:30:49

郝柏林说,写了一大堆书的谭浩强也是他早期的学生,没学明白就写了一大堆教科书 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:42:35

赞能写会算……正吭哧吭哧写conference abstract的仰望大牛 :) -成功的兔- 给 成功的兔 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:13:35

兄贵讲古有一套,但对语言的认识有限.给年轻人提个醒,莫被误导 :-). -raymn- 给 raymn 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:18:25

这里根本没有年轻人 -avw- 给 avw 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:21:39

看对谁而言.兄贵alpha上算FORTRAN题时,我在PDP-11上写Prolog解释器 -raymn- 给 raymn 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:24:38

每个人都有历史局限性,我是当故事听的 -avw- 给 avw 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:26:21

网上讨论程序语言的,基本不懂程序语言设计原理和语言特点的来龙去脉.不信问他java/python FP的区别 -raymn- 给 raymn 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:33:32

java和python的FP,都挺令人失望的。都不支持最重要的immutability。P的lambda只支持expre -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:40:48

C#的FP好很多 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 15:10:01

我很快用上VAX,比PDP好多了。VMS相当高级了 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:32:48

知道PDP-11/45的人应该有些年纪了,应该是退休人士? -hhtt- 给 hhtt 发送悄悄话 hhtt 的博客首页 (0 bytes) () 11/09/2022 postreply 14:32:53

你们上来就是卡片,我是穿孔纸带(用剪刀胶水 cut and paste),719机 -slow_quick- 给 slow_quick 发送悄悄话 slow_quick 的博客首页 (440 bytes) () 11/09/2022 postreply 15:43:46

Java是在C++基础上发展起来的语言。 一方面强推C++, 另一方面强砭Java是过时语言。 -总要注册- 给 总要注册 发送悄悄话 (182 bytes) () 11/09/2022 postreply 13:25:51

因为Java失去了C++很多优点。Java曾经名字是C++++。这导致微软用了C#。但C++寿命比Java和C#都会长 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:37:34

javascript开发跟java是没关系的,也促成了java的毁灭 -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 13:25:00

Javascript 导致Java 毁灭? 这是哪儿的理论?请举出有几家公司是用 -总要注册- 给 总要注册 发送悄悄话 (34 bytes) () 11/09/2022 postreply 13:28:32

导致毁灭也许夸张了,但javascript导致java作为VM通用一统天下的理想毁灭是不错的 -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 13:30:00

Javascript 跟Java 风马牛不相及。 只能怪最初的网景公司起的这个破名字。 -总要注册- 给 总要注册 发送悄悄话 (92 bytes) () 11/09/2022 postreply 14:05:29

当然是没啥关系,但在web就是干死了java,公司么还是用了java,但这语言确实并不很好 -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 14:32:00

JavaScript is for Front End and Java is for Back End, -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (52 bytes) () 11/09/2022 postreply 16:59:31

Java, .Net, PHP都phase out.基于Javascript的Node.js Angular React -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (90 bytes) () 11/09/2022 postreply 18:33:30

能取代Javascript也许是WebAssembly -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 18:37:10

两者语言之间没什么关系,但诞生有关系的。Javascript是Netscape宣称的用Script实现Hotjava功能 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:35:43

成功的语言一般宗教色彩淡点 -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 13:27:00

是这样。连NW不是也成了宗教了吗 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 13:44:24

当年OO过度吹捧,现在FP又搞得像是神一样,都是FAD -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 13:29:00

Java本身是面向OO的语言。 如果用Java写functional programming, -总要注册- 给 总要注册 发送悄悄话 (194 bytes) () 11/09/2022 postreply 13:59:52

FP是Java非常重要的部分,而且是实实在在Java追赶先进的产物。杀鸡牛刀的比喻搞反了 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:19:57

一个公司换语言不容易,一个码工换个语言可太容易了。 -小糊涂仙2000- 给 小糊涂仙2000 发送悄悄话 (110 bytes) () 11/09/2022 postreply 13:32:03

-兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 15:44:43

ji语言是末稍,学啥没啥关系 -12度圆缺- 给 12度圆缺 发送悄悄话 (1185 bytes) () 11/09/2022 postreply 13:35:15

确切地说,FP是消除scope之间的state dependency.好处还是很多的 -raymn- 给 raymn 发送悄悄话 (70 bytes) () 11/09/2022 postreply 13:40:56

同意 -12度圆缺- 给 12度圆缺 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:43:50

stateless 是更强的总结 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:29:28

感想后的感想,我觉得最重要的是 C/C++, SQL,Javascript -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (4793 bytes) () 11/09/2022 postreply 14:13:19

不是 -tibuko- 给 tibuko 发送悄悄话 tibuko 的博客首页 (0 bytes) () 11/09/2022 postreply 14:34:00

太赞了,请问x++是不是c++的cloud version ? -qqdragon- 给 qqdragon 发送悄悄话 (0 bytes) () 11/09/2022 postreply 13:39:28

我感觉,微软的X++是为了一统 OO设计,SQLtable,和XML文件的。微软的东西还有F#,J#可以根据工作需要学 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:17:57

强赞:) -两女宝妈- 给 两女宝妈 发送悄悄话 两女宝妈 的博客首页 (0 bytes) () 11/09/2022 postreply 13:43:10

先点赞,再点评 -宝马奔驰- 给 宝马奔驰 发送悄悄话 (671 bytes) () 11/09/2022 postreply 13:51:49

精髓总结 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:21:34

语言不重要,重要的是跟上语言的新features. Java 8 stream 开始用FP。Java 不会死,不是语言多好,是开 -Red_May- 给 Red_May 发送悄悄话 (0 bytes) () 11/09/2022 postreply 14:15:00

确实很难预言。作为WrapUp JS的ASP, ASP.Net, PHP, Swing, JavaFX, Perl都不行 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (137 bytes) () 11/09/2022 postreply 14:25:50

我猜测一下,您可能熟悉很多语言,但没做过production level 的应用。 -Red_May- 给 Red_May 发送悄悄话 (0 bytes) () 11/09/2022 postreply 14:36:00

如果在美国用过打卡和读卡机做程序的,一定是前辈!兄贵,有没有编过Assembly,这在美国七八十年代武器上用的。 -hhtt- 给 hhtt 发送悄悄话 hhtt 的博客首页 (0 bytes) () 11/09/2022 postreply 14:30:35

应该问问兄贵玩没有玩过Z80单板机。 -总要注册- 给 总要注册 发送悄悄话 (167 bytes) () 11/09/2022 postreply 14:42:19

Z80 在90年代还再用 -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (0 bytes) () 11/09/2022 postreply 17:05:30

在中国单板机上编过 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 14:42:37

Java 将继续存在。现在是API时代, Java SpringBoot是支持API 构建的框架, 大公司最好的语言. -成功鼠- 给 成功鼠 发送悄悄话 (0 bytes) () 11/09/2022 postreply 14:37:16

+1 就是我上面说的。 -Red_May- 给 Red_May 发送悄悄话 (0 bytes) () 11/09/2022 postreply 14:39:00

+1 -bayview- 给 bayview 发送悄悄话 (0 bytes) () 11/09/2022 postreply 14:50:24

同意,当下的语言组合 Java SpringBoot API + JavaScript (React Framework -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (0 bytes) () 11/09/2022 postreply 17:07:08

Angular even better。 -总要注册- 给 总要注册 发送悄悄话 (167 bytes) () 11/09/2022 postreply 17:56:44

Depends on the size of the project -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (465 bytes) () 11/09/2022 postreply 18:34:25

非JS的都会被JS framework取代,而JS可能被WebAssembly取代。JAVA dying -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 18:44:57

Just repeat myself again, JS is for FrontEnd, whereas Java -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (94 bytes) () 11/09/2022 postreply 18:58:22

Nodejs弱点像single-threading, 怎能与Java相提并论? -成功鼠- 给 成功鼠 发送悄悄话 (0 bytes) () 11/09/2022 postreply 20:07:30

没有一种语言比Java更适合 Enterprise-grade应用, 更能处理concurrency, multithr -成功鼠- 给 成功鼠 发送悄悄话 (36 bytes) () 11/09/2022 postreply 20:08:20

编程语言是熟练工。只会一种不行,会一种后其他也不难。 -加州lalin- 给 加州lalin 发送悄悄话 加州lalin 的博客首页 (0 bytes) () 11/09/2022 postreply 15:21:02

Java 不会是 Dying Language -纽约故事- 给 纽约故事 发送悄悄话 纽约故事 的博客首页 (0 bytes) () 11/09/2022 postreply 16:51:09

在MacPro上,如果用C哪个IDE比较好? -jonjon- 给 jonjon 发送悄悄话 (117 bytes) () 11/09/2022 postreply 18:20:15

Xcode -成功鼠- 给 成功鼠 发送悄悄话 (0 bytes) () 11/09/2022 postreply 18:24:31

现在几乎都是 VSCode. 需要安装。Xcode是苹果自带的 -兄贵- 给 兄贵 发送悄悄话 兄贵 的博客首页 (0 bytes) () 11/09/2022 postreply 18:41:15

谢两位。我过几天去看一下 -jonjon- 给 jonjon 发送悄悄话 (0 bytes) () 11/09/2022 postreply 19:08:09

大厂用:Google C++,Java,python; Facebook:Java, C++, JavaScript, -泥川- 给 泥川 发送悄悄话 (76 bytes) () 11/10/2022 postreply 14:58:46

请您先登陆,再发跟帖!