软件工程访谈

 原版不大清楚,我进行了格式化

主持人:熊节(Gigix):《程序员》杂志社技术编辑,C-View成员。

嘉 宾:刘艺(Newdream):大学教师,撰写和编译图书多部。

汪颖(Adams):UMLChina成员,《人月神话》译者。

 Newdream:随着计算机技术的发展,由一两个人关起门来打天下的软件英雄时代一去不复返了。现在的商业软件大部分都是很多人协同工作的结果,应用软件也已经由桌面应用发展到分布式网络应用,软件开发的难度和规模日益扩大。不管我们愿不愿意,软件工程正在从课堂上、书本上走下来,强迫我们去学习它,应用它。工程是将理论知识应用于实践的科学,而软件工程则借鉴了传统工程的原则和方法,以求高效地组织和开发高质量软件。

国内软件工程的研究虽然并不比国外晚,但在软件工程的实用方面仍然滞后于美国等发达国家,特别是软件工程的应用人才奇缺。最近几年,随着大量国外软件工程经典图书的引进,国内的计算机研究和开发人员了解和学习了很多最新的软件工程理论和技术,从而推动了软件工程的广泛应用。

现在越来越多的IT企业意识到软件工程对保证产品质量、降低开发风险、提高管理效率的重要作用,而精通软件工程的开发人员也成为大公司高薪争聘对象。软件工程图书正在成为计算机图书的一大热点。

 Gigix:是的。两位在软件工程方面都有比较深的认识,并且也都博览群书。下面我们就来谈谈软件工程的书籍吧。

Newdream:对于软件工程的初学者来说,清华大学出版社的中国计算机软件专业技术水平考试指定用书《软件工程》(分为初、中、高级)是一本不错的入门读物。该书的作者郑人杰教授是我国知名的软件工程专家。这本书通俗易读,内容系统权威,可以帮助读者较全面地了解软件工程方面的知识。但由于这本书侧重应试,因此实用性较差。

 Adams:新近业界推崇的CMM 2级从需求管理、配置管理、SQA、软件计划以及软件跟踪等KPA的角度,为规范化的软件管理提供了理论依据——然而,它依然带有学术派的色彩,使若干从业者有意犹未尽的感觉。《[ISBN]7-111-07282-0[/ISBN]》则涵盖了上述领域,全面深入浅出地介绍了软件工程学科的各个方面。其中,所涉及的实践已在很大程度上超越了目前的软工水平——不用再哀叹路在何方,路就在脚下。另外,《超越混沌——有效管理软件开发项目》这本软件工程的散文集里总结了许多经验教训,有空翻一翻,经常会心有戚戚焉的感觉。可惜,目前还没有影印版。

 Gigix: Newdream的评价比较“中庸”,呵呵。在我看来,软件工程教材,能够起到的惟一作用(如果的确有作用的话),就是指导软件开发者的工作。如果不能指导实际工作,那些听起来很美的词汇、术语就没有任何意义。因此,我总是认为那本《[ISBN]7-111-07282-0[/ISBN]》算是目前为止最好的一本教材。对于名词的解释,那本《[ISBN]7-111-07282-0[/ISBN]》肯定不如某些国产教材来得好;但是这种一定程度的晦涩和复杂,对于正经学习软件工程是必要的。任何一个道理,如果说得过于抽象过于概括,那肯定会变成同义反复(也就是废话)。

国产教材往往就犯这个毛病。好象我不应该用“国产教材”这样一个比较隐晦的称呼?没错,说郑人杰教授那套《软件工程》教材,记得以前在学校的时候,大概有一年的时间在学郑教授那套“钦定”教材。学完的感觉就是:他解释的每个词都很好,说的每句话都正确。整本书放之四海而皆准——科技工作者的直觉告诉我,放之四海而皆准的东西,多半都不可操作。这也算是我挑选软件工程书的一个办法吧:不光要有办法,还要有办法的约束条件,以及办法不适用的场合。也就是说,书中提供的知识必须是可证伪的。

如果一本书不能说明自己提供的办法在什么条件下失效,那读者学到这些办法之后还得自己去摸索它的约束条件,这本书又有什么作用呢?前一阵Smiling上有人讥笑“刚从学校出来的小朋友”,大抵就是这种情况。

 Adams:其实,软件工程归根到底是实践性的学科,它主要针对的是软件开发中社会学——人的问题。因而,很难找到一篇放之四海而皆准的圣经,每一位前人的著作都是来自于自己的项目、实践,已经为大家提供了非常好的参考。在同一位“大牛”李亮的交流中提到,“即使是相同性质的项目,不同的团队(人员)也需要对原先积累的过程、方法进行调整。”换言之,“迷时师渡,悟了自渡”,各种书籍、文献、前人的经验,在“工作在如此易于驾驭的介质上。程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。程序员凭空地运用自己的想象,来建造自己的‘城堡’”的学科中,只能充当自己的老师,需要的还是自己的顿悟。另一个角度而言,尽信书,不如无书。如果完全迷信书中的观点,也是不可行的。

 Gigix:刚才Adams引用的是《人月神话》中的句子吧?这本书恐怕是最近一段时间最热门的一个话题了。记得前次有人在一个小论坛上问“这本书究竟怎么样”,我的回答是:“如果没有读过‘人月’,如果不知道‘no silver bullet’,恐怕很难被认为是一个合格的软件工程师。”Adams没有多谈《人月神话》,大概是作为译者的避嫌吧。我知道的确有人不同意我的观点。

有个朋友认为《人月神话》只是说出了一些指导性的原则、一些大而化之的概念,认为不应该过分地推崇它。但是,我认为,国内的情况,并不是普及过分,而是普及严重不足。这一点从许多的实例中就可以看出来。所以,尽管可能被人骂为“盲从”,但我还是得说:作为一名软件工程师,《人月神话》就是必读书目。

 Newdream: Gigix谈到普及《人月神话》的重要性,殊不知现在许多做软件的人(他们也有软件工程师、系统分析师等各种时髦的称谓),根本就没有软件工程的概念。经常见到一些言必谈各种专业术语和词汇,甚至怀揣系统分析员证书的人,却连基本的软件开发文档都读不懂。

记得有一次讲面向对象的方法,我举的是COM+的例子,居然还有软件工程师问哪里有对象,我说什么是COM,不就是组件对象模型(The Component Object Model)吗,COM就是对象呀。像这种笑话很多,我们许多搞软件开发的人还停留在崇尚编码英雄的“小农经济”时代,而软件工程化则是软件工业化生产时代的必由之路,没有软件工程思想的指导,我们无法想象如何去应对复杂多变的需求,如何组织和实施软件开发,如何进行人员管理和团队协作。实际上正是近几年来软件工程在理论和实践上的迅速发展,才使软件行业的生产率得以提高,而这种提高并不是建立在新增多少软件英雄或编程高手的基础上。

所以普及和推广软件工程是一个十分严肃的话题。而这项工作需要面对不同层次和水准的对象。你不可能指望每个开发人员都去读《设计模式——可复用面向对象软件的基础》或《人月神话》,甚至连《软件工程:实践者的研究方法》这样的教科书对于某些人也勉为其难。相反林锐的一篇《软件工程思想》的随笔却成为众多程序员追捧的软件工程入门读物,在网上广为传播。这篇文章的魅力在于它来自作者的经验和体会,同时也向我们展示了一个梦想成为编程高手的程序员最终成长为一名软件工程信徒的曲折心路历程。最有趣的是文中“让我们高举程序主义、软件工程思想的伟大旗帜,紧密团结在以Microsoft为核心的软件公司周围,沿着比尔·盖茨的生财之道,不分白天黑夜地编程,把建设有中国特色的软件产业的伟大事业全面推向21世纪”的“经典名句”已经成为不少程序员津津乐道的口头语。无可否认,近两年大量引进的外国软件工程经典图书确实为我们打开了眼界,据说单是机械工业出版社和中信出版社就引进了70多种软件工程外版图书。由于出版界的努力,我们可以有幸阅读到世界大师级的一流作品,但是我们还缺少来自开发第一线的、真正具有实践体会的自己同行的作品。后者才是最贴近实际需要,为广大程序员所接受的书籍。所以普及软件工程的基础知识和思想方法要比普及《人月神话》这样的一两本经典名著更有重要意义。

 Gigix:记得刚毕业的时候,我也特别喜欢看一些软件工程书,例如CMM、PSP、TSP之类的。但是过不多久就发现:看不懂。真的是看不懂。书里每个字都认识,每句话都明白,每一章节都觉得很有道理,就是凑到一起不知道对自己有什么用。后来反思一下,就是因为自己的实践经验太少。别人分析的问题,说到的约束条件,自己一点感性认识都没有,所以看到别人拿出的解决方案也就只能感叹“真有道理”了。Adams说“不要迷信”,可像这样经验尚浅,突然看到这么经典的东西,想不迷信也难呀。后来就转去看一些比较贴近实际的东西,例如Martin Fowler最推崇的敏捷方法之类,感觉很好。像敏捷建模(agile modeling)、重构、XP之类的技术,体现的是软件工程思想,又离低级实践很近,比较容易为程序员所接受。例如XP,它不怎么讲一套一套的大道理,只告诉你怎么设计、怎么编码、怎么测试,就比较容易看懂。直到现在我也还是看不懂某些软件工程书(包括大学里的教材),像CMM之类的更是敬而远之。不过我也翻译了两本软件工程方面的书:一本《最后期限》和一本《系统重构》(台湾版),感觉吃得很透。我想,自己的现象大概有一定的代表性:程序员不是不愿意接受软工思想,只是被那些一本正经的软工书给吓倒了。当然,这里面有程序员经验不足的原因(中国的程序员平均从业时间只有4年,美国是14年)。当然还有学校教育的问题。仅以我的经验来说,学校的老师从来都没认为软件工程是什么“实践性很强”的课。其实要培养软件工程的素养,真的也不那么难:两个人一起做做pair programming,每个模块编码之前先设计测试用例,有空的时候做做refactoring……从这些训练中得到好处了,自然也就有软件工程的素养了。

 Adams:软工书籍的不易于理解还有一个风格和导向以及求学认知的问题。国内的部分图书、教材与其说是诲人不倦,不如说是形而上学、拖沓冗长。记得一位前辈谈起,“中国的数学教材,两三页纸横跨上下两三百年。”姑且不论这种观点是否有失偏颇,相信许多莘莘学子也会有这样的困惑“教科书太过抽象,不知道在说什么”。记得,在学习汇编语言的时候,当时颇流行一本“经典”教材。若干年后,偶然翻到一本外文原版的书籍,才知道原是减头去尾,断章取义,把前人浅显易懂的文字“抽象”“升华”——无言以对。 CMM等学术经典在于它能够提供一个框架,虽然太过简练。而许多软件工程的书籍,如《人月神话》、《软件工程:实践者的研究方法》恰恰填补了理论与实践之间的空白,至少能为读者切实实践提供真正的指导。《设计模式》、面向对象等数据则从软件开发的角度提供了过程(工程)的载体。正所谓,工欲善其事,必先利其器,另外还需要思想的指导。软件工程就是起这样的作用,不过正如马列主义思想的诞生一样,都需要不断地实践、实践、再实践。这的确是一个长期漫长的过程,没有其它捷径。

 Newdream:我非常同意汪颖关于风格和导向的见解。的确这是不容忽视的问题。国内的专业书籍和教材八股风格居多,引经据典,却很少有自己的研究成果和实践经验。软件工程方面亦然。当然,这也和学术风气不好有关。好在现在是市场经济的时代,读者对于作者和图书有最大的选择权和投票权。特别是大量优秀外版图书的引进,将对国内的学人和作者产生巨大的冲击。关于软件工程以实践为本的导向,这是一个十分重要的观点,对大家如何去学习和掌握软件工程的理论和方法有着积极的指导意义。一般,我会建议入门者先学习一两本基础教材,建立软件工程的概念和框架体系。计算机专业的学生可以直接阅读《软件工程:实践者的研究方法》,不过这本书也不是万能的,国外网站上有不少读者批评这本书只适合作教材、拿学位,对实际开发指导不够。如果作了程序员,还可以边工作边读一些实践性很强的开发指导书,比如《[ISBN]7-111-10537-0[/ISBN]》、《Applying UML And Patterns (Second Eition)》、《Systems Analysis and Design Methods(Fifth Edition)》等。值得一提的是《Systems Analysis and Design Methods(Fifth Edition)》采用案例教学法,非常易学易用,高教出版社有影印版,价格便宜,原汁原味。这些书将伴随你在实践中解决问题,不断提高你的水平。有了程序员的经验,再读《统一软件开发过程》、《设计模式》、《人月神话》等名著才能真正掌握设计开发的要旨,领会软件过程的精髓,进一步铺就通往系统分析员和项目主管的金光大道。总之,程序员要提高自身的开发水平,决不可能通过阅读几本软件工程经典名著就可以一蹴而就。学习——实践——再学习——再实践才是唯一的成功之路。所以在不同的发展阶段,要选好适合自己的软件工程图书,决不能好高骛远或人云亦云、盲从盲信。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值