然而问题是:我把它写得太简单了,以至于只写了 110页,就没有必要再写下去了。 我当然可以把一本书写得很复杂,或者很厚。这很容 易,就如做Codr一样:把代码写烂或者写乱都很容易, 要想写得简洁却远非易事。 代码写得太简洁,老板会认为你在偷懒:书写得太薄, 出版社就不愿意出。我看来是忘掉了侯捷先生说过的“买 书如买纸”,以书的厚薄来论价值的故事。 忘掉了就忘掉吧。好的一面是现在书变成了电子版, 大家终于可以读到它了。不好的呢?我想大概不要钱的东 西很难得到珍视吧:如果下载这本书只是因为收集,而不 是阅读,那会是让我感到比讨论“买书如买纸”这样的事 更为难过的。 好吧。希望你能象对待纸质书籍那样来阅读这本《大 道至简》。放心,我并不介意你把它打印出来放在床头。 补充声明:我保留在传统媒体(书籍、杂志)上刊载、 出版本书的权利。但允许任何人在网络上非商业性地、自 由地、不加修改地传播这本书的电子版本。 周爱民2005年10月14日 http://www.doany.net/ mailto:aim@263.net
然而问题是:我把它写得太简单了,以至于只写了 110 页,就没有必要再写下去了。 我当然可以把一本书写得很复杂,或者很厚。这很容 易,就如做 Coder 一样:把代码写烂或者写乱都很容易, 要想写得简洁却远非易事。 代码写得太简洁,老板会认为你在偷懒;书写得太薄, 出版社就不愿意出。我看来是忘掉了侯捷先生说过的“买 书如买纸”,以书的厚薄来论价值的故事。 忘掉了就忘掉吧。好的一面是现在书变成了电子版, 大家终于可以读到它了。不好的呢?我想大概不要钱的东 西很难得到珍视吧:如果下载这本书只是因为收集,而不 是阅读,那会是让我感到比讨论“买书如买纸”这样的事 更为难过的。 好吧。希望你能象对待纸质书籍那样来阅读这本《大 道至简》。放心,我并不介意你把它打印出来放在床头。 补充声明:我保留在传统媒体(书籍、杂志)上刊载、 出版本书的权利。但允许任何人在网络上非商业性地、自 由地、不加修改地传播这本书的电子版本。 周爱民 2005 年 10 月 14 日 http://www.doany.net/ mailto:aim@263.net
目 录 1.编程的精义 1.编程的精义 11 2.会或者不会写程序 13 3.程序=算法+结构 14 4. 语言 16 5. 在没有工程的时代 16 2.是懒人造就了方法 1.是懒人造就了方法 18 2.一百万行代码是可以写在一个文件里的… 20 3. 你桌上的书是乱的吗 23 4. 我的第一次思考:程序=算法+结构+方法…25 3.团队缺乏的不只是管理 1.三个人的团队 29 2. 做项目=死亡游戏?… …31 3. 做ISO质量体系的教训 33 4. 谁动摇了你的制度?… …36 5. “那我们就开始开发吧”… 38 6. 组织的学问:角色… …39 7.跟随蚂蚁。但不要栽进蚂蚁洞里。 …42 8.“什么是增值税发票?” …44
目 录 1. 编程的精义 1. 编程的精义 ······················································· 11 2. 会或者不会写程序············································· 13 3. 程序 = 算法 + 结构 ········································ 14 4. 语言 ·································································· 16 5. 在没有工程的时代············································· 16 2. 是懒人造就了方法 1. 是懒人造就了方法············································· 18 2. 一百万行代码是可以写在一个文件里的 ············ 20 3. 你桌上的书是乱的吗 ········································· 23 4. 我的第一次思考:程序=算法+结构+方法·········· 25 3. 团队缺乏的不只是管理 1. 三个人的团队 ···················································· 29 2. 做项目 = 死亡游戏 ?······································· 31 3. 做 ISO 质量体系的教训 ····································· 33 4. 谁动摇了你的制度? ········································· 36 5. “那我们就开始开发吧”·································· 38 6. 组织的学问:角色············································· 39 7. 跟随蚂蚁。但不要栽进蚂蚁洞里。 ··················· 42 8. “什么是增值税发票?”·································· 44
4.流于形式的沟通 1.客户不会用C,难道就会用UML吗? 48 2.项目文档真的可以用甲骨文来写 50 3. 最简沟通…53 4. 为不存在的角色留下沟通的渠道 …57 5.流于形式的沟通 60 5.失败的过程也是过程 1.做过程不是做工程… 63 2. 做过场 65 3.实现,才是目的… 65 4.过程不是死模型 66 5.“刻鹄类鹜”与“画虎类狗” 69 6.工程不是做的,是组织的 71 6.从编程到工程 1.语言只是工具… 73 2. 程序… 75 3. 方法 75 4. 过程 76 5. 工程 78 6. 组织 80 7. BOSS 82 8.上帝之手 84
4. 流于形式的沟通 1. 客户不会用 C,难道就会用 UML 吗?·············· 48 2. 项目文档真的可以用甲骨文来写 ······················· 50 3. 最简沟通 ··························································· 53 4. 为不存在的角色留下沟通的渠道 ······················· 57 5. 流于形式的沟通 ················································ 60 5. 失败的过程也是过程 1. 做过程不是做工程············································· 63 2. 做过场······························································· 65 3. 实现,才是目的 ················································ 65 4. 过程不是死模型 ················································ 66 5. “刻鹄类鹜”与“画虎类狗” ·························· 69 6. 工程不是做的,是组织的·································· 71 6. 从编程到工程 1. 语言只是工具 ···················································· 73 2. 程序 ·································································· 75 3. 方法 ·································································· 75 4. 过程 ·································································· 76 5. 工程 ·································································· 78 6. 组织 ·································································· 80 7. BOSS································································· 82 8. 上帝之手 ··························································· 84
7.现实中的软件工程 1.大公司手中的算盘… 87 2. 回到工程的关键点 92 3. 思考项目成本的经理 94 4.审视AOP …97 5.审视MDA……100 8.是思考还是思想 1.软件工程三个要素的价值 …103 2.其实RUP是一个杂物箱 104 3. UML与甲骨文之间的异同…105 4.经营者离开发者很远,反之亦然 …106 5.矛盾:实现目标与保障质量…107 6.枝节与细节 …108 7.灵活的软件工程 …110
7. 现实中的软件工程 1. 大公司手中的算盘············································· 87 2. 回到工程的关键点············································· 92 3. 思考项目成本的经理 ········································· 94 4. 审视 AOP ·························································· 97 5. 审视 MDA ························································100 8. 是思考还是思想 1. 软件工程三个要素的价值·································103 2. 其实 RUP 是一个杂物箱 ···································104 3. UML 与甲骨文之间的异同 ·······························105 4. 经营者离开发者很远,反之亦然 ······················106 5. 矛盾:实现目标与保障质量 ·····························107 6. 枝节与细节 ······················································108 7. 灵活的软件工程 ···············································110
第1章编程的精义 “虽我之死,有子存焉;子又生孙,孙又生子;子又 有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何 苦而不平?” 一一《愚公移山》,《列子·汤问篇》 1.编程的精义 仅仅就编程序来说,实在是一件很简单的事,甚至 可以说是一件劳力活。两千年前的寓言中,已经成就 了一位工程名家:愚公。在这位名家的身上,浓缩了 项目组织者、团队经理、编程人员、技术分析师等众 多角色的优秀素质。他的出现,远远早于计算机发展 的历史,甚至早于一些西方国家的文明史。 汤问篇中所述的愚公移山这一事件,我们看到了原 始需求的产生: “惩山北之塞,出入之迂” 我们也看到了项目沟通的基本方式: “聚室而谋曰” 然后,我们看到愚公确定了一个项目的目标: -7-
第1章 编程的精义 “虽我之死,有子存焉;子又生孙,孙又生子;子又 有子,子又有孙。子子孙孙,无穷匮也。而山不加增,何 苦而不平?” ——《愚公移山》,《列子·汤问篇》 1. 编程的精义 仅仅就编程序来说,实在是一件很简单的事,甚至 可以说是一件劳力活。两千年前的寓言中,已经成就 了一位工程名家:愚公。在这位名家的身上,浓缩了 项目组织者、团队经理、编程人员、技术分析师等众 多角色的优秀素质。他的出现,远远早于计算机发展 的历史,甚至早于一些西方国家的文明史。 汤问篇中所述的愚公移山这一事件,我们看到了原 始需求的产生: “惩山北之塞,出入之迂” 我们也看到了项目沟通的基本方式: “聚室而谋曰” 然后,我们看到愚公确定了一个项目的目标: -7-