2009年2月17日星期二

Peter Coad的7项修炼

(本文已在《程序员》杂志2009年第2期发表)

Peter Coad是我喜欢的一位面向对象专家和软件创业者。他在上世纪九十年代与人合著了6本关于面向对象软件的分析、设计和编程的书籍,以《面向对象分析》一书中和Yourdon共创的Coad/Yourdon方法而成名。1999年,他创建了TogetherSoft公司。2003年,TogetherSoft卖给了Borland公司,他成为了Borland公司的副总裁。后来,他离开了Borland,兴趣转向了软件之外,教人读希腊文版的圣经。

他最值得一提的技术贡献,就是提出了“彩色
UML”建模方法,这也是他最后一本书《彩色UML建模》的主题。在这种建模方法中,他使用了4种颜色,代表4种不同设计意图的类,创造性地回答了面向对象分析和设计的一个根本问题:“怎样识别类,并确定方法和属性?”这本书已由机械工业出版社引进版权,出了中文版。

我对
Coad的关注始于十多年前,那时朋友向我推荐了北大出版社引进的《面向对象分析》一书。后来因为学习JavaUML建模、关注Borland公司的产品,又看到了TogetherSoftCoad的名字。再后来,敏捷方法学兴起,我又看到了Coad,他是特征驱动开发(FDD)的主要支持者。向师傅学习,要学师傅练功的方法,而不只是师傅的招式。我想知道的是:为什么Peter Coad会发明彩色UML的方法?或者说,Peter Coad是怎样炼成的?

在他
1994年左右的一篇文章中,对这个问题给出了一些提示。这篇文章标题是“Amplified Learning”,介绍了“7种智能”的理论和应用。

语言是第一种智能。
著名的通天塔的故事体现了自然语言表达的重要性:失去了语言沟通能力,团队协作就变成了不可能的任务。语言能力的习得,有一句话可以概括:“听说领先,读写跟上”。学习本国语言和外语都是如此。语言的重要性,实际上体现的是沟通的重要性。据说,当年
TogetherSoft公司在面试时,会先让被面试的人选一个与软件开发无关的话题讲15分钟。通过这样的面试环节,可以了解面试者对生活的一些理解和表达沟通的能力。这里我还想强调一下中国程序员的英语能力。由于软件方面的最好的信息几乎都是英语的,所以良好的英语能力对程序员有很大的帮助。一般来说,在各行各业,最成功的人都是拥有最好信息的人。

代码的可读性也是语言能力的体现。Knuth1984年提出的Literate Programming,把编程比喻为写文学作品。既然是文学作品,就会有不同的风格。有晦涩难懂,也有深入浅出、生动有趣。所以作为一名好的程序员,需要对自然语言和编程语言都有深刻的理解,要懂得欣赏和创造文章之美,代码之美。

那么什么样的文章是好文章?一个留美回来的英语作文教师曾对我说,好文章首先要有“
something new(新东西)”。新的观点、新的解释、新的视角、新的实践、新的证据......都可以。这是西方鼓励创新的思路,所以我们会看到软件业的创新层出不穷。中国人对好文章的评判标准更注重传统。《文心雕龙》里提出的标准是“本乎道,师乎圣,体乎经,酌乎纬,变乎骚”。把软件提升到道的高度,那就是C++创始人Bjarne Stroustrup所说的,“人类文明运行于软件之上”。

数理逻辑是第二种智能。我们需要对数字敏感,需要具有归纳和演绎的能力。这样的能力虽然也包含在语言学习之中,但更多地包含在数学、物理等理科课程中。在西方,学理科的学生几乎都读过
Pólya的《怎样解题》一书。数学是思维的体操,它让我们的思维更灵活、更缜密。懂得欣赏数学之美的人,会看到简洁的公式和逻辑的力量。许多大学的计算机系都是从数学系分出来的,一些老师以前是学数学或物理的。史书记载:“尧造围棋,教子丹朱”。学围棋也是对逻辑思维很好的锻炼。和数学一样,从围棋中我们也可以看到,从一些简单的规则出发,可以怎样建造一个瑰丽的宫殿群。另外,在软件复杂度测量、软件工程管理方面,也需要许多量化的测量指标。

以上两种智能可能是学校教育中教授得最多的内容,体现在语、数、外三门主课上。能够熟练灵活地运用语言进行沟通,并能够运用逻辑推理来找出问题和解决问题,我们就具备了一些基本的能力。但除此之外,还有一些扩展性的智能,对于我们软件开发者也很重要。

空间色彩是第三种智能。
九十年代是
GUI的十年,在这十年里,软件的美由内而外,扩展到了视觉领域。叔本华说,“美是最高级的善,创造美是最高级的乐趣”。但是,我们不时会看到一些殊无美感的设计,那真是叫“乏善可陈”。Apple公司的操作系统中,利用色彩来表示窗口的控制按钮,给人以艺术的享受。Peter Coad的彩色UML建模方法利用4种色彩来表示4种不同的架构型,通过色彩强化了信息沟通的效果。我还记得当初在Borland公司的集成环境中第一次看到彩色语法制导时,带来的那种震撼。作为程序员,我们经常需要阅读图表、画设计草图、运用图表或幻灯片来传达信息,空间色彩能力也是相当重要的。

“流光容易把人抛。红了樱桃,绿了芭蕉。”“知否?知否?应是绿肥红瘦。”中国人讲究“诗中有画,画中有诗”。软件是散文,是诗,其中也蕴含着色彩和空间之美。

音乐是第四种智能。科学家有音乐特长的例子比比皆是,并且他们都认为,音乐对他们的专业是有启发的。
Spring框架的作者之一Rod Johnson拥有音乐博士学位。旋律和节奏是音乐训练的两个主要方面。很多歌曲要记住歌词不容易,但旋律却让人记忆深刻。我喜欢在工作环境中使用背景音乐,这样能舒缓压力,激发创造力。音乐反映了我们对世界的一种认知模式,反映了道。《庄子·养生主》载,“庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所踦,砉然响然,奏刀騞然,莫不中音,合于桑林之舞,乃中经首之会。”庖丁是个解牛的专家,是个哲学家,也是个音乐家。

运动锻炼是第五种智能。许多职业棋手都通过运动锻炼,保持有活力的工作和思考,使自己处于最佳状态。极限编程(
XP)在一开始提出“每周工作四十小时”作为一种最佳实践,但是如果你的身体有问题,就会连四十小时都做不到。后来XP将这一实践改成了“保持有活力的工作”,我想大概是因为有些身体好的人,每周工作六十小时也一样很有效率吧。要养成锻炼的习惯,争取做到“每天锻炼一小时,健康工作五十年,幸福生活一辈子”。

以上三种智能,体现在音、体、美这三门副课上。
将这三种智能提升到一定水平,就可以称得上全面发展了。

自知是第六种智能。曾子曰:吾日三省吾身。苏格拉底说:“认识你自己”。蘧伯玉年五十而知四十九年非。正确地认识和评价自己,不断地反省自己,这是进步的基础。《从优秀到卓越》一书的作者
Collins说,你应该问自己一个问题:在哪个领域你可以做到世界前三?人贵有自知之明。

知人是第七种智能。
越来越多的工作,正由团队来承担。有一本书名叫“
Teamwork Is an Individual Skill”,书名就很有启发:团队合作是一项个人技能。要成为团队的一员,你需要读懂他人,并具备一定的社交技能。然后,通过实现团队的目标来实现自我。“己欲立而立人,己欲达而达人。”如果你是团队的领导,那么知人善任就是一项重要的能力。刘邦正因为用对了张良、韩信、萧何而得到了天下。

寻找怎样的人作为合作的伙伴或朋友?益者三友:友直、友谅、友多闻。怎样看人才不会看走眼?子曰:视其所以,观其所由,察其所安;人焉廋哉。人焉廋哉。

以人为镜,可以明得失。见贤思齐焉,见不贤者自省也。所以,知人也可以促进自知。

知人者智,自知者明。以上两种智能,就属于情商的范畴了。(透露一个秘密:一下记住
7件事是有难度的,所以我把它分成3个部分——主课、副课、情商。你能记住吗?)

每个人在这
7种智能上的发展都不尽相同。可能因为各自的成长经历和条件,我们在某些方面的智能没有得到很好的发展。随着年龄的增长和自省智能的提升,你可能会认识到人生就是练功、升级。如果你现在已经走上了一条主动的持续改进之路,那么你打算如何在这些方面提高自己呢?

3 条评论:

hawaii 说...
此评论已被作者删除。
hawaii 说...

写的比Bil Simser好。说到底就是,continuous improvement.

拯救与逍遥 说...

行文优美