I enjoy learning programming languages

“学习程序设计语言”是一种很笼统的说法,实际上要学的东西多种多样。

首先是学习语法,即怎样写出一个合法的程序来。学习语法也有两层境界,初级选手就是希望能写出一个顺利通过编译并执行(或解释执行)的程序,然而由于语法的各个部分之间的组合有多种可能,初级选手往往不能分辨其优劣,所以写出的程序质量难以保证。高手通过学习语法基本就能写出高质量的程序,因为他们掌握了这些语法背后的理论(比如closure, higher order function, dynamic scope等等),知道它们为什么被设计成这样,以及应该怎样使用。

程序的质量往往是指程序的结构,一个质量高的程序未必是个有用的程序。所以,在学习一门程序设计语言时还要学另一种东西——库。记得在读本科的时候,有些同学在没有学过C++的情况下就去学MFC,竟也写出程序来。其实我现在写Perl程序也差不多,几个CPAN上的module拿过来组装一下,居然也写成 些实用的程序,只是在编辑器里打开一看,其质量实在不敢恭维。学会使用库对找工作是相当重要的,因为我们很难拿出自己的代码告诉对方其质量是如何之高(即便拿得出,对方也未必懂得欣赏),通常都是列出实现过功能。实际上,绝大多数公司和老板也仅仅关心程序员能做出哪些东西,而不关心其质量如何。

每种语言都有自己的价值观和理论基础。我的目的,是通过学习不同类型的语言,学习从不同的视角、用不同的思维方式看问题,从而为不同性质的问题选择合适的工具,以便高效地解决问题。我这样的学习对提高程序质量恐怕没有什么帮助,但是对于快速完成那些质量不重要、不需要维护的程序(即那些以解决一次性问题为目的的程序)来说非常有帮助。正是许许多多这样的小程序或小脚本,将我们从烦琐的“体力劳动”中解放出来,即提高的效率又愉悦了身心,缺点是简历上写不出来。不过,我们可以用节省下来的时间完成些能够打动人心的东西。

正好回答Sucha疑问:我是想通过一种不同于学习库或API的方式来提高自己写出实用程序的效率。

一个实用的程序要胜过一万个华而不实的程序,然而,能够写出实用程序的程序员实在太多了,只有不断提成程序质量才能使自己与一般程序员区分开来。当然,对于无需维护的程序来说质量毫无意义,这也是Perl哲学的一部分。然而,一个需要维护的程序,如果质量不能保证,维护的代价是相当大的。当然,质量好的程序 未必容易维护,这还要取决于维护程序的程序员的水平。一个水平不够的程序员是无法欣赏、也无法利用高质量的程序的。可见,“以人为本”不是一句空话。

所以,尽管学习的终极目标是写出高质量的程序,然而前途是光明的,道路是曲折的,我们还是先写出实用的程序保住饭碗,保证生活质量,再来谈程序质量吧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据