鉴名校名课,促教学实践——访信息科学技术学院纪晓璐老师

编者按:好的教学实践离不开不断地对外学习、博采众长。本科生公选课程《计算机科学与编程入门》的主讲教师陆俊林和纪晓璐老师,自2017年引进哈佛大学计算机基础课程CS50以来,结合北大实际进行了三个阶段的教学探索与实践,构筑了具有北大特色的“大课堂+知识点微课”教学模式与生动有趣的课堂互动形式,激发了非计算机专业学生的兴趣,培养了他们的计算思维,使其能够在各自的专业中受益于计算机编程的辅助。纪晓璐老师团队的作品《哈佛大学计算机基础课程CS50在北京大学的引进与教学实践探索》被评为“2019年度教学新思路2.0优秀项目”。

一、缘起:哈佛CS50课程的引进

记者:纪老师您好,能否请您讲讲引进哈佛大学CS50课程的原因和契机是什么呢?

纪老师:引进这门课程主要是学院领导的一个决策,因为现在计算机科学已经渗透到我们生活的方方面面,不是理工科的学生,科的学生会用到很多计算机的知识也需要计算机编程支持。差不多从十几年前开始,计算机教育的受众群体,已经不仅仅是局限在计算机专业的学生了。其他学科现代社会的发展,都要求我们要开展面向非专业人士的计算机教育,在这样的大背景下,高校的计算机科学和编程的基础教育也就显出了它的迫切性。

信息科学技术学院面向全校的本科生,其实是常年开设多门计算机基础课程的,包括理工科学生的计算概论,以前文科生的文科计算机基础》(现在叫“计算概论C”)等。为了提升教学效果,整个计算机基础教学课程的内容和教学形式其实都在不断进行改进,在改进过程中学院的老师设计了多种改进方式,都在并行开展。

其中的一个举措就是调研世界著名高校的计算机基础课程,然后对这些基础课程择其优者来引进消化吸收和再创新。我们吸收国外计算机教学的先进经验,也为咱们学校非计算机专业学生的计算机教学来探索一条道路。我当时去考察CS50课程小分队成员之一,其中还有另外两名老师,陆俊林老师和唐大老师,他们都是常年处于教学一线的名师。之所以选CS50去考察,不仅是因为它是哈佛大学开设的计算机科学和编程的入门课程,而且连续多年名列哈佛大学最受学生欢迎的课程榜单,我们在edX可以在线学习这门课程,网易公开课上面也有。在2017年秋季学期,这哈佛大学在校生选课人数最多的课程,其实这个还是挺不容易的。这门课有很多的特点它的课程内容设置比较丰富,授课的方式也非常风趣,还有一些精彩的课程周边活动,所以就打造了比较有特色的一个课程品牌,为大家所熟知。而且耶鲁大学也把这门课引入了他们学校,现在这门课是两个学校共建的我们是在2017年暑假的时候到哈佛大学去,跟课程的主持人以及他的整个教学团队进行了深入的沟通,同时也学习了CS50整个课程的内容设置课程的实施方式课程作业的评价方式课程周边活动教师和助教配备以及课程的编程环境等等这些课程资源的使用,总之课程全套的内容我们都进行了学习。

调研回来之后,我们向学院领导汇报,经过几番讨论,在学院的支持下,我们在2017-2018学年的第二学期,开设了这门计算机科学与编程入门的课程和陆老师是这门课程的主讲教师开设之初,我们采用本科生公共选修课的方式,对CS50的部分内容进行了教学实践,没有CS50的教学内容100%复制过来。

实践:结合北大实际的教学三阶段

记者在引进和实践的过程中,您的团队是如何把这个课程和北大实际情况相结合的呢

纪老师:我们想要建设一门计算机科学与编程的入门的课程而且重点面向非计算机专业的本科生。因此我们在引进CS50的课堂教学的过程中,要注重结合咱们学校的学生特点。我们准备为全校计算机基础课程的改革做一个探索和储备。这课程的建设得到了咱们教学新思路项目的支持。

我们的项目名称是大课堂+知识点微课的教学模式与课堂互动教学探索。结合这个课程本身的特点,这里面主要包含两个点一是大课堂+知识点微课这种教学模式,因为可能课程的内容比较多,又针对不同学科基础的同学,我们课堂上讲的一些知识点,可能不是所有的学生在课堂上理解得非常到位因此我们就设置了跟重点知识点配套的微课,这是教学模式方面的改革。二是课堂互动教学探索我们要提升非计算机专业的学生来学习计算机科学和计算机编程的兴趣,我们要做很多有趣的课堂互动,使大家在课堂上不至于摸鱼”。

我们在2017年到2019年进行了第一阶段的改革,在这个阶段我们主要是探索,改革主要方向吸收国外先进教学经验为主我们用的教学平台,包括编程的IDE也是基于CS50的,叫CS50 IDE。在此基础上,我们还结合咱们学校计算机教学工作整体的实际情况,把授课内容做了相应的调整,使我们这个课程的教学内容体系变得更完整,思路和脉络变得更清晰了一些。在课程里面的应用实践的环节,我们加入了一些适合咱们国家国情的比较生动的应用场景。这些举措在提升不同学科不同计算机学习基础的学生对计算机编程学习兴趣的同时,也加深学生对计算机科学基础知识的理解。

详细来说,在我们第一学期的教学尝试中,教学内容方面尽可能多采用了CS50的教学大纲,这其中既包含计算机科学的基础概念基本算法,涵盖了数据结构信息安全软件工程等内容,最后还有网站开发相关的内容,其实内容非常广泛而且我们课程涉及的编程语言也是比较多的,像C、PythonSQLJavaScriptCss,以及HTML,这些我们都讲到了 CS50最具特色的习题设置都是来源于现实生活的各个领域和各个学科的,课程所有的习题都是贴合实际的一个小应用,因此我们的课程作业部分选用了习题集CS50每学期8套习题集,这8套习题集是所有同学都需要完成的,这种习题设置模式对咱们学校的学生就不是很适用。第一我们是一门公选课,学生课后放在这门课上的时间不足以支撑完成所有的习题。第二,这门课主要向的对象是没有计算机编程基础的同学,完成所有习题集也有很大困难。鉴于这些考虑,我们调研了一下这8套习题集在哈佛大学学生中的完成情况:哈佛大学选课学生每周在课后用于这一门课、每一次作业的平均耗时是6-20个小时。而咱们的学生课后仅仅针对一门公选课,让他达到这样的作业量的话,估计就不会有人选课了。我们的课后时间配备是远远达不到这个要求的,我们学期给学生设置的课程学分都远远超过他们,所以我们没有采用全套的8套习题集来进行课后巩固和考核,是采用了期中和期末两次大作业这样的课程评价方式。我们又在 CS50的习题集中,分别选择了入门的Scratch语言来做期中作业,这样可以提升学生学习编程兴趣,不让大家觉得编程期末的大作业选择了一个在线的股票交易系统网站的搭建,这个也是比较贴合实际的我们期待学生在大作业中能够把整学期所学的知识点融会贯起来

在编程环境方面,CS50有自己的在线编程平台,2019年,他们的团队还开发了一个离线的IDE,可是它安装对计算机配置的要求比较高。我们这门课当时存在的一个问题就是在大教室上,基本上是同学们自己带着笔记本电脑来上课,没有集体在机房上,可能有部分同学的笔记本电脑配置并没有达到IDE要求,所以我们没有用他们的离线编程环境。他们这个IDE的好处就是为了着重训练课堂知识点的掌握,忽略一些编程小细节,做了很多的装,IDE里面已经预先帮我们写好了很多的库。我们用的时候,不管是教的过程还是同学们学的过程,直接用他们的IDE会上手比较快,所以我们在教学和作业中,当时也是使用的CS50在线编程环境。

这就是我们第一次尝试,总结下来,我们希望尽可能多CS50的教学内容传授给大家,同时也为了同学们上手比较快,统一采用了他的编程环境,但是相应的一些知识点讲解顺序以及教学大纲,还有课后的作业,做了适合咱们学校学生特点的一些调整。

记者:第二阶段的实践是什么时候,进行了怎样的改革?

纪老师:其实第一阶段实践下来我们还是发现了不少问题咱们学校每个学期末都会有课程评估,我们除了做学校教务部的课程评估以外,还给大家发放了课程评估调研问卷,因为这门课新开,我也希望尽可能多的听听学生的反馈。

在问卷中我们收集了上来了很多的问题这门课第一学期选课的学生是比较多的,我们设置的选课人数80人,选的时候是120多人,我们随机抽取了最终名单。课程到了期中的时候,有的同学觉得课程难度还是高了一些,就选择了退课。把学生总体的反馈总结一下,我们可以说第一次尝试基本上完成了教学目标。课程评估中反映出的比较集中的问题是,作为一门入门的基础课程作为一门公选课,学生学起来还是感觉很吃力。

我们总结了一下原因,一方面可能是因为程中涉及了太多编程语言,但其实我们课程教学目标并不是说让选课的学生掌握每一门语言的具体语法我们是想通过这些语言的学习和应用,让学生掌握一些计算机科学的基本思想,形成计算思维,这门课之后才是编程工具的具体使用。但是学生仍然觉得涉及的语言众多,所以理解起来就会觉得难。

学期结束后,我们针对总结几个比较突出的问题讨论了相应的解决方案:

第一个问题就是为入门的课程涵盖这么多知识点,而选课学生又大都是非计算机专业的,对计算机领域的学习基础是不一样的,有的同学有一些计算机编程的基础,有的可能就零基础,我们如何在有限的课时内让大多数的学生掌握全部的知识点我们在课程内容方面,新增和重置了部分CS50的内容,涉及的知识点在课堂教学中其实挺难做到让不同基础不同学科背景的学生完全掌握,有的知识点我们讲的时候只能一带而过,课时用的非常少。虽然说兴趣是学习选修课的第一动力,但是作为计算机编程的基础课程,单凭兴趣的话,推动力还不足以达到我们的教学目标有计算机科学基础的学生,他可以很轻松跟上课堂的节奏,基础薄弱一点的学生,他可能跟了几节课积累下来的问题就比较多,发现要补的知识点也很多,可能逐渐对这个课程失去兴趣,中期退课的时候就十几位同学退课了

我们想到的解决方案,也运用在了我们第二阶段的实践中。首先是对授课的形式进行优化,我们开始用大课堂+知识点微课这样的一个教学模式来做。大课堂就是我们每周上一次的大课,是任课老师来讲的,而知识点微课就是由我们的助教课后结合课堂中涉及的重要知识点或是难点,再逐一地、详细展开,做一番讲解,录制成微课的视频,发放给学生。学生就可以根据自己的需求针对课堂上没听懂的部分来有选择参与微课的学习。

CS50的话,他们的选课人数是多达几百人的,而他们这几百人大概是配备了90名助教,所以在上机实践或者是答疑的时候,几名学生就可以有一个助教来帮助他。而咱们目前课程助教的设置模式我们每个学期可能只有1-2位助教,所以我们也期待通过第二阶段的或者接下来几年的实践,建成一个由高年级学生组成的助教团队我们希望这个助教团队中大多是选过这门课的学生,他们的知识水平和生活阅历也都更加贴近选课的学生,可以更好从自己当时去学习这门课的角度,发现大家在学习中的难点或者弱点,然后站在学长学姐的角度思考如何帮助学生更好地理解课堂内容,这样会在一些具体的细微的问题上,对选课的学生提供更为中肯的建议我们针对这个问题做了以上这样两方面的考虑,总结一下就是在接下来的教学实践中,采用大课堂+知识点微课”的教学模式,另外一个是我们除了助教以外,把之前选过课的学生可能组织起来,一起为大家答疑解惑。

第二个问题,这课是一个计算机的课程,它的实践性是很强的,是需要动手写代码的。我们设置了两次作业,中作业难度比较低,期末作业是需要把课上学过的知识点融会贯通起来才能完成的。但这样设置带来的问题是,可能有的同学学期中间就去划水了,最后大作业的时候出现各种各样的问题,后来我们没有让每位学生都完成一个期末大作业,是可以分成小组的,大家组团来共同协作分工完成。但即使是这样,大家还是觉得难度比较大,虽然作业内容也比较新颖,是模拟股票交易的一个网站,学生感兴趣,但是最终完成效果不是很理想。有的学生在课程评估中写道:这是我包含专业课在内做过的最难的作业”。我们就反思为什么公选课作业会给学生造成这种阴影?为什么大家经过一个学期的学习之后,每个知识点都讲过了,可是就把知识点起来做一个作业就会难度比较大

我们又进行了几番讨论设计了解决方案。d在第二次开设课程的时候,就考虑到学生课后时间并不是很充足,也不能让大家学期中间空出来,只在最后设置大作业我们设置阶段性的有难度梯度的针对之前设置的微课小知识点的实践作业。因此我们接下来就设置了难度梯度递增的5次小作业,虽然作业次数增多,但是每次作业都是及时巩固课堂知识,而且时间间隔比较短,每次难度又递增一点点,把上次的知识复习一下,然后再加一点新的内容,这样的增加作业次数但是降低每次作业难度的方式,可以避免大家平时划水又觉得期末很难,让大家把知识点尽可能多的掌握了。

我们还增加一些有特色的课堂活动形式来完成作业就是不把作业时间全部都放在课后了CS50有一些编程竞赛和迷你编程马拉松,咱们没有那么多的课堂时间,我们就把一些不必要的知识点进行了压缩之后,课堂上分出了迷你”编程马拉松的小竞赛,这种小作业是在课堂上完成的,不占用同学们课后的时间。而且学生课堂上提交作业之后,由教师当堂讲解作业,这样也提升了作业的完成度。同时,我们在设置课堂作业的时候,让助教开发了作业提交的网站,在这个网站上大家是可以实时看到一个类似于竞赛的排行榜,显示屏上会参照咱们国际上信息学竞赛的模式,显示你提交作业的耗时和当前排名,这样有点激励的机制。

第三个问题,作为计算机科学的基础课程,如何让非计算机专业的学生感兴趣,并且做到愉快的学习,其实这个挺难的。我们还是要继续深入课堂的互动教学。学生本身的兴趣是其一,我们维持住学生学习兴趣也是很重要的。所以我们就要增加课堂教学的互动。我们学习了像CS50的主讲教师在讲课过程中穿插有趣的互动环节,比如说他在讲二分查找的时候,会直接用撕电话簿的方式;在讲计算机的基本原理的时候,讲台上放上灯泡,用亮灭的形式来让大家理解;排序的时候,会让同学们上讲台同学代表一个数,大家用不同的排序算法来做演示这样互动可以使大家对枯燥的知识点理解更深刻一些,我们也设计了一些类似的课堂小互动,也录制了相应的小视频:为了让大家更好理解计算机思维和人思维的区别,我们做了一个游戏——模拟计算机画小人儿过程,让大家体会在写代码的时候,不能站在一个上帝视角去告诉计算机你该做什么,计算机是理解不了的,要用计算机的思维去完成,让大家知道计算机的思维,是需要编程者一步一步说清楚指令来执行的。 

记者现在咱们教学模式有进入下一阶段吗?

纪老师:,我们这学期(编者注:2021学年春季学期)在进行第三阶段的改革我们先是总结了前两次探索,发现我们还是存在部分瓶颈问题,于是继续尝试去解决一些已经发现的问题。可是还是有一些可能一时解决不了的问题,比如说课后答疑时配备助教的数量还是不够充足,因为毕竟课后要去实践,我们现在作为公选课还没有申请相应的上机的课时,后续可能还会加强课后上机课时的配备。我们也计划进一步扩充课程技术支持的团队,我们之前用的是CS50的IDE,它是在线的,我们很受制于在升级用不了的时候,我们却在上课,这个就很被动了。所以我们在这学期完全不用的平台了,我们把编程语言也统一成Python入门语法门槛比较低,比较容易上手。

再就是我们课程技术支持方面,我们目前的作业评估因为作业中会用Python做很多数据展示的内容,所以作业还是会让同学们发布在网站上,教师和助教来。现在我们很多计算机编程的课程,代码评估咱们的 OpenJudge,我们后续涉及代码的作业评估向这方面来靠,比较通用的一些知识点的考核,我们用OpenJudge这个平台来进行评估,总体也是和之前的评估方式二者相结合。 

另一方面我们把课程的整个教学体系重新梳理了一下,之前涵盖基础概念、算法、数据结构、信息安全软件工程网站开发等等,内容非常多,我们把教学大纲进行了修改改革后的教学大纲从编程语言的基本语法入手,后是循序渐进增加知识和应用的深度和难度,并且我们每个教学知识点都做到承上启下和前后呼应,逐步深入。知识点的广度也是逐渐加宽的。我们还建设了一套贴合咱们国内应用实际的各学科结合的案例化的教学实,以此为依托来展开教学,在课程内容的每个模块,我们都不是枯燥讲解代码,而是一个实际案例来导入。比如说在语法的部分,我们会结合分析长篇小说中的人物关系或者人物出现的词频来引入。有了这个词频之后,我们最初是把分析结果展示在一个Csv文件或者是Excel文件里,接下来引入可视化的讲解,把文本分析的结果直观地用人物词云、甚至人物关系图展示给用户。比如说一部长篇小说中出现了哪些人物,这些人物之间的关系是怎样的,单用表格的形式呈现给用户可能不是很直观,所以我们会画一张关系图来展现这些。我们课上的学生也有做抓取人民日报几十年来报道的关键词的案例,来分析根据年份的变化,人民日报报道的重点有哪些倾向等等。在建立网站的部分,我们会在讲解完互联网基础知识的基础上,随堂地让学生亲手搭建一个网站,网站的内容就是把我们在之前讲解可视化这部分展示出的图表,而这也为接下来我们讲 Python的数据爬取做了铺垫。在网络爬虫部分,我们会首先向大家强调要在合法合规的情况下去爬取数据,给大家介绍网络安全的法律法规,在此基础上,我们带领学生当堂制作了一个类似于百度的搜索引擎。之后又进一步又去抓取了些购物网站的大数据,这之后就把数据分析的教学内容引入进来了。在数据分析部分,如果数据量比较庞大的话,我们要用到数据库,于是我们又引入了数据库知识的讲解。综上看来,所有的教学内容是一个完整的链条,这学期的教学中我们已经没有复制CS50的教学大纲了,我们自己形成一个完整的教学链条,但是教学中涵盖的知识点并没有少。有了这个链条之后我们结合当今的一些科技实际,给学生再打开一些新的大门,比如说人工智能API的调用等等让学生知道学习了以上的基础知识之后,还有这些工具可以让自己的技能更加的丰富,还可以更深入探索计算机的世界,可以更紧密跟自己的专业去结合在最后的两次课我们会进行一个知识的拓宽。所以目前是这样的一个改革,这是我们教学改革的第三阶段。

思路:创新模式的总结与展望

记者经历了三个阶段,您觉得教学的成效体现在哪里?

纪老师:第三阶段还在进行中,教学成果目前还看不到,前两个阶段的改革为全校计算机基础课程的教学做一些探索性的尝试和实践。这门课最初的教学目的就是培养学生的计算思维,使同学们能够利用计算机去更有效率解决自己专业遇到的问题,归根结底就是利用计算机科学让学生在自己所学的学科受益。

通过前几次课的大作业,我们看到预期的教学目标达到了。比如学习新闻传播专业的同学,抓取人民日报的数据并分析展示,出色完成了自己专业课程的大作业,受到专业课老师的同学的一致好评;学习经济相关专业的同学,用这门课学的东西去抓取基金网上的一些有价值的数据,来做相关的分析,最后再把分析结果用可视化的方式展示出来,发布在网站上,我觉得这个思路也挺好的这都是同学们结合自己专业的学习成果;还有的同学是社团的成员,经常要统计分析一些问卷调查的结果这个过程如果手动的去做的话,相当费时费力,同学说经常为此熬夜,学了这门课之后,就可以把采集来数据自动化导入到数据库中,然后用数据库的几条查询语句,把数据进行筛选再做接下来的一些分析非常便捷,在社团中工作效率大大提升了一直以来都有很多医学部的学生选这门课,医学的探索也需要信息化的支持医学部的学生在实习的时候可能会去到医院里,比如他会拿到很庞大的病例数据,需要病例中的一些关键词提取出来,做一些对应,分析他的诊断情况,那有了我们课上学习内容的支撑以后,这项工作就可以很快速的用编程的手段自动去完成。当然任何东西的学习不是一蹴而就的从这学期目前的反馈来看,大家的学习兴趣还是一直维持在一个比较高的点上有同学除了完成作业之外,会写一些微信的自动拜年或者自动问候的小程序用于日常生活,这些是大家出于自己的兴趣去做的一些事儿,也证明我们之前的努力还是有一定的效果的。

记者这样的教学新模式,您认为相比于传统的有什么优势?

纪老师:大课堂+知识点微课这个模式,其实跟兴起了几年的慕课有关。我们只是没有把所有的课程都放在网络上,而是仍然由教师来主讲大课堂,把同学们可能会觉得难或者有疏漏的知识点,放到微课中供大家选学,这样的话比较有弹性,不同基础的同学可能就会根据自己的学习能力来选学,最终达到的目标就是让所有的同学都能够学会。还有像课堂互动,其实也不能算是很新,很多其他的课程也会有不同形式的课堂互动,互动是我们激发学生学习兴趣的一个手段。我们这学期还加了一个激励机制我们会在每一次的作业中选取完成作业优秀的学生,助教和老师共同评出10份优秀作业来进行奖励奖励就是报销这位同学在咱们课程中根据教学需要购买服务器、域名等的费用

记者接下来还会在这个课程上有怎样的探索呢?

纪老师:学期末的时候我们还会继续收集同学们反馈,后续继续推动进行助教的扩充上机课时的配备,课程技术支持团队的建设,以及建立更多的课堂激励机制和更好的作业评测机制,总之借鉴CS50不依赖于CS50课程本身。计算机知识本身就更新特别快,所以我们计算机教学课程学大纲教学内容每个学期肯定都会做相应的更新和调整。

记者:好的,非常感谢纪老师!

===============================

采访时间:202164日,14:00-15:00

采访记者:廖梓吟

录音整理:尹倩倩

文字编辑:廖梓吟

文字编审:王肖群

定稿日期:20218月18

 

项目负责人简介

纪晓璐,就职于北京大学信息科学技术学院教学所,研究领域为计算机基础教学,曾获北京大学第十六届教学基本功比赛理工科组二等奖、优秀教案奖,北京大学第七届多媒体课件和网络课程大赛微课组二等奖,北京大学教学成果奖,北京大学教学新思路优秀项目,北京大学第八届“创新教与学”应用大赛教学案例组三等奖,北京大学“创新教与学”获奖论文一等奖,北京大学优秀班主任等教育教学奖励。