普惠中拔尖:计算机精英本科教育的北大模式
►毕业季,北大计算机本科毕业生文龙和实验室的同伴合影留念。
撰文|邸利会
责编|李晓明
“我在济南,不在北京,明天就出国了。”
文龙给我留了条信息。这位7月刚刚从北大毕业的本科生,第二天出现在悉尼,他是去参加ICML(机器学习领域的顶级学术会议)。早些时候,他发表了两篇ICML的会议论文,一篇是在北大的实验室做出的,另一篇则是卡耐基梅隆大学暑期科研实习的产物。
与其它领域不同,计算机研究者发表和阅读的主要是会议论文,期刊只是会议的总结和补充。也许和我一样,你会感到几分惊讶——不过,文龙的不少同学在本科期间也发表过顶级国际会议论文。
►文龙在悉尼举行的2017ICML会议上作报告。
这让我联想起李文新教授的那份自豪和自信。她是北大信息科学技术学院负责本科生教育的副院长。在几周前举办的未来计算机教育峰会(由中国计算机学会举办)上,她谈及北大在计算机本科教育上的独到之处,给我留下了深刻印象。
从为了提高学生编程能力而上线的评测系统,到为学有余力者准备的实验班,到有趣(很虐)的“神课”小班教学,再到拔尖班的海外暑期实习,北大近年来在计算机本科教育的改革探索,一路走来看似激进却有着内在的合理逻辑。
“没关系,我也擅长找校长告状”
2001年,从香港回到北大,李文新随即担任了北大ACM(国际大学生程序设计大赛)队的教练。那一年的夏天,在一个没有空调的屋子里训练了一个月之后,李文新和踌躇满志的队员们准备抱着奖杯回来,可结果却是“碰了一鼻子灰”,连亚洲区的选拨赛都没通过。“那时候我们意识到,我们不会的题别人会做,我们不再称雄了,受了很大的打击。”李文新回忆说。
这促使她反思,我们的本科培养是不是出了问题?
第二年,为了训练队员们的编程能力,队员应甫臣和同学开发了一个评测系统,在线提交代码后就可立即获得反馈。虽然这一年北大的ACM队依然没有出线,不过,从此保留下来的这个评测系统却在日后起到了一个意想不到的好结果:学生的编程能力有了质的提升。
2007年,已升为教授并负责计算机系教学改革的李文新,决定把这个“专用”工具推广到日常的教学,比如大一的课程《程序设计实习》中去。这样带来的一个看似“无情”的改变是,在期末的上机考试中,学生必须通过这个系统的考验:如果两个小时内做不出一道题就是不及格,而必修课不及格则意味着不能毕业。这一当时看起来“激进”的措施立即引发了学生的不满。
“一开始的时候,学生说,要找校长告状,我和他们说,没关系,我也擅长找校长告状,我也告。就这样坚持了几年后,学生的编程能力就大幅提高了。” 李文新说。
►李文新(右一)和竞赛队的队员们在一起。
“如果没有这个课,我大概到现在都只会输出个Hello World!” 即将读大四的年双同学这样告诉我。他目前在卡耐基梅隆做暑期科研实习。
编程能力的训练只是大一学习的一个方面,由于北大计算机系“脱胎”于之前的数学系,传统上注重数理基础。在大学的第一年,学生在学了基础的数学和物理之后,如果有兴趣和能力,也可以继续修读更为高级的数学或物理课程。
“我印象最深的课程是数学分析。” 李昀烛告诉我。和文龙一样,他也是今年的毕业生,即将去麻省理工读博。“数学分析是从大一开始持续三个学期的课程,算是高等数学的升级版。”他解释道,“(这门课)在窥探缜密的数学世界的同时,也为之后的科研发展提供了必要的数学基础”。
这样的一个改变也缘于2007年。在之前不少学生学习的基础数理课程只有工科数学和工科物理。“后来我了解到,这导致学生缺乏很好的数理基础,做研究的时候很乏力。” 李文新继续说,“所以,2007年的一个改变就是在这样一个宽基础上,又提供了一个高阶的通道,学有余力的同学可以继续学更深的数学或者物理”。
“让他们不至于很无聊”
不过,在今天的北大,提供高阶的通道已然不是“锦上添花”,而是一种强需求。
92级的郭耀和陈一峯曾是同班同学,如今他们又一起回到母校任教。由当年的学生变为人师,不仅角色发生了改变,而且还有另外一重改变,也是新的挑战——他们面对的是更多基础更好的学生。“现在入学的同学有一半以上都是有编程基础的,我们当年,也就有一两个;一峯是唯一搞竞赛上来的。”郭耀说。
随着2003年北大开始特招信息学的竞赛生,有良好基础的学生越来越多,可当时的课程体系还是“一视同仁”,并非因材施教。“其实旧的课程已经不适合他们。”李文新接着说,“所以,我们从2007年开始,除了普通班外,搭配开了相应的实验班课程,每个班大概20人,课开得深一点,给更多的机会让学生自己去探索。我们的理念是小步快走,不做大的调整,保证比现有的(情形)好一点。那这些上实验班的同学不会失去什么,因为他们本来就已经知道了。”
“实验班一开始是为竞赛生开的,为了让他们不至于很无聊。”郭耀说,“现在所有的学生如果认为跟得上,都可以选”。
►文龙和同学在一起。
话虽如此,真正开设起来绝非易事。“在开设的第一年,大一的《计算机概论》我来教,大二的《数据结构》由张铭老师来教,基本上教这个课,干别的事就很困难了。”李文新说。
不过,即使是高难度的实验班,有时也难免“被跳过”的命运。
李昀烛就是这样。因为已经具有了相当的计算机基础,他就跳过了大一的《计算概论》(实验班)和《程序设计实习》(实验班)这两门编程课。
郭耀带的本来三年级才上的《编译原理》课程,去年竟有10名大一的同学提前选修了该课。而最后的结果也一点都不差:除一人外,其余成绩均在90分以上。
面对实验班的这些学生,郭耀的角色除了指导者,似乎更多的是一个参与者。去年,郭耀在《编译实习》实验班甚至进行了一次新“尝试”,除自己讲课之外,每次课还安排学生去讲。他们组队自选一个主题,如新的语言,新的编译技术等等,讲给班里的其他听众。结果,这样下来的效果也毫无“违和感”。
“我不去讲,顶多就是做些指导,学生组队自己去选题,自己讲。”他进一步说,“其实很多学生都有对某个问题很强烈的看法,他们愿意讲东西给别人听,这个分享过程他们就很享受。80%的同学都讲得很好,他们也真的是花很多的时间去准备,去讲。”
“有趣(很虐)”的小班“神课”
在这样的实验班运行了几年后,2009年,教育部“基础学科拔尖人才培养试验计划”开始施行。两年后,该计划给予北大的拨款正式到位。借助这股“东风”,李文新等老师们决定去国外走一趟,看一看顶尖学校的计算机本科教育是什么样的,是否有可取之处供北大参考。
2012年3月,冒着北美的大雪,考察团拜访了卡耐基梅隆,麻省理工,哈佛等名校。这趟考察收获颇丰:不仅从卡耐基梅隆引进了日后被学生们调侃为“神课”的《计算机系统导论》;而且初步敲定了派遣学生去这些名校进行暑期科研实习的计划。
提起大二上学期的这门引进课,用年双同学的话说,“课后作业时间远大于上课时间”,“卷子难,容易挂”,“有趣(或者很虐)”……
“课如其名”,在这门本科阶段学分最大的课里,融合勾勒了计算机系统的各个方面。“这门课是站在系统的高度进行讲授,从信息如何存储,到指令如何在CPU内执行,从编译优化到操作系统,乃至网络以及并行计算,把整个计算机系统串起来,就好像带领学生站到山顶,一览计算机系统的全貌。虽然看到的远处景物都还是模糊的,但是掌握了总体布局,熟悉了各部分大体如何衔接。等到以后学习后续的专门课程的时候,再从山顶走下来,把某一个局部仔细地看清楚。这时就能体会到先掌握全局的重要性。” 陆俊林解释道。主讲《计算机组成》的他也参与了该门课程的教授。
担任过这门课助教的李芊坦言,这不是一门容易的课,“知识量大”,“编程作业又多又难”,不过,“收获也很大”,尤其是,大班和小班相配合的形式更有助于大家的理解。“上完大班课的同学都会被分到一个小班,我们当时有2个大班和18个小班,”她说,“大班课是老师讲授,和普通的大课一样,小班课则是一名老师和一位助教带领15名同学进行课堂内容的讨论”。
“老师上课讲的内容很可能听不明白,课后要花很多时间再去理解;而小班课前的准备,课上的互动,提问和助教的讲解有时候比大课的讲授还重要。” 年双说。
不过,在当时,为了让这门引进的课程落地北大,老师们也花费了不少心力。
►北大计算机学院的同学们在上小班讨论课。
李文新说,“第一次开这个课是夏季学期的时候,请卡耐基梅隆的老师来讲,几个本科生和我们老师去听;等到秋季,学生就变成助教,6位老师一块讲,其他老师去听。其实我本人也是重新学的,以前也没听过这样的课”。
不仅如此,由于这一课程的引入,使得后续的许多课程都要做相应的调整,可谓“牵一发而动全身”,少不了磨合。
“每个人对于内容如何调整存在不同的看法,另外,本身小班课就需要投入精力,也有的老师反映科研任务多,时间压力大,负担不过来。” 陆俊林坦言。老师们也曾和斯坦福,伯克利等名校商量如何把新的内容加进来,使得课程的内容能紧跟时代。“一个总的趋势是,以前高年级的课程放到了低年级,而研究生的课程则放到了高年级讲授,这里有一个逐渐的下移和浓缩的过程。那么,在这个动态调整的过程中,就有很多技术上的问题需要处理。”他说。
不过,小班教学也带了一个好处,教授和学生有了更为紧密的联系。他们可以有机会向学生介绍自己的研究,“提早”把优秀的学生吸引到实验室里来。“这也是对老师的一个刺激。” 陆俊林说。
“除了《计算机系统导论》,大二的下学期,还有一个算法的小班课,是老师领着学生读论文。” 李文新介绍说,“这两门小班课,所有的学生都要注册,为此我们学院安排了大量的人力,希望做成一个对所有学生都普惠的课程”。她进一步说,“事实上,北大教学改革的推进是一个集体行动,是一场所有老师都参与的全民行动”。
“在潮头浪尖激扬”
2012年的那次出国考察,除了看看这些名校是如何培养本科生外,郭耀也想通过取经,解答自己心中的一个疑问:为什么现在北大的学生读博的比例只有10%?这一比例和自己出国时的30%下降不少。在他看来,对于吸收了全国最优秀生源的北大,如果只有如此低比例的学生从事科研,代表了某种危机。
然而,美国之行却让他感到愈加失望——这些名校的读博比例更低。“不过情况还是不一样,在美国,最优秀的学生可能有100所学校可以选,而在中国可选择的只有有限的几所。”郭耀说,“所以,如果中国最优秀的学生毕业了只是进公司,找个程序员的工作,对我们教育者来说,就是失败”。这样的动因促使2012年的北美之行还有一个重要使命,“把学生推出去”,帮他们在海外寻找一个读博的出口。
“我觉得想要找好工作完全没有必要在这里读本科的。”年双这样说。
在84级校友、现任教于卡耐基梅隆的张晖教授帮助下,3个月后,第一批经过遴选的12名学生被送去进行暑期科研实习。第二年,在81级校友樊文飞的助力下,北大与爱丁堡大学也签订了合作协议。“这样从第二年起,我们的20名学生就有了着落。” 郭耀回忆说。几年下来,考察团访问了美国,英国,以色列,俄罗斯,学生也随之被派遣到了这些国家。
几年后的2015年,与暑期科研实习相对接的“拔尖班”正式成立,旨在选拔培养最优秀的未来计算机科研人才。“这个班从大二下学期开始报名,先组织一系列科研素养培训讲座,邀请国外名校教授和校友讲为什么读博士,适不适合做研究,如何做研究;在接下里的9月份,大三一开始进行面试,确定二十几个入选名额。” 郭耀说。
不过,无论是小班课还是拔尖班,改革不可避免会耗费老师的时间。
作为主管本科生国际交流和拔尖班的副系主任,郭耀需要把三分之一多的时间花在教学和项目管理上。因为没有设立专门的类似于国外的“本科生(或研究生)项目管理主任”,许多教学的管理工作,都不得不由一线的教研老师来兼职担任。懂英文,懂业务的管理支撑人才也相当的匮乏。“教学是个良心活,我想我还是自己热爱,愿意看到学生好,也是有一种责任和使命感吧。”郭耀说。
尽管如此,在拔尖计划的经费支持下,拔尖班的学生赴海外暑期科研实习,参会都已经常态化。
谈起在斯坦福的暑期实习,李昀烛说:“我最深刻的感觉是能够身处学术最前沿的热血澎湃。我第一次和导师聊如何选题的时候,他告诉我“Choose whatever makes the greatest impact”,这种影响力导向的科研价值观,让我的关注点不再局限于一个具体的问题,而是领域未来的发展趋势。在斯坦福的实验室里,隔壁可能就是某个著名工作的作者,伟大的工作就在身边看似平凡的日常中产生着。这种在潮头浪尖激扬的痛快感会让生活变得富有动力而充实。”
文龙也认为,海外实习是非常棒的一次经历:“卡耐基梅隆在计算机科学,特别是机器学习领域可以说是圣殿级的水平,老师的水平很高但是非常忙,不怎么具体管学生,我觉得这期间最有意思的一点是跟那边的博士同学讨论交流能碰撞出很多很有意思的想法,在这种环境下也做出来了不错的成果。”
而这也是老师们想看到的,在很早的时候,他们的学生就能站在科学的潮头浪尖。
制版编辑:饮水食粮丨
本页刊发内容未经书面许可禁止转载及使用
公众号、报刊等转载请联系授权
copyright@zhishifenzi.com
欢迎转发至朋友圈
▼点击查看相关文章
购买课程
请点击下方“阅读原文”
▼▼▼点击“阅读原文”,了解课程详情,立享限时特惠!