人类文明运行于软件之上。但创造软件的艺术却仍旧藏身于暗处,秘不示人,即便对于那些专家也是如此。而且,做软件的野心越大,败状也就越惨烈。
本书讲述了米奇·卡普尔开创的Chandler开源项目(该项目旨在打造全新的电子邮件和日程安排软件),作者耗时3年,深入Chandler开发过程,书中讲述了该项目和开发者的许多故事,以此来回答“为什么打造超卓软件那么难”。难以做好。难以按时交付。难以使用。
跟着罗森伯格在软件丛林里转了一圈,回到现实中,原来米奇·卡普尔业已辞去OSAF主席一职,并且会在2008年内撤走投资。OSAF全职人员也立即从27人减少至10人。凯蒂·帕兰特在Chandler项目官方博客上宣布了这条消息,一时间外界议论纷纷。”六年半时间,上百万美元,几十号顶尖高手,换来幻梦一场,此时最郁闷的当属米奇·卡普尔。在OSAF/Chandler行将就木的今天,本书正可做它的墓志铭。
软件乃是人类自以为最有把握,实则最难掌控的技术。本书作者罗森伯格对OSAF主持的Chandler项目进行田野调查,跟踪经年,试图借由Chandler的开发过程揭示软件开发中的一些根本性大问题。
本书是讲一事,也是讲百千事:是写一软件,也是写百千软件;是写一群人,也是写百千万人。任何一个在软件领域稍有经验的技术人员看完本书,必掩卷长叹:做软件难。
第0章 软件时间
第1章 死定了 [2003年7月]
第2章 Agenda之魂 [1968年~2001年]
第3章 原型与Python [2001~2002年11月]
第4章 乐高王国 [2002年11月~2003年8月]
第5章 管束奇客和狗 [2003年4月~8月]
第6章 完成设计方案 [2003年7月~11月]
第7章 细节视图 [2004年1月~5月]
第8章 白板上的即时贴 [2004年6月~10月]
第9章 方法
第10章 工程师和艺术家
第11章 通往狗食版之路 [2004年11月~2005年11月]
尾声长赌 [2005年~2029年及以后]
译后记附录A 专有名词对译表
第0章:软件时间
那是1975年的冬天。我在终端机房中俯身敲击一台电传打字机,每打完一行,那笨重的机头就会摇头晃脑猛然撞回最左边,开始新的一行。我从几个小时前开始输入一行行黑代码,忘记了时间流逝,全然不知已是午夜时分。看门人已经关闭廊灯。我并没有得到许可在纽约大学物理系大楼中流连忘返、使用向高中学生免费发放的计算机账号。不过,倒也无人责难。
那时我年方十五,正迷恋于一个叫做Sumer的游戏,在游戏中,我管理着新月沃土上一座古代城邦。今天的电脑游戏玩家也许会嘲笑其稚嫩:它在一卷纸上逐行打印出大写字母,报告游戏进程。玩家运筹帷幄,分配食用和留种的谷物,然后程序就会告知城邦每年的发展情况。“汉谟拉比陛下,”程序像一个诚惶诚恐的宰相般报告说,“微臣伏启圣鉴……”
没过几天,我就已经把游戏玩了个遍。但是,和现在令青少年着迷的大多数游戏不同,Sumer可以让玩家打补丁。谁都能够窥探其内部运行机制:该游戏只是向计算机发出的一系列简单指令,这些指令存储于一卷多行八孔纸带上。(电传打字机旁的塑料盘中堆积的纸带,几乎带来和游戏一样多的乐趣。)纸带像地下出版物一般在朋友间流传共享。只要花几个钟头学点简单的Basic语言,改游戏就会和玩游戏一样容易:将纸带上的指令装载到计算机,然后开始往程序里加代码。
Sumer是个空白画板——历史只是个轮廓,随时准备着让少年的梦想来浇筑。我和朋友们掌握了它简单的构造,开始往里加东西。让玩家可以选择不同的宗教信仰吧!偶尔来一次腺鼠疫,会发生什么事?蛮族入侵者应该很酷。嘿,搞几具弹石机如何?
那天晚上,我倾力于改造游戏中民众造反模式的设计。Sumer只提供粗糙的起义模式;如果你干得太差,人民就会起来推翻你。(Sumer的原作者是个乐天派。)我认为,游戏中的起义模式应该多种多样,所以就创建了一些子程序补丁——让Sumer陷入内战,或是引入一个想要争取合法地位的反对派政府。
我不在乎干到多晚。F线地铁整夜运行,可以把我带回位于皇后区的家。一定得重新设计游戏中的革命模式!
四分之一世纪后,2000年五月,我坐在旧金山的一间办公室里,眼睁睁紧盯着一台现代计算机屏幕(高解析度、数百万种颜色)。喝剩的咖啡纸杯胡乱摆在键盘边上。正是凌晨5点。
那时我四十岁,是在线杂志Salon的创始人和总编,此外还负责一个软件开发项目。我们花了几个月精心规划,希望给网站增加动态特性,使之彻底改观。然而,现在我却眼看着项目濒临绝境。
在没日没夜苦干了几个星期之后,主力程序员终于宣告工作完成,自己要飞往夏威夷,度一个全家盼望已久的假期。剩下他的老板,技术副总裁查德·迪克森(Chad Dickerson),独自琢磨为什么存储网站文章的数据库就是不肯与负责显示页面的程序对接。查德两个通宵没合眼,努力修复问题。若是不然,到周一早上,我们的两百万读者就只能看到网站上没更新过的旧闻了。
难道我们以前没做过软件吗?(做过。)是没有全面测试吗?(显然不太充分。)怎么会搞得一塌糊涂?(鬼晓得。)
我吃完了自动售货机里最后一袋饼干,徘徊又等待,却仍是毫无指望。时间还多。还有时间去读那位以新项目的名义准备香槟加蛋糕聚会的倒霉同事的邮件,回复他说:“或者咱们再等等吧。”还有时间去体会身陷困境孤立无援的感受,然后琢磨将系统的中心服务器命名为“卡夫卡”是不是个好主意。
大约早晨9点,我们终于发布了站点“改进版”的第一个版本。又是周一清晨,其他同事相继出现在办公室,他们过了好一会儿才知道,原来我们六个人昨夜压根儿就没回家睡觉。
又过了几星期,程序员们修复了最严重的问题,软件运行趋于平稳。但后来每每听说某公司打算“升级其软件平台”、重新搭建一套大型系统时,我总不免暗自担心。
二十世纪九十年代科技行业的兴盛,给我们带来了“互联网时间”的概念。对该短语含义的理解见仁见智,但多指“快速”之意。数字时代的新时间机制下,一切皆有可能发生——技术产生、公司创立、创造财富——而且速度惊人。这意味着你没时间做到尽善尽美——无须担心,因为别人也一样。
随着投资潮退,“互联网时间”这个短语也风头尽失,很快被其他时髦词所代替。但新词掮客们的确一语中的。在做软件的过程当中,时间似乎确实时快时慢。如果一切顺利,你会沉浸在心理学家称之为“流逝”的状态中,全然忘记了时间。如果事有不谐,你又会陷入困境,四顾茫然、举步维艰。无论是哪种情况,时钟都被抛诸脑后。你用的是软件时间。
在使用一门新编程语言时,程序员的第一个程序通常是“Hello World”——输入一系列代码,召唤计算机,命令它打印出这两个词,向主人致敬。在Sumer游戏所用的Basic语言中,这个程序像这样:
10 PRINT “HELLO WORLD!”
20 STOP
“Hello World”程序一无所用,但足可蛊惑人心;它鼓励新手,唤起每个程序员心中乐观的一面。“既然能叫它说话,就能让它做任何事!”计算机协会(The Association for Computing Machinery),计算机领域中的ABA或AMA,维护了一张网页,上面列出将近两百种编程语言版本的“Hello World”程序。简直就是程序代码的罗塞塔石碑。
在Java这种商业世界中流行的重量级编程语言里面,“Hello World”看起来高不可攀:
class HelloWorld {
public static void main (String args[]){
System.out.println(”Hello World!”);
}
}
Public static void:无数个Java程序代码块中,都有这串密语存在。这串词有特别的技术含义。不过我常常把它看作一阙机器诗篇,在它召唤出的冷宫里面,多少软件项目一开始雄心勃勃,最终却未结善果。
如果你和计算机编程打过交道,就很难不对它又爱又恨。作为少年游戏玩家,我品味过编写代码的巨大快乐。作为媒体工作者,我见证了软件世界中无数个悲惨故事——无论是跨国公司、政府机构,还是军工大鳄,都曾一头撞上过代码的冰山。而作为一个经理人,我也得对付自己桌面上的泰坦尼克号。
这二十五年令人气馁的软件历史,也许不具代表性,但却是我的个人经验。依照硅谷的数字乌托邦理想,事情理应朝好的方向发展。在Salon网站发布失败后的几个月里,理想与现实之间的差异开始对我露出了利齿獠牙。
编程已不再处于萌芽期。我们的世界依赖于无穷复杂的软件。在长达半个世纪的研究和实践之后,为什么还是很难做到按时限、按预算做出计算机软件?为什么还是很难让软件可靠而安全?为什么还是很难把软件做得易于学习使用,且具备按需修改的灵活性?这只跟时间和经验有关吗?是否有出现某种根本性突破的可能?在软件的本质特性(抽象性、复杂性及延展性)上,是否存在某种总能击倒我们的无常之物,将开发者咒入充满不可挽回的延误和根深蒂固的缺陷的世界?
“软件难做,”编程界经典教科书的作者高德纳(Donald Knuth)这样写道。但原因何在?P1-P6
大多数技术书籍只是讲技术和理论,但我们不知道在真实的软件开发过程中,这些技术和理论究竟是被什么样的人如何去使用?
《梦断代码》向我们展示了硅谷一流软件开发者是如何进行产品开发的,把真实的人、事、技术以及产品的发展过程结合在一起,每个有志于开发畅销产品的程序员都值得耐心去品味这个故事。
CSDN总裁蒋涛
2008年6月
2007年初,博文视点的郭立总经理打电话给我,说有本书想请我评估。拿到Dreaming in Code英文原版,读完第0章,我知道,这书无论如何是舍不得给别人做了。
软件乃是人类自以为最有把握、实则最难掌控的技术。本书作者罗森伯格对OSAF主持的Chandler项目进行田野调查,跟踪经年,试图借由Chandler的开发过程揭示软件开发中的一些根本性大问题。说起罗森伯格,也算奇人一个。他创办的Salon.com网站是美国最著名的网上出版物之一。此人乃是一全才,编程写作两手都硬,最难得的是他在高屋建瓴般的大眼光之外,收放自如的好手段。本书是讲一事,也是讲百千事;是写一软件,也是写百千软件;是写一群人,也是写百千万人。我相信,任何一个在软件领域稍有经验的技术人员看完本书,必掩卷长叹:做软件难。
也因为罗森伯格文笔太好,翻译起来特别困难。在试译首章时,笔下还算流畅,颇以为可以很快译完全书。孰知再往后做,就迎头撞上拦路虎:古往今来的典故、软件领域的轶事、冷峻中饱含感情的笔调、有如神来般的适时幽默、精当的遣词造句、尚来不及上词典的流行语……读书不妨囫囵咽,翻译怎敢随手抛?盖阅读之快感,快而后有感:翻译是为读者贡献读起来有快感的文字,读者要读得快(快速、快乐),译者必然是快不了的。在翻译过程中,责任编辑江立工作非常仔细,挑出了译文中许多不确之处,和她合作真的很愉快。
我一向认为,世间语言是相通的。计算机语言也是一种语言。做软件,是把人类用自然语言表达的需求,翻译为计算机能理解的语言。做软件难,做人类语言的翻译亦难,抑或更难,因为除开信息的表达,人类读者还会要求风格等几乎不可定量的元素。以信、达、雅三字为翻译效果的判断标准,实在有些模糊。我更倾向于“准确、完整、保持风格”的说法。“准确、完整”相对(只是相对)容易一些,而“保持风格”就难多了。自己写东西越好的人,越容易“看不见”原文风格。翻译诚然是一种创造,但弃原文风格于不顾、只管自己爽的翻译,只好称之为“译述”,自成一体,与原文未免有点风马牛不相及的意思。
所以,能翻译与自己平日写作风格相近的原文,是多么幸运的事!我翻过两本技术书,非逼着自己去适应原文风格不可,是做了对读者有意义而让译者感觉憋屈的事。这次翻译Dreaming in Code,酣畅淋漓,仿佛酷暑天喝了杯冰冻酸梅汤的神气。键盘声响,是罗森伯格写了我想写的字,也是我说着罗森伯格要说的话。穷一年之功,翻译这本300来页的书,值了!
二次排版完成后,我也陷入了失语状态。跟着罗森伯格在软件丛林里转了一圈,回到现实中,原来米奇·卡普尔业已辞去OSAF主席一职,并且会在2008年内撤走投资。OSAF全职人员也立即从27人减少至10人。凯蒂·帕兰特在Chandler项目官方博客上宣布了这条消息,一时间外界议论纷纷。
没有人可以指责米奇·卡普尔自私,有篇评论写得好:“他养活Chandler和OSAF长达六年之久,寄望于能做出令人激动的创新PIM套件……六年后,Chandler仍无定形……(离开的)时候差不多了。”六年半时间,上百万美元,几十号顶尖高手,换来幻梦~场,此时最郁闷的当属米奇·卡普尔。在OSAF/Chandler行将就木的今天,本书正可做它的墓志铭。
“这里躺着一个野心勃勃的开源项目。它曾立志超越Outlook,最后却无疾而终。许多程序员以心血养育它,惜乎全不见成效。它是温室中的花儿,有过绚烂的梦想,还未绽放即已枯萎。在那软件的花园中,还有多少会渐次凋零呢?”
韩磊
2008年5月于北京
“《梦断代码》乃承Tracy Kidder《新机器灵魂》血脉之初见者,融技术眼界与叙事功夫于一炉,实多年未见之奇书。读毕,当可了解软件术士辈之所为。”
—— 詹姆士·菲罗斯(James Fallows),《大西洋月刊》
“技术人员爱把复杂的问题形容为‘非凡’。司各特·罗森伯格选取了极度非凡的主题,并使之浅显易懂。他盛赞写代码的人,但也坦承他们如常人般复杂而有缺陷。《梦断代码》实在是一流的报道和著作。”
—— 丹·基尔默(Dan Gillmor),公民媒体中心主席及《自媒体(We the Media)》作者
“《梦断代码》探索了编程如何鼓舞和破坏人类对新工具的创造,既令人迷醉,又教人冷静。本书文笔优美,专为对创造与革新之根源感兴趣者——无论是开发者还是其他人——所写。”
—— 史蒂芬·强森(Steven Johnson),《开机(Everything Bad Is Good for You)》及《幽灵地图(the Ghost Map)》作者
“司各特·罗森伯格放胆踏入非程序员未敢涉足之地:那人类想象苦苦变身为代码的旋风中央。在《梦断代码中》,他华丽地将一家初创软件公司的故事与我们理顺编程过程的(无穷尽)努力结合起来讲述。”
—— 艾伦·乌曼(Ellen Ullman),《走近机器(Close to the Machine)》作者
“《梦断代码》喜怒哀乐皆俱——舞台中央站着米奇·卡普尔,数据革命中那最令人着迷也最少知音的人物。本书足具智慧与远见,不输于任何此类主题的书。”
—— 约翰·海勒曼(John Heilemann),《回光返照:拷问比尔·盖茨(Pride Before The Fall: The Trials of Bill Gates)》作者
“《梦断代码》是一本代码史。”
—— DoNews制作人,千橡集团副总裁 刘韧
“每个有志于开发畅销产品的程序员都值得耐心去品味这个故事。”
—— CSDN总裁 蒋涛
“《梦断代码》是一个非常有益有趣且发人深思的软件开发故事,每个软件行业的朋友,都值得一看。”
—— PHPChina技术总监 李明