Java编程

清华学堂在线数据结构课

想深入了解这些问题,就必须先学数据结构。数据结构是计算机相关专业的基础课,在清华MOOC平台学堂在线首批推出的5门MOOC课程当中看起来是专业性最强,门槛最高的。

虽然对于计算机专业这是一门必修的基础课,但是邓俊辉老师的数据结构却和一般的讲法不一样。比如他说“我们要记住过去的成功,那叫经验,我们还要记住过去的失败,那是教训。” 这不仅是深刻的人生道理,也是邓俊辉课堂上的KMP(改进的字符串匹配)算法。

也许这就是为什么清华有信心开设这样一门“小众”课程。数据结构也许不像我们想象的那么高深,只是因为没有碰到好的老师。

清华学堂在线数据结构课

果壳网MOOC学院专门采访了数据结构课主讲教师邓俊辉。

果壳网:是什么原因使得你关注计算机领域的?

邓俊辉:我中学参加竞赛保送了清华。在清华的前三年我都在数学系学习,小到数理逻辑大到数学分析都有学。到第三年我才开始学计算机专业,当时我就被计算机的魅力迷住了,之后我一直从事计算机教学工作。所以你可以看到,我教数据结构的时候,也带有数学的影子。

跟数学有关的一件事情,我记忆犹新。数理逻辑的期末考试我只得了98分,我找老师去要分。我指着题目说,第一个情况我已经说明白了,同理可得,对应的第二个情况也是正确的。没想到,老师指着题目说,“对不起,数学里没有‘同理可证’,没有‘显而易见’,你必须写过程。”反思了好久,这个教训让我明白到,严谨的态度很重要。

数据结构因严谨而变得优美。每个结构每个算法都有其严谨之处,每个过程都可以用数学推导。

所以我希望,数据结构这门课,能提升同学们思维的严谨性,让同学们学得更好。

果壳网:你是怎么想到要开设MOOC课程?

邓俊辉:一方面清华非常重视MOOC,之前我跟学校讲过网上开课这个事情,我说如果学校能给我这个机会,我一定会尽百分百的努力去完成这个事情。

另一方面,我上大学的时候就很享受计算机科学的学习,而且到现在我还乐在其中,所以我很希望能把这种乐趣传递给更多人。开设MOOC课程耗费了我大量时间,我这些天也没睡好,7天的国庆假期将近6天在工作。不过这都非常值得,因为教学带给了我很大满足。

于我而言,MOOC是一个工具,我希望它能为我所用,达到传播知识的目的,这也是教育的目标。

果壳网:学堂在线的数据结构课跟在清华上的数据结构课有什么不同?你有没有因此重新设计了教案?

邓俊辉:还是原来的教案,但是教学形式上有了很大的变化。在学校课堂上,我习惯用粉笔在黑板上进行演示,幻灯片是可选的。而在学堂在线上,幻灯片会大量使用,平时在黑板上演示的内容,现在要靠这块仅有的屏幕演示。

同样,那些原本在课堂上通过肢体语言、眼神表达出来的东西,我现在都要用笔来表达。在后面的课程里,我会大量地用笔来讲解一系列原理和过程,我相信这样能让老师和学生的思路都清晰起来。另外,在一些细节上面,我们也做了改进。比如,在电子版教材上,我们加上了链接,当学生读到“请参阅第几章第几节”的时候,点击一下链接就跳转过去了,不必像使用纸质书那样要到处翻。

果壳网: 我们平时编程直接调用STL( STL是C++标准库的一部分,是一些已经写好的数据结构模板,包含vector等常用的数据结构。编程时可以直接调用这些模板而无需自己编写。)就能解决问题,为什么还要自己实现数据结构?

邓俊辉: 这门课禁止了STL的使用,让学生自己动手实现这些功能。打个比喻吧,汽车系的学生不同驾校的学生。驾校的学生拿到驾照就达到目标了,汽车工程系则要深入学习汽车的原理和构造。要学会开车很简单,有说明手册,一踩油门就能走。但要开出高水平,只有两个途径,一个是经过长时间磨练,靠经验积累;另一个是学习它的原理和构造,深入地了解它的运作。数据结构课要学习的,也就是计算机的原理和结构。

可以这么说,如果不得不压缩课时,有三门课是必须保留的。一门是程序设计,它就像教小孩子说话,教会他把话表达清楚;一门是数据结构与算法,这门课教会写文章,教文法,教怎样写出好文章;还有一门是计算机组成和体系,那是更深入的计算机课程。

果壳网:数据结构属于计算机课程,你觉得这门课适合非计算机专业的同学听吗?

邓俊辉:我在清华开设的数据结构课,也属于全校性的选修课。修这门课的学生来自不同专业,有本专业的,也有文科专业的。

所有学生都可以听这门课。我希望非本专业的同学,可以在数据结构课中学会计算机科学的思想方法,能有不一样的思路去解决问题。这门课除了要教会学生,计算机能解决什么问题,还要告诉学生,有什么事情是计算机无法解决的。我希望学生能把这种能力运用于生活中,能察觉出,什么东西是有潜力的,什么事情是不可能的。

果壳网:你希望学生学完这门课,能达到怎样的水平?能到清华的水平吗?

邓俊辉:学堂在线的数据结构课,难度和要求上都比清华计算机专业的课要低一些。

对不同背景的学生,我们有不一样的要求。数据结构与算法是个非常开放的专题,学习过程没有终点,任何一门课程都不可能穷尽。然而有意思的是,反过来,它的学习过程也是分阶段逐层递进的。一门好的此类课程,应该可以让不同背景、不同基础、不同目标的学习者有一定的选择余地,这也是我们设计这门课的重要标准之一。

对于本专业的学生,我希望能给他打好基础,学好专业必备的知识,将来可以应用于科研。对非本专业的学生,我希望他能通过学习,明白计算机是怎么运作的。

另外,“吃不饱”的同学,可以阅读教材上加星号的部分,还有很多习题可以“加餐”。

而没有专业背景的学生要完成这门课,可能会比较吃力,因为这门课需要用编程来完成作业,所以没有基础的同学需要投入更多精力。

果壳网:你有什么书推荐给感兴趣的同学阅读?

邓俊辉:我推荐《计算几何》(Computation Geometry)。

在第一节课,我举了个例子:怎样从一些点中找出面积最小的三角形。这个问题看似复杂,无从下手,其实这个问题只是计算几何的一个经典应用。

计算几何这门课在美国是很常规的一门课,在中国却不太流行。许多时候,计算机图形学、可视化都以它为基础。而且在实际中,有很多看似困难的问题,都能在这里找到答案。有兴趣的同学不妨一读。

果壳网:第一次录制MOOC课程,你有遇到什么困难吗?

邓俊辉:一个是镜头感。学校在录制视频之前就跟我提过,录制课程需要有镜头感。在教室上课的时候,我是面对学生讲课,学生有没有听懂,我可以通过学生的表情眼神得到即时反馈,思路也会源源不断,越讲越有劲。而录制MOOC课程,我只能对着冷冰冰的电脑、黑乎乎的摄像机讲课,思路很难被激发。不过开课之后我感觉好多了,当我看到讨论区上同学的讨论,我就仿佛感受到了屏幕另一边的认真学习的同学。

另一个是碎片化。平时我课堂上,一个知识点甚至会用一小时来把它讲清楚。MOOC课程偏向碎片化,每个视频不宜超过20分钟,这有违我一向的讲课风格。后来我想到了办法,我平时上课不也是时不时抛出一个问题吗?所以我就在抛出问题之后,把视频停下,到下一段再给出解答。

还有一个是,录制视频用的手写笔操作有些复杂。通常,就因为这0.1秒的操作时间,老师讲课就分神了。为了解决这个问题,我写了个小工具,使我可以通过简单的操作自由地控制屏幕,从而就保证了我的思想连贯。

第一次网上开课必然会遇到很多问题,难以做到尽善尽美。我所能尽力做的,就是在教育上向前迈进一步。

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注