建设一流本科

分享到微信 ×
打开微信“扫一扫”
即可将网页分享至朋友圈
【建设一流本科】 计算机程序设计:知行合一、学以致用,让学生轻松跨入编程大门
文:何乔 学生记者团 谢雪霞 薛宇晴 来源:新闻中心 时间:2022-06-30 17089

“最开始我以为C语言很难,但是在汪老师的讲解下发现并没有这么难,一学期下来,对编程的兴趣大增。”

“课程内容丰富有深度,汪老师备课充分、讲得非常好,并且经常鼓励我们独立思考解决问题,对我们动手能力的提升大有助益。”

“汪老师的课程,让我们在难题中进步,在实践中成长。”

同学们口中的这位汪老师,是数学科学学院的汪小平副教授。他开设的“计算机程序设计”课程,广受学生好评,让学生在进入大学之初就能够轻松跨入编程的大门。

汪小平上课照片.jpg

敦本务实:语言是解决问题的工具

“计算机程序设计”是学校理工科学生的一门必修课。2007年,汪小平接手了数学学院的这门课程,当时叫“高级语言程序设计”。课程主要通过C语言的教学,使学生掌握结构化编程的基本方法,学会常用的编程技巧,能够运用编程的方法解决一些常见问题,为学生利用计算机程序解决以后学习和研究中所遇到的问题打下基础。

课程面对的是大一刚进校的新生,绝大部分人都没有接触过C语言。相对其他计算机语言来说,C语言虽然是一门基础语言,但也是比较难的一门语言。如何让学生对利用C语言编程感兴趣,并能轻松入门,是汪小平面临的一个难题。“在上这门课的时候我发现,很多同学一开始就给自己心里设定了一个界限,觉得这个东西不好学,可能学不好。一旦头脑中有这样一个想法了,可能就真的学不好了。”汪小平说。

如何破除学生的畏惧心理?

首先从课程设计做起!“计算机程序设计”一共64个学时,课堂教学和上机各占一半。在排课时,汪小平会把课堂教学与机房操作交错安排,让理论教学与实践有机结合,快速提升学生的程序理解与操作能力。并且在前几次机房授课时,他会选择一些简单、有趣的问题,当场引导学生进行思考,并一点点用程序实现,让学生感受到编写程序的快乐。

汪小平认为,计算机语言只是一种工具,利用其解决问题才是根本。因此在教学中,他主要采用问题驱动法,不深入追究语法根源,重点放在让学生理解语法特性与使用方法,让学生在练中学、学中练。“我们不去深入探究这个语言,比如说编译器是怎么编译的,为什么要这么编译,语法为什么是这样设置的,而是把它当成一个现成的工具用,”汪小平说,“像一开始scanf(输入)后面需要一个取地址符,但printf(输出)的时候又不加,一个加,一个不加,到底有什么区别,我们先不管,先照着用,等后面学了指针、数组再回过来就能真正理解了。”

在讲授知识点时,汪小平也注重结合具体案例来进行讲解。

比如在讲循环链表这个知识点的时候,他会结合“猴子选大王”的案例来进行。猴子选大王,有M只猴子围成一圈,从1到M编号,然后开始报数,当有猴子报到N就退出去,然后圈里面就少一个,再从1开始报数,报到N,又有猴子退出,总共进行M-1轮报数,最后只剩下一只,把这只作为大王。我们要模拟这个过程,一般用循环链表是比较合适的,退出一只猴子,相当于进行一次删除操作。从编程角度来说,报数的猴子需要知道下一只猴子的位置,才知道是谁来报下一个数,从逻辑上思考,怎样才能知道他的位置,然后报了N该怎么退出,这时候前面的指针又要指向下一个……这样一讲解,学生很快就能明白了。

谋定而动:先建模、再编程

“怎样像‘大牛’一样写出又好又快的程序?”

这是学生经常问汪小平的问题。

汪小平认为,要写出结构清晰、运行效率高的程序,必须做到两方面:不断模仿学习和持续编程训练。

因此,课程中很重要的一块就是上机练习。作为ACM校队的教练,汪小平将竞赛与课程结合起来,将用于ACM竞赛练习的在线评测(OJ)平台引入课程中。目前,该平台上已有2500余道练习题,其中既有编程入门题,也有算法学习的竞赛题,可供不同基础的学生进行训练。

平台上的题目,有些是ACM的竞赛题目,有些是ACM团队的教练们编写的题目,甚至还有一些同学自己编写的题目。

“一个按降幂排列的n次多项式可以和n+1个数一一对应。你的任务是利用秦九韶算法求出给定多项式在点X处的值。”

“在一根细木杆上,有一些速度相同的蚂蚁,他们有的往左走,有的往右走。木杆很细,只允许一只蚂蚁通过,所以当两只蚂蚁碰头的时候,它们会继续掉头前进,直到掉下木杆。已知木杆的长度和每只蚂蚁的名字、位置和初始方向,问依次掉下木杆的蚂蚁花费的时间和他们的名字。”

“食堂的饭卡在购买之前会先判断余额,如果购买一个商品前,卡上金额大于或等于5元,就可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。某天食堂有N种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上余额,问最少可使卡上余额为多少?”

这些题目,或有趣,或贴近生活,能极大地激发学生的学习兴趣。同时,在OJ平台上,学生能即时看到练习排名和完成情况,有效激发了求胜心理,促使学生不断练习提高编程能力。

汪小平上机讲解1.jpg

编程需要练习,但并不是毫无章法地练习。汪小平说,针对实际问题写程序,需要有个合适的流程。在学习中,经常有同学想一点就写一点,但当程序写完时,花大量时间调试运行,都得不到正确的结果。

在课程中,汪小平引入了工程思维与建模思想。在拿到一个问题时,引导学生先通过合适的抽象,建立问题的模型,然后利用相关知识得到问题的解决方案,最后结合编程语法写出程序。这样的程序一般逻辑清晰、结构合理,容易调试维护。“我们希望培养学生在考虑问题时一定要重视全局,不要太早陷入细节。”汪小平说。

而这样的教学思想,也让学生感觉印象深刻、收获很大。

数学学院2018级本科生白灵说:“汪老师在课堂上反复强调思维的重要性,建议我们在每次编程之前要先在脑海里形成自己的思路。老师在每一节课开始之前都会在学习平台上布置一道思维训练题,并会让大家对该题的思路与大致编程过程在课堂上进行讨论,每次我都感觉很有收获。”

2018级本科生方兴亦有同感:“我觉得汪老师上课重思维。老师在课上讲解经典题目的时候,会更加注重解题的整体思路,从大局上把握好题目,再从代码角度不断完善细节。”

深稽博考:多元考核扎牢根基

师傅领进门,修行在个人。

为了让学生多思考、勤练习,汪小平精心设计了多元的考核模式。让学生在思维火花的产生中、一行行代码的敲击中感受编程乐趣、扎牢知识根基。

“现有两个十进制正整数(长度不超过200位),分别记为a和b,问a包含的数字能否重新排列得到b……”

这是汪小平在蓝墨云班课APP上给学生发布的讨论题目。在课上讲完知识点以后,他经常会在线上布置一些思考题目,一来可以让学生巩固课堂所学知识,二来从学生的讨论中,他可以获取学生的学习状况,及时调整课堂内容和讲述重点。

在平时的上机练习中,汪小平每次都会在oj平台上精心挑选5-6个题目。学生在上机过程中可以与老师直接交流,遇到问题也能找老师寻求帮助。同时,汪小平也会抽取部分学生在课堂中讲述问题的解法,并要求当场输入代码。他认为,给予学生适当表现机会,可以激发大家的学习兴趣,同时通过示范,也能让学生感觉编程并不难。

学生讲解题目照片.jpg

期末之前,汪小平还会鼓励学生综合使用所学知识,编写一个小型应用程序,以小论文的形式提交。结果同学们的“作品”还挺让人惊喜:有人结合正在学习的其他课程做了小程序,有人做了小游戏,还有人做了类似通讯录这样的小应用程序。

课程之余,汪小平鼓励同学们积极参与竞赛。“参与竞赛和竞赛培训是提高编程能力的最好手段,就算不能进入竞赛队伍,这个过程也可以有效提高自主学习能力和编程能力。”汪小平说。而多年实践表明,每一年都有不少参加了课程学习的学生参与到竞赛中,不仅争金夺银,最重要的是切实提高了自身编程能力。

数学学院2017级本科生胡秋豪在大一参加了这门课程,后加入了校ACM程序设计队担任队长,多次在ACM竞赛中获得金奖。现在在华为工作的他,回忆起这门课程,仍然称赞连连,“大学课程不同于高中课程的是它能更多地提高我们的动手能力,汪老师的C语言课程就很好地体现了这一点。课堂上的典型例题和OJ里灵活多变的竞赛题为我们提供了丰富的练习资源,不仅极大地提高了大家的学习兴趣,更增强了大家的动手能力。不得不说,这是我大学中学到的最棒的课程之一。”

现在在海外工作的2009级本科生范坚劲说:“课程最有意思的莫过于汪老师让同学们在OJ平台上进行C语言上机练习,这让我在大学刚开始的时候就体会到了编程比赛的紧张刺激,进而由此开始投身到了竞赛的训练中,获得了思维的锻炼和能力的提升。它让我爱上了编程,最终把编程发展成了自己的职业,真的算是受益终身。”


编辑:何乔  / 审核:何乔  / 发布:陈伟