蒋建伟:软件人才培养中的实践教学 ——以暑期大作业为例

  各位领导、各位老师,高老师反复的要求我做这个介绍,我有点诚惶诚恐。实际上我们这一点工作不足以用来做交流,所以我想换一个角度,把它作为一个案例拿出来,大家一起来解剖解剖,帮我们点评。这个工作我们确实做了很多年,现在正逐步在完善,加上现在学生也很认同,所以我们一直在坚持做,尽管做的很艰难。今天我想从三个方面介绍一下:软件学院实践教学体系、暑期大作业的演变、得失与挑战。

一、软件学院实践教学体系

  软件学院跟我们在座的其他的学院不完全一样,从软件工程专业的角度来说,从国家想办软件学院建软件工程专业的角度来说,有两个目标,一个是希望促进软件行业的发展,为软件行业培养软件工程师,另外也希望这样一种新的机制,可以成为用来探索高等教育或者是工程教育改革的一个路子。如果是新办学科比较好弄一点,做砸了大不了关了,那么传统的强势学科这样去做话,风险其实比较大,我的理解教育部的想法大概是这样。所以这十年来,我们大胆摸索,关键是保持两点,一是对学生的未来负责,第二我们毕竟是交大人,不要把交大的牌子砸掉。基于这两点,我们学院的每一个老师都用心的去做,然后就做出这样一些成果来了。

  从我们现在的实践教学的体系来说,因为工程的要求比较高,应用性比较大,所以实践环节抓的很紧。一个贯穿整个培养过程的实践教学,大致上分这样几个环节:课程项目实践、大一、大二、大三暑期大型课程设计、大四毕业实践、PRP,各类创新项目,各类学科竞赛。

  一个课程内的项目实践,我们把它定位在:课程主要打通技术环节,学以致用。就是从技术的角度,设置很多的作业,每个学生必须做,完成基本的要求。然后给这一类课程基本配备两个老师,让经验比较好,上课能力比较强的做主角,另一位青年教师主管实践环节,这样一方面把年轻老师带起来,另外一个方面也能够带一个助教做更多的事情,所以课内基本是这样的情况。课外呢?我们除了课程之外,我们设置了课程设计,以前是设置两个,现在加了一个,就是大一、大二、大三,就是每个暑假都有大型的课程设计,我们的学生统称它大作业,大致就是跟最后的实习毕业设计绑定在一起,所以这条主线是贯穿全部的。另外关于科创,我们也花的很多的精力在做,我们在做的过程中也把课内课外作业结合起来,认可各种各类的科创,让它跟大作业之间也可以互动(我回头可以讲这一块),这就是我们整个的实践教学体系。

二、暑期大作业的演变

  从大作业的演变来看,我刚才说很无奈,为什么呢?我们2001年开始办软件学院,2001年就有从其他的学院转过来的学生。但是那个时候我们刚刚开始办,摸着石头过河,啥也不知道,然后课程方面,我们也不是做得很好,实践环节也做的很差,感觉我院的学生到公司去了之后能力还是有问题。怎么办?我们的想法是你学的工程必须得实践,如果学生学了半天,啥也没有干过,肯定不行。那怎么办呢?学生课内没法实践的话,就课外,那就是暑假了。我们2003年的时候,第一次开始把大三的暑假设置为一个实践环节专业课都学过了,就要融会贯通做出一个项目来。老师拍脑袋出题目,然后学生去做。不管怎么说,学生确实做出东西来了。那个时候,我们也是真的很无奈。

  在经历了十年的实践以后,我们从中获得了很多收益。同时随着我们的课程体系越来越完善,包括企业的一些参与,使得我们现在这个体系开始变得比较有意思,多阶段的暑期项目包括:大一的程序设计为主的演练、大二则是个体的项目,程序设计加数据结构加算法,学生必须解决一个实际问题、然后到大三的时候以teamwork的方式,再加上业务,就开始以工程为主了。但在这个时候暑期大作业已经不仅仅是个技术和业务简单的融合,因为课内已经有很多的实践环节了,然后暑期项目提什么要求呢?我们的要求就是工程、作品、产品,或者你要做研究的话也行,你得给出一个研究报告,你得有一个具体的东西。我们也不是说所有的人必须都去干活,有一些人要做研究,我们也不反对,可以有一些搞理论的老师一起去参与,但是你必须有一个基本的东西出来。特别是大三这一块,我们把它跟学生的职业导向相关,如果是铁定想就业的学生,我们建议跟公司一起做大作业;如果有想出国或者说做博士的学生,那么我们建议他在实验室跟老师一起做研究,然后完了之后,他可以有一些比较好的研究上的一些准备;这样我们就给各种各样的学生都有了比较好的出口。最初的时候,我们规定很死的步骤去做,但如今我们的做法其实已经兼容性、包容性都很大了。大家都知道,很多公司现在都有招暑假实习,三月份、四月份就开始招实习生。如果我们的学生被他们招进去之后,我们一方面觉得很开心,一方面会跟公司说你把这边的联系人给我吧,我们有专人去管理实践环节。我们这边的老师跟公司的人联系,问他让我们学生做什么,我们可以把项目放到企业里面去做,等暑假过完了之后到9月份的时候再来答辩。所以这样做下来,整个过程变得很有意思。

  刚刚开始的时候,都是老师拍脑袋做。老师们刚刚开始觉得蛮新鲜,做到后来其实觉得蛮烦的。100多个学生有这么多的项目也挺烦的,项目质量也开始下降。后来一次偶然的机会,我跟公司的人一起聊,他说我很愿意介入,我们公司招实习生很困难,面试几次然后笔试几次,我不知道他好还是不好,如果早一轮开始做的话,我觉得实习生的效果会更好。这就给我一个启发,我就把微软、摩根等等这些公司召集起来,跟他们谈说了我的想法,他们表示很愿意。这个时候,老师们着急了,学生都跑企业去了,我的项目找谁来做?我说你得拿东西来PK,那么多的项目放出来,学生有自主选择权利,哪个项目出得好或者不好,就看学生的选择了。但我们也有这种情况:intel出了十个项目,结果只被选中两个项目,intel工程师回去也是蛮郁闷的,我就说你得想想,我们学生为什么不选你?所以我这边整个的导向就是学院去调控这件事。所以,现在老师跟企业都非常非常注重暑期大作业,都觉得一定要把它做好,这样才会有学生来选它,而很多直升的学生也都是通过这个环节去认识老师的科研方向和老师的人格魅力。通过这样的环节,一路跟上去的学生非常多,大家也都觉得非常好,那我这边的事情就比较好做一点,其实我就是搭一个平台。

  另外一个重要的问题,我们现在有PRP,有科创。PRP有的时候一个学期真的是不够,我们希望PRP有一个延伸,让学生可以继续做,就是鼓励他持续几年去做一件事情。就像今年挑战杯比赛有一个输入法,平板电脑屏幕上,划一下,就是一个汉字输入,那个东西其实是一个学生2008年开始做的,从大二的暑期大作业开始做,然后逐步逐步就创新出来,我就给他一个机会,让他每年可以叠加起来,现在看,我觉得结果还可以。还有一些学生,他自身也会设项目,这样下来以后,学生的创意就很起劲了。

  这个事情当初做的时候,非常艰难。经常会有大一的学生刚进来,就问:蒋老师,听说我们软件学院是魔鬼学院?我说是的,是魔鬼学院,否则你的就业为什么那么好,人家为什么会给你那么多钱,当然这个话有点俗,但是确实不练肯定不行。所以,我们就是在这个过程中体现了做中学我课堂里面就是要少讲,但一定要有实践的配套。如果我课堂少讲了,实践不配套,我对学生不做要求的话,那学生会很惨的。其实交大的学生素质真的是很好,但是不是人人都很自觉。按照我们以前的模式,你可以给学生创造一个空间,然后20%-30%好的学生可能做得非常非常拔尖,体现交大的水平。但是中间一块学生是要靠PUSH的,你不给他PUSH的话,中间这些学生的水平他不会上来,因为他有惰性。对于后面的学生你必须要设计一个相对来说要求比较低(起评分也低些),但是要达到一个基本的实践要求的项目。所以我们在分层指导上面是做了很多很多的事情,这个过程其实蛮艰难的。现在有一些项目,比如有Intel过来的项目,内容是做视频加速卡,它如何优化,它有一些算法的问题也有一些工程的问题,也会跟硬件结合,或者说微软亚洲研究院的一些前沿性的课题,都有让我们学生去做。还有一些比较有意思的项目,是结合学生的兴趣设计的。

  有一年,高老师应该还记得,物理考试,20多个学生作弊,我们学院就7个。一下子一闷棍把我打的蛮惨的,然后我就猛抓这件事,我要求所有的考试都必须排位置,不准学生自己找位置。然后,教务就带着助管把每一个教室的样子都画下来,然后完了之后,每一次的监考都给考生排位置,后来我想这个事情应该是可以让软件来完成的,这个木匠家里面的凳子不能老是三条腿,就做了一个排座系统,同寝室的不能放在一起,成绩差异太大的也不能放在一起。现在这个排座系统现在已经做的非常好,我们教务的工作就变得很简单,把一些名单导进去,然后把一些要素输进来,然后教室座位就自动排好打印出来,这个东西是大二的学生做出来的,这个很简单,但是很好用。

  地铁怎么换乘会合适,这是与算法有关的。我在铁路里面有朋友,我说你能不能把全国铁路的所有的站和车次给我,我让学生去做火车怎么换乘,这些东西给学生,学生都很起劲,因为他觉得很有用。包括“饿了么”网站,我们学生也参与了。包括送快递,交大里面那么多楼,送快递的路径怎么算,又是一个路径的问题,所以这些东西把我们的算法跟他们身边的一些事情结合起来,学生就做的很起劲。像摩根现在的交易系统让我们的学生一起去做。他只说业务要求,并不完全说明要如何去实现,他只是希望培养你的业务能力,预先在你心理面买下埋下一个业务的种子。这样的例子有很多,包括我们学生自己做一个愤怒小鸟,说苹果上面的愤怒小鸟挺好,我在PC上面能不能做,后来做了一个在PC上面的一个愤怒小鸟游戏,做的挺好用,学生还挺喜欢,也是一个相当好的作品。其实实验室的东西从作业变成一个可用、用不死的东西,对我们来说非常的艰难,就像我们把实验室的成果变成市场上的产品一样,这个中间,我感觉让学生自己去体验工程,是非常有意义的。包括学生自己也说,我想打麻将,那可以,我没有什么意识形态上的概念,但是有很多的算法,你都要去弄一下,这个东西挺有意思的。我们学生每年毕业的时候,都会做一个毕业生的调查,回溯十年,你感触最深的是什么?很多学生说大二大作业确实是他们第一个完完整整的作品,帮助很大。

三、得失与挑战

  现在公司招人都要求几年工作经验,很多学生刚刚大学毕业,哪来工作经验?我们学生说我这个项目就是工作经验,公司面试学生时候问这是课程作业还是课外作业,如果是课程作业,不算工作经验,但像我们这样一个完整的fulltime的暑期作业,企业大多会认同。当然很多学生说很苦很无奈,你要求他再做一遍,他可能不愿意做,但是做完了之后,非常的兴奋。当然那个时候,我也有过很多无奈的事情,多亏高老师一直对我们很支持,因为暑假总共8、9周,而暑期项目的周期是6周的fulltime的,也就是学生只有两周休假。我是很早就把学期变成了18周,然后19周、20周加上后面的4周做大作业,当然也有到企业里面去的。有一些学生是6周一结束就回家了,也有一些学生不回家,要把它做好。我们9月份的第二周才开始答辩。但是也有很多的同学,家里面不舍得,一定要想办法让他回家,不行就给我们打电话,一会说爷爷不行了,一会打电话说姥姥不行了,你是不是让他们回来,让老人看看我们孩子最后一面,其实一调查全假的。我当时觉得压力很大。

  这其中也发生了一些小插曲,我们学院有规定,大楼里面是不能过夜的,所以保安一般12点种都得锁门。我们的机房是从早8点种开始到半夜,因为上海太热,空调开着,学生就窝在里面不愿意走,其中有一些人是做项目,有一些人就不是了。保安要锁门的时候就去赶学生,有发生过几次激烈的冲突。后来我就跟保安说,你们对待学生,不能像对待民工一样,你要尊重学生;反过来,我跟学生说,你也要尊重保安,也不能把保安不当回事。另外,有些学生也很有意思,好像是党团干部,暑期大作业的时候,他们就把大块大块的冰往同学的寝室里面搬,去降温。上海的夏天比较热,一个晚上洗五次澡是很正常的,像去年40多度,我在家里心不安,都睡不着觉,那帮学生在宿舍里面也睡不着。现在有空调了,所以今年的暑假大作业,我就对他们说有空调了,要好好干,所以这个真是蛮有意思。

  对于企业来说,它很愿意投入到我们现在的大作业里去。现在我们几乎有一半左右的项目是来自于企业,企业有他的利益,但是在做的过程中,他不会跟你谈利益。比如摩根是在外滩中心,但它会安排人到闵行来给我们指导,而有时候摩根也会让我们的学生加入他们的团队中参与全球化的业务。再比如阿里巴巴在杭州包了一个商务酒店专门给实习生住,我们学生去了也很开心,然后实际的应用也做得很好。企业有这么一个感觉,就是本科生是异想天开的,他们的很多创意是自己的工程师和博士平时不愿意想的东西,这对他们的创意有大的好处。

  这有几张图片,像这个就是我们03级的同学暑假往寝室里面搬冰。这个是我们学生做的愤怒的小鸟,看上去跟iPad上面的差不多,但是它是移植在PC上的。这个是天津麻将,挺好玩,你还不能很容易的赢它。像这个是蚂蚁找食物,还有很多很多,很有意思。其实这个过程中,有一样很重要的东西,就是要让学生有一个PK的地方。现在是每年7月、8月这样的时间我们做暑假大作业,然后每年的11月我们会安排一个传统节目:软件展示,就是前面的暑假学生做的东西拿出来PK,放在我们的大厅里面去展示。重点是给大一的学生看,让他们去看看,等到他们大二的时候,他们也能够做这个事情。包括我们现在输入法参加挑战杯,学生后来跟我说他最大的刺激来自于软件展示。大一的学生看完,他们会想他们能不能做这个东西,能不能拿奖。这样一来,学生就有一个不服输的欲望跟专业的兴趣对起来,所以这样做下来之后,我也觉得学生认同了,企业认同了,我们做起来就比较好做一些。另外我们在这个过程中得到很多的东西,比如就业方面,学生不仅学到了东西,而且能力也有很大的提高,整个的过程中他可以学以致用。我们总说终身学习,怎么样终身学习?在做的过程中他去发现很多问题,然后他去学习,提升学东西的能力,我觉得这是非常重要的。助教方面,我们学院花了很多的精力,投入了很多的资源,因为暑假里面让助教全程跟下来其实是挺不容易的一件事,因为导师不会站在第一线,第一线的指导往往是助教,这个很重要。我认为,把一些实践环节包容在企业训练里面是个比较好的办法,也是一个比较成熟的过程。

  现在我们遇到的比较大的矛盾是什么?短学期来了后暑期短,学生就不能必修。只要是进来的学生看到了毕业生在暑假大作业中得到的好处,到了后面他们就会很用心。但是现在的矛盾是同时必修和短学期怎么样去做。还有一个很郁闷的一件事,我们的学生7月份是不能游学的,你要游学的话,你的学分就没有了,那没有这个学分了,你要明年重修不现实。所以我们的学生去UCLA的比较多(因为他是8月开始的),但也要考虑一下这个情况怎么处理。最后,对于导师来说,导师跟企业的竞争时导师经常会诟病企业的项目,企业反过来说导师做的项目没有意思,然后我们就在中间做老娘舅。所以,导师也要用心做好项目,不能老站在你项目的需求上面,也考虑到学生的培养,这个过程中还有很多很多很艰难的事情,所以我只是拿来作为案例,希望大家多多批评指正,谢谢大家。

发言人:上海交通大学软件学院副院长 蒋建伟

2011年12月17日

现场问答

提问:我就想补充一点,这是一个非常好的体现学生能力的平台。从教育质量上来说,进入这个平台的产品,还要体现教育的价值。我们交大的教育,除了职业培训以外,要体现教育价值。这个价值体现就是像我们进入软件学院完成自己的作品后,里面最好再增加一个过程,就是学生对作品完善过程的一种反思,这个反思要和我们很多的教学目标联系起来,比如说知识点的掌握。因为我们在评估过程里面,什么信息是评估的依据呢?就是学生对自己已经完成反思了。蒋老师刚才已经提到了很多反思,例如那种叫做问卷调查,就是学生经历上的一部分,这是一部分反思;第二部分反思是直接评估信息法则,就是写反思这一块;第三个是一种交际的能力,就是收集信息,聚集信息以后,你还要去能够给老师、企业、社会去讲我这个设计思想,设计过程以及结果对我整个的学习有什么促进和感受;第四个就是综合学生对自己的评价,任课老师对自己的评价,外面学院对本专业的评价,我们称之为三维评估,这样是一个非常好的评估。所以,我觉得我们继续做这个暑期大作业要在里面加一部分,就是反思,不光是完成这个麻将的设计,这个设计思想怎么样体现课程和实践的结合。

答:其实我们在答辩的过程中都有一些解决方案包括企业都会来一起来做我们的答辩。刚才孙老师提到一个很好建议,就是对自己的反思,我们以后也会加到这个答辩过程中,就是做完了之后对自己的一个反思。