序 言

选自未完成的《拥抱编程年华》①

——Erlang语言的作者Joe Armstrong

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

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

“我们该怎么办?”

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

“读过全部七卷?”

“没错。”

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

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

①英文原文为How Proust Can Make You a Better Programmer(查不到任何相关信息,当为杜撰之作),直译应为《普鲁斯特如何让你成为更优秀的程序员》,但其书名模仿阿兰•德波顿(Alain de Botton)的《拥抱逝水年华》(How Proust Can Change Your Life),译为《拥抱编程年华》似更贴切。

②《追忆似水年华》(À la recherche du temps perdu),法国作家马塞尔•普鲁斯特所著小说,共七卷,细致刻画了19世纪末20世纪初的法国上流社会和其中的文人雅士们。不同于传统文学单纯地描写人类社会,该小说着重于分析人的心理情绪,首次在文学作品中成熟地剖析了人类情感,开“意识流”小说之先河,标志着文学史上一种新文学形式的诞生。Joe Armstrong为何借杜撰作品中的对话来表明,读《追忆似水年华》可提高编程水平?据本书作者Bruce Tate解释,此书让人更好地感受生活、理解生活、改变生活,自然也能让人成为更优秀的程序员。真是颇具禅意。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Joe Armstrong,Erlang语言之父

2010年3月2日

于斯德哥尔摩

目录

  • 序 言
  • 致 谢
  • 第1章 简 介
  • 第2章 Ruby
  • 第3章 Io
  • 第4章 Prolog
  • 第5章 Scala
  • 第6章 Erlang
  • 第7章 Clojure
  • 第8章 Haskell
  • 第9章 落幕时分
  • 附录 参考书目
  • 版权声明