语言塑造人的思维。    


     “精通一种。 ”  这是流传甚广的一句编程箴言。 然而, 一个修习武学的人,他在选定主兵器之前,必定是要研习多种兵器的,而且要通晓多种兵器的优劣。


       1.   如果学习过多种语言,那么对新语言不会有任何的畏惧感;如果需要进一步深入的话,可以很快上手。 对于熟悉一两种主流编程语言, 具备一两年软件开发经历的人来说, 学习一种新语言并非难事语言之间有着令人惊奇却又意料之中的相似性,这些都使得学习新语言的成本降低了不少。


        2.   掌握的编程武器越多, 在计算设备上的自由度越大。这是正相关的。会七国语言的人明显比只会说汉语的人“帅气”。学习多种语言可以扩展人的思维视角,不受限于所学的一个角落。当要做一件事情时, 如果能够有多种选择, 不是更好吗? 尽管戴多只表的人可能不知道精确的时间,也有哲学家在苦恼 “选择过多导致的困惑”, 但这并不是选择过多所导致的问题,而是我们尚没有准备好去应对 “多选择的世界”。 “多选择的世界”  会比 “单选择的世界” 更好, 只要我们学会如何去适应和选择。 

       当然, 从相反的角度来说, 由于人的精力有限, 学习语言多而杂, 杂而不精, 则可能过犹不及。 因此, 在多语言的广度和深度选择上有一个平衡点。一般应尽量先深度掌握两种左右的主编程语言, 再根据兴趣和需要去研习其它语言。 

 

       3.   学习新语言可以成为一种乐趣,不同的语言能够给编程人员带来的视角是不一样的。 C 是一种小巧、简洁、实用、强大的高级语言,特别适合于系统编程和嵌入式编程,至今依然充满魅力(美中不足的是缺乏处理广泛任务的库和框架); Java 通过语言级的约束来尽可能帮助程序员写规范的代码,并提供 JVM 的抽象, 特别适合于构建跨平台应用程序 ;  Python 语法简洁,表达能力强大,具有脚本语言的便捷性,同时具备很多实用的开发模块,适合于编写运维工具和网络开发, Perl 则自由,松散,具有广泛的用途和自由主义精神; Lisp 基于数学原理,具有强大的抽象表达能力,适合用于算法探索,原型开发, 构建小而核心的组件。AWK 提供了类似 “规则-行为” 的引擎功能,将编程逻辑表达为一系列规则的组合;  Shell 本身并不强大, 但它能够调用很多现成工具集,因其简洁有效的粘合能力,导致其成为不可忽视的一种语言。


       4.   多关注语言本身的学习和精髓。就像文章 《少编码,多思考 》 所说的,人们常常混淆 “精通语言” 与 “精通应用框架” 之间的区别。很多开发人员只是熟练掌握了应用框架的使用, 而对应用框架建基其上的编程语言知之甚少。 比如说,很多 Java 程序员可能更熟练 Struts, Spring 等著名开发框架的使用,而对 JVM 了解不深, 而 JVM 却是 Java 语言的基础。 


       一个真正好学的程序员应该掌握至少三种编程语言,一种是主语言, 比如 Java / Javascript , 一种是辅语言, 我选择 python / Lisp / C , 还有一种是 Shell 。  主语言用于大型软件项目开发中, 一般可能没得选; 辅语言用于处理各种常见的编程任务或者作为技术探索; Shell 可以用于处理各种琐碎的工作。 


        PS: 由此看来, 除了使用汉语, 有必要也把英语学好。



更多推荐

学习多种编程语言的益处