“Gmail编辑器不能正确排版引文格式。”

“这可够丢人的,”马杰里说,“看来他们负责引文格式的程序员水平不行,企业文化也在走下坡路。”

“我们该怎么办?”

“今后我们招募的程序员,一定得通读过《追忆似水年华》 。”

“读过全部七卷?”

“没错。”

“读这书能让人更好地驾驭标点符号,从而不至于在引文格式上犯错?”

“那倒未必,不过他们会因此拥有更精湛的编程技艺。这种感觉只可意会、不可言传……”

学编程就好比学游泳,再好的理论也不如一头扎下水,扑腾着呼吸新鲜空气管用。在初次没入水面的那一刻,你必定会惊慌失措,但当你奋力浮出水面、大口大口地喘着气,你又会无比喜悦。这时你心里明白:“我学会游泳了。”至少我当初学游泳那会儿,就是这种感受。

编程也同样如此——迈出第一步最难。因此你需要一位好老师,鼓励你勇敢地跳入水中。

Bruce Tate正是这样的好老师。他写的这本书,带你从编程学习中最困难的地方入手,鼓励你大胆迈出第一步。

假设你想学习某门语言,而且顺利完成了下载安装编译器或解释器的艰巨任务,接下来要做什么?你用它写的第一个程序,会是个什么样子?

Bruce回答得十分巧妙。他在这本书里,展示了许多完整程序和代码片段,你只需将它们一一输入,看看结果是否与书上相同。也就是说,你先不要想着自己编写程序,而是先把书中范例全都实现一遍。随着信心渐长,你自然会逐渐拥有独立完成编程项目的能力。

获得任何新技能的第一步,是先别想着独立解决什么,而是重复一遍前人已竟之事,这是掌握一门技能最快的方法。

用一门新语言上手编程的过程,与其说是投入大量时间反复实践,试图理解语言背后蕴含的深奥原理,还不如说是让分号、逗号各就各位,同时读懂出错时系统反馈的千奇百怪的错误信息。只有不断提高编程水平,让自己超越先输入代码、再等待编译成功的枯燥阶段,你才有能力思考程序语言中各种语法结构的含义。

跨过输入、运行程序的门槛后,你会有如释重负的感觉,因为潜意识将接管余下的工作。意识刚琢磨出分号放哪儿,潜意识就已明白了表面结构下的深层含义。这样下去,你终会有所顿悟,理解某个程序逻辑的更深层含义,某种语言结构如此特殊的原因,等等。

对几门语言均略知一二,这其实是一项相当实用的技能,因为我常常发现,网上的某个程序有助于解决手头问题,却没法直接拿来使用,还得针对问题稍作调整才行。这程序用什么语言写的都有可能,所以懂点儿Python、Ruby什么的就非常管用。

每门语言都自有一套惯用法。它们各有所长,亦各有所短。通过学习各种不同的编程语言,你会明白,哪门语言最适宜解决当下关注的问题。

Bruce对编程语言的爱好不拘一格,这真是你我之幸。他不仅精通那些声名卓著的语言,比如Ruby,还了解那些鲜为人知的语言,比如Io。编程说到底是个理解问题,理解说到底又是个思想问题,因此,若想深入理解编程的方方面面,洞察新近涌现的思想是必不可少的一环。

精于禅宗的大师会告诉你,拉丁语学得越好,数学也就越好。编程也同样如此。通过研究逻辑式编程或函数式编程,你能领悟到面向对象编程的精华;通过学习汇编语言,你能更透彻地理解函数式编程。

在我做程序员时,对比各门编程语言的书籍曾一度盛行。这些大部头书多带有学术腔调,至于如何去真正用好哪门语言,则少有涉及。这如实反映了那个年代的技术发展水平。当时,我们只能从书本上了解某门语言的诸般理念,想用它实战几乎不太可能。

如今,我们不仅能了解这些理念,还能对它们实践一番。伫立池畔、畅想游泳之妙,较之亲身跳入水中、畅享戏水之乐,二者终究不可同日而语。

我由衷地推荐这本书。也希望你在阅读它的时候,能够像我一样,尽情享受其中的乐趣。

Joe Armstrong,Erlang语言之父

2010年3月2日

于斯德哥尔摩

摘自《七周七语言》序言部分