京做一个名为“Delphi & Delphi 源码分析”的专题
培训。我用了近两周的时间,做了 50 页的幻灯,全面讲
述 Delphi 和 Delphi 。然而在临行前的一晚,我辗转
反彻,总是在思考一个问题:我究竟做了些什么?或者说,
我究竟想告诉学员些什么?
凌晨 5 点,我在幻灯的末页后插入了一张幻灯,标题
是“语言只是工具”,而幻灯的内容是一张图:
这是与培训完全无关的一张幻灯。然而,这是自从
1997 年我接触到管理,以及从 1998 年我接触到工程以来,
我第一次正视“软件工程”这四个字。我第一次看清楚代
…70
…………………………………………………………Page 75……………………………………………………………
『大道至简』
码、方法、过程、工程与组织的关系!
对于一个程序员,或者以程序员自命的人来说,看清
楚这一切的第一步,竟是一句“语言只是工具”!
猿之于为人,“学会制作和使用工具”是最重要的标
志。因而我不知道“语言只是工具”这句话,究竟是对语
言的膜拜,还是漠视。
然而从那一刻开始,我才真正地知道工程。
2。 程序
上面的这个图中,在最内层的环里,是“程序=算法
+结构”。这是编程的本源定义,也是原始的状态。与代
码相关的任何工作,最终仍旧会落足于这样的一条规则。
编程的精义于此。从有开发行为开始,它就存在了。
愚公在数千年前就在用类同的行为做编程实践,而几十万
年前智人,也在循环与分支所构成的逻辑中打转。
3。 方法
推动这种逻辑向前发展的,是“方法”和“方法论”
的出现。长期的编程实践,自然的归演与总结,必须沉淀
为某种(软件开发)方法,于是“过程”出现了,于是“对
象”出现了,于是相关的方法论也就出现了。
这是实践的成果。方法不是某个人或者某个组织创造
…71
…………………………………………………………Page 76……………………………………………………………
第 6 章 从编程到工程
的。瓜熟而蒂落,实践积累达到一定的程度,微软不提出
某个方法,IBM 也会提出这个方法。即便他们都不提出,
可能你自己已经在使用这个方法了。
方法并不神秘,因为它就是你今天正在做的、从事的
和实现的。正如“模式”是一种方法,而模式就是你昨天
书写代码的那个行为。只不过,GoF 归纳、抽取、提升了
这些行为的内在规律。
你看不到你做事的行为,也就不能理解“模式”作为
一种方法的价值。所以大师们众口一词:模式需要一定的
编程经验才能理解。
同理,理解过程也需要编程经验,理解对象也需要编
程经验,理解 MDA 与 SOA 还是需要编程经验。
——这可能就发生在你去回顾你上一行代码编写的
经过,或者上一个项目失败的经历的那一瞬息。经验来源
于回顾、理解与分析,而不是你将要写的下一行代码。
有人在寺院扫了一辈子的落叶而得道,也有人因为一
句话而得道。
GoF 因为无数次的代码回顾而得道。
4。 过程
过程伴生工程而出现。过程解决的是工程中角色间的
关系问题。
过程说的是很多的人( 团队) 如何组织在一起进行开
…72
…………………………………………………………Page 77……………………………………………………………
『大道至简』
发的问题。它首先把工程中的环节分解出来。这样,有了
环节,就有了角色;有了角色,就有了沟通。
因此过程中的问题,就是角色、沟通和环节的问题。
哪些环节重要取决于具体的编程行为,也就是具体的
项目。
例如产品开发的周期可以一再拖延,因为对产品来
说,更重要的品质和技术壁垒。因此你可以看到暴雪公司
的游戏总是一再跳票,而它从来都是将大幅的玩家测试和
开发人员的个性特征放在第一位。相应的,DOOM 与
QUAKE 系列的灵魂就是在游戏引擎的开发和设计上。
如果用这样的模式去做项目,可能软件公司没死掉,
工程需求方也被拖死掉了。——你有看见客户因为你对技
术的远景描述而憧憬吗?不,你只会看到他们因为项目的
一再延迟而懊恼,而沮丧,或……暴怒。
…73
…………………………………………………………Page 78……………………………………………………………
第 6 章 从编程到工程
憧憬这种事情,只会发生在那些个铁杆玩家的身上。
分不清玩家与客户的区别,对项目经理来说,是可怕
的。这将意味着他不能清楚地知道哪个环节更加重要。
角色的确定,以及角色间的沟通问题,在项目过程中
也同样重要。工程组织是否合理,相互的协作是否紧密,
是这个项目成功能的保障。
“合作无间”通常是流于书面报告中的措辞。真正的
“无间”,应当是沟通的结果。然而UML ,则可能是你与
客户,以及项目经理与开发人员被“离间”的第一因素。
5。 工程
最狭义的工程,是描述“做什么”和“做到什么”。
也就是说,是对目标的描述和成果的检测。至于这个
工程目标的实现,是“过程”和“方法”的事;而有效、
快速地实现“过程”和“方法”所需的,就是“工具”。
这 种 软 件 工 程 体 系 层 次 (Software Engineering
Architectural Layers)被描述成一张图,我很有幸地在第一
次画它的时候① ,画成了一堆牛屎。因此我从此都把它叫
① 在 2001 年进行一次公司的内部培训时,我在幻灯片中画下这张
图。半年后,我去北京读研时又看到了它,不过是画在《软件工
程——实践者的研究方法》这本经典巨著中,第四层的“实现对
象”是叫做“质量焦点”,名字则是“软件工程层次图”。其实所
谓“经典”也是对既有知识的总结。大师们所知的,与你所思考
的未必就有天壤之别。
…74
…………………………………………………………Page 79……………………………………………………………
『大道至简』
“牛屎图”:
工具
方法
过程
实现对象
软件工程
过程伴随工程而出现,解决的是工程中“步调一致”
的协作问题。那么工程是因为什么而出现的呢?
很显然,软件规模的不断增大是根本的原因。所以你
会看到在
小说推荐
- 软件工程思想
- 作者:林锐前 言 在60年代计算机发展初期,程序设计是少数聪明人干的事。他们的智力与技能超群,编写的程序既能控制弱智的计算机,又能让别人看不懂、不会用。那个时期编程就跟捏泥巴一样随心所欲,于是他们很过分地把程序的集合称为软件,以便自己开心或伤心时再把程序捏个面目全非。人们就在这种美滋滋的感觉下热情地
- 最新章:第53章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 最新章:第42章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章