【新智元导读】有着20年编程履历的资深程序员,以自己多年来的经历,总结出程序员的编程措辞切换规律,做了一个主流编程措辞的进阶流程图,展示不同编程措辞之间的承接关系、程序员选择编程措辞的方向和路径。
铁打的程序员,流水的编程措辞。时期在发展,编程措辞也与时俱进,不断有新的、更好或者更时髦的措辞涌现,程序员也会或主动、或被动去学习一门新的、”更好“的编程措辞。
Tailscale_io联合创始人Avery Pennarun,一位有着20年编程履历的资深程序员,以自己多年来的经历,总结出程序员的编程措辞切换规律,做了一个主流编程措辞的进阶流程图,展示不同编程措辞之间的承接关系、程序员选择编程措辞的方向和路径。

Avery这个人,很像是小说、人物宣布里的范例程序员,有点偏执,喜好搞怪。曾经做过7年的Debian开拓,或许这段经历能够解释一些问题。由于Avery资历深阅读广,我们也能够从这篇文章中,理解到编程措辞发展过程的一些有趣的历史传承。
注:本文不雅观点带有强烈的主不雅观方向,新智元的读者中,可能有人会持有不同见地,赞许也好反对也好,欢迎大家留言提出自己的意见!我们看到,图中统共有4条主线,分别是:
低级措辞,即汇编和C那一支商用或者传授教化用措辞,即BASIC那一支专为数学和科学开拓的措辞,即R那一支脚本、胶水措辞,即Shell那一支或许有人会说这张图里短缺了HTML、CSS、Haskell和Lisp,这不主要,由于Avery并没打算展开去讲它们。
Avery提到,最初的时候,4类措辞有一个比较明确的边界。低阶措辞编程的程序员利用C,汇编或者Turbo Pascal,商用大型程序员利用VB(当然那个时候的“大型”,和现在的“大型”完备不在一个量级),数值打算职员利用Fortran,R或MATLAB,胶水编程利用Shell或Perl。
程序员不会用Perl来写操作系统,也不会用VB写大数相乘。当代措辞则模糊了相互之间的边界,很多R写的程序,也可以用Python实现。措辞之间的转换紧张在于挑选不同的风格。
低级编程措辞先来看看传说中的汇编。用汇编写程序是相称困难的,但纵然在人工智能发达发展的本日,某些场景下汇编仍旧是不可替代的最佳编程措辞,而且,所有编译措辞的代码都会被转成汇编或者机器措辞。
从汇编开始涌现了3个分支,在风格上有明显的差异,不过我们先看C这一支。Pascal特点是有\"大众begin...end\"大众;而C是用{}。花括号的风格影响了后世很多措辞,虽然讨厌花括号的程序员群体也不在少数。
而且C有一种魔力,一旦你开始利用就很随意马虎形成一种习气,不管终极的效率高低,你总会想用C去实现统统。而且C也是为数不多的能合理实现所有上述四类编程问题的措辞之一,而且速率也还可以。
C再往下,是C++和Python 2。C++虽然名字看起来彷佛是C的进阶,然而风格却大不相同。Avery吐槽”用C++是由于很多做商用大型程序开拓的程序员别无选择“。
而胶水编程就好办多了,直接上手Python 2。虽然Python很慢,同时期的Perl也有不少簇拥。但作为一名C措辞选手,Avery认为Perl的语法风格只能用怪诞来形容。比较之下,更靠近C的Python显然是更好的选择。
不须要花费太多精力就能很快适应Python的语法;在Python里调用C函数的本钱比Java以及其他措辞低多了!
唯一的缺陷便是慢,但你可以调用C模块来缓解啊。
后来Java涌现了,大批C和C++程序员迅速投入Java怀抱,以至于很长一段韶光Java都霸占着编程措辞No 1的位子。
Java的缺陷是运行时很慢,然而比较C++超慢的编译速率、让人头大的header文件、超弱的跨平台性…这点缺陷不算什么了。
Go刚涌现的时候,有人称其为C++和Java的闭幕者,结果并没有。Avery说,想当年Go最辉煌的那阵子是由于Python 2程序员创造它跑的比Python快,RAM占用比Python少,写代码的难度相称。
虽然现在认为Go是一门“系统”措辞,但Avery认为实质上,Go实在还是一个胶水儿措辞。
商用编程措辞
BASIC是基于让“新手能够轻松节制”的目的开拓的,但是学院派创造有BASIC编程履历的学生,很难教好他编程,这实在是有点讽刺。当然他们也没选择C,而是选择了更适宜传授教化用的Pascal。
后来微软将BASIC转变成Visual Basic,这可能是JS涌现之前最受欢迎的编程措辞了。选择我们仍旧在Excel中利用VB,只不过它改名叫宏。
后来Turbo Pascal的作者创建了一门新的措辞Delphi,口碑很不错,再后来还开拓了C#。相反,VB.NET则可以说是非常失落败了。
Avery还不忘给出很有杀伤力一击:我实在很想在VB后面再加一个箭头,但不好意思,我的确不知道这帮程序员后来去哪儿了。可能转行做网页了?或者去搞Excel的宏?
胶水编程措辞
Avery说,胶水措辞的鼻祖要数Unix的Shell。Unix的设计哲学倡导一次只做一件事,并将其做到极致。这些功能单一、但是极致好用的小模块,通过pipeline链接起来,就能协力完成一件繁芜的“大任务”,颇有点蚂蚁群的味道。
空想虽然美好,无奈败给了现实,这样算作完美的小程序模块很难实现。于是有了awk,一个和C语法相似的阐明措辞。
接下来有了Perl,Perl对互联网的兴起起到了非常大的推动浸染,同时也借助互联网Perl收成了超赞的口碑。人们利用Perl来运行web的CGI脚本,接管HTML要求,然后进行解析。
你知道Perl最让人印象深刻的是什么吗?让人眼花缭乱的标点符号!
当然,你之砒霜可能是他人之良药。有人以为Perl语法丑陋(比如Avery),那么他可能之后会选择利用Python;相反,有人爱去世Perl的风格,那么可能会选择Ruby。
以是,如果你还在用Perl写Web CGI脚本,那么请连续吧;或者,你可以考虑一下“全天下最好的措辞”PHP。
前端编程措辞JavaScript是一门编程措辞,现在该当已经是一个不争的事实了。然而,Avery指出,正由于JS是一个大杂烩,把HTML、CSS、面向工具、函数式编程、动态措辞、JIT等等所有涉及到HTML要求的观点,统统席卷进来,导致这个措辞特殊丑。
而且你能相信一门在20多年前,仅仅花了10天韶光就做出来的措辞吗?显然它存在着很大的毛病和一些无法修复的严重缺点。
我们转头再看这张图,把稳一下右下角Python 3和JS:
你会看到Python和JS形成了一个循环。为什么会这两个会涌现纠缠反复呢?Avery说由于用JS久了随意马虎变得不正常,须要通过Python治疗一下。(hmmmm...)
接下来的TypeScript,可能由于作者是Delphi的开拓者,Avery对TypeScript给予了很高的评价。
在node.js涌现之前,JS被认为便是一门前端措辞。而现在成为了一门前端+后端+命令行的一条龙措辞。
末了,Avery也没放过Python 3。他说在Python 3中编写系统程序,你会创造自己常常搅散unicode转换,乃至连文件名都会搅散!
善有善报,恶有恶报。
参考链接:
https://apenwarr.ca/log/20190318