转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
我曾在某处读到过(可能在《代码大全》,但我不敢确定),程序员应该每年学习一门新的编程语言。但如果做不到,我建议,你至少学习以下 5 种开发语言,以便你在职业生涯有很好的表现。
每个公司都喜爱精通多种编程语言并且多才多艺的程序员。一个既能很麻利地写脚本,也能编写复杂的 Java 程序的程序员,确实相当有价值。所以实际上,对于高级开发者来说,学习不止一种编程语言,几乎就是必然的要求。
目前而言,面试官越来越看重那些拥有多种编程语言经验的工程师。比如,同时有 C++ 和 Java 的经验就很不错,Python 和 Java 也是。我个人喜欢那些在 C++ 或者 Java 方面有着丰富经验,而且能用 Groovy、Perl 或 Python 写脚本的软件工程师。
很多时候,写一个小脚本就足以快速搞定一些专有任务。我不想我的程序员们花上一整天用 Java 去写一个读取 CSV 文件的程序,或者在 TCP/UDP 端口抓取信息的程序,这是很浪费时间的一件事情。
为什么我在文章中选择这 5 种语言呢?我的理由简单且实际。我是基于这些语言的用途、编程范式和流行度及代表性来选择的。
例如,如果你想找一份应用开发的工作,就不能忽视 Java。同样,做与 web 相关的事情,就得知道无处不在的 JavaScript。
在开发者职业生涯的早期,我强烈建议学习 C 语言。它能帮助开发者贴近系统底层,知晓那些编程的关键概念,这是隐藏在 JVM 或 CLR 底下的东西。
对于脚本语言,我的选择是 Python,尽管你也可用 Perl 或 Groovy 代替。但在扩展支持方面来看,Python 的表现无疑是最棒的。有很多 Python 模块可供选择,帮你能分分种搞定各种任务。
学习一种面向对象的语言的同时,也学习一种像 Haskell 或 Scala 这样的函数式编程语言,这能拓展你的思维和编程认知。你可以在本文找到学习这 5 种语言的更多理由。
言归正传,下面就是我列出的 5 种每个程序员或软件开发者都该尝试学习的编程语言。
它包含了语言的大杂烩,比如[面向对象的]语言( http://javarevisited.blogspot.sg/2013/06/5-must-read-books-to-learn -object.html),函数式的语言,脚本语言,提供了对底层的控制,也涵盖了广泛用于服务端开发的语言。
Java 是近二十年来最流行的语言之一。它统治着全球的服务端应用开发,同时在基于 Anroid 开发的移动应用和游戏市场,以及企业 web 开发领域,也占有相当一部分比重。
Java 最初的构想是一次编写各种平台均能运行( write once run anywhere )。随着时间的推移,它确实做到了运行在各个平台的各个角落。
你应该学习使用 Java 构建健壮的、可扩展的服务端应用。你可以用 Java 构建多种复杂度的工程。与之相伴的,有很棒的工具、技术和社区支持。
为什么你应该学 Java 呢?你会学到如果专注于应用层面和代码结构的设计,而不用关心特定系统的细节和内存管理。JVM 帮你搞定了后面这些。
如果你已经决定开始学习 Java 了,那么 Udemy 上的 The Complete Java Master Class 教程就很棒,用它作为入门教程很好,它包含了 Java 的所有核心概念,很详细。
顺便一提,如果你想要更多选择,而且不介意使用免费的课程学习,那可以看看这上面给新手提供的课程。
Java 被许多世界上的大型组织所使用。而且能够向众多用户展示你用 Java 开发的 Android 应用。如果你仍然还在动摇,我建议你去这看看10 个学习 Java 的理由。
在全球范围的学校和院系,Python 是教授最多的语言之一。在美国,许多学术课程中,Python 已经取代了 Java 成为接触编程的首选语言。你将从学习 Python 中得到什么呢?——那将非常多。
Python 既能用于写脚本,也能作为一种面向对象的语言编写大型工程。
许多流行的网站,比如 Reddit,就使用基于 Python 的框架来构建,比如 Django。近段时间,许多大型组织也转向使用基于 Python 的框架了。
Python 也越来越多地用于像机器学习、人工智能、数据科学这样的新一代技术中。这也难怪,因为有基于 Python 的非常棒的机器学习库,比如 TensorFlow、Scikit-Learn 以及其他。
我个人倒是在用 Python 写脚本。这能很快地完成一些有用的事情,比如,你可以用 Python 花 5 分钟写一个 UDP 消息的监听器,相比较,用 Java 可能就要花 20 分钟。忘掉“编译、打包,然后才能使用”这些步骤。你可以直接为特定任务编写 Python 脚本。如果你有兴趣学习 Python,那么 The Complete Python BootCamp 就是个很好的开始。
如果你需要更多选择,而且不介意使用免费的课程学习,那也可看看这上面给新手的课程。
并且,如果你困惑于不知道该从 Java 还是 Python 开始,看看这个,它比较了两者。
另外,如果你仍然没有被我说服,那就可以看看我的关于10 个学习 Python 理由的文章。
你可以用 Java 替代 C++,用 Pythont 替代 Ruby,但是,坦率地讲,当前没有 JavaScript 的替代品。在最近 5 年,JavaScript 完全统治了世界。
它不再仅仅是客户端脚本语言。有了 Node.js 这样的库,和 Angular、React 这样的框架,你可以在服务端做用户界面的开发。
JavaScript 的巨大成功,有一部分要归功于 jQuery。它真正改变了人们在客户端使用 JavaScript 的方式。
作为一个在工作中使用 JSP 和开发基于 Servlet 的应用的程序员,我有许多机会同时使用 jQuery 和 JavaScript。
有了此语言的知识,可以帮助我们决定哪些功能应该在服务端实现,哪些该在客户端实现。比如,许多服务端的校验逻辑,就被我们迁移到了客户端。
如果你想从头开始深入学习 JavaScript,那 Udemy 上的 The Complete JavaScriot 就是你可加入的最佳在线课程。
如果你想要更多选择,且不介意跟着免费的课程学习,那么可以看看这里为 web 开发者提供的课程。
如果不知道 C 或 C++,你就不能成为真正的程序员。这听起来有点苛刻,但是我的经验之谈。
了解 C 的工程师或者开发者,就是比不了解 C 的程序员要优秀。这可不是简单的巧合。
这是你必须要了解的编程语言之一。我在求学期间学习的 C 语言,并在那时学到了关于编程的许多关键概念,比如结构体、数组、指针、内存管理等等。
C 仍然是操作系统编程方面最受欢迎的语言,并且在这两年,给排名榜首的 Java 带来了强劲地冲击。如果你想学习这门美妙的语言,那 C Programming for Beginners 就是个很好的开始。
它同样是最古老的主流语言之一,已经存在了四十多年。
C++ 和 C 很像,都允许你为系统和驱动编写底层代码。如果你想学习 C++ 而不是 C,可看看我为新手列出的免费 C++课程。
Scala 是基于过去 20 年来的最佳实践而创造的语言。它是一种函数式编程语言,提供了一种跟面向对象语言不同的编程范式。这能改进你的思维和代码认知。
虽然有许多函数式编程可供选择,比如 Haskell。我选择 Scala,因为作为一名 Java 开发者,我发现学习 Scala 比 Haskell 更容易。
有人也可以把学习 Haskell 当作一个挑战。但是从实际的角度讲,我认为学习 Scala 对于 Java 开发者来说更有意义。
对于 C++程序员,学习 Haskell 可能更合理。坦率讲,你可以选择任何一门函数式编程语言,但请选择一门有商业需求的比较好。
作为一名职业开发者,我倾向于把时间投资在那些对我的职业有帮助的事情上。如果你想学习 Scala,那么 Beginning Scala Programming 是个很好的入门课程。
无论你学习了多少种编程语言,你需要遵从 Bob Martin 在《代码整洁之道》给出的编码和设计原则,才能成为一名专业的程序员。它是在你的编程职业生涯能给与你最大帮助的技能。
以上所有清单的内容,列出了每个软件工程师都该学习的 5 种编程语言。你们中有些人可能已经发现了,这是 Java 开发者应该学习的 5 个编程语言。也正是如此。
学习能提供不同编程范式的语言,是提升编码技能的最佳途径。它能帮你有效地解决日常任务。
理想情况下,一个程序员的工具集里,应该包含一个接近底层系统的语言,比 C 或 C++;一个面向对象的语言,比如 Java,Pythong 或 C++;一个函数式编程语言,比如 Scala 或 Haskell ;一个强大的脚本语言,像 Perl、Python、Ruby 和 JavaScript。
最后,感谢各位阅读这篇文章。如果你喜欢这些编程语言,请与你的朋友和同行分享。
如果你有任何问题或反馈,或其他任何你认为什么编程语言也应该值得每个程序员都应该学习,也欢迎发在评论区和我们分享。
了解可嵌入您系统的在线 Excel,请前往SpreadJS 纯前端表格控件
了解高效灵活的前端开发工具包,请前往WijmoJS 前端开发工具包
全面满足 .NET 报表开发需求,请前往ActiveReports 报表控件
1
yanzixuan 2019-06-14 11:16:09 +08:00
5 个都会都不精。。。
|
2
exch4nge 2019-06-14 11:53:29 +08:00
emm... Lisp 呢
|
3
smdbh 2019-06-14 12:18:19 +08:00
等一个
每个地球人都要会说的 5 种国家语言 |
4
FrankHB 2019-06-14 12:30:11 +08:00 7
葡萄城发这个要转行了么。。。。
说点实际的吧: C/C++:让你懂怎么被 UB 教做人。 C/Java/JavaScript:让你知道历史包袱怎么通过恶心维护者以及屎溢出了如何殃及用户。 C++/Scala/Haskell:让你知道知道 parser 理论遇到实际的流氓有多没卵用,堆叠特性能能怎么恶心人。 C++/Haskell:让你知道静态类型玩成屎能到什么境界。(其实这些类型系统还是偏弱,很保守了……) C++/Python/Java:让你知道 class-based OOP 有多叒鸡。 JavaScript:让你知道没 class-base OOP 有多叒鸡。 Python/Haskell:让你知道 free-form syntax 不是嗟来之食。 Java/Python/Haskell:让你对自大的语言设计者和用户多长点见识。 如果要提 Lisp/ML/Prolog 之类,进一步打出屎来也是挺容易的…… |
5
good1uck 2019-06-14 12:36:33 +08:00 via Android
学是能学 有都精通的吗
|
6
rockyou12 2019-06-14 12:48:14 +08:00
scala 现在除了搞 spark 或者个人爱好,不然真没必要学了……
|
8
Lin0936 2019-06-14 12:56:58 +08:00 1
英语 抽象话 四川话 北儿京儿话儿 普通话
|
9
lihongjie0209 2019-06-14 12:58:16 +08:00
变量 跳转 循环 只要会这三个, 任何主流语言都可以写
|
10
tt67wq 2019-06-14 13:07:53 +08:00 2
必学的就 SQL 吧,其余的看公司用啥就学啥,面向工资编程!
|
11
AndroidEngineer 2019-06-14 13:10:56 +08:00 2
新手谈语言,老手谈产品
|
12
impl 2019-06-14 13:19:19 +08:00 via Android
把 Java 换成 go,Scala 换成 rust
|
13
ben1024 2019-06-14 13:25:10 +08:00
为何不是 JavaScript,PHP,GO [失望]
|
14
ech0x 2019-06-14 13:26:30 +08:00 via iPhone
学 Scala 还不如学 Haskell 呢
|
16
ech0x 2019-06-14 13:28:26 +08:00 via iPhone
来-> 连
|
17
goodleixiao 2019-06-14 13:29:13 +08:00
以前有句话,但是中国人都不行,世界上只有两种人,一种是懂 Lisp,一种是不懂 Lisp。
|
18
thautwarm 2019-06-14 13:31:05 +08:00 via Android
说起来 Haskell 是比较完美的语言。Scala 还是稍微有点啰嗦(类型推导能力是票圈最菜)和不友好(语法要素多,也不是很简洁直观)。
我建议 haskell, rust, python,语言的一致性最重要。其他的学学 F#也很好,只是 F#也是要素多了点。 |
19
thautwarm 2019-06-14 13:35:21 +08:00 via Android 1
@goodleixiao 世界上有三种代码复用方式。
一,不复用, 高开销抽象。比如 python。 二,基于类型。比如 haskell。 三,基于代码生成。 这就是各种 lisp。 一是工业妥协,三是学术界早期研究成果(大概 20 年前)。 二是未来,也是目前的学术界研究领域。现在这个时代,安全性也是很重要的一环,而编译期能做的事情还很多。 |
20
powertoolsteam OP @FrankHB 我们是与时俱进的,.NET 产品和 JS 产品齐发,欢迎了解:[SpreadJS 纯前端表格控件]( https://www.grapecity.com.cn/developer/spreadjs)与[前端开发工具包 WijmoJS]( https://www.grapecity.com.cn/developer/wijmojs)
|
21
opengps 2019-06-14 13:37:05 +08:00
5 个都不会。。。可能我是个假程序员
|
22
thautwarm 2019-06-14 13:37:23 +08:00 via Android
@ech0x 没 dt 其实也很好用了。dt 有时候反而写起来麻烦,会约束一些多态能力要你显式标注,很啰嗦。
况且 haskell 现在也能用 singleton 模拟 dt 了,工业够用。 |
23
zjsxwc 2019-06-14 13:38:56 +08:00
会用搜索引擎就等于会了所有语言,23333333
|
24
cstj0505 2019-06-14 13:39:18 +08:00
除了 js 不会,其他都写过
|
25
dog82 2019-06-14 13:47:59 +08:00
sql 掌握面向集合的思想; c 掌握面向过程的思想; cpp/java 掌握面向对象的思想;其它的随意吧
|
26
seabirds 2019-06-14 13:48:43 +08:00 via iPhone
@goodleixiao 中国人都不行?
|
27
fyxtc 2019-06-14 13:51:53 +08:00
基本认可,多学点其他语言,是打通其他领域的敲门砖
|
28
africwildman 2019-06-14 14:27:50 +08:00
面向工资,c sql java c++ python js,其他了解一下就行。
除了语言,要掌握的内容还很多很多很多,语言只是表达思想的工具,最重要的是思想。 |
29
yvescheung 2019-06-14 14:35:18 +08:00
我会汉语英语法语日语,但这不意味着我能写出好文章,有人只会母语,但不妨碍他成为著名的小说家
|
30
MockMVC 2019-06-14 14:35:55 +08:00 4
没有我 PHP,垃圾文章,噱头标题!
PHP 的朋友给我顶起来! |
31
richzhu 2019-06-14 14:36:43 +08:00
没有 golang 失望😥
|
32
hoyixi 2019-06-14 14:37:46 +08:00
每个程序员,都该至少挖 5 个坑,把自己埋了,埋得结结实实~
|
34
tutustream 2019-06-14 15:09:54 +08:00 1
每个女人都该同时交往的 5 个男朋友
我曾在某处读到过(可能在《 x 蒙》,但我不敢确定),女人应该每年找一个新的男朋友。但如果做不到,我建议,你至少上手以下 5 种男人,以便你以后在找老实人接盘后有很好的表现,不至于让他怀疑。 |
35
zavieryip 2019-06-14 15:12:13 +08:00
每个穷人都该死的 5 个姿势...?
|
36
smdbh 2019-06-14 15:16:24 +08:00
@tutustream 这样才能知道哪个更适合自己。当然,50 个的话,应该能找到更适合的。
|
37
huage 2019-06-14 15:30:49 +08:00
面向工资编程
|
38
kingOFWorld1 2019-06-14 15:41:23 +08:00
php 是世界上最好的语言
|
39
fy1993 2019-06-14 15:44:58 +08:00
scala 那语法,看的脑阔疼
|
40
nervebing 2019-06-14 15:52:46 +08:00
PHP forever !
|
41
kios 2019-06-14 15:59:13 +08:00
go, rust, C++, Python, js?
|
42
goodleixiao 2019-06-14 16:01:18 +08:00
@seabirds 这句话,在中国行不通,大学基本上没有不教,会的极少数
|
43
kyuuseiryuu 2019-06-14 16:05:46 +08:00
Java 最初的构想是一次编写各种平台均能运行( write once run anywhere )。随着时间的推移,它确实做到了 write once debug anywhere.
|
44
goodleixiao 2019-06-14 16:09:45 +08:00
@thautwarm 总觉只有两种,一种是纯命令式的、一种是纯函数式。大多数都在这两种之间摇摆不定,在国内大多数都是偏命令式的,总觉得缺少一种思想,缺少创造力。lisp 好处在于,可以无限的满足你的想象力,但是在工业领域确实有些难度,大学应该偏学术点比较好,这样可以培养一批优秀的人才。
|
46
s3hengwu111 2019-06-14 16:27:41 +08:00
JS 开发框架是不是特别多
|
47
bequt 2019-06-14 16:37:16 +08:00 via Android
什么时候来一个语言,统一全球
|
48
OMGZui 2019-06-14 16:40:28 +08:00
php 不服
|
50
ztz12 2019-06-14 16:45:39 +08:00
kotlin 与 Flutter 真香
|
51
yingo 2019-06-14 16:47:15 +08:00
c js java sql 是必须的,但是其实平时用到的远远不止 5 种..matlab,php,还有 html/css,bash,make,regular expression 这些 dsl 等等.
|
52
Cloutain 2019-06-14 16:54:53 +08:00
学了几种语言,发现最爱的还是易语言,人生苦短,请用易语言 逃ε=ε=ε=┏(゜ロ゜;)┛
|
53
thautwarm 2019-06-14 17:35:28 +08:00 via Android
@goodleixiao
你怎么扯到范式啊。 只说 lisp,并不能确保说的是什么语言,范式是否是函数式。 关于函数式,您能描述所谓的函数式的定义吗? 仅仅 函数是一等公民 就是函数式,那全世界都是函数式了。 在现在 PL 当年的历史 review 论文里(什么 how fp matters 之类的学术文章),喜欢提的东西: 1. 函数是一等公民(first class) 2. 函数是纯的(pure) 3. 函数的定义适合进行推导证明(algebraic data type, 静态的 pattern matching) 大多数 lisp 不满足 2 和 3。 lisp 能被称为函数式语言,是一个历史遗留问题。 现代程序设计的学术目标,不仅仅是让你发挥想象力,而且要让你想得对,辅助你正确地想。 而且函数式对程序的抽象不是最高的,声明式不知比他高到哪里去了!! |
56
0x11901 2019-06-14 19:50:00 +08:00
Haskell 学了两年仍未入门
|
57
seabirds 2019-06-14 20:01:26 +08:00 via iPhone
@goodleixiao 神话了,反而不好
|
58
TeslaLyon 2019-06-14 23:54:19 +08:00
感谢楼主的发帖,从中学习到了知识。
|
59
zifangsky 2019-06-15 06:44:59 +08:00
PHP 才是世界上最好的语言!
|
60
BlueSchwarz 2019-06-15 19:42:16 +08:00
做嵌入式底层的用 C 就完事了,其他语言都没法用。
|
61
FrankHB 2019-06-17 14:39:41 +08:00
@thautwarm Haskell 就稍稍吧,不说某些 ML 系的魔改方言,类型系统弱鸡到被 Agda 之流的 DSL 旁门左道都能打得满地找牙……
你的历史认知似乎有点奇怪。 一说实话是玩具,连妥协的门槛都没进。用起来顺手的外行更多不表示在工业界里发达到需要多少妥协的程度了,本来不同的专业开发者之间也没太多交集。 二是理论研究过气三十年的玩意儿了…… 三是差不多六十年的玩意儿了……不过你应该没考虑到 fexpr 之类的玩意儿。早期 LISP 都没很强调代码即数据,专门生成代码一条道走到黑的已经是 Lisp-1 和 Lisp-2 分家之后的事情了,但即便晚到按 hygienic macro dssq 这样算应该也不止三十年。 你所谓的未来也别多想了。 砍掉 first-class side effect 的东西,说实话只能当 LIR,而且不能解决严重的性能问题,连 LIR 都当不好。(你有见谁整天拿 C++ TMP 骗饭吃的么。) 现实就是没个靠谱的。 |
62
FrankHB 2019-06-17 14:39:53 +08:00
@powertoolsteam 贵司现在全面转向 Web 了吗……业务领域是和印象中的有些不一样。
|
63
FrankHB 2019-06-17 14:40:10 +08:00
@charlie21
1.Anders Hejlsberg 老实搞 TS 比这个前途是大得多了。 2.剩下的哪天 ECMA-334 更新了再说。(不太想对指 finalizer 为 destructor 的材料文明用语。) |
64
FrankHB 2019-06-17 14:57:54 +08:00
@goodlexiao 命令式的对立面是声明式,纯函数式?没排面的。
@thautwarm 不满足 1 的语言多得很,比如 C。说这样的语言抽象能力烂,一个原因就是因为 C 没支持和 lambda abstraction 对应的 first-class functions。所以这个分类到现在仍然显然是很有现实意义的。 而历史上 1 的资格还就是比 2 和 3 老的多,描述 paradigm 上本来就没要往 pure 上靠,更没什么 algebraic data type 什么 pattern matching 之类细枝末节的东西存在的空间。 数学上本来确实有足够多 pure 的东西,但拿 pure 上位要搞 generic-purpose 语言的,还就是从 DSL 里强行上位的 ML 系的功劳,根本就代表不了之前的工作。 注意自动定理证明一直是非常 domain-specific 的,在方法论意义上都不算普遍,甚至根本搞不定方便地表达不预设前提的“计算”。而从中搞出来的语言的差别大部分就是口味问题,并且有一些过于功利性目的论的内卷偏好——类似有些数学家强行喜欢 sequent calculus 或者 natural deduction 却从来没法成功地干掉 Hilbert-style deductive system 的地位一样。 非要概括这些东西,那么明明 pure 比 functional 还更关键,为什么非要舍弃?这显然不符合自然语言的省力原则。所以我的理解就是某些人有意无意搅混水方便灌水而已。 @Shaikh 因为各种 paradigm 都想支持,历史包袱又大,到处都有人想拿来强行搞不适合开发的东西,结果就是各种屎都沾上了。 |
65
FrankHB 2019-06-17 15:02:49 +08:00
草,一边隔壁黑 generics,一边厢这里把 general 都 typo 了……
|
66
NutsoGao 2019-06-22 14:38:26 +08:00 via iPhone
@africwildman 👌
|