你在做什么
“你在做什么?”我经常这样反问那些跑来问我问题的人们。然后他们就愣住了。
做了许多年的开发,其实有很多人并不知道“自己在做什么”。《愚公移山》的故事里面,愚公为山所阻,苦于“出入之迂”,然后就决定“移山”。看起来伟大而风光的工程,可能只是拍拍脑袋的一时主意——如果只是觉得绕路太远,那么劈山开路岂不是更加经济?
愚公移山只是一种精神追求,而做工程却不是追求精神目标。我们的目标是完成工程,但是你现在环顾一下你的团队:有多少人的眼光是落在工程本身上的呢?
程序员正在调试代码,项目经理在忙着开会,市场经理在请客吃饭,老板可能还在来公司的路上……总之,你的身旁没有什么人关注工程本身。即便有一个人或几个人在像模像样地画着模型图,或者写着需求、分析与设计书,但是对于他们来说,这只是例行的工作,而不是出于工程本身的需要。
其实这也是我在几年前的状态,同时身兼主程、团队负责人和项目经理的时候,我列出的工作清单排满了上班与下班的时间。我甚至忙到不知道自己有多忙。直到我将自己的角色分解到“工程层状模型(EHM)”中,我才渐渐地梳理出自己的工作方法。
《大道至简》这本书的名字并没有什么奥妙。因为是先有了EHM,所以这本书根本上是随着EHM的层次来展开的。它的第一版曾在《程序员》中选载过三期,那时我为了方便就以《从编程到工程》作为书名。后来出电子版时,才恢复到现在这个名字。而本质上来说,这本书还是讲的“从编程到工程”的各个环节。
至于“道”,其实在乎于你的认知。它不过是规律、本质的代名词。现在的书名,更像是一个以程序员出身的工程实践者,在历经10年后,终于领悟到“自己在做什么”时的一声感叹。
《大道至简》向你讲述两个内容:做什么和为什么做。“做什么”作为一种状态或者现象,通常是(阶段性)不变的,所以人们了解自己“在做什么”时大多只需要观察。简而言之,只需要自省,就可以了解自己的所作所为了。然而“为什么做”却相对更难于理解,因为这是“表象下的实质”,潜藏得很深:习以为常,便会根本上忘却“习”的来由。例如项目总监说要一份计划,你大概只需要拿一个以前做过的文档模板,很快就能写出一份项目计划案来。但在这个过程中,你已经忘掉了“项目计划案”真正存在的价值——写它的目的,并不是“完成工作”。
写一份项目计划案的时候,你的角色是项目经理,你的职责是计划与分工,你的目标是工程的时间、进度与质量的平衡。这份文档是工程的纲要,因此阅读群体是整个团队和项目干系人。所有这些,都可能导致文档的规格和措辞存在差异。
所以你需要认识“为什么做”。
这其实并不是非常困难。例如我在工程中经常问的问题是“可不可以不做”——哈哈,看起来我很偷懒似的。其实不然,因为接下来我就会从不同的人那里得到“非做不可”的种种理由。
然而这是方法或者手法。《大道至简》并不告诉你这些具体的方法与手法。我只是叙述了基本的原理与思想。《大道至简》陈述的是一种途径、一个方面,以及一些探求途径、方面过程中的故事与思考。
做事有没有章法,在于你头脑够不够清醒;头脑够不够清醒,在于你是否视见到事物的本实。具体到如何做一件事(例如做软件工程)的方法与步骤,是本书所不能告诉你的。而反过来说,如果你认为你自己“足够清醒”,那么这本书原本也就不会告诉你更多。
你足够清醒吗?
第二版的增改
写这一版的《大道至简》,其实用掉的时间与整个第一版差不太多。但新添加的内容,也就两章三节而已:
第六章,谁是解结的人;
第八章,你看得到工具的本质吗;
第四章第三节,沟通的三层障碍;
第九章第五节,审视AP和XP;
第十章第七节,细解“法”与“式”。
此外,第二版的《大道至简》加入了一个有趣的部分,就是九幅四格漫画和一篇《愚公移山记》。
除了增加的内容之外,本版的《大道至简》还修改了一些章节的位置。例如第七章的“关注点”一节。因为EHM图提出来的不仅仅是一个“多层”的体系,而且它的“关注点”也是EHM体系的一个重要部分。因此放在一起来讲述,会使这个体系更加完整。
还有一些细部修改。例如第一版说李冰与愚公处于“差不多同一时间”。这经不起考究,就改掉了。
关于新添加的章节
第一版的EHM体系中有一个关注点没有详述。也就是“组织”。事实上在“失败的过程也是过程”中,最后一节“工程不是做的,是组织的”,就是打算延伸到“组织问题”进行讨论的。但写第一版的时候,并没有就此展开。所以有些读者在看第一版时,觉得这一段没什么意义。
本版中添加的第六章“谁是解结的人”,讨论的就是组织和管理的问题。承接上文而讨论“组织角色,分工明确,步调一致”等这些问题。为此,在综述EHM的第七章,也修改了“组织”小节的部分文字。
在本版中,我还添加了一章“审视XP和AP”,对敏捷编程与极限编程做了一些讨论。我试图站在更中立的角度上来讨论AP、XP,以及传统的工程过程(例如RUP)。因为本书并不打算去迎合某种或者某些过程、方法与工具。
但即使如此,“敏捷(Agile)”也与本书表达的“灵活(Flexible)”的观点有相近的地方。其实本书在英文名上,就曾考虑过使用“Thinking In Flexible Engineering”这样的名字。我在这里特别补充这一点,是希望不要把本书的思想与AP和XP等同起来。
新添加的第八章“你看得到工具的本质吗”,占了不少的篇幅。其实,对于我自己来说,理解“语言只是工具”是一个顿悟的过程。但对于读者来说,是顿悟还是领悟,则更多的取决于思想方法与工程积累。我不能期望大家都能顿悟,所以就详写了这一章,希望能以渐进的说理,对我的思想脉络做一概括,并阐述工具之于工程的本末。
关于《愚公移山记》
在基本不影响原故事的前提下,我在本书中对愚公移山的故事进行了续写。我在2005年4月就完成了本书的第一版,7月赴西藏旅游时,在珠峰大本营扎营之夜构思了“愚公移山”的续写概要,但到10月发布本书第一版(电子版)时,这篇续却没能够写出来。此次编写第二版,把这一年来在头脑中渐渐清晰的故事重理脉络,编撰成一篇文言,就是附录中的《愚公移山记》。为方便阅读,在本书附录中又附了一篇白话文的版本。
书中的九幅四格漫画,不但概括了故事的大意,也是整本书的框架骨骼。为了使得整个故事更加完整并具连续性,我对愚公移山中人物的历史背景进行了一些设定(姓氏的设定主要是为了避免在故事中出现“愚公n代”这样的写法)。这里先作一些交待:
愚公,复姓公输,祖上虞国人(今山西平陆县北)。后迁居到太行山北,时以虞人自称,性情耿正,人称愚公。
智叟,复姓端木,魏国河曲人(今山西芮城西,风陵渡一带),后迁与愚公毗邻,仍以河曲人自称。
邻人京城氏,世居此地。有孀妻遗男。京城一氏的后代中,有很多复祖姓目夷的人。
序、前言及其他
这一版本,仍请蒋涛先生作序,替换了由他为本书第一版(电子版)所写的序言。在请李维先生做推荐辞时,先生不辞辛劳,寄过来一份推荐序,因此,我敬而重之地做在本书的序中。本书的另一篇序,则是请我的老朋友王昊写的。
第一版的“前言”以“后语”的形式在书末给出,这一版中保留了这个做法,具体的原因参见书末的“前言后语”。
此外,为了便于读者阅读理解本书,我也为新版写了这篇“再版前言”。
| 回书目 下一节 |
|
· Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. · 08年5月各大网上书店及.. |
· 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. · 系统分析师自测获奖名.. |
|
||||
| · ASP.NET开发教程 · 专题:ASP.NET 2.0基础.. · LAMP技术精解 · 服务器节能与绿色IT · ARP攻击防范与解决方案 · Linux 集群技术专题 · Windows集群服务应用 · CISSP认证成长之路 |
· SQL Server 2008/2005.. · SQL Server入门到精通 · 网络工程师职业规划与.. · 浏览器的战国时代 · 运营商封堵ADSL共享 中.. · 微软出价446亿美元收购.. · 技术人求职简历完备手册 · 开源虚拟化技术Xen |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Apache技术专题 · Windows集群服务应用 · 国际文档格式标准开战 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 · 了解统一威胁管理(UTM).. · 专题:AIX操作系统管理.. · 访问控制列表(ACL)介绍 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · 三层交换技术专题 · Apache技术专题 · 企业数据恢复指南 · Windows集群服务应用 |
· 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 · 访问控制列表(ACL)介绍 · ASP.NET开发教程 · PHP开发应用手册 |
|||