第二编程语言的选择
我已经写了 5 年 Python 了,除此之外严格意义上我不会任何一种其他语言。随着 Python 越用越熟,我感受到了语言本身的限制,从而想学习一门新的语言。期望新语言先进、优雅、并与 Python 形成互补。本文记录分析选择过程,便于以后推敲。
Python 的问题主要在于动态类型,这导致它在开发大型、复杂项目时管理成本陡然升高,很容易达到不可维护的地步。团队从去年开始推广 type hint,但也只能算一种 “有限弥补”,不足以解决问题。而且对于在 3.6 和 3.9 又出现了不兼容的 hint 语法的问题也很无语。另外动态特性导致的运行性能低下也是一个硬伤。因此首先排除所有动态类型语言。
在 TIOBE 的长期(35年) Top10 追踪里,静态类型又通用的高级语言包括:C、Java、C++、Go。同时因为 Rust 最近的热度,我们再追加上它。
C 的优势是简单,劣势是低级(不符合对先进性的期望)。与 Python 的互补性最强,如果没有更好的选择,就选 C。
Java 的优势是全能,劣势是与 Python 互补性不强,更像是一个取代关系。行业方面的优势是坑最多,劣势是宗教性太强。尤其设计模式,前几天出于好奇听了个设计模式的语音课,1.5 倍速听完 70 多课以后感觉这东西简直就是反人类。因此总体不如 C,予以排除。
C++ 的优势是,在我未来期望从事的计算机视觉、3D 行业是首选语言,劣势是名声不好,无数人都在说 “学不动了”。因此倾向性不如 C。
Go 的优势。。。好像没有。劣势是与 Python 没有互补性,定位与 Java 类似,但又不如 Java 全面。学了没什么用,可能是这里面最不适合的。
Rust 的优势是新,创建这门语言的初衷我是认可的。劣势因为可参考的东西不多,拿 http://www.yinwang.org/blog-cn/2016/09/18/rust 这篇文章来看的话,前面的缺点问题都不大,数组可变性问题勉强可以接受,但是内存管理如果真不好用的话,评分就要打个大折扣了,因为可能导致其社区发展不及预期。但兜底评价应该不比 C++ 差。3D 库的积累方面我比较乐观,不是乐观别人,而是乐观自己。
既然提到了王垠的博客,我其实这几天把他关于 PL 的博客都看了一遍。对于其“专注于语言特性而不是语言”的说法比较认可。因此其实还有另一个路线是先不学某种特定的第二语言,而是把 SICP、系统要素、Lambda 演算等书先看完,掌握通用的语言特性。从长远来看这个路线应该更好。