那些年我们一起逃过的软件工程课
2016年阅读了邹欣老师的《构建之法—现代软件工程》,刷新了我对大学时期软件工程课程的认知,对它是那么地接地气而感到无比的亲切,特别是在我走出学校进入公司参加实习与正式工作加起来的3个年头后,回头看看这本书,觉得更像是一本提前告诉你应该怎样成长的导引。刚好上个周末和我的研究生导师,以及一些师兄师弟一起吃饭,交流技术与人才培养,我不禁回想起邹欣老师这本书对我的影响,我又想起当年我曾经逃过的软件工程课了。此文并非我原创,我只是内容的总结和搬运工,以下内容皆为邹欣老师所写。
一、大马哈鱼洄游模型
相信大家在大学阶段都学过软件工程,但学完总觉得好像学了很多,画了很多图,写了很多文档,但又好像啥都没学到。计算机/软件学院的老师们也总是抱怨,软件工程这门课看似容易,实则太难,老师们反映的问题通常有以下这些:
而在事实上,现实世界中,大部分软件工程师的职业发展好像刚好与瀑布流程刚好相反。
对于以上的实际流程,我个人就真实地经历一遍。记得在S公司实习时,老板首先让我维护一些已有系统,并小打小闹地改一些存在的Bug,然后小规模地发布补丁。然后渐渐地开始重写或新增一个较小的模块,自己开始写很多代码和单元测试。然后渐渐地,新版本的开发工作来了,于是开始估计新版本的需求实现难度,从设计到开发,再到单元测试与QA测试,最后发布上线,然后又开始了维护。
记得在软件工程中我们经常听到两个关键词:Alpha阶段和Beta阶段,其实在软件工程师的个人发展中也存在这样两个阶段:
如果将这两个阶段应用到课程教学中,它看起来更像是从瀑布下方一步一步上溯到源头,然后又从源头流下去,邹欣老师叫它“大马哈鱼洄游模型”。
二、心目中的师生关系
对于大学专业课程的学习,特别是像软件工程这种综合专业课程,正如邹欣老师所说,我们需要明确要求的师生关系是什么?
(1)餐馆/食客
一些学生说,我既然交了学费来上学、就像进餐厅一样,吃饭,想吃多少,想吃什么,我说了算。如果不喜欢,就去另一个餐厅就好了。上课能这样吗?在饮食行业,顾客可以拍拍屁股走人,在一些学校里,也有不同的老师上同一门课,同学们可以根据老师的介绍选择适合自己的老师,但学生必须要在一定时间内做出选择(必修课),老师掌握着最后给学生的分数,学校则掌握着毕业证。所以不能把餐馆/食客的关系照搬过来,学生们不但不能成为主动权的顾客,反而会被人以分数/学位/毕业证相要挟,成为下一种关系的弱者。
(2)老板/雇员?
在学校里,很多学生都把自己的指导老师叫做“老板”,学生编程打工仔或打工妹。不光有大老板,还有小老板,因为大老板太忙,平时都是小老板在管理。学生虽然是“雇员”,但是并没有相应的权利,倒像是一个“长工”。这样的关系其实并不利于教学相长。
(3)保姆/幼儿?
另外一种情况,老师像保姆一样,为学生操办了一切,把课程内容煮成婴儿食品,一勺一说地喂食。同学们有什么问题,都去找老师搞定。学生把老师反复咀嚼过的东西在咀嚼一遍,这个模式与我们所提倡的“做中学”(Learning by Doing)的模式有很大差别。
(4)哥们/哥们?
还有一种情况就是,老师与学生心照不宣一起混,“你对我好,我就对你好”。这里有一条新闻:
(5)狱警/犯人?
老师想法设法让学生来上课(点名、突击考试、指纹打卡),学生则想方设法地逃课。学生视上课为坐牢,巴不得早一点解放。对于一些同学来说,老师就是自己和“自由”之间的一道障碍。但是,没有任何约束的自由真的是大学生需要的吗?
看了这么种师生关系,那么理想的软件工程课程(或者说专业技术课程)的师生关系是什么?是“健身教练/健身学员”的关系。
我们可以从各种各样的健身房中看到这样的关系,在这种关系中,是谁想要提高自己的水平?是那些学员,他们的想法得足够强烈,他们才会花钱去参加这样的健身活动。在健身活动中,谁要做各种运动,谁要流汗呢?是学员。谁在这个活动中对别人进行批评指导?是教练。那为什么教练可以这样做呢?因为教练有下面的资源。
- 教练是很有经验的身体力行着,并且有足够的理论知识。
- 教练有一套训练计划和各种练习方法,教练(场馆)有仪器、工具、设备,不是每一个人都打算在家里放一套各种重量的哑铃和杠铃。
- 教练可以随时指出学员的进步和不足,给予具体指导。
- 教练能够召集到一群有相似基础的队友,这对有些类型的锻炼是很重要的。
教练和学员的关系一旦确定了,这就好办了。每一个来学习的学生,都是想学好专业技术课程的来的,各人的先天条件不同,目标也未必相同。有些同学想成为改变世界的一流程序员,那老师就会以世界一流的标准来要求和评价学生。
- 谁要在这门课程中写代码,做实验,找需求,修Bug?→是学生,不是老师。
- 谁要看各种与此课程相关的书籍、博客,并定期报告?→是学生。
- 谁给各个学生设计练习,并回答疑问?→是老师和助教。
- 如果学生的努力低于既定目标的要求,谁会批评这个学生?→是老师和助教。
这时有些学生会说:老师,你讲课特别好,我很想提高,但是我太忙了(忙着写其他课程作业,忙着复习重点期末考试,忙着各种课程设计,忙着谈恋爱,就是没空鸟你),没时间写程序,我就来听听......
这种情况放在健身学员的类比中就会是这样:
教练,你讲得特别好,我特别想减肥健美,但是我太忙了,没时间练,所以我办了卡,放在钱包里面,有时候拿出来看看......
忽然感觉这TM好像当年的自己,哈哈!
三、他山之石课程改革
邹欣老师在清华大学和北京航空航天大学以及微软亚洲研究院实践过多次软件工程的改革和与美国工程教育接轨,写出来《构建之法》一书。在此我也希望我的母校CUIT参与这项改革,并以《构建之法》一书为基础,让那些我们一起逃过的软件工程课变为那些年我们一起追过的软件工程课。
(1)课程安排
(2)授课建议
四、从课程到企业导师
从去年开始,我的母校CUIT计算机学院开始了企业导师的模式,也就是说在本科生的培养中,引入一些企业中的一线程序员/设计师等,作为教学师资的补充力量,带领学生少走弯路,往更接地气更与企业接轨的方向发展。我觉得这也是一个非常好的实践,就我所知,目前大部分院校中的老师们都在忙着搞科研,评职称,对于教学所花费的时间少之又少(当然,也有一些老师执着的坚持在教学一线并以提高教学水平为荣,我深深地向这些老师鞠躬)。当然,由于我个人的时间冲突,第一期我没有参加。
其实从以上理想的师生关系和他山之石中,我说说我心目中的企业导师。首先,他是一个教练,他有丰富的实战开发经验,能够在高层为学生们指引方向。其次,他是一个学长/学姐,他有丰富的个人成长经验,能够在帮助学生们在业界道路上慢慢(请注意我说的是慢慢,而不是迅速,因为欲速则不达)成长。最后,他是一个有“情怀”的人,记得吴军博士在硅谷之谜中曾经写到:在世界范围内,能挣大钱的公司比比皆是,而能改变世界、改变人类生活的伟大公司却不多。但是,在硅谷,这种伟大的公司却在不断地涌现,这和硅谷拥有很多具有世界情怀的梦想着有很大的关系。这也让我了解到世界上真的有那么一些为了将世界变得更美好的理想主义者,他们做事情真的是为了一个梦想,而不仅仅是从某一个市场挣到钱。用吴军博士的话说:是否具有这样的情怀,决定了一个人办公司能走多远!同理,是否有这样的情怀,也决定了一个学生在IT这条路上能走多远!
有时我时常在想:如果我做企业导师,我会怎么带我的学生?今天借着软件工程课程,我想我会让他们经历接地气的软件工程,为成为一名合格的软降工程师打下准备。为什么是软件工程而不是其他课程?因为我觉得软件工程的“综合”(请注意我说的是综合,而不是技术层面)复杂度其实远远超过了其他课程,记得在《人月神话》中曾说形象地说到软件工程的复杂度是没有银弹的。在实际工作中,我们常常是做了很多,但却收获很少,而这很多时候恰恰是我们在软件工程这条道路上不停地在补坑。
上周天在CUIT附近的酒店应老师的邀请,和许多卓有成就的师兄师姐,学弟们一起交流,受益匪浅。特别是还碰到了我以前公司部门的老板,甚是惊喜。希望我们CUIT计算机学院能够在校内老师们和企业导师们的共同努力下,让CUIT贴上一个计算机强校的标签!同时也希望,下一期的企业导师中,我会有时间加入,也希望会有学弟学妹们选我,哈哈!
参考资料
邹欣,《构建之法—现代软件工程》