参加CCF导教班学习的体会
三明学院信息工程学院 张鸣华
2014-7-6至2014-7-12在北京怀柔红螺饭店参加2014年的CCF导教班的课程学习。怀柔环境优美、远离城市是静心学习的好地方。这几天导教班的学习有两部分的内容,一是计算机问题求解,二是计算机组成原理,我主要参加的是前者。
《计算机问题求解》,由南京大学陈道蓄教授授课,介绍将计算机专业若干门基础课程(导论、程序设计、 数据结构、算法、离散数学)有机整合的思路与具体做法,以及典型专题的教学示范。他讲课前,就会笑一下,讲课过程中也会笑一笑,这笑容好像是想到了什么很有趣的事,他讲得行云流水似,没有疲倦。他有很深厚的数学和外语的功底、有很多质朴的理念,让我们有了好多的感悟。他的观点总结如下:
一、教学方面
1.学生不学,主要是我们教得太多。
学习是一个内化的过程。当我们在课堂上完整讲述课本上的概念,而没有思考的空间,就开始磨灭所有学生的学习兴趣。看得懂的要让学生看。他强调了让学生的预习。
2.课时太多占据了学生学习的时间。
很多时候我们老师都感觉课时不够,希望能够增加课时。陈老师让我们逆向思考:“如果课时变为现在一半,在不减少内容的情况下我们需要怎么做?”,不做加法做减法。当我们思考“学生为什么需要学习这门课程(这个知识点)?”而重新整合课程内容时,我们应该思考哪些是“道”(需要我们引导与梳理),哪些是“术”(需要学生实践,从练习中获得经验与感悟)。也就是我们希望通过课程对学生的四个方面产生影响:意识(熏陶与引导)、知识(梳理与讲解)、能力(指导下的实践)、技能(足够的训练)。
我们的问题是各门课都排满了学生的时间,学生谈不上课后的预习与复习,或者课后不知道怎样学习,一切都靠课堂完成,这样时间就完全不够了。
· 3. 复合型人才培养的重心在“基础”,而非“技术”。没有基础就谈不上能力,技术不等于能力。
社会技术更新越来越快,学校与专业紧跟社会技术潮流,往往会限制了自身的发展。以如物联网专业为例,培养方案绝非简单拼凑出若干门计算机与通信课程,而是应该重视对学生计算机与通信的思维培养,毕业后能够与计算机和通信方面的人才沟通交流,能够在较高层次整合两方面的资源。
IT人才培养应以算法为核心,以数学为基础。
4.教师的有限责任。
教师,特别是高校教师,不能成为学生的保姆,哄着学生学习,喂给学生知识。教师有责任明确教学目标,使用合适的教学方法与学生开展互动交流,让课堂有趣,让学生有收获;学生也有责任按照老师的要求预习、做作业、课堂上与教师进行互动。模糊了责任的边界,也会迷失我们的教学目标。
另外,综合学生经常反映“计算机专业课程内容太多,但没有一门很深”,导教班上陈老师分享了自己的做法,“如果一个问题非常重要,则会让此问题反复出现,但每次出现的形式可能都不一样;不是包括尽可能多的问题,而是让重要的问题能够给学生留下深刻的印象。”
让我感到一个言外之音是:他的学生在学,他的教在实处。陈道蓄老师已经连续3年获得“最受学生欢迎的老师”的称号。他说:“要让学生有兴趣,自己先要有兴趣”。他今年67岁,因为教改还没有退休。
5.期望学生达到的是:意识、知识、能力、技能。任何一门课不应该以灌输知识为唯一目标!意识用熏陶与引导、知识用梳理和讲解、能力用指导下的实践、技能用足够的训练。即努力做到做到“无缝连接”。
二、教改方面
1.领导做教改只需一年,普通教师做教改需要8年左右。也就是说,用少数人的力量做教改是很难的。陈老师本身就是前南京大学软件学院院长。
2.教改的关键问题
主问题:思想与能力;辅问题:学生学习动力。
3.教师的课堂意识:学生从这个课中实际学到了什么? 而不仅是“应该”学到什么。对所讲的内容要告知做什么用。
三、课程建设:
1.课程建设之理念
陈老师画了这样一个图,如图1所示。

图1 课程建设图
2.课程目标
意识:建立在计算机科学领域持续追求效率更高,质量更好的算法的创新意识;
知识:掌握能支持在计算机科学领域进行探索所需的离散数学、问题建模、数据抽象、算法设计与分析、算法复杂性理论等方面的基础知识;
能力:具备分析问题,并采用一定策略进行算法设计的能力,并能对算法进行基本分析的能力;具备自我探索学习,并凝练问题的能力;
技能:掌握熟练使用C++语言及其开发环境, 实现能正确运行的程序的技能。
3.课程处理
将若干门基础课程(导论、程序设计、 数据结构、计算机算法设计与分析、离散数学)有机整合成一门《计算机问题求解》。在体制上用四个学期即2年时间,将这些课程分到程序设计、 数据结构、计算机算法设计与分析、离散数学这几门课上(这时的课程名称只是用于教务处的成绩统计用)。
4.使用教材(如图2)
DH: David Harel, etc.: Algorithmics – the Spirit of Computing, 3rd ed. Pearson Education, 2004 (有高教社影印版)
UD: Ulrich Daepp, etc.: Reading, Writing, and Proving – a Closer Look at Mathematics, Springer-Verlag, 2003(有清华社影印版)
CS: Clifford Stein, etc.: Discrete Mathematics for Computer Scientists, Pearson Education, 2011 (有电子社影印版)
DW: Douglas West: Introduction to Graph Theory, 2nd ed. Pearson Education 2001(有机械社影印版)
TC: Thomas Cormen: Introduction to Algorithms, 3rd ed. MIT, 2009 (本书第二版有高教社影印版)
TJ: Thomas Judson: Abstract Algebra – Theory and Applications, GNU, 1997
JH: Juarj Hromkovic: Algorithmics for Hard Problems – Introduction to Combinatorial Optimization, Randomization, Approximation, and Heuristics, 2nd ed. Springer, 2004
WS: Walter Savitch: Problem Solving with C++, 7th ed. Pearson Education, 2009 (有清华社影印版)
5.课程安排
分四个论域,整个课程标准学时为4个学期(1-2年级),其中:
q 第一个论域安排在1年级上学期;
q 第二个论域安排在1年级下学期;
q 第三个论域安排在2年级上学期;
q 第四个论域安排在2年级下学期。
每个论题对应一个星期的学习时间,其中:
q 引导性课堂讲授2小时;
q 指导性课堂活动2小时(分小班进行);
q 学生自行阅读指定教材以及完成巩固性作业预期时间8小时;
q 指定的探索性课外作业以及编程任务预期6小时
论域1索引:计算入门与数学证明
理解计算思维最核心的概念,了解计算的基本方法与局限;接受基本的形式化训练,掌握抽象数学证明的基本方法。
1-01:为什么计算机能解题
1-02:什么样的推理是正确的
1-03:常用的证明方法
1-04:基本的算法结构
1-05:数据与数据结构
1-06:算法的描述
1-07:不同的程序设计方法
1-08:集合及其运算
1-09:关系及其基本性质
1-10:函数
1-11:算法方法
1-12:算法正确性
1-13:有限与无限
1-14:算法的效率
1-15:问题的难度
1-16:基本计算模型与不可 计算性
1-17:并行与并发
1-18:模算术与费马小定理
论域2索引:经典数据结构与算法
理解数据抽象,理解并能够应用常用的数据结构;掌握重要的算法设计策略,以及算法设计与分析的基本理论与方法;理解并能够应用支持上述内容的离散数学工具与方法。
2-01:算法问题与解题的算法
2-02:组合与计数
2-03:分治法与递归
2-04:递归及其数学基础
2-05:离散概率基础
2-06:概率分析与随机算法
2-07:排序与选择
2-08:基本数据结构
2-09:堆与堆排序
2-10:Hashing方法
2-11:搜索树
2-12:动态规划
2-13:贪心算法
2-14:用于动态等价关系的 数据结构
2-15:图的基本概念
2-16:图的计算机表示与遍历
2-17:树的数学性质
2-18:最小生成树算法
论域3索引:典型应用问题及其求解方法
掌握典型应用中抽象出来的重要算法问题的求解方法;理解并能够应用支持上述内容的离散数学工具与方法。
3-01:单源最短通路算法
3-02:多源最短通路算法
3-03:图中的匹配与覆盖
3-04:图的连通度与网络流
3-05:最大流算法
3-06:图论中的其它专题
3-07:矩阵计算
3-08:线性规划
3-09:多项式与FFT
3-10:群与拉格郎日定理
3-11:环与域
3-12:数论基础
3-13:数论算法
3-14:密码算法
3-15:代数编码
3-16:群与对称
3-17:串匹配
3-18:计算几何算法
论域4索引:复杂性理论初步与“难”问题的算法
掌握复杂性理论的基本内容与问题规约方法;理解解决“难”问题的主要方法、技术以及相关的重要理论结果。
4-01:问题的形式化描述
4-02: NP完全理论初步
4-03:伪多项式算法
4-04:分枝-界限算法
4-05:局部搜索算法
4-06:松弛算法
4-07:近似算法的基本概念
4-08:覆盖问题与最大割集 问题
4-09:背包问题
4-10:旅行推销商问题
4-11:Bin-Packing问题
4-12:随机算法的基本概念
4-13:素性判定问题
4-14:等价测试问题
4-15:最小割集问题
4-16:可满足问题
4-17:去随机方法
4-18:启发式算法
关于程序设计学习的说明
本课程要求学生在课程全过程中持续进行程序设计技能的训练。主要通过一系列的编程任务来实施。
每个编程任务列在各论题的说明中。如果所列是一算法名称,则表明该算法是本周学习内容中的关键算法。则该周编程任务为:实现该算法,并用一组输入,比较实际执行效果与理论分析值。
其它编程任务与所列其中的论题只是时间安排的考虑,编程任务在一星期之内完成,其内容与当前的论题内容不一定有直接联系。
指定教材中有一本C++程序设计教材,该书用于学生自我学习以及随时参考查阅,并提供编程任务,其任务号用“章序号+pp+题号”表示。
第四学期的编程任务选用竞赛试题,其中可安排2-3次竞赛形式。
在分小班进行的指导性课堂活动时间(特别是第一学年)可以安排一定的程序设计指导时间。
关于离散数学的说明
本课程将离散数学相关内容分散安排, 期望达到的效果不是削弱, 而是增强同学们的数学能力;
为了达到上述目的, 主要考虑是:
将数学内容与其应用(在问题求解方面)尽可能安排在相近的时段, 以巩固知识, 并提高同学对数学重要性的认识;
强调证明, 逐步引入相对严格的形式化方法, 提高同学的数学”成熟度”
尽可能将数学概念、问题求解模型与计算结合在一起
本课程中不包括布尔代数的内容
四、感受
是高素质的老师加上勤奋才可以上好一门课。好的教法远超过精美的PPT。用陈老师的话总结课程教学的话就是:自我探索、深度引导、理论严密、训练充分。
学生的学习应该是一个整体。靠一门课来培养学生是不够的。课程建设就是整体提高课程之间的链接与效率。
在最后一次讨论中,陈老师说了这样一句:让他人有收获,就感到知足。这是为师的最高境界。
此外,我还听了一次马殿富、高小鹏老师的“计算机组成原理实践”。也让我感到震撼。 一是他们严谨的教学精神,二是他们对实践的做法。第一天就要求学员要用最少的代码来设计一个CPU。这个课程中有4位老师是全部完成实践任务的。
在这个班上每位学员都觉得收获很大,我们与老师之间每天都有很多的交流。我们院的老师参加这样的培训是非常好的。