开发回归人本:软件工程遭遇危机?

(应第二书店之邀而作)


     我一直为吃不到口味一致的炸鸡翅而耿耿于怀。每当我面对一堆火候太过的鸡翅时,总是忍不住会想起软件工程——连号称生产过程最规范的连锁快餐店都无法避免品质偏差,我们怎么能对软件工程继续抱有幻想?


     看来Pete McBreen也有同感。这位偏居于加拿大某小镇的奇人,以一部Software Craftsmanship(《软件工艺》)风雷动九州,并名至实归地荣获了2002年Jolt大奖。


     向读者推荐《软件工艺(Software Craftsmanship)》一书,是一种冒险行为。在“软件工程”本身并未得到透彻理解的情况下,倡导“软件工艺”,极有可能矫枉过正。然而,在这种情况下提出“软件工艺”,或许也正是时机。设若读者真能体会作者的苦心,且因此而敢于去审视和批判技术界种种流行时尚,则作者的本意也就得以贯彻了。


     McBreen既是实践者,也是思考者。不到两百页的一小册,承载了(从某种意义上)颠覆软件工程的大任。


     多年以来,技术界执着地寻找解决开发过程一切问题的“银弹”,这些努力无疑是值得尊敬的,不过结果却令人叹息:尽管事实上这种银弹并不存在。从上个世纪六十年代末、七十年代初开始出现的软件工程(Software Engineering),曾被当作包治百病的万应良药,在SAFEGUARD这样的巨型项目中,软件工程的价值与作用也得到了充分的体现。经过数十年的发展,软件工程的思想体系和实践模型渐趋完善,一方面越来越标准化,另一方面也越来越琐碎繁复。按照IEEE的定义,“软件工程是有关软件开发、操作和维护的系统的、规则的、以及可控的应用体系;换言之,即工程理念在软件中的贯彻。”


     听上去很美,不是吗?然而这不过是一种理想而已。软件开发并非机械工作,完全可控的软件开发过程几乎是不存在的。当大师们把目光聚焦到“软件”之时,“开发”也随之变成了生产流水线——面粉和水从这头进去,烤好的羊角面包从那头出来;你需要准备的,只是一份完美的计划。可惜软件开发最终还是会归结到“具体的人”,即开发人员。查理?卓别林在《摩登时代》中极度夸张地证明了,即便是扭螺丝这样的简单机械化操作,也需要操作人员具备相当的技巧。另一方面,该电影也讽刺意味十足地指出,此类“系统的、规则的、可控的”工作,会将人的创造力彻底毁灭。


     我们必须承认的是,软件开发是一项极富创造性和个性化的工作。当我第一次读到C#语法,惊奇地在其中嗅到Anders Heljsberg的气息,宛如在Delphi一般迷人。事实上,在每一段代码之中,无论这段代码质量优劣,我们总是能隐约看到编码者的身影。没错,正如《软件工艺》所坚持的那样,软件开发确乎是一种“手工艺”。它需要具有高技巧度、强创造力的实践人员。你可以要求工厂生产一百万只同样的机械手,但哪怕是两个完全相同的开发人员,是任何一个学校都无法造就的。这些大小不一、质量参差的机械手装在同一台机器上,还要求他们绝对精确地按照计划图纸运作,实在是mission impossible。


     针对软件工程体系中存在的问题,Pete提出了一种新的软件开发过程理念,即“软件工艺(Software Craftsmanship)”。该理念首先承认人的不可控性,并由此指出,在除大型项目之外的大多数开发场景下,软件工程是不宜采用的一种过程管理体系。书中围绕“软件工艺”这一主题,从多方面做了深入、指导性较强的探讨和阐述。关于这本书谈到的种种方面,在此转述一遍是没有意义的。有美一人,在水之滨;与其听我告诉你她长得怎么样,不如自己去看一看呢。