如何掌握所有的程序语言
如何掌握所有的程序语言(转载)
- 你是编程初学者,不知道该选择什么程序语言来入门。
- 你是资深的程序员或者团队领导,对新出现的种种语言感到困惑,不知道该“投资”哪种语言。
- 你的团队为使用哪种程序语言争论不休,发生各种宗教斗争。
- 你追逐潮流采用了某种时髦的语言,结果两个月之后发现深陷泥潭,痛苦不堪……
重视语言特性,而不是语言
这些配置对应到程序语言里面,就是所谓“语言特性”。举一些语言特性的例子:
- 这个语言的“变量定义”是什么语法,需要“声明类型”吗,还是可以用“类型推导”?
- 它的“类型”是什么语法?是否支持“泛型”?泛型的 “variance” 如何表达?
- 这个语言的“函数”是什么语法,“函数调用”是什么语法,可否使用“缺省参数”?
- ……
合理的入门语言
所以初学者要想事半功倍,就应该从一种“合理”的,没有明显严重问题的语言出发,掌握最关键的语言特性,然后由此把这些概念应用到其它语言。哪些是合理的入门语言呢?我个人觉得这些语言都可以用来入门:
不推荐 Go 语言的原因类似,虽然 Go 语言不算脚本语言,然而他的设计者显然不明白自己在干什么。所以使用 Go 语言来学编程,你不能专注于最关键,最好的语言特性。
掌握关键语言特性,忽略次要特性
所以你就发现一旦被差劲的老师教过,这个程序员基本就毁了。就算遇到好的老师,他们也很难纠正过来。
自己动手实现语言特性
在基本学会了各种语言特性,能用它们来写代码之后,下一步的进阶就是去实现它们。只有实现了各种语言特性,你才能完完全全的拥有它们,成为它们的主人。否则你就只是它们的使用者,你会永远做语言创造者们的仆人。
有个大师说得好,完全理解一种语言最好的方法就是自己动手实现它,也就是自己写一个解释器来实现它的语义。但我觉得这句话应该稍微修改一下:完全理解一种“语言特性”最好的方法就是自己亲自实现它。
注意我在这里把“语言”改为了“语言特性”。你并不需要实现整个语言来达到这个目的,因为我们最终使用的是语言特性。只要你自己实现了一种语言特性,你就能理解这个特性在任何语言里的实现方式和用法。
这种效果是你直接学习 OOP 语言得不到的,因为在学习 Java,C++,Python 之类语言的时候,你只是一个用户,而用 Scheme 自己动手实现了 OO 系统之后,你成为了一个创造者。
类似的特性还包括类型推导,类型检查,惰性求值,如此等等。我实现过几乎所有的语言特性,所以任何语言在我的面前,都是可以被任意拆卸组装的玩具,而不再是凌驾于我之上的神圣。
总结