今天终于读完了这一本《梦断代码》

书中详尽地描述了一个宏大的软件项目Chandler是怎么被一群高水平的项目经理、设计师、程序员等玩坏的。

他们不是故意想搞砸这个项目,而是由于各种各样的原因,出现了过于乐观的估计、频繁变动的需求,摇摆不定的技术选型,反复返工的架构,难以排查的bug,不断招人却无法解决问题,不断拖延的工期,等等一系列的问题——谁不希望自己能做出一个成功的软件项目呢?然而各种陷阱就如同热带雨林里潜藏的毒蛇,隐蔽而致命。

这类吐槽类的作品,因为从不同的角度看一个事物,往往很有趣,会有不一样的启发。然而在读这一本的时候,虽然觉得很有趣,吐槽也十分到位,但心情却无比沉重——他们在当年遇到的每一个难题,在十多年后的今天,在我们开发软件项目的过程中,仍然不断地出现,并且依然几乎没有办法解决——灾难总是在一遍遍重演。

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

人们总是拿做建筑与做软件作类比。我们也希望软件能够像建造一座房子一样,只需要拿着已有的砖块进行搭建,就能够完成任务。我们试图把代码抽象成一个个“砖块”,用它们进行组合,期望能做出能用的软件。但当我们真正做出来所谓的“砖块”或者在做它的路上就会发现,我们离目标越来越远。

而自计算机诞生不久,就有无数的先驱绞尽脑汁希望解决软件工程中的方方面面的问题,然而直到现在,仍然没有完善的解决方案。在软件工程这个领域中,无数的方法论被发明出来,被用于进行项目的管理,但实践下来发现,就像小说《三体》里所描述的——当科技被锁死之后,人们能做的只是改进一下手上已有的大刀和长矛,再难有飞跃性的突破了。

到最后,作者也没有给出解决软件项目中种种矛盾的解决办法。

以我三年的软件实践经验,尽管也有令人激动的新方法论、清规戒律以及突破性的想法,做软件仍然真的很难。然而,我也能听到异议说,困难有不同类别。养孩子难。葬先亲难。出生和成长?与人同住或无人相伴;尝试去爱;无法去爱;接受他人之死;接受自己之死——都很难。软件?那是另一个困难的世界,不太难的那种。

软件开发更像是绘画,写作等一类创作性的工作,而不那么像所谓的工程。

当自己不知道该做什么、失去方向的时候,我比较喜欢读一读过这个行业里比较“软”书籍,这一本也是。最早读到《黑客与画家》,和去年读到《软件随想录》之类的,这些书读完之后总是有一种跃跃欲试,想做些什么的想法。然而读这一本,感受却截然相反。

那似笑非笑的神情——也许纯属玩笑,或者蕴涵了辛苦得来的经验——在他的眼中洋溢。“你越懂软件,就越不会去做软件。”

一代又一代的程序员们,就像一遍遍、永世不停地把巨石从山底滚上山顶的西西弗斯,不断探求着答案,辛苦却又乐观着——或许下一次会有所不同。

做软件难。


另外,在刚拿到这本书的时候,刚好听说此书的中文版译者韩磊——一位有着十多年从业经验的工程师、管理者,发布了公开求职的信息。在42岁这个年纪公开求职,怕是生活上有什么难处。

感谢他把这么好的书翻译给我们,祝他能够找到合适的位置,一切顺利吧。