Back to Top

“其实数算可以很简单” ——专访北大地空学院陈斌

guo  2015.10.22   名师名课   评论关闭 总浏览数:4,238

【采访时间】2015年5月6日

陈斌,北京大学地球与空间科学学院遥感与地理信息系统研究所副教授,主要研究方向为空间信息分布式计算、分布式虚拟地理环境。在教学方面,陈斌老师负责本科生课程《离散数学》和《数据结构与算法》、研究生课程《空间数据库》。

 

【引言】

“数据结构与算法”,一门听起来不太“接地气”的课程。虽贵为理科院系基础必修课,但数算在培养学生兴趣、激发学习热情、改善教学效果等方面,依然“路漫漫其修远兮”。第一年接手数算,半学期便受好评;令许多同学开学时还望而生畏,半学期就乐在其中——这些都是怎样做到的?带着疑问,地空学院记者团专访“数据结构与算法”主讲教师陈斌,试图寻找学生纷纷“点赞”背后的秘密。

 

“我担心用Python讲数算会不会太简单?”

“我喜欢教计算机类的课程”陈斌爽朗地笑着,“看到学院征集新数算老师的通知,我毫不犹豫报了名。”

在他看来,数算这门课程首先要解决“预备知识贫富差距过大”带来的问题。有的同学高中时候就可以熟练编程,便会觉得课程内容很简单;而大部分同学之前根本没有接触过数据结构或算法,甚至对计算机知之甚少。如果一开始就进行快节奏的教学,会有相当一部分同学跟不上,造成两极分化。而有同学“掉队”是他十分不希望看到的。

“其实不只是地空,信科也是这样,大家水平参差不齐。我本科和研究生都是计算机专业,所以语言障碍造成的学算法的痛苦我也懂得。”为了解放在C与C++的语法、指针中挣扎的同学,他经过一番找寻,最终大胆地选择了语法简洁、结构清晰、入门门槛低的Python。

“C和C++很强大很灵活,但正因为它们太强大太灵活,对初学者会造成一定的困扰。指针、迭代器……光是这些就足够晕一阵子了,花一个小时编程可能五十分钟奉献给了捕捉语法bug。”相比之下,Python是动态语言,不提供指针这些底层机制,并且强制缩进以减少语句分块错误。因此使用Python语言,花半个小时编程,那么这半个小时就是纯粹地做算法,这样可以为学生减少很多压力,更接近课程本身的目的。“我有点担心用Python来讲,是不是数算会太简单了?”他半开玩笑地说。

随后,他便在教学小组讨论会上提出用Python的想法。老师们纷纷赞同,化院的数算老师迅速决定也选择Python作为本学期授课语言。“于是我又多了一个‘盟友’!”陈斌兴奋地说。

 

“数算不是编程,课件也是动态的。”

接下数算后,首要任务是对课程进行定位。陈斌第一堂课便宣布“数算课不是一门编程课”。这直接颠覆了大多数人“数算课就是学编程”的印象。他认为,这门课的真正目的在于教会同学们如何理解、组织、处理数据。

“任何一门自然科学、基础科学都需要处理数据。大家不是计算机、软件专业,即使学GIS,也不是人人将来都要去编程的。所以,我希望大家通过数算课能够掌握基本概念和思维方法,日后知道碰到什么问题去翻哪本书,这样就够了。毕竟我们不是蓝翔,不需要培养你们的‘特定专业技能’。”

课程定好位,陈斌便开始着手准备课件。“我的PPT是现讲现写的。”现讲现写可以保证每节课呈现的都是“新鲜出炉”的知识,而且是“量身定做”款。他根据反馈及时增删教学内容或调整教学计划,让每一位同学感觉自己的想法是有价值有反馈的,从而调动了大家的积极性。“然而这有好处也有坏处。”他露出一丝俏皮。“现做现卖”有时会导致系统性完备性不够。不过,通过这种方式自己有时也会收获意想不到的惊喜。“比如那些棵树!”,他兴奋地说。

 

“老师应该让学生爱上听课。”

 陈斌从来不点名。他认为如果学生不来上课,非常重要的一个原因是自己讲得不够有吸引力。除了增添趣味性,把握难易程度也很重要。即从简单入手,根据学生的掌握情况加快进程。不能太难,让学习吃力的同学失去信心;也不能太简单,让基础较好的同学不重视。

一句话,老师应该让学生想来上课,并且听进去课。

“走神?那是一种自然规律嘛。慕课就建议视频课程不要超过十五分钟,这不是等于变相承认了人集中精力的时间只有十五分钟?”他随之笑开了,“然而我们不能只上十五分钟就下课啊,这就要求老师提升课堂吸引力。”

他课上提问的形式十分灵活,有时在微信群里发红包,抢到的同学阐述自己的观点;有时直接在检查谁起得最早谁睡得最晚,要他们来讲讲自己的看法。根本用意是尽量让同学们参与教学过程,保持思考,丰富教学形式,活跃课堂气氛。

为了能让学生更深刻地理解数据结构中得基本概念,陈斌想了很多方法。例如在讲递归算法的课上,烧脑的“递归型”科幻电影便像断了线的珠子般噼里啪啦掉进课堂里。《前目的地》中男主角不断生下自己的情节与递归不停调用自身的特点惊人地吻合,是“递归算法”一个鲜活的例子。相似的思想换上艺术的外衣,华丽地挑战大家的视觉、听觉和脑力,这怎能不让人印象深刻?

除了课上,课后作业的形式也有创新。还是在讲到递归算法时,他留了一份特殊的作业:利用Python的turtle工具画一棵分形树。“分形树是可视化递归算法最直观的表现方式,我是想通过这种有趣的形式让大家更好地理解递归的概念。不过这次作业,学生的创造力远远超乎我的想象!”陈斌笑道。不少学生从此摇身一变成为指尖上的绘画家,利用程序代码描绘起湖光塔影来。后来,陈斌将同学们的作品汇总整理,发布到了自己的微信平台上,在全院上下产生了不小的影响。

 

“微信工作时挂在电脑,闲暇时挂在手机。”

“我儿子抱怨我总是看手机。”陈斌既欢乐又无奈地说。

在课外辅导方面,陈斌可谓是做到了极致。为了更及时地答疑,他的微信工作时切到电脑,闲暇时换到手机。一个微信群,几乎提供“24小时咨询服务”,不分问题难易,不分专业或生活,有问必答,激起了无数智慧火花。老师、助教的不懈投入,带动了全班一百多人的学习热情,大家在这样的气氛中交流着、进步着。

万事开头难。刚开学时,许多同学对数算这门课比较畏惧。“所以刚开学的那段时间非常重要。”他坦言道,“开始时是心理适应期,需要老师的热心和耐心陪伴来度过。”如果得不到及时帮助,有些同学会因为一点小的问题而放弃对整个问题的解决,甚至放弃这门课程的学习。“所以这些时间的付出都是值得的。”

“其实提问,不管是面对面还是通过互联网,都需要勇气。所以我们要通过鼓励来增长这种勇气。”他抿嘴笑了,“所以我觉得下课来问我问题的同学都很勇敢啊!同学们的很多有创意的想法也会让我有意外惊喜,教学相长,付出和收获总是相伴相生的。或许这也是我做下去的动力吧!老师的职责正在于此啊:在同学不懂得时候帮助理解,在同学有成绩的时候积极鼓励,在同学有想法的时候把他们推得更高更远。”话语里有些欣慰。

 

“其实想学好一门课并不难!”

如何教好一门课?陈斌不假思索地回答:“首先,要从一开始郑重声明:‘这门课挺容易的!’”

带过几门课程,他对学习与教学也总结出了一些独到见解:

首先,要学会站在一定的高度上俯瞰知识体系,不要把自己锁死在某一道题目中,不要被一些次要的东西干扰,用最浅显的道理去理解概念。“Python的优越性再次展现:它可以将来自语言的干扰降到最低程度,从而专注于对算法本身的研究。”

其次便是要切实的达到三个标准:第一步,学会判断是非,即这是什么,不是什么;第二步,理解概念的基本内涵,这是什么样的;第三步,把这几个概念结合起来会怎样,该怎么用。

最后,重视知识的历史发展过程和知识之间的联系。知识之间是紧密关联的,并不是“隔行如隔山”,而是交叉学科更具优势;了解知识历史发展过程可以帮我们更好地梳理知识脉络,掌握知识框架,从而加深对知识的理解。

 

【老师寄语】

无论是科学探索还是技术创新,解决问题的模式总是相近的,我希望在数算这门课上,喜欢或是不那么喜欢编程的同学,都能发现、掌握和运用这些模式,感受数据和算法之美,体验信息的艺术,享受学习的过程。

 

【记者】

陈春含,北京大学地球与空间科学学院2014级本科生

黄  翔,北京大学地球与空间科学学院2014级本科生

运乃丹,北京大学地球与空间科学学院2014级本科生

 

Comments are closed.