新智元报道

来源:apenwarr

编辑:元子

【新智元导读】有着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转换,甚至连文件名都会搞乱!

善有善报,恶有恶报。

所有,亲爱的新智元读者们,你们怎么看呢?请留言表达你们对Avery这个路线图的态度。

参考链接:

https://apenwarr.ca/log/20190318

点击播放 GIF 0.0M

c java python go 哪种编程语言接近编程的本质_一图看懂编程语言迁移模式:终点站是Python、Go、JS...相关推荐

  1. 一张图看懂世界石油分布?用Python轻松搞定!(附数据下载)

     CDA数据分析师 出品   [导语]:今天我们教你用Python画出世界石油分布桑基图,Python技术部分可以直接看第四部分. 获取数据: 扫描下方公众号 回复关键字"石油" ...

  2. 一张图看懂世界石油分布?用Python轻松搞定!

     CDA数据分析师 出品   [导语]:今天我们教你用Python画出世界石油分布桑基图,Python技术部分可以直接看第四部分. 作者:Mika 数据:真达   后期:泽龙  设计:一凡   Sho ...

  3. python面向对象编程指南 豆瓣_一文看懂Python面向对象编程(Python学习与新手入门必看)-绝对原创...

    尽管网上有许多关于Python面向对像的编程介绍,小编我看完后总觉得不是很满意,也不过瘾,所以决定自己亲自动手写篇文章,帮你理解Python面向对象的编程的基本概念和核心思想.本文内含很多实例代码,以 ...

  4. 一图看懂编程语言迁移模式:终点站是Python、Go、JS

    [新智元导读]有着20年编程经验的资深程序员,以自己多年来的经历,总结出程序员的编程语言切换规律,做了一个主流编程语言的进阶流程图,展示不同编程语言之间的承接关系.程序员选择编程语言的方向和路径. 铁 ...

  5. java 内存分布_一图看懂JVM内存分布,永久记住!

    经常在说JVM内存分布,也经常去看,但是总是在面试的时候说不清楚或者模糊,甚至有可能说错,只有真正的理解,并且在心中有一个总结构图才能记得清楚说的清楚! | JVM总览图 java内存区域主要分程序计 ...

  6. python命令行参数有什么用_一文看懂命令行参数的用法——Python中的getopt神器

    参考原文: Python模块之命令行参数解析 - 每天进步一点点!!! - 博客园 https://www.cnblogs.com/madsnotes/articles/5687079.html py ...

  7. python许可证_一图看懂各种许可协议

    通常程序员使用代码或某开源程序的时候就会看到各种协议.那到底是什么作用协议呢?我用一张图列出常见的开源协议 当然 经过Open Source Initiative组织通过批准的开源协议还有以下58种 ...

  8. 一图看懂 toml 模块:用于解析和创建TOML(Tom‘s Obvious, Minimal Language)的Python库, 资料整理+笔记(大全)

    本文由 大侠(AhcaoZhu)原创,转载请声明. 链接: https://blog.csdn.net/Ahcao2008 @[TOC](一图看懂 toml 模块:用于解析和创建TOML(Tom's ...

  9. 开源项目许可证相关-一张图看懂几种开源许可证

    常见的几种许可 开源许可证允许每个人出于任何目的使用.修改和共享许可软件,前提是要保持软件的来源和开放性.以下许可证从要求条件严苛程度递减排序,从最严苛(GNU AGPLv3)到没有条件(未许可).请 ...

最新文章

  1. 【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode
  2. 楼盘历史价格管理导入功能优化
  3. 机器学习技法1-Linear Support Vector Machine
  4. prototype.js ajax.request,prototype.js的Ajax对象分享
  5. 【步态识别】基于CNN、步态能量图+HOG特征提取的步态识别算法的MATLAB仿真
  6. 浅谈阿里云混合云的探索与实践
  7. 职场警示录:怎样和“小人”和睦相处
  8. 保驾护航金三银四,万字解析!
  9. 模型的搜索和优化方法综述:
  10. 将方孔分段的lisp_AutoLisp编写工程地质剖面图小工具
  11. 在实际应用中,用计算机作为控制器时,最大的优越性是( ),在实际应用中,用计算机作为控制器时,最大的优越性是( )。...
  12. MySQL(三) —— 约束以及修改数据表
  13. MODIS数据的简介和下载(三)——MODIS数据下载方式(基于MODIS Web Service)
  14. win8修复计算机u盘,Win8系统U盘里的文件不见了怎么办?
  15. chm文件导入java_chm文件无法打开-解决方法
  16. wingide python_Python开发利器WingIDE破解方法
  17. 苹果公司CEO:混蛋乔布斯
  18. MPP架构是什么?看这一篇就行了。。
  19. CSS (3) | 盒子
  20. Mysql死锁排查及解决办法

热门文章

  1. DateTime Calendar
  2. Oracle job自动任务实用指南
  3. Router Configuration5
  4. 没法再详细的说说Linux压缩与归档命令(下-2)
  5. 数值优化:计算基本理论
  6. Windows Eclipse Maven 安装
  7. ubuntu系统启动qtceator时提示:Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库...
  8. java并发编程基础-ReentrantLock及LinkedBlockingQueue源码分析
  9. 深入理解linux网络技术内幕读书笔记(十)--帧的接收
  10. linux给进程加速,Linux 利用并行进程加速命令执行