本文由Yurii原创,转载请注明来源: Life Sailor

本文链接 代码,代码,多少梦想葬身于汝!


2007年的某天,韩磊给我发来一段古怪的文字,讨论翻译。说古怪,因为诗意的笔下,分明是技术的文字:

Public static void:无数个Java程序代码块中,都有这串密语存在。这串词有特别的技术含义。不过我常常把它看作一首机器诗篇,在它召唤出的冷宫里面,多少软件项目一开始雄心勃勃,最终却未结善果。

“这是什么书?”,我不禁好奇。
“Dreaming in code,第0章,我正在翻译。”
第0章?是了,了解计算机的人,看到这样的编号,多半能会心一笑吧。

软件工程的课本大都会讲到IBM那个失败的工程:巨额的资金,大量的开发人员,漫长的开发周期,却不能避免失败的命运——到最后,项目就像在泥沼里挣扎的恐龙,越挣扎,身上的泥就越多,陷得就越深。没有亲身体验过的人,往往会觉得不可思议,念书的时候,我就是这么想的。2005年春夏,延庆的某家宾馆里,程序员聚在一起,夜以继日地封闭开发,期限到了,预期目标相差甚远。撤退那天,大雪纷飞,被挫败感包围的我,无比真切地怀念泥沼里挣扎的恐龙。
然而,慢慢的经历多了,却发现,能够按时、按质、按预算交付的项目,往往是异数;所以Software Craftmanship的作者,不会说“投入”人力、物力、财力,他的用词甚为传神:throw in。播下龙种,收获跳蚤,这在软件世界竟是个常见的现象——两打程序员,3年时间,4732个Bug,只为打造超卓软件,却不得善终;所以Dreaming in Code的作者要问:

编程已不再处于萌芽期。我们的世界依赖于无穷复杂的软件。在长达半个世纪的研究和实践之后,为什么还是很难做到按时限、按预算做出计算机软件?为什么还是很难让软件可靠而安全?为什么还是很难把软件做得易于学习使用,且具备按需修改的灵活性?这只跟时间和经验有关吗?是否有出现某种根本性突破的可能?在软件的本质特性(抽象性、复杂性及延展性)上,是否存在某种总能打倒我们的无常之物,将开发者咒入充满不可挽回的延误和根深蒂固的缺陷的世界?

“软件难做,”编程界经典教科书的作者高德纳(Donald Knuth)这样写道。但原因何在?

关于这本书,尤其要提到的是,作者罗森伯格,编程写作,两手俱佳;这悲壮的故事,由他剥茧抽丝,娓娓道来,独具魅力;故事之内,更穿插关于技术的精当点评,教普通人能看个热闹,内行人能看个门道,各取所需,各得所乐。译者韩磊亦是文理兼修,笔法精纯;去年,我多次向他抱怨翻译《精通正则表达式》之枯燥,他也谈起自己正在翻译Dreaming in Code的苦恼,简直是一种折磨——需知道,凝聚心血的精纯译文,必然出自持久的折磨。今天拿到样书,我确认,自己之前的判断没有错。从上面所引的小段译文,可以一斑。

我深深记得,米兰·昆德拉曾这样描写某位女主人公:她深感沮丧,过去的20年已被无形的扫帚轻轻扫去,不留痕迹,仿佛人失去了小臂,手腕直接连在大臂上。昔日雄心勃勃的OSAF/Chandler,被扫去的部分就在这里:

这里躺着一个野心勃勃的开源项目。它曾立志超越Outlook,最后却无疾而终。慷慨的米奇•卡普尔带给它生命,又把命脉从它身上取走。许多程序员以心血养育它,惜乎全不见成效。它是温室中的花儿,有过绚烂的梦想,还未绽放即已枯萎。那软件的花园中,还有多少会渐次凋零呢?