编程是艺术,开发是工程
比起一门编程语言,软件工程的入门过程,要难得多。盖因一门语言,其语法、关键字、系统库和常用工具,总是确定而有限的。
而软件工程,作为工程学的一个门类,它肩负着在软件开发的过程中,将种种条件确定下来,将资源安排妥当,使工作过程确定清晰,产出稳定可靠的责任。
这其中的微妙和复杂,往往在经典的教材中也不能充分表达。其中大量与人的协作,与时间的较量,其经验和体会,都是要在实践中才能慢慢积累起来。
这就使得软件工程课程,在学习过程中,常常处于一个尴尬的位置。一方面我们都会宣称它非常重要,另一方面,我们却很难从中得到收益。一方面我们都反对形式主义的软件工程,另一方面因为难以落实,使得我们最终总是在实践中流于形式。
软件工程,作为软件开发的一个基础的知识领域,它的学习过程,也迫切需要一个启动的支点。
在这样的背景下,得到邹欣老师的《构建之法》,对我来说是非常惊喜的事情。这本书很好的解决的这个知识领域“从零到一”的问题。我数了数手头十来本软件工程方方面面的读物,还是觉得,如果你是一个在校生,刚刚开始学习软件工程;或者你是一个刚刚走上工作岗位的程序员,迷惘于如何在形式化的团队开发规程和自负的才华之间找到平衡;甚至你是一个刚刚走上管理岗位的技术领导,第一次从“软件工程的受害者”成为实施者,急于完成角色转换,走上人生巅峰。你都是这本书潜在的目标读者。
Build To Learn 到 Build To Win
Build To Win 是 《构建之法》一书的英文名。这本书很好的阐述了如何逐步改进软件开发过程,邹欣老师将不同的阶段和形态形象的区分为:
• Build To Learn:开发软件,构建系统的目的是做进一步的试验,试图发现客观规律或某个试验方法的优点与缺点。这些项目经常是科研论文的基础工作。
• Build To Show:为了突出地展现某个技术的作用,开发一些演示为目的的软件,这些项目很吸引眼球,经常获得新闻报道,但是功能未必全面。
• Build To Serve:为了服务一定范围的目标用户而构建的工具等,有时以公开的SDK形式发布。
• Build To Win:以在市场上赢得用户为目标而构建的软件。这也是种种科学发现,技术突破最好的试金石。这是我在研究院之外的十余年中做的最多的项目类型,也是这本书的英文名字。
书中有针对性的设计了一个十六周的课表,可以供学校授课时使用,也可以供个人学习者或企业团队实践中估算学习用时。这本书是作者多年在高校实际进行软件工程教学——我们这些同行,都很喜欢看邹欣老师在微博上与学生的互动——的经验总结,可以作为一门课程,在一个学期内完成。独立的学习者,也可以遵循类似的时间线,即从环境和知识准备(代码仓库-测试工具等)到项目规划和组织(由个人软件开发过程开始,引入结对和团队项目形态,以及相关的项目管理和测试工具),再到质量管理、发布、跟踪维护、总结和改进等,循序渐进。
和我以前阅读的其他软件工程书籍一个很大的区别在于,作为教材,《构建之法》的启动过程非常的平滑。有一些读物是按照经典的瀑布模型,从需求分析,概要设计开始——是的,我教过这样的教材。而本书则是从一个微型项目最有可能的起步过程开始:组建团队、准备工具。
从经验来讲,版本管理工具和单元测试工具,也确实是非常适合上手的,这两种工具见效快,学习相对简单,一旦学会,学习者会迅速体验到工程化开发带来的好处:可回溯、可控制、可管理。
在其后,大量的章节用于讨论协作、项目跟踪和控制等环节,书中基本跳过了关于UML的讨论,也没有细致的讨论一个完整的软件项目可能会用到的所有技术。这种取舍非常有必要,也把握的很好。如果深入编程语言或UML这样的方向讨论,会迅速脱离整个软件工程的大范畴,陷入某个局部或者范畴外的某处,难以自拔。
即使对于学校外的学习者,也不应该将这本书视为完整的学习一个项目开发过程的指导,而应该按照这个过程去执行一个自己选择的项目来学习。这样的设定保证了全书的内容专注于软件工程本身的学习,不至于失之繁冗,也可以让学习者从一个技术上对自己比较有利的项目。这个项目所需的技术对于读者应该尽可能比较熟悉,尽量不需要学习太多。毕竟这里我们要学习的是软件工程,而不是编程技术。
书中一个很有意思的地方在于,每一个假设的情景都很活泼形象。事实上我多年以前读过的另一本微软出版的技术书籍,就曾经着重介绍过故事卡片在微软开发过程中的使用。微软的优秀团队很擅长使用这个工具。从我的经验来讲,故事卡也是一个很实用的软件工程手段。它可以作为需求分析的草稿,也可以用来引导思考,建立用例图和概要设计等。即使不将故事卡作为正规工具的团队,个人在工作过程中,建立故事卡也可以很有效的帮助自己。当然有些朋友可能在这个过程中会遇到困难,我的职业经历中,确实比较少见到擅长书写,文笔足够熟练的建立故事卡的同行。但是其实这项技能是可以练习的。只要有心,经过一段时间的训练和联系,普通的工程师也可以写出质量稳定的故事和情景设计。而本书中的情景设计,也可以印证作者对这一工具的运用是比较娴熟的,值得读者学习。
循序渐进,步步为营
《构建之法》热门书评
-
构建之法,运用之妙,存乎一心
15有用 0无用 杨贵福 2014-12-31
构建之法,运用之妙,存乎一心1. 构建之法,存乎一心史学理论与史学史,是把历史自己作为研究对象的学科,前者讨论历史本身所研究的内容,后者讨论历史研究本身的历史。这种对于抽象的抽象的研究,正符合计算机领域 meta... 这样的思想。当年 xml 刚出来时,不少计算机和图书情报的大学生照本宣科地提到,...
-
可否把邹欣老师这个人也给“出版”了?
11有用 0无用 王忠杰rainy 2014-10-02
“软件工程是计算机专业里很难讲的课程之一。面对在软件开发方面经验很少的学生,邹欣老师通过丰富生动的故事和隐喻帮助学生建立软件工程的思维习惯,通过严格扎实的动手训练与考核帮助学生总结归纳自己的“最佳实践经验”。读这本书,软件工程课不再是一门枯燥沉闷的“文科类哲学课”,变得出乎意料的生动有趣。这是IT学...
-
水面下的冰山——读《构建之法》
10有用 0无用 qiuyue 2015-04-07
足球课上,学员们发现教练没有带球,于是向教练询问原因。教练反问道:「足球比赛,场上有 22 名球员,同一时刻一般会有几个人触球?」,学员答「1 个」,教练说,「那么,今天我们就来学习剩下那 21 个人要做的事情」《构建之法》可能是我读过最有用的软件工程书。我已经不再写代码了,但依然翻来覆去把书读了三...
-
匠心独运,干货满满
10有用 0无用 Sirui 2014-11-12
一年半前准备实习面试,曾寻觅到邹欣老师博客上“现代软件工程”讲义来突击学习PM相关章节,而这次《构建之法》出版,通读全书更是受益匪浅。从一个初入职场的PM的角度来看,这本书是走入PM大门不可或缺的读物:其项目管理和产品相关章节既有宏观的介绍,又可运用于实战。而作为PM去看开发/测试的章节,则能进一步...
-
100倍速度前的慢动作
9有用 0无用 nongfei 2015-01-15
周老师请我写下读后感,一直没有写,原因是工作十几年第一距离技术一线渐行渐远,第二距离微软方法论渐行渐远,第三在近期工作无论微信硬件平台还是无人机都是最前沿的领域,没有太多可以参考的东西,基本都是在破坏旧世界建立新世界,对团队同学和自己的要求都是首先“忘掉过去的经验”。看了邹老师的《构建之法》,往日在...