要想了解世界,就必须亲自来打造它。
—— 帕韦泽(Cesare Pavese)
国庆假日期间,我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过,每每在被问到给在校计算机专业大学生的学习建议时,我都会推荐这本在教育界引起广泛关注、旨在推动中国现代软件工程教育改革的教材。
我当年没有机会接受这么有体系且现代的软件工程教育,这一定意义上成为了走向软件领域更高殿堂的阻碍,虽然有一些吃亏上当后长的见识和东一下西一点偷学来的、经常会相互打架的草莽经验,但邹老师写的这本书面世后,我如获至宝,曾经写下170多页的读书笔记,并给当时我所带领的研发团队及周围的朋友们分享,所以在我看来,它不仅仅在学校教育中有巨大的现实意义,对于很多像我们这样的已经走上工作岗位甚至工作很多年的人,也有很好的参考价值。
构建之法是什么
这本《构建之法》一版再版,可见其受欢迎程度之高。我有幸跟邹老师成为同事,但早在我加入微软之前,就因为看了他第一本书《移山之道》后主动写信讨教,承蒙不弃,后来也一直保持联系。
正如我在开头处引用的这句话 “要想了解世界,就必须亲自来打造它。”,我们所处的世界、我们自己(不管是物质层面还是精神层面),其实都是一点一点构建出来的。邹欣老师有超过、在世界顶级公司从事大型软件研发的经历,更是不可多得的既能传道授业、又深谙合作之道的人才,他通过三本书给我们构建了一个“如何构建开发复杂软件” 的知识结构。
软件开发能力 = 软件工程能力+程序构造能力
移山之道。我第一次看到这本书的感觉就是:“哇,技术图书居然还可以这样写啊!”。这本书用多个丰富生动的角色,给读者呈现了一个虚拟的软件公司及其日常发生的故事。这本书我个人觉得是构建之法的雏形,只是当时在工具应用这个方面着墨较多。
编程之美。这是邹老师和几位同事一起编写的微软技术面试心得,干货满满,有大量的算法案例。这一本书,强调的是程序员的个人建设中最为核心的能力:算法和编程能力。
构建之法。这本书则是真正成体系的软件工程教材,他利用业余时间在数所高校进行了长达6年的软件工程教学实践,总结出了在16周的时间内让同学们通过“做中学(learning by doing)”掌握实用的软件工程技术的教学计划,得到了高校师生的积极反馈。在此基础上对软件工程的各个知识点和技能要求进行了系统性整理,形成教材。本书共分17章,对照美国ACM/IEEE 新出版的计算机科学教学指导(Computer Science Curricula )中的软件工程部分,这本教材覆盖了其中大多数Core-Tier 1和Core –Tier 2的内容。可以说,全书对软件工程内容的覆盖不逊于任何一本现行的教材,同时讲述了业界最新实践方法。
构建之法是怎么构建出来的
构建之法已经不仅仅是作为一本书,更是现代软件工程教育的一个有益实践。在清华大学首次实践后,从至今,经过北京航空航天大学、福州大学、集美大学等三十余所学校的不断迭代与改进,现已形成了一套成熟的软件工程课程教学体系,覆盖了软件工程和编程语言的教学。该教学体系有下面的特点:
练习量大, 内容多:除了大量的代码练习,还有大量的博客写作练习。
结构紧凑:个人项目/结对项目/团队项目紧密配合, 能在16 周讲完,针对8或12周的教学长度,也有对应的配置与组合。
理论和实践相结合:讲现代理论,同时结合体现理论的工具,例如:要求所有代码使用Git和Github进行管理
真实的团队开发:要求使用原型设计工具设计项目,使用团队开发工具管理任务分配,使用燃尽图进行进度管控、等等一应俱全…
面向实战:强调“做中学” , 团队项目公开发布,使用用户数量与用户的真实反馈作为评价项目重要的标准。
学生助教+企业助教模式,学生助教熟悉课程,能够协助老师,与学生充分互动;企业助教则经验丰富,视野开阔,能使用工业界中的鲜活实例解答学生在实践中的疑问。
鼓励探索:鼓励学生“动手实践,自己摸索,提出问题,解决问并总结, 从实践中,从同伴中,从思辨中学习”。
在底的“第一届构建之法软件工程实践教学论坛”上面,邹老师分享了这十多年来的历程。
我这里还想给大家分享一点我的观察。这本书以及它所倡导的软件工程教育改革目前所取得的一点点成功并不是偶然的,正如所有的大型、复杂软件的成功必有缘由一样。它至少拥有如下的成功要素
社会需求明显,改革适逢其时。任何的改革,都是讲究时机的,教育的改革尤其如此。当年是教育部和微软研究院合作的一个契机,邹老师作为特派的专家到清华开展软件工程的实践,由此找到了一个切入点,他通过不懈的努力,不仅得到了中国科学院院士及国务院学位委员会委员的支持和认可,更带动了一批同样有想法的老师和学生,得以持续把这个工作深化下去,星星之火渐成燎原之势。
核心架构师或主程的能力超强。如果拿开发软件来说,邹老师就是这整个工程的架构师或主程。虽然软件工程可以从一定意义上降低对“超级巨星”的依赖,确保大部分软件项目的水准在平均线以上,但毫无疑问,拥有一个能力超强的架构师或主程,则肯定会事半功倍,更何况邹老师的能力可不仅仅是软件工程呢。
项目团队强大,运营有方。我必须强调这一点,是因为我对于邹老师背后的策划、出版、运营团队也很熟悉。他们的口号是“服务能人中的忙人,忙人中的能人”,他们做了很多专业且细致的工作,让架构师设计的架构能真的得以实现。
构建之法所带来的成效
构建之法是一个为期16周的现代软件工程教程,要检验它的成效,就必须由学校老师和学生来发言。我找到一份材料,是北航计算机学院的罗杰老师在“第一届构建之法软件工程实践教学论坛” 上面所做的分享。
罗老师分别从几个方面总结和展示了他们学院的课程改革成果。
软件工程教育是一种综合素质培养,罗老师还特别总结了对学生的升学、科研、实习和工作等方面的影响。
我对构建之法的展望与思考
如果按照工程的方法去构建软件项目,则其成功的机会将远远大于没有采用软件工程的项目。构建之法是关于现代软件工程的知识体系,这本书必将在相当长的时间内对中国的软件工程教育产生积极和深远影响。
另一方面来说,时代是在不断地发展,它也给我们提出了越来越多的新课题。我做如下的展望,同时也有一些思考,给邹老师及大家参考。
当今的世界是一个技术驱动和数据驱动的世界,而人工智能(AI)大行其道也是很自然的。软件一方面要体现出来越来越易于使用的体验(对最终用户,或者对前端开发者),一方面则体现出平台层面尤其是底层后台会越来越复杂。
软件服务模式的变化,随之而来,对于软件开发者来说的要求也会发生变化,总体来说,编写软件会越来越容易——至少看起来是这样——谁都可以马上写出一个“软件”来;同时,一个残酷的事实就是专业的程序员的门槛将越来越高。那么,这就提出了一个命题:对于这两类软件开发者,他们对于软件工程的需求是否有不一样?是否需要或者如果针对他们有不同的方案?
如果以后有 AI 参与编程,对软件工程是否有什么新的挑战?
不光是软件服务模式在发生变化,软件构建和交付模式也在发生一些变化。在《构建之法》中有对敏捷流程和MSF(Microsoft Solution Framework)的精彩阐述,而现在几乎所有的软件项目都在想办法DevOps了吧。不知道在新一版的构建之法中,是否会考虑这种变化?
文末福利
感谢你认真读完这篇文章,欢迎大家提出反馈意见。 希章原文的福利请阅读:现代软件工程的《构建之法》
我的《Office 365 开发入门指南》的介绍,有机会请参考《Office 365开发入门指南》上市说明和读者服务
如果觉得《现代软件工程的《构建之法》》对你有帮助,请点赞、收藏,并留下你的观点哦!