邹欣老师于2018年7月14日上午在东北师范大学与参加过构建之法(现代软件工程)课程学习的同学座谈。邹老师概述课程后,同学们自由提问,邹欣老师当场作答。以下,共9段问答,根据现场同学实际的视频整理而来,并保留了口语的特点。整理者都是东北师范大学计算机系的研究生,冉华、刘淑霞、代秋彤、高远博。
问答一 初始的动机。
整理人:冉华
学生1:杨老师是我从本科的时候,因为我跟着亮哥,也就是齐嘉亮学长在信息化办做事,所以有机会接触到。因为我们学校的每个专业开课是需要一定的人数,当时是亮哥,然后还有郑蕊师姐和实验室的师兄帮老师找同学来上课,而我当时因为认识亮哥,那我就跟着来上课了。
邹欣老师:对。
学生1:当时接触这个课之后,我收获挺多的。第一收获就是让我自己对软件工程有了一个兴趣。因为那个时候的我是很糟糕的,自己基础也不好,接触项目也很少。后来在杨老师那里受到了很多折磨,现在想来还是很痛苦。而一直令我不解的一个疑惑就是,老师最开始为什么会有一个想法,也就是到各个高校推行构建之法,出于一种什么目的,又或者说是因为哪些经历而让您决定了到各个高校去推行构建之法,我很好奇您的动机。
邹欣老师:那我刚刚讲的你都觉得不是解释?那不够解释?
学生1:对。某些事是您突然想到的,还是?
周筠老师:这些在刚刚已经讲过。
邹欣老师:没关系,我们再讲一下。
学生1:但我觉得,就仅仅是出于,比如微软面试这类事就让老师产生推行构建之法的想法,我觉得这些事作为理由还不够强烈。
邹欣老师:对。我从一个软件工程师,变化到一个老师,后来是一个布道者,推广一种较新的《软件工程》讲课方法, 当然有一些主要和次要原因。 我们当时跟清华大学有合作,领导让我讲软件工程这门课,这就是一个主要原因。我讲了之后,大家反应还可以,我就继续讲下去了。 并且我在不同的学校中发现现有的教学方法还有很多可以提高的地方, 我就想把好方法介绍给大家,所以现在有三十多个学校的老师都来参与改进的工作。 有了这个社区之后, 我更觉得要把这件事情做好, 觉得这个动机还不够强烈吗?
学生1:哦,我明白了,谢谢老师。
问答二 推广和协作是教学的一部分,软件也是如此。
整理人:刘淑霞
学生2:我认为软件工程这门课很好,这是一种新的教学模式或者说是一种新的教学改革,这不同于以往的教学培训方案。您是一个教学研究者,是以教授这门课为主要目的,还是以推广这门课然后让更多人受益为主要目的?我想问的是您是如何权衡这两者之间的关系,是如何研究这门课让同学更容易学习,还是研究如何将这门课推广到全国各大高校?
邹欣老师:简单地说,是分享如何能有效地讲好一门课。在讲课和分享的过程中,你会发现与人合作是一个非常重要的技能 --- 但是大学生没有得到训练。 学校也鼓励帮助同学,要有集体主义精神,等等。但如果在高考考场上,只有你一个人神志清醒,别人迷糊了,这时候,你不能帮别人,因为那是作弊。 而且别人考试失常对你个人是有好处的。 我们从小学一年级到高三、大学几乎都是这样,独立考试独立完成任务,不能帮别人。那你怎么能突然毕业到了公司就马上集体主义、马上合作呢? 我估计因为你从来没有得到这种训练,所以你是不会这么做的,或者做得不好。
在公司的项目中,大家都是竞争与合作的关系,就像球队打球一样。我们一起把项目做好,但是最后报酬是有高有低的。在项目团体中你不希望别人都很烂,只有你一个人很强。如果这样的话,整个团队就失败了,你也没有得到好处。 在团队中,如果我觉得某个人做的不对,我是应该给他反馈让他做好,而不是贬损他、骂他或者背后说他,或者等着看他的笑话。什么是有效的交流手段呢?最基本的就是一对一的交流, 实际上就是结对编程这个思路。所以在软工课上,我们先做个人项目,再做结对项目,最后做alpha/beta 版本的团队项目,中间项目换人。这都是创造机会让大家练习交流能力,协作能力。
要把这课教好,就得研究教学规律,还得了解学生的心理。最初我是对教学规律懂得非常少,在实践中了解了一些,也看了一些关于教学的书。 你说这门课是一个创新,事实上也不全是。这个课在国外好的大学就是这么教的,已经教很久了。把一个看起来比较好的教学方式引入到国内,并且能够落地,这也算是一个创新。因为有很多好的事情引入到国内实际上并没有落地。 我们要分析原因,但是光靠情怀,光靠钱是不行的。这个原因大家可以分析一下。
学生2:好的,谢谢老师!老师我还想问下,我们国内有多少所学校教授了软件工程这门课?
邹欣老师:学校一年的课程分为春季学期和秋季学期,按照一个学年来算,每年有不下40个学校教授了这门课,学校从清华北航到三本,有些职业高中也开了这门课。
学生2:好的,谢谢老师!
问答三 时间,20年的准备
整理人:高远博
学生3:邹欣老师写作这本书花费多少时间,他怎样平衡写作与工作之间的关系。
邹欣老师:当然花费了很多时间。
我后来讲的另外一门课叫现代程序设计。就因为我意识到说这些人如果没有经历过很好的编程的锻炼的话他是不可能做好软件工程的。所以我们在北航也开了《现代程序设计》这门课。 没有教材,我一上课就说: 同学们,让我们一块来做这道题,第二节课, 还是做题练习。第一节课时我们一共有70个人选课,经过做题之后,只剩下20个人听,好多同学走掉了。这样,十节课我们就做了十道题,难度由浅入深。后来我就不讲这节课了,因为反应比较差。过了半年有的同学反馈说, “邹老师,正因为上了这门课,我对软件和编程有较深入的理解。而且我现在要写简历申请学校, 我列出了自己的成就,大部分有分量的成就,都是在这门课上学到的。 我现在意识到这个课的价值了。”
我想:这不是一个很好的结果吗? 当然提早退课的学生没有获得这个结果。
可以说,在我工作的前20年,我都在为这个目标做准备。因为我一直在做项目, 把做高质量项目的方法交给学生,就好了。
但是,也有别的公司的工程师去学校讲课,大都是失败的,因为学生不做作业。我看到某个有名的公司的工程师去学校讲课,他很有情怀, 开始讲这个大牛是这样做软件的,那个大牛是那样。因为他觉得一旦讲了那些大牛的故事学生就应该很激动,就应该开始写代码,对吧。但是同学们就都非常茫然,也没有行动。
光靠情怀是没有用的,因为教学是有规律的。他不能靠打鸡血,靠喊口号式的教学来取得扎实的成果。
然后写书呢,写这么厚的书,因为我刚开始07年写过一本《移山之道》, 所以这个是第二本,和第一本相比,改了很多东西。 这里面的很多素材是我生活和工作中碰到的,所以我很有感觉,而不是去一个很不熟悉的领域搜集资料。生活和工作给我无数多的灵感,有意地长期整理,你就可以用它们做一些事情。 我们现在出版业也比较灵活,编辑们给我很多支持。 这书正式的版本是第三版,但中间可能改了有十版之多, 我们随时发现问题随时可以改进,然后就可以印刷,印刷虽然还是这一版但内容会有些变化。 不断改进的结果是读者评价还不错。从07年到现在已经11年,11年才写了一本书,你这样想时间也比较长,但是结果还可以。
问答四 教师与学生/健身教练与学员/导游与游客
整理人:刘淑霞
学生4:我的代码能力基础不好,看到练习题题目就写不出代码,看到答案就会做了,自己想不出来。像我这样的情况,除了刷题,我还应该做些什么?
邹欣老师:这个同学的提问让我想到了一种模式,这个模式很有意思,就是导游和游客的关系,这个关系比我们推崇的 “健身教练和健身学员” 的关系差一个等级。你看游客从来不流汗,有一个描述游客的顺口溜:上车睡觉,下车尿尿,到了就拍照,回家全忘掉。在导游和游客模式中,老师会说 “同学们快来领略一下软件工程靓丽的风景线!” ,
同学们就会这样说,“哦,我看到了,这样啊,有例子吗?看到例子就会做了,自己写不会,没想明白”。 然后就去下一个风景点。
这位同学就是处于游客的状态。到了旅游点,你和导游说, “我太累了,不想下车,可以在车里等吗?”
很多课程就是处于导游与游客的状态,学生仿佛领略了各种专业课的大好风光,至于你真正学了什么就难讲了,游客状态的学生就会和每个知识点合影,而游客状态的老师对期末考试的要求也会比较宽松。像这个提问的学生呢,就得多练,比如健身,光看健身视频没用,得自己亲自去练。这个学生可能把自己和老师的关系摆在了导游和游客的关系。东北师大就像知识海洋中的旅行团,大家要想健身获得能力,就要多流汗,多练,多摔跤,得达到这种状态, 才能真正学会。
问答五 最小代价
整理人:刘淑霞
学生5:我现在是研一嘛,就一直想着,就是在研究生的课程和实践项目,这些应该如何权衡?
邹欣老师:你是说这两者有矛盾吗?
学生5:对,因为可能是精力有限的。我应该是把重点放在开发项目上面还是说重点把精力放在研究生课程上。
邹欣老师:你现在是跟着老师一个实验室做东西吗?
学生5:对。
邹欣老师:我觉得这个问题挺好。实际上,你应该问你的导师和你的老师,对吧? 因为要沟通,对不对?比如说,你问你的导师,请你给我讲一个最小的努力,什么程度是最小的努力,我就可以从你这里拿到一个学位。而这是很自然的,你心里一定在想这个问题,对吧?因为你精力是有限的,因为你还要享受生活。你有女朋友了吗?
学生5:有。
邹欣老师:对,那还要照顾女朋友,对不对?同时你也可以问这个老师,比如上这门课,老师,那你这课中什么是最低的要求,我就可以得到一个“过”。
这个我觉得很正常,难道不应该问吗?一旦你有了疑问,就有了很多假设,我要二十四小时都来实验室才能过吗,那你女朋友也受不了。可能老师也不能理解,我不就是讲这么一门课吗,你非得跟我这么起劲。所以你一定要了解双方的期望值是什么,那导师也对你有期望值对不对?所以你应该讲出来,那导师你对我有什么期望值?我觉得这应该摆在明面上,对吧?一个礼拜来多少次实验室,如果他说七天的话,那老师,我还有个女朋友,那要怎样?我女朋友可以来吗?你一定要了解好,否则就会有很多矛盾和误解。你觉得你做的很不错,但导师觉得你做的特别差劲。
当然你直接问:“什么是最小的努力让我可以从你这儿得到毕业证”,老师会觉得你这人没有情怀。情怀这件事情,有时候你把它挑明了说,反而让大家觉得很尴尬。那你可以以一个比较合适的方式问,老师会告诉你,什么是最低的要求。然后呢,你也可以问你女朋友,你说我一周应该陪你多少天,最少的时间是多少,你才能继续做我女朋友。你还可以问进阶问题,如果我们关系要再进一层,应该做到哪些点?这个我觉得也可以谈,对吧。挑明了不就更好吗?否则,如果别人忽然对你很冷淡,你也不知道为什么。
学生5:谢谢老师!
问答六 真正的快乐或者持久的快乐,是你克服了困难,达到了一个你以前达不到的状态
整理人:代秋彤
学生6:邹老师、各位老师好,我是第一节软件工程的,是上的杨老师的课。我先谈谈自己对软件工程课的理解。
邹欣老师:两句话,谈谈感想,浓缩一下。
学生6:以理论为基础,以工程为依托,以自律为动力的一门课程。
(一片掌声)
邹欣老师:水平高!
学生6:(学生鞠躬,表示对老师的感谢)。我主要的问题是最后的自律,也就是动力从何而来,我们如何能从各方面提升学生对学习这门课的兴趣。茶话会么,我们就随便谈,我自己想到的一个就是,我也是切身体会么,老师的个人魅力真的特别、特别吸引我(此时老师们赞扬杨老师)。我的切身体会么,就是老师的个人魅力对这门课的,比如说兴趣啊,比如说学生的动力啊什么的,都是有各方面的提升的。然后,我更希望老师能从各个方面和各个维度展现他自己的魅力。
邹欣老师:那这不是健身教练和学员的关系了,这是模特和观众的关系了。
(一片笑声)
学生6:但你,你能和他有一种……怎么说呢,有一种向往,你希望成为什么样的人,希望成为像他那样的人。毕竟是老师讲的这门课,首先我要对这门课有学习的兴趣、学习的动力,再就是希望之后比如技术方面有什么进步,这都是后话。主要就是,首先要把人吸引过来。我就是想问下老师,《构建之法》这本书或者这门课对同学有哪些吸引,之后还能从哪些方面来吸引更多的同学,让更多的同学喜欢上这门课,更有动力去完成一些自己不敢想象的事情。因为当时,说实话我上这门的时候,情绪比较低落。
(一片笑声)
邹欣老师:是不是因为老师导致你情绪低落的。
学生6:不是因为老师,但是是老师把我从里面拉出来的。主要是这门课,不说打发了那种迷茫的时光,而是说从这门课里找到一些对自己的认可。
邹欣老师:好,谢谢,谢谢这位同学。我觉得总结的非常好,我就一点来讲,实际上很多同学在学校里都想把这门课学好,他也希望能度过一个快乐的大学时光,这也是为什么有些同学找了男朋友和女朋友。比如说这个课如果比较容易,你可以得到些快乐,因为很容易就过了,得到了一些惊喜。
但真正的快乐或者持久的快乐,是你克服了困难,达到了一个你以前达不到的状态,学习这门课的过程中是有困难的,学习软件工程这门课也是有困难的。所以我觉得,当我们这些同学坚持上完软件工程的课的时候,他可能会得到一种满足,付出的努力,获得的收获。比如我们的助教,周老师,还有很多编辑,我们的同事,做一些事情的时候也有很多埋怨、不理解,但你克服了这些困难之后,你取得了一些练习成果,会很高兴。
你在大学的时候,比如大学四年或者研究生两年,真的克服了很多困难,将自己提高到了一个比较高的的水平,那这件事我觉得这会是你人生中比较重要的阶段。如果说你很愉快的过完了大学四年,没有人来挑战你,你很多的课都轻松的过了,那也许你是天才,也许你虚度了光阴。大学的课应该都是有难度的,大学就是一个大量训练的学校。比如说,那些大师对于学生来说,大师肯定有魅力,但是你一定要努力,而且是大量的努力,才能成长。最近教育部领导讲,本科是大学之本,另外很多教育界的人士对这方面的有着思考和忧虑,就是说如果把大学当成餐馆的话,就是收钱给别人吃饭,为了讨好顾客而放松很多要求,这其实是不对的。大学就是困难的,我们这课就是会有人觉得苦难,觉得不行,这很正常。
问答七 科学、技术、工程、哲学
整理人:高远博
学生7:我想提个建议就是说,在座的各位可能都是研究生,学术硕士或工程硕士,就是说可能有科研方面的追求,但是说科研和工程这两个可能交集不大,然后我想提的意见就是虽然他俩交集不大但是都有关于做实验的,我希望在软件工程这个书上能够添加一些就是说怎样设计实验,做实验应该遵循怎样的规范这种问题。
邹欣老师:太好了,刚好我这个ppt讲了这个东西(展示课程概念PPT中关于科学、技术、哲学关系的页面)。书里说计算机科学和软件工程是两个东西。计算机科学就是研究长期的真理。软件工程是在短期的各种约束条件下我要做的足够好,是一个各种因素折衷下的解决方案。但是它们不是说是割裂的。伽利略在做望远镜的时候的时候实际他是一个匠人,是一个工程师,但正因为他做了望远镜,他指向了木星土星,这个科学大家他是近代科学的奠基人。打开了一个窗子,哦原来天上的星星是这么回事,然后这个会引起一些哲学的思考,比如地球是不是宇宙的中心,人类是不是唯一的主宰,上帝是否存在。为什么以前上帝没解释是这样一种情况,对不对。所以工程和科学是很有关系的。当你不做科学,那你可以研究,你不做工程或者工程能力很差,当然你可以做一些科学研究,但你的研究是经不起考验的,对吧。那还有一点就是说如果你的工程没做好,对你的科学会产生很大的影响。这是我从知乎上找到的材料,在高能物理方面美国以前想设计高速的对撞机,但是他这个工程没做好,项目花费超了,超了82亿,93年工程被迫停止,然后这个研究的人就没有工程的基础,当然你可以在纸上写写画画,但是你没工程,你不能做实验。 据说现在这个领域高质量的论文都在欧洲,因为那里有高速对撞机, 可以讲,工程没做好,就没有科学的进一步发展。那么也可以反过来问,如果我们要研究长期的客观的真理。你走到师大校园里,你碰到一个计算机系的老师,你问,老师,你发现了什么长期的真理。他有么,(如果)他没有,他为啥没有,他为啥不能做世界一流的研究?
学生7:那个,老师,全国全世界那么多高校,大家都是在做研究,不一定你做研究就一定能做出成果。
邹欣老师:对嘛,他也可以是在探索路上。他探索到哪去了呢?如果你继续深问下去的话,老师可能说,我们正在做一个实验,实验设备和程序不给力,我们做得很慢。以前,在微软的研究院也有这种情况。一个实习生做的项目,演示的时候,只有他操作才不崩溃,别人操作都崩溃。这个实习生走了之后没人懂这个代码,老师只能再招一个实习生再写一遍代码。在这种情况下你会发现很多研究都在低水平重复。刚刚做完低等级,老师有很多想法他要做更深的更高级的,他做不下去了。因为他不会做好的软件工程。
学生7:研究生会比较关心这个跟科研有关的。
邹欣老师:如果你找来一个牛人比如说写Linux内核的,他来我们实验室,你觉得他不能做出世界一流的研究吗?对不对。难道他没有科研想法吗?他当然有科研想法,而且他能做出来。你找一个有很多科研想法但是工程能力很差的人…
学生7:有没有可能一个科学家他有很多idea,但是他的工程能力不太强。
邹欣老师:我想这个科学家也不是不行。术业有专攻嘛,他一定有过人之处。
书上提到深蓝。许峰雄刚开始做这个深蓝项目的时候,当时他是一个研究生,跟你一样。当时大家认为,用计算机打败国际象棋的冠军需要很多理论的突破。但是他觉得这就是一个工程问题 --- 我把这个算法实现的足够快,就能打败国际象棋人类冠军。他做出深蓝之后再也没有人在这个领域发表科学论文了,因为这个领域被他用工程的力量结束了。别人经常吹我设计了一门新的语言,什么逻辑啊符号啊逻辑推理啊。可以完美的解决, 剩下的只是一个实现问题,但是做出来了么?如果你觉得你很牛,你就把它做出来吧。现在的很多计算机的理论研究都是可以做出来的,做出来给大家看看呗。 所以我觉得这个恰恰是我们没有非常好的工程师,没有非常好的工程素养,没有非常好的这种理念,没有正确的认识,导致计算机科学上的许多研究在比较低的水平重复。当然这是我的一个比较武断的看法,你们可以采访比较职业的科学家,看看他们对科学和工程有什么看法。
问答九 领导力
整理人:代秋彤
学生8:我问一个问题,就是我曾经上过这门课,我现在回想起来还满愧疚的。是因为对于这门课程来说,就是团队项目是这门课程的重要组成部分,但其实在一块儿的同学吧,说句不好听的就是各怀鬼胎,就是每个人的志向不一样,他可能对软件开发的兴趣不是那么大。
邹欣老师:那你为什么不用情怀去感染他们呢?
学生8:主要是我感觉我们不是上级关系,自己的口才也没有罗永浩那么好,不能用情怀去感染别人。说实话我交流能力也比较差,所以团队项目该怎么办呢,虽然我们也尝试地开了几次会,但是发现开会总是打不起劲头来,项目进度就会特别慢,然后老师要求项目每天要有一点进度,那只能大部分工作是我自己做的,我就对同学和老师特别愧疚。
邹欣老师:对同学有什么愧疚的,你帮他们做的,他们应该感谢你啊。
学生8:是因为我没有让他们获得更多的参与感和满足感。
邹欣老师:那就是他们都留在大巴车上,你去旅游了,你把所有的景点都跑了一遍。
学生8:我感觉得作为组长,让你的同学获得更多的参与感应该是你的职责,对于老师来说你相当于欺骗了老师,他让你完成的任务你没有完成。
邹欣老师:但是有个团队贡献分,就是你做了所有的事情,你把分全拿了,别人得零分就好了。
学生8:但是你要考虑到你与同学在现实中的关系,你跟他并不是上下级的关系。你如果全给他零分的话……
邹欣老师:所以你又拉不下这个面子。
学生8:对,然后我就问可能在现实企业中也有这种团队协作不太好的情况,我想问一下怎么来解决这个问题。
邹欣老师:这种情况当然有,体现在你怎么给别人一个反馈,比如说他是在偷懒,你不是他的敌人,你不是他爸他妈,你也不是他的老师,你是和他在一块做事情。那你怎么说服他,这是一个能力,你以前也没练习,所以你也没有什么招数。这是一点,软件工程课给你了这个能力。第二点呢,也锻炼了你的领导力。这个领导力是我们在所有的教育中没有锻炼到的,如果你把领导力退化成一个默默奉献的能力,那你可能被累坏了。
学生8:确实比较累,其他组也差不多,只有一两人主要付出,其他人工作比较少。
邹欣老师:所以呢,这个回到老师的角度讲,如果老师有充裕的时间话,他会对症下药,但是他的时间有限。他也不能像刘老师那样教一百多个学生,他如果每天跟每个学生谈一小时,他别的事就不用干了,这个就是现实中存在的问题。所以我们设计了一些环节,比如说贡献分啊,换人啊,对吧。小组不是α和β阶段吗,那你做完α,把你自己换走啊。
学生8:我把自己换走……
邹欣老师:对呀,你就去做别的项目了。
学生8:那当时还有一个问题,就是因为刚开学,大家可能不是太熟,在选人方面,对于每个人不是很了解。
邹欣老师:其实你永远会有这个问题。不太熟,你不好意思说; 太熟,你也不好意思说。在任何时候,你都可以说出来,但是你不知道怎么做。因为这也是一个技能,需要锻炼的。优秀的领导者也不是天生就这样,他也是通过很多锻炼变成这样的。所以呢,你也可以锻炼自己。如果回到那个阶段,你可以说,我要去另外一个组了,那原来的组我就不管了,这叫用脚投票。比如说一个公司很差,东西是你做的,但是你没得到什么认可,那怎么办。你就换工作,换公司,你干嘛还在这待着,你能救他们多长时间? 当然,如果你有领导力,比如说把差的淘汰掉,提高整个团队的能力,也可以。但我们这门课有很多约束条件,可以给低分,但不能中途就把别人都赶走。
所以在正常情况下,你还是可以有一些选择的,困难是好事,那你就锻炼呗。
学生8:领导能力还是需要慢慢锻炼的。
邹欣老师:对,你参加一个足球队,一个健身的小团伙,都会有这种情况。很多人他开始说的很好,但是他后来不出力,很常见。但你不是无能为力,你毕业选择去一个好的大学,去一个好的公司,去一个好的机关,那里的人的素质都是你比较认可的,都想做事情,那你碰到南郭先生的概率会低一些, 可以做有意义的事情。 所以你自己是还是可以选择的。
学生8:谢谢邹老师。
邹欣老师:没事。