最近在看两本书:《松本行弘的程序世界》和《元编程Ruby》(metaprogramming ruby),收获不少。

Ruby是一门很优秀的语言,它的社区也十分有活力,其中的成员(如Matz)和代表公司(37 signals, github, twitter)总是充满了一种真正geek的童趣,而不是伪极客们的自认清高与冷淡。这种情绪总是能够激发人投入真正有意义的事情——比如帮助其他人。这种活力在很多其他社区是很难看到的,或许和其小众性有关,但更多的我相信和这种语言秉承的信念也是密不可分的。

工具这种东西从铸造出来的那一天起,就注入了工匠的灵魂。Matz(松本行弘的英文名)在创造出这个家伙的时候,就始终抱着“编程语言应该是让程序员们觉得快乐的东西”的信念。如果你在业余时间一点写代码的欲望都没有,或许未必是你不喜欢编程,可能是工具太不称手的缘故,正如鞋子不适就不想走路一样。再来,他也认为,当前的技术人员太多的看重了机器而忽略人,这种本末倒置的方式很让人头疼,奇怪的是,很多人为这种以机器为本的思想而自豪。苹果在业界较早的认识到了这点的荒谬,把用户的地位提升了,而程序员们的地位始终在搬砖上徘徊。但是Mac OSX内置了对Ruby的原生支持,或许是出于对其思想的赞赏吧。

谈谈工具的地位。使用工具或许不能让人变得更加高贵,但至少是一个进步的表现,原始人在第一次学会用石头工具的时候一定是内心由衷的赞同这句话的。工具的发展总体来说又不过是两个方向:更强大或者更好用。这两个方向都是进步,没有人敢说其中一个方向是没有意义的。奇怪的是,使用工具在当今社会有些时候反而会被人非议,尤其是“更好用”的工具——你又在投机取巧了?以至于人们一定要求给出工具更加强大的理由,“更好用”似乎不被当成工具被接受的理由。我感觉这个逻辑是奇怪的,站在原始人的角度,第一个将石刀装上手柄的家伙一定会嚷嚷着说太低估他的贡献了。

更加奇怪的是,会不会使用更多或者更好的工具,居然被很多人认为是与人的水平无关的。他们执着于所谓人本身的能力。但是问题是,人本身的能力到底是什么?没人会说懂一门外语不是人本身的能力,大部分的人也都承认语言就是交流的工具,那么显然在这个问题上人们是承认会用工具即能力的;会用搜索引擎获取信息,在我看来是很大的一门学问,必须是一种能力,但是在这个问题上,回答就不那么确定了:尤其是这种能力可能有副作用——把自己的实打实的知识变成了索引。

在编程语言上,这一问题更加明显:学校课堂用c/c++/java这种单线的互相直接继承的语言作为所有的基础,尚且情有可原,毕竟教学条件有限;但是无论是大多数学生还是老师,看到其他的语言都只是冷淡的态度,这就未免有些让人感觉失望。语言是对思想的表达,不同的范式中充满了智慧,居然却有人说过“学习什么语言无关紧要”,而说这句话的很多人根本就不去接触其他类型的语言,仅仅走完其c/c++/java/c#的路就认为天下大同,这未免也太不自量力了。

再谈谈概念,这里主要指范式(paradigm)。个人很多时候也存着一种“很多夸夸其谈的概念,本来都是些理所应当的事情”的想法,然而不管是这个学期的某个课程还是最近的看的书,都给人了不同的感受。其实一个好的概念的关键作用是在意识中定下一个钉子标记。很多时候很多概念理所应当,但是我们没有那个概念的坐标时,要么是“总感觉就是那个东西,却不好说”,要么是“总感觉有那么个东西,却说不出”。更让人困惑的是,有些东西说出来大家都觉得理所应当,若没有人给它起个名字,在明明有必要考虑这个东西时人们都想不起来有这回事。这时候,如果概念出现并且被人理解接受,之后让人每次想到问题是都不会漏掉这个东西,发明这个概念的人可就是功德无量了。

总是有那么些概念不仅名字难懂而且感觉毫无意义,当然也有可能是它就是渣或者时代的眼泪,但是一开始就这么藐视,那就是自己的错误了。


一些浅见,就当书籍推荐好了。《松本行弘的程序世界》并不完全是ruby,其中有不少有意思的东西(编码、语言历史、设计模式),而且很浅显易懂,当故事书看也不错。