大道至简:软件工程实践者的思想
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二版前言(摘选)

你在做什么

“你在做什么?”我经常这样反问那些跑来问我问题的人们。然后他们就愣住了。

做了许多年的开发,其实有很多人并不知道“自己在做什么”。《愚公移山》的故事里面,愚公为山所阻,苦于“出入之迂”,然后就决定“移山”。看起来伟大而风光的工程,可能只是拍拍脑袋的一时主意——如果只是觉得绕路太远,那么劈山开路岂不是更加经济?

愚公移山只是一种精神追求,而做工程却不是追求精神目标。我们的目标是完成工程,但是你现在环顾一下你的团队:有多少人的眼光是落在工程本身上的呢?

程序员正在调试代码,项目经理在忙着开会,市场经理在请客吃饭,老板可能还在来公司的路上……总之,你的身旁没有什么人关注工程本身。即便有一个人或几个人在像模像样地画着模型图,或者写着需求、分析与设计书,但是对于他们来说,这只是例行的工作,而不是出于工程本身的需要。

其实这也是我在几年前的状态,同时身兼主程、团队负责人和项目经理的时候,我列出的工作清单排满了上班与下班的时间。我甚至忙到不知道自己有多忙。直到我将自己的角色分解到“工程层状模型(EHM)”中,我才渐渐地梳理出自己的工作方法。

《大道至简》向你讲述两个内容:做什么和为什么做。“做什么”作为一种状态或现象,通常是(阶段性)不变的,所以人们了解自己“在做什么”时多数只需要观察。简而言之,只需要自省,就可以了解自己的所作所为了。然而“为什么做”却相对更难于理解,因为这是“表象下的实质”,潜藏得很深:习以为常,便会根本上忘却“习”的来由。例如项目总监说要一份计划,你大概只需要拿一个以前做过的文档模板,很快就能写出一份项目计划案来。但在这个过程中,你已经忘掉了“项目计划案”真正存在的价值——写它的目的,并不是“完成工作”。

写一份项目计划案的时候,你的角色是项目经理,你的职责是计划与分工,你的目标是工程的时间、进度与质量的平衡。这份文档是工程的纲要,因此阅读群体是整个团队和项目干系人。所有这些,都可能导致文档的规格和措辞存在差异。

所以你需要认识“为什么做”。

这其实并不是非常困难的。例如我在工程中经常问的问题是“可不可以不做”——哈哈,看起来我很偷懒似的。其实不然,因为接下来我就会从不同的人那里得到“非做不可”的种种理由。

然而这是方法或者手法。《大道至简》并不告诉你这些具体的方法与手法,我只是叙述了基本的原理与思想。《大道至简》陈述的是一种途径、一个方面,以及一些探求途径、方面过程中的故事与思考。

做事有没有章法,在于你头脑够不够清醒;头脑够不够清醒,在于你是否看到事物的本实。具体到如何做一件事(例如做软件工程)的方法与步骤,是本书所不能告诉你的。而反过来说,如果你认为你自己“足够清醒”,那么这本书原本也就不会告诉你更多。

你足够清醒吗?

关于《愚公移山记》

在基本不影响原故事的前提下,我在本书中对愚公移山的故事进行了续写。书中的九幅四格漫画,不但概括了这个故事的大意,也是整本书的框架骨骼。

为了使得整个故事更加完整并具连续性,我对愚公移山中人物的历史背景进行了一些设定(姓氏的设定主要是为了避免在故事中出现“愚公n代”这样的写法)。这里先做一些交代:

愚公,复姓公输,祖上虞国人(今山西平陆县北)。后迁居到太行山北,时以虞人自称,性情耿正,人称愚公。

智叟,复姓端木,魏国河曲人(今山西芮城西,风陵渡一带),后迁与愚公毗邻,仍以河曲人自称。

邻人京城氏,世居此地,有孀妻遗男。京城一氏的后代中,有很多复祖姓目夷的人。

周爱民

2006年9月2日