ARTICLE · 1105997
软件工程没有标准答案,《面向对象与传统软件工程》这本教材难得地没假装有
软件工程没有标准答案,《面向对象与传统软件工程》这本教材难得地没假装有不知道你有没有过这种困惑——学软件工程的时候,一会儿讲瀑布模型,一会儿讲敏捷,一会儿讲面向对象,一会儿又讲结构化分析。每个知识点单拎出来好像都能懂,但放在一起就打架:到底该用哪个?哪个是对的?我以前总觉得,肯定有一本教材能告诉我“正确答案”,直到翻完Schach这本《面向对象与传统软件工程:统一过程的理论与实践》,才发现它给我的不是答案,而是一种更坦白的姿态:这些东西都还在用,都还有道理,你得学会在它们之间做判断。 
这本书英文原名Object-Oriented and Classical Software Engineering,中文版由韩松、邓迎春等翻译,机械工业出版社出版,属于“计算机科学丛书”。作者Stephen R. Schach是范德比尔特大学计算机科学系副教授,1973年获开普敦大学应用数学博士学位,著有十余部软件工程教材。第6版出版于2006年,424页,核心变化是“结合了统一过程,并深入介绍了UML”。豆瓣评分6.6,13人评价,四星占比46.2%,一星占比30.8%——典型的教材式两极分化。 豆瓣上有条短评说“内容比较杂”,这大概是很多人对这本书最直接的反应。 但这个“杂”其实是有意为之的。这本书的结构分为两部分:第一部分讲软件工程概念(生命周期模型、软件过程、团队、工具、测试),第二部分讲生命周期各阶段(需求、分析、设计、实现、维护)。它没有把传统方法和面向对象方法拆成两本书,而是把它们塞在同一本书里对照着讲。 第3章“软件过程”是这本书最核心的一章。它把统一过程作为主线:开始阶段、细化阶段、构建阶段、转换阶段,然后是需求流、分析流、设计流、实现流、测试流。统一过程在这里不是一种“新方法”,而是一个容器——传统方法有的东西,它装进去;面向对象方法有的东西,它也装进去。它不宣布谁对谁错,它让你看到:这些方法在同一个流程框架里各自占据什么位置。 这本书有一个被很多读者忽略的设计:它用了两个贯穿全书的实例研究。一个是Winburg小型实例研究,一个是野鸭拖拉机公司小型实例研究。 Winburg讲的是一个理论上的软件开发过程,用来解释“教科书里的流程长什么样”。野鸭拖拉机公司则是一个更接近真实场景的案例——有客户、有需求变更、有交付压力。两个实例交替出现,一个负责把概念说清楚,一个负责把概念弄脏。 这个设计的意义在于:软件工程教材最怕的事情,是读者看完之后觉得“道理都对,但跟我没关系”。两个实例的存在,让那些抽象的阶段划分、工作流、制品类型,都有了具体的落点。你不需要自己去想象“需求流到底长什么样”,书里已经有一个正在发生的需求流摆在面前。 这本书的一星评价占到了30.8%,这个比例不低。考虑到它是一本教材,低分很可能来自“必须读它”的学生——被指定教材的体验和主动选书的体验,本来就不一样。 但换个角度看,这本书有一个章节在同类教材里被严重低估:第15章“交付后维护”。 大多数软件工程教材把维护放在最后,简单带过。但这本书把“交付后维护”当作生命周期里一个正式的、有分量的阶段来讲。第1章里专门有一节叫“维护的传统和现代观点”,讨论“为什么维护在传统软件工程里被当作二等公民”。如果你做过任何真实项目,你就会知道:一个软件写完之后,真正的麻烦才刚刚开始。需求变了、环境变了、当初写代码的人走了,这些东西教科书里不讲,但工作里天天遇到。 这本书把维护郑重其事地写进去,说明作者知道软件工程的核心难题不在“怎么开始”,在“怎么不烂掉”。 如果你是被指定教材的倒霉学生,这本书不会让你轻松过关,但它至少没有骗你——它把真实世界里的“杂”摊开来给你看。如果你已经工作几年,想回头把软件工程的知识框架理一遍,这本书值得放在手边当参考。它不给你标准答案,它给你一堆需要自己做判断的场景。而做判断这件事,恰恰是任何教材都教不了、只能靠自己在坑里爬出来的能力。这本书的用处,是让你掉进坑里之前,至少知道坑长什么样。 互动问题:你觉得“传统方法”和“面向对象方法”之间的争论,到今天还有意义吗?还是说它们早就被“能跑就行”的现实吞掉了?评论区聊聊~ 如何获取电子版,后台回复【电子版】 

关于这本书
它把“统一过程”当黏合剂,而不是新口号
用两个“小实例”把抽象概念拽回地面
豆瓣6.6分背后,有一条被低估的价值

(本书思维导图)