Erlang:写作的历史

jopen 10年前

  英文原文:Erlang: The Written History

  Erlang 现在 25 岁了。我从最开始就接触了 Erlang,看着它从一个想法成长为一个拥有大量用户的、完全成熟的编程语言。

  我写了第一个 Erlang 编译器,教了第一门 Erlang 课程,和我的同事合写了第一本 Erlang 书。早期成功的 Erlang 公司之一是我创办的,涉及了该语言及其应用程序的各个开发阶段。

  在 2007 年,我写了《Programming Erlang》(官网) ——自从《Concurrent Programming in Erlang》(Prentice Hall, 1993)出版,已经过去 14 年了——我们的用户正迫切需要一本新书。因此在 2007 年,我咬紧牙关开始写作。我非常幸运,Dave Thomas 做了我的编辑,他教我很多写作方面的东东。第一版是相当有野心的,我想描述该语言的每一个地方和主要类库,还有示例代码和实际运行着的、真实世界的例子。 因此这本书包含有可运行的代码,比如 SHOUTcast 服务器,因此你能够向设备添加音乐,以及一个全文索引系统。

  《Programming Erlang》第一版刺激了一批活动,这本书卖的很好。它是通过 Pragmatic Press Beta 出版过程发布的。这个 beta 出版过程很棒,作者可以从读者那里很快得到反馈。读者下载一个未完成的书的、PDF 版,开始阅读并就文本进行评论。既然这本书本来就是未完成的,他们就可以影响到书的剩余部分。当书的完成度有 70% 的时候,就能以 beta 形式发布了。

  第一天,超过 800 人买了这本书,第二天在书的勘误页多了大约 1000 个评论。怎么会有这么多错误呢?我的五百页的书,貌似每页就有 4 条。这让我大吃一惊。Dave 和我像奴隶一样,辛苦地修复了错误。尽管我知道当这本书完成的时候,我要花费一个两周的假期。

  在最初的 PDF 版发布数月之后,最终版准备好了,我们开始发布纸质版。

  一个奇怪的现象发生了——Prags 已经出版了一本 Erlang 书,有传言说它卖得很好。很快我开始听到谣言,O’Reilly 正在寻找作者,我的很多朋友被联系到,询问他们是否对编写 Erlang 书有兴趣。

  真是奇怪,当你想写书的时候,你找不到出版商。但是,当一个已证实的出版商想出版关于某个特定话题的一本书的时候,它却找不到作者。

  下面是 2007 年以后的时间线

  不仅仅 Erlang 得到了关注,像 Haskell 之类的语言需要去竞争,因此 Bryan O’Sullivan, John Goerzen 与 Don Stewart 合著的《Real World Haskell》在 2008 年出版了,Miran Lipovaca 在 2011 年跟着出版了《Learn You a Haskell for Great Good》。

  我的 Erlang 书好像打破了沉默,O’Reilly 跟着的《Erlang Programming》和《Real World Haskell》,鼓舞了 Starch 出版社,《Learn You a Haskell for Great Good》鼓舞了《Learn You Some Erlang for Great Good》,轮子开始转起来了。

  快进到 2013 年

  Prags 联系到我,”你的书想补充吗?“,补充什么?这本 2007 年的书有一些过时了。Erlang 核心变化了一点,但是类库已经变化了,用户群有了增长。但是,对于第二版而言,最重要的是当时市场上已经有其它四本书了。

  我在第一版的目标一直是”描述所有“、”记录没有被记录的所有点“。我想要一本覆盖全面的书,我想要一本同时面向初学者和高级用户的书。

  现在,当然是不可能的。面向初学者的书有大量的、高级用户不想看的解释。面向高级用户的文字,初学者理解起来有困难,或再糟糕点儿,不可能理解。

  当我想着手第二版时——我想——”我不得不做的所有工作就是扫一遍示例,确保它们运行良好.“我也想过,要去掉一些相当烦人的附录,去掉一些古怪的章节,增加一个关于类型系统的章节,我是这样想的。

  结果没有成为这样子,我的编辑,曾经给予我帮助的 Susannah Pfalzer,可能了解这一点,只是没有告诉我。

  这个过程我写了七个新章节,去掉了一些相当烦人的附录和旧的章节。

  第二版最大的不同是对于目标群体的重新定位。还记得我说过,第一版目标是高级用户和初级用户。现在市场上有四本具备竞争力的书了。Fred Hebert 的书面向初次使用的用户是非常棒的,带有美丽的手绘卡通。Francesco and Simons 在 OTP 上做得好,因此我要重新定位这本书,集中在一个小众群体。

  那么是谁呢?在写第二版时,我们花了大量时间聚焦在目标用户上。当前七章准备好的时候,我们给 14 位评论家发送了这些章节。他们当中有 3 个高级用户——精通 Erlang 的程序员,他们对 Erlang 不了解的东西应该刻在了茶叶后面。我们也找了 4 个完全的初学者——会用 Java 编程但是不懂 Erlang,剩下的全是中等用户:他们已经做了一年 Erlang,不过仍然在学习中。我们把这本书扔给了他们,看看会有什么效果。

  最吃惊的是:一些真正的初学者不理解我们写的东西,某些想法只是”太陌生“了。我很惊奇,天呀!当你 25 年来一直与 Erlang 生活、呼吸、做梦、睡觉时,你知道 Erlang 的家底,你认为这是理所当然的。

  因此我丢弃了这些家伙不能理解的文字,重新开始。我的一个评论者(一个完全的初学者)有问题,我重新写这些文字,他们再读,他们仍然不能理 解。”这都是什么人呀,白痴或者其它?我正在拼命解释所有东西而他们仍然不能理解!“我(再次)丢弃了重写的这些文字,给他们发送了第三版。

  好了!他们理解了!快乐的日子再次到来了!有时候新想法只是”太陌生“而不能领会。但是到目前为止我对于我要增加多少解释已经了然于胸:大约比我想的多出 30%,毕竟,如果你写了一本书,你不想让买了这些书的人因为它太难而读不下去。

  我也从 Bruce Tate 那里得到了建议——Bruce 写了《10 分钟学习 600 种语言》(在 Seven Languages in Seven Weeks)。如果你给 Bruce 提供啤酒,友好地询问,那么他会是一个不错的人,带有刻薄的德克萨斯口音。Bruce 可以在 10 秒内给任何人教任何语言,因此他是评论你的书的、不错的人选。

  那些高级用户反映如何呢?我的书长了 30%,针对转换那些已经看到希望、想放弃邪路的 Java 程序员,给他们带来 Erlang 编程的乐趣,但是高级用户呢?

  抛弃了高级用户——他们甚至不会买这本书,因为他们无论如何都懂的。因此我扼杀了我的孩子,放弃了很多没有人曾看到过的高级资料。我的目标是把这些忽略的高级材料放在一个网站上。

  我还从 Francesco Cesarini 那里得到了一个不错的提醒:”他们喜欢练习题。“因此我差不多在每章的后面增加了练习题。

  因此没有理由不去抓住一个 Erlang 编程的课程:每章后面有练习题!