Peter Coad是我喜欢的一位面向对象专家和软件创业者。他在上世纪九十年代与人合著了6本关于面向对象软件的分析、设计和编程的书籍。他以《面向对象分析》一 书中和Yourdon共创的Coad/Yourdon方法而成名。1999年,他创建了TogetherSoft公司。2003 年,TogetherSoft卖给了Borland公司,他成为了Borland公司的副总裁。后来,他离开了Borland,兴趣转向了软件之外,教人读希腊文版的圣经。
他最值得一提的技术贡献,就是提出了“彩色UML”建模的方法,这也是他最后一本书《彩色UML建模》的主题。在这种建模方法中,他使用了4种颜色,代表 4种不同设计意图的类,创造性地回答了面向对象分析和设计的一个根本问题:“怎样识别类,并确定方法和属性?”这本书已由机械工业出版社引入版权并出了中文版,很荣幸,我是这本中文版的译者。
我对Coad的关注始于十多年前,那时朋友向我推荐了北大出版社引进的《面向对象分析》一书。后来因为学习Java、UML建模、关注Borland公司 的产品,又看到了TogetherSoft和Coad的名字。再后来,敏捷方法学兴起,我又看到了Coad,他是特征驱动开发(FDD)的主要支持者。向 师傅学习,要学师傅练功的方法,而不只是师傅的招式。我想知道的是:为什么Peter Coad会发明彩色UML的方法?或者说,Peter Coad是怎样炼成的?
在他1994年左右的一篇文章中,为这个问题给出了一些提示。这篇文章标题是“Amplified Learning”,介绍了“7种智能”的理论和应用。
语言是第一种智能。著名的通天塔的故事体现了自然语言表达的重要性:失去了语言沟通能力,团队协作就成为了不可能的任务。语言能力的习得,有一句话可以概 括:“听说领先,读写跟上”。学习本国语言和外语都是如此。语言的重要性,实际上体现的是沟通的重要性。
据说,当年TogetherSoft公司在面试时,会先让被面试的人选一个与软件开发无关的话题讲15分钟。通过这样的面试环节,可以了解面试者对生活的一些理解和表达沟通的能力。这里我还想强调一下 中国程序员的英语能力。由于软件方面的最好的信息几乎都是英语的,所以良好的英语能力对程序员有很大的帮助。一般来说,最成功的人都是拥有最好信息的人。
代码的可读性也是语言能力的体现。Knuth在1984年提出的Literate Programming,把编程比喻为写文学作品。既然是文学作品,就会有不同的风格。有晦涩难懂,也有深入浅出、生动有趣。所以作为一名好的程序员,需要对自然语言和编程语言都有深刻的理解,要懂得欣赏和创造文章之美,代码之美。
那么什么样的文章是好文章?一个留美回来的英语作文教师曾对我说,好文章首先要有“something new(新东西)”。新的观点、新的解释、新的视角、新的实践、新的证据……都可以。然后才是布局谋篇、遣词造句。这是西方鼓励创新的思路,所以我们会看 到软件业的创新层出不穷。中国人对好文章的评判标准更注重传统。《文心雕龙》里提出的标准是“本乎道,师乎圣,体乎经,酌乎纬,变乎骚”。把软件提升到道 的高度,那就是Bjarne Stroustrup所说的,“人类文明运行于软件之上”。
数理逻辑是第二种智能。我们需要对数字敏感,需要具有归纳和演绎的能力。这样的能力虽然也包含在语言学习之中,但更多地包含在数学、物理等理科科目中。在 西方,学理科的学生几乎都读过波利亚的《怎样解题》一书。数学是思维的体操,它让我们的思维更灵活、更缜密。懂得欣赏数学之美的人,会看到简洁的公式和逻 辑的力量。许多大学的计算机系都是从数学系分出来的,一些老师以前是学数学或物理的。史书记载:“尧造围棋,教子丹朱”。学围棋也是对逻辑思维很好的锻 炼。和数学一样,从围棋中我们也可以看到,从一些简单的规则出发,可以怎样建造一个瑰丽的宫殿群。
以上两种智能是学校教育的核心,体现在语、数、外三门主课上。能够熟练灵活地运用语言进行沟通,并能够运用逻辑推理来找出问题和解决问题,学校的基础教育就是成功的。但除此之外,还有一些扩展性的智能,对于我们软件开发者也很重要。
空间色彩是第三种智能。九十年代是GUI的十年,在这十年里,软件的美由内而外,扩展到了视觉领域。叔本华说,“美是最高级的善,创造美是最高级的乐趣 ”。但是,我们不时会看到一些殊无美感的设计,那真是叫“乏善可陈”。
Apple公司的操作系统中,利用色彩来表示窗口的控制按钮,给人以艺术的享受。 Peter Coad的彩色UML建模方法利用4种色彩来表示4种不同的架构型,通过色彩强化了信息沟通的效果。我还记得当初在Borland公司的集成环境中第一次 看到彩色语法制导时,带来的那种震撼。作为程序员,我们经常需要阅读图表、画设计草图、运用图表或幻灯片来传达信息,空间色彩能力也是相当重要的。
“流光容易把人抛。红了樱桃,绿了芭蕉。”“知否?知否?应是绿肥红瘦。”中国人讲究“诗中有画,画中有诗”。软件是散文,是诗,其中也蕴含着色彩和空间之美。
音乐是第四种智能。科学家有音乐特长的例子比比皆是,并且他们都认为,音乐对他们的专业是有启发的。Spring框架的作者之一Rod Johnson拥有音乐博士学位。旋律和节奏是音乐训练的两个主要方面。从小学乐器的人,长大了唱歌不容易走音。
我喜欢在工作环境中使用背景音乐,这样能 舒缓压力,激发创造力。《庄子•养生主》载,“庖丁为文惠君解牛,手之所触,肩之所倚,足之所履,膝之所踦,砉然响然,奏刀騞然,莫不中音,合于桑林之 舞,乃中经首之会。”庖丁是个解牛的专家,是个哲学家,也是个音乐家。
运动锻炼是第五种智能。许多职业棋手都通过运动锻炼,保持有活力的工作和思考,使自己处于最佳状态。极限编程(XP)在一开始提出“每周工作四十小时”作 为一种最佳实践,但是如果你的身体有问题,就会连四十小时都做不到。后来XP将这一实践改成了“保持有活力的工作”,我想大概是因为有些身体好的人,每周 工作六十小时也一样很有效率吧。要养成锻炼的习惯,“每天锻炼一小时,健康工作五十年,幸福生活一辈子”。
以上三种智能,体现在音、体、美这三门副课上。
自知是第六种智能。曾子曰:吾日三省吾身。苏格拉底说:“认识你自己”。蘧伯玉年五十而知四十九年非。正确地认识和评价自己,不断地反省自己,这才是进步 的基础。《从优秀到卓越》一书的作者柯林斯说,你应该问自己一个问题:在哪个领域你可以做到世界前三?人贵有自知之明。
知人是第七种智能。越来越多的工作,正由团队承担。有一本书名叫“Teamwork Is an Individual Skill(团队合作是一项个人技能)”。要成为团队的一员,你需要读懂他人,并具备一定的社交技能。然后,通过实现团队的目标来实现自我。“己欲立而立 人,己欲达而达人。”如果你是团队的领导,那么知人善任就是一项重要的能力。刘邦因为用对了张良、韩信、萧何而得天下。
寻找怎样的人作为合作的伙伴或朋友?益者三友:友直、友谅、友多闻。怎样看人不走眼?子曰:视其所以,观其所由,察其所安;人焉廋哉。人焉廋哉。
以铜为镜,可以正衣冠;以古为镜,可以知兴替;以人为镜,可以明得失。所以知人也可以促进自知。
知人者智,自知者明。以上两种智能,就属于情商的范畴了。
我们每个人在这7种智能上的发展都不尽相同,如何在这些方面提高自己,是否也是值得考虑的一个问题呢?
作者:王海鹏 摘自《程序员》2009年第2期