南京大学 邵栋 2016.9.2
昨天给2016级学生介绍软件工程专业硕士培养体系,思考了两个软件工程专业硕士教育问题。
努力学习
大家应当认同,必须投入足够的时间和精力,才能学习到有价值的知识和技能。知识和技能的获取,在智力水平确定的情况下,是和努力程度成正比的。最近几年,“快乐学习”的提法很流行,尤其在大学中。但在国外顶级大学学习过的人都明白国外大学对学生的课业压力有多大,差的国外大学另当别论。
讨论这个问题时,有同学会说,如果教师水平差,我是不是可以拒绝上课或投入精力。是的,我认为教师在教学的过程中的重要责任就是不能浪费学生的时间和精力。教师需要选取合适的教学内容,安排合理的作业、项目、阅读材料。学生最宝贵的东西就是时间,不能浪费它。教师所做的最不应该的事情就是,安排了大量对学生没有价值的学习活动,这甚至比完全不管学生、不上课更差。我们经常能听到老师对教学内容进行辩解,我教授了一个知识(其实对学生没有价值),是有价值的,因为比什么都不学要好。这是非常荒谬的逻辑,如果你和什么都不学相比,即使是学一个当前没有人用的远古语言也能锻炼记忆力。
在现有情况下,每位教师都有很多工作,他们可能无法针对每个学生设计对学生来说完全没有浪费的教学内容,做到因材施教;甚至有些老师的教学态度本身也不认真,所以有一定几率会浪费同学们一些时间。在当前的互联网时代,知识获取渠道丰富的情况下,同学们如果觉得老师的安排有问题,可以自行寻找学习的材料,但,请不要虚度自己的光阴!
学习内容
学习内容要和学习目标相匹配。
首先,软件工程专业硕士的目标是去产业界工作,而不是做学术;其次,一个中国和美国不同的情况是,中国的企业更倾向于录取能够尽快进行实际工作的学生,而美国很多顶级的公司更倾向于招聘smart的学生,对工作中立刻需要使用的技能缺失有比较高的容忍度。
在软件工程教学内容中,我认为至少包含两个部分内容。
一是软件工程几十年历史中沉淀下来,现在还没有被淘汰的知识。这些知识在变化如此迅速的软件产业仍然能够得到大家的共识,本身就说明了它的价值。这部分的内容,可以由学校教师承担。
二是当前热点技术知识和技能。
这些往往是当前企业在招录员工时重点考虑的内容,学习它们可以帮助同学们在获取第一份工作时能够有一个尽可能高的起点。这部分内容的教学我认为高校教师是不适合承担的。
不同学科有不同的特点,软件工程这个学科有两个重要特点:快速变化和工程性。有些学科的知识变化不快,高校教师有足够的时间研究教学内容,从而精通它们,称职的教授给学生。但软件产业不同,它的发展不会给教师足够的时间来准备这些教学内容,这个产业,很多2年前的技术就已经可以称为旧的技术了。而且,高校教师由于承担的是科研任务,而不是实际的商业项目,他们对于具体技术的需求不大,从而研究新兴实用技术的动机也不会太强。同时,软件工程是一个工程学科,不是科学学科。它的大量新兴技术、方法来源于产业界,而不是学术界(可能有90%以上的知识内容是产业界贡献的),比如常用的各种软件框架、软件过程方法论等等。它甚至和计算机科学都有所不同,比如现在的深度学习以及其它一些算法等都起源于学术研究,学术界是可能走在产业界前面的,但软件工程学科学术界领先产业界的内容并不多。因此,其它很多学科中认为的高质量科学研究可以产生高质量教学的情况在软件工程领域不一定适用。
如何在产业界寻找高质量的师资?以往经常通过和业界知名企业合作,请它们推荐师资。这里产生的问题是,企业在选择师资时要以企业利益为优先,往往依据某位工程师在公司的工作安排情况作出决定,简单的说就是谁有空谁就去。而即使是顶级的企业中也不是每个员工都适合来教育学生的。同行评价是学术界行之有效的能力评估方法,在产业界讲师的选择中也可以考虑这种方法。我们通过与技术社区合作,寻找经常在技术社区发表演讲的技术专家担任客座讲师。这些讲师如果在产业界经常发表演讲,可以认为他们是经过同行评审的,是得到产业界认可的。这种方法可以更加有效的保障师资质量。