掌握两种以上的编程语言

Know Well More than Two Programming Languages

编程人员心理上都达成一个共识很长时间了,那就是编程专业技能的高低,与程序员所知道的不同编程范例的数量直接相关。这里说的知道不是简单了解,或者略懂略懂,而是能真正的编程。

每个程序员开始采用一门语言编程后。这门语言就会影响程序员对软件的思考方式。如果他们仅停留在这门语言,不管有多少年的编程经验,他们都将只会这门语言。一个只会一门语言的程序员,他的思维将被这门语言彻底限制住。

程序员学习第二门语言将会是一种挑战,尤其是当这门语言的计算模型与之前的大相径庭。C、Pascal、Fortran,都有相似的计算模型。选择从Fortran转到C带来的挑战并不会太多。从C或Fortran转到C++或Ada所带来的挑战主要是编程思想。从C++转到Haskell是一次很有意义的改变,当然其挑战也很有意义。从C转到Prolog将会带来非常明确的挑战。

我们可以列举一些计算机编程范式:面向过程、面向对象、函数式、逻辑式、数据流,等等。在两个不同范式间切换,就会产生最大的挑战。

为何这些挑战是好的呢?这与我们思考对算法实现、风格、适合的实现模式相关。其中,交叉受益是专业的核心。适用于一门语言的解决问题的风格,或许拿另一门语言就行不通了。尝试不同的风格,从一门语言到另一门语言,才能真正教会我们这两种语言,以及问题是如何被解决的。

采用不同的编程语言交叉受益将会带来巨大的影响。或许最为明显的就是采用命令式语言实现的系统中增加了或正在增加很多表达式声明。任何精通函数式编程的人都能轻松地适应声明式,即便是使用C这样的语言也如此。采用声明式方案一般会让程序更短或更易于理解。例如C++,几乎是为了表达式声明,肯定会全力支持泛型编程。

说了这么多,每个程序员都应该掌握至少两种不同的编程范式,理想情况下应该掌握上述五种。程序员始终应该对学习新语言感兴趣,最好从陌生的范式学习。即使他们的日常工作中使用相同的编程语言,当一个人能够从其他范式中交叉受益时,为这门语言带来的进步也是不容小觑的。雇主应该考虑到这点,并为员工学习当前未使用的语言留出培训预算空间,作为进步的一种方式,该语言要使用起来。

即便已经开始了,一个礼拜的培训课程是不足以学习一门新语言的:它通常需要几个月的实践,哪怕是兼职,也是为了获得一门语言真正意义上的工作知识。方言的使用,不仅仅是语法和计算模型,这一点很重要。

0%