(湛忠胜版权所有。未经许可,请勿转载。如有侵权,千里必究!)
每一个程序猿,都是以学习编程语言开始的。然而,其并非易事——有很多语言,尽管已有大约半个世纪的历史,但还是包含了今天所有的“新潮玩意”;有的语言虽然是近年新晋,但也只不过是新瓶装老酒,更有甚者甚至是历史的倒退。
几乎每一个老程序猿,在今天都会对之前的经历多多少少有点遗憾,甚至后悔。我不就是一个典型的例子吗?为了让新一代程序猿不再走上如此让人后悔的道路,我写出了这篇文章。首先,对大家提出几点忠告:
1:不要过分追求“新概念”。马克思说过:“新出现的事物不一定就是新事物。”。计算机界不甚明显的出现了这种现象,我希望诸君能够用大脑仔细思考这些概念是否可取,再去学习。
2:不要追求“小窍门”。Dijkstra说过:“称职的程序员都知道自己头颅的尺寸是有限的,所以他们以谦逊的态度来对待工作,像回避瘟疫一样地回避小聪明。”。有些“小窍门”看起来能让程序变得更小,但其实不然。看看下面这段程序:
i=(++i)-(i++); //你能轻易明白吗?
所以说,还是中规中居的写程序吧……
学习编程语言是有道路的。这里为大家提供一条可以让你问心无愧的道路:
1,你最好从函数式语言学起,我想这时候那些天天坐在函数式语言教堂里补课的码农读者肯定会哭的。你学的第一门语言最好应该是Scheme(LISP的一种方言),其实我就是如此。我知道最好的书应该是《Structure and Interpretationof Computer Programs》(有中译本,名曰:《计算机程序的构造和解释》),不过这本书可能对初学者来讲有些难懂。那我就推荐你读读《The Little Schemer》,这是一本易读有趣的入门经典,江湖号曰“小人书”(不过狠宰,原价三十三刀……)。你也可以看看它的续集,《The Seasoned Schemer》,这样就等于“无痛”(钱……)的学习了SICP。《Essentials of Programming Languages》也是一本好书。接下来你可以学学ML,我推荐《The Little MLer》,和上面那本书是一个系列的,也很易读易懂。貌似学习Prolog是个很不错的选择,但Prolog有一个神奇的缺陷(无法表示“真正的”逻辑非),并且有些地方也设计的不太好(例如使用深度优先搜索)。如果你感觉Prolog难懂(我也是这么想的),那你可以先看看《The Reasoned Schemer》以过渡,其中有一种很不错的逻辑程序设计语言。在这个阶段,我也推荐你看一看《Gdel, Escher, Bach: an Eternal Golden Braid》(有中译本,名曰:《哥德尔、埃舍尔、巴赫:集异璧之大成》)和《The Design of Everyday Things》(有中译本,名曰:《设计心理学》)。其中,前者本是一部AI著作,但也能给我们带来启示;后者则是一部很好的设计学著作,值得我们一读。
2,然后再学习OO及过程化语言。首先你最好学习一下算法,但我不推荐你啃高大大的TAOCP这样“大部头”,读一下《算法导论》吧。由于你已经学习了FPL,所以我推荐你接着学习Java。你应该读一下《A Little Java, A Few Patterns》。如果你以写Java程序为业,那我推荐你学习Java IDE,并读《重构》。
3,学习中级语言和低级语言。我感觉你首先应该读一下机器设计的书(《汇编语言》貌似很好)。然后……然后你就可以学C语言了,你最好读《C语言程序设计》。当然C++你就差不多会了(再读读《C++语言程序设计》 :)