上一门不用教科书的课

2009-03-17 09:14王立天
计算机教育 2009年3期
关键词:数据结构课程教师

王立天

这个报告可以说是延续2007年在西安“第三届全国计算机教育论坛”上作的分享。那次的报告内容似乎比较理论,不免会让人觉得是在唱高调。因此进一步与各位分享在教学上的实际案例,提供大家参考如何在一线教学上落实那些理论。报告的主题:不用教科书的课程。报告内容依次为:报告动机、教学目标、教学理论、课程设计、教学方法与课程实施。

1 报告的动机

以下先作一些背景的说明,部分内容是延续前次的报告,顾及大部分读者可能不清楚,容我略略重复述说。

1.1 动机一:新科技、新知识

个人一直有个问题在思考,我们的计算机教育要教孩子们什么?因为当今计算机的技术进步太快,新的知识大约每两年就成长一倍,学生大一所学的新知识,到大三可能就已过时,因此学校课程改不胜改。在海外教书十几年间,感觉还不会那么强烈。回到台湾这些年间参与课程委员会,发现课程今天改、明天改、过了六个月又要重新讨论。那么,我们到底要给孩子些什么呢?

美国前教育部长曾经感叹道;2010年最迫切需要的十种工作,在2004年时可能根本还不存在。回想十年前,再看看现在,我们也会有同样的感慨。因此我们的挑战是要教学生面对目前还不存在的工作,使用现在还没有发明的科技。不管我们的课程是七个核心还是九个核心,重点是要如何教他们进了社会解决可能从来没有想过,甚至没发生过的新问题。在这个概念下,关心到孩子真正的需要,如何从“学什么”(内容)转到“如何学”(过程),是我的主要动机之一。

1.2 动机二: 哈佛的通识课程

在去年的报告里面也讨论过,通识教育是美国大学教育的核心,大学好像是一颗大树,主干应该是通识教育,而大树上的分枝才是专业主修。就这方面的认知,东西方有很大差异;我们的大专院校里是以专业为主,学生考进什么科系就一路念下去。美国大学里三分之二的学生,毕业前都曾转换主修,双主修比比皆是,而台湾3成8的毕业生后悔所选择的科系(注:http://career.1111.com.tw/focus1.asp?sno=1175)。不一样的概念使我们在东方的高校,无法体认到通识教育的重要性。个人因研究课程接触了哈佛大学近年更新版本的通识教育课程(注:http://career.1111.com.tw/focus1.asp?sno=1175),是经过150余位教授三年激烈的讨论后才定案。他们的白皮书中有几句话让我非常有感触,也让我对高等教育有更上一层的见解。

通识教育的目的,一是动摇原有的认知(to unsettle presumptions);二是使熟悉的变为陌生(to defamiliarize the familiar);三是揭露表显下的事实(to reveal what is going on beneath and behind appearances);四就是让学生迷失方向,使他们重新定位出发(to disorient young people and to help them to find ways to re-orient themselves)。我常常对我的同事挑战,哪位能设计一课程,让学生迷失方向?我们东方的教师教学,都习惯有头有尾说得清清楚楚,希望让学生彻彻底底明白一切。而西方的教学思维却是让孩子在课堂上迷失方向,让他自己寻出一个方向来。在以下的报告中,我将分享如何把这个概念融入我的教学。

1.3 动机三:芬兰教育

国际经济合作发展组织(OECD)对全球15岁学生整体表现评比,发现芬兰学生成绩落差最小(注:www.kingstone.com.tw/book/book_page.asp?kmcode=2015200084888&show=content&OpenArea=1),被评鉴为全世界最平衡的教育体制。但落差小并不代表成绩差,芬兰学生就阅读与科学两个项目在国际教育评量评比(PISA)中称霸,而且解决问题和数学两项分居第二。芬兰教育的特色是绝不放弃后段的学生,他们的理论很简单,教育本身就是让学生们在一种环境中成长,聪明的孩子懂得学习、会学,而那些因各种原因落后的学生,反而应该得到照顾。

芬兰的教育特点有这样几点:(1)上课时数少,课后复习时数少,暑假长;(2)没有资优班,不需赢在起跑在线,满七岁才入学;(3)不让一人落后;(4)没有后段班,只有引导班;(5)中小学生下课很少呆在教室,即使天寒地冻,下课也要全副武装出去玩;(6)偏远地区学生坐出租车上下课;(7)没有固定上课时间、下课时间;(8)教育目的在于培养孩子终身学习能力;(9)重视过程甚于结果。我认为最重要的就是最后一点,也是我实施教学上的主要原则。

1.4 动机四:大学不等于职业教育

大学与职业教育到底有什么不一样?曾经有几件事给我个人很大的启发,举其中几个小故事;大学后在台湾得到第一个全职的计算机工作,每天带着公司发的领带进进出出非常快乐,拿着系统工程师的小名片到处发感觉很骄傲。可是坐在我旁边一位高职毕业的小女生,因为她的COBOL程序又漂亮又整齐,老板喜欢她不得了,看到我写的程序眉头就皱起来了。我开始认真思考念大学到底为何?大学生难道不如高职生?

多年前我在美国教书时的几位学生,刚毕业就花了相当于大学一年学费的经费,去补习报考火红的Novell证照。当时我在想干脆学校也来开班,大家各取所需多好,大学就直接取代补习班,还是补习班干脆取代大学了?另外在网络泡沫化前,不少原来念生物、历史、中文的朋友跳槽,上6个月的补习班拿计算机证照,还都能找到薪水不错的工作。如果只是找工作上班,学生根本不需要在大学里混四年。大学存在的意义是什么呢?个人认为应该是要给学生一辈子能运用的能力,这也是设计课程的主要思考方向。

2 教学目标——重学习过程

总结以上的想法,我订定了一个教学目标就是“重视学习的过程”。同时在个人多年的教学中发现,学生对计算机的概念往往是很零碎,缺乏一个具象的认知。因为传统的学习模式里,仍然是老师讲学生听,学生缺乏主观的思考,学习结束没有与其他科目横向连接,不久后就把所有学的还给老师了。因此我的教学目标是以下面几个方向来进行:(1)引发学生学习的动机,(2)启动学生自我学习的能力,(3)培养学生的责任心,(4)打破老师讲学生听的单一模式,(5)引导宽广面的认知,建立具象立体的概念。

3 教学理论——认知结构学习论

教育心理学里面谈认知学习(Cognitive structure learning)通常会说

到两大理论,一是J.S.Bruner的发现学习论(Discovery learning theory);另一个是D.P.Ausubel的意义学习论(Meaningful learning theory)。就我粗浅的了解,前者认为教师扮演的角色是引导者,告诉学生怎么做,由孩子们主动去发现知识中所隐藏的原则。教师好比一个球队的教练,是让学生们下场去打球而不是教练。而后者的概念和我们东方的思维比较类似,由教师事先把教材充分准备好,将新知识详细规划在清晰的课程架构上,教学以讲解为主,且要从头到尾都说清楚,而讨论及其他操作方式为辅。虽然觉得两种方法都不可缺,个人的教学比较倾向前者的运作。并且另一位专家Paulo Freire认为知识是动态的,应该用对话来落实教育活动,他建议的提问式教学(Problem posing)与我所想要做的不谋而合。

4 课程设计:螺旋式课程

课程的设计是采用由J.S.Bruner提出的螺旋式课程(Spiral curriculum)。假如教学像爬山一样,通常我们的教学习惯是一口气从山下直线攻顶,从A讲到Z非要一次说清楚不可。螺旋式课程就像是绕着山转,在相同的角度看到的风景虽然都一样,但每次绕回来时的高度不同,能看到的广度和深度都不一样了。等到达山顶时学生不仅对山有具体认知,也能掌握四周环境全面性的关联知识。

以螺旋式的理念应用在数据结构教学,课程设计中我有两个面向,一个是以数据结构课程作内容;另一个是以计算机核心课程作内容。这样操作的原因,是与当年第一次学数据结构的痛苦经验有关。当时我很想知道数据结构是什么东西,也想知道学习数据结构的目的是什么,它将来的运用是在什么方面。上课前到处询问打听,上课间老师也认真讲了很多,学了一堆东西还是不清楚数据结构要做什么,好像与其他课程没发生什么关系。所以,现在我将数据结构课程作一些扩展,有机会就会加上计算机核心课程基本知识的论述。

5 教学方法——改良式五段教学法

课堂教学是采用改良式五段教学法,是由台湾熊慧英教授改良自德国教育学家J.F.Herbart所提出的教学法。熊慧英教授之前任教于师范大学,实务经验丰富,经历幼儿园园长、中小学校长、大学系所主任。她改进的五段教学法内容如表一,其特色是学生本位,活动以学生做主角,而教师是导演,每一次上课都可按顺序,将五个过程来联贯实施。

我个人认为最重要的步骤是最后的“收网”,一方面教学效果要实时验收,验收方法很多,如小考或学生上讲台演练都可。但更重要的是一定要清楚交代预习以及强调作业完成,然后在下一次上课时严格的验收预习及检讨作业。否则学生没预习,课堂里教师和学生无法互动,就会回到老师讲学生听的老局面。另外“连结旧经验”也是非常关键的,由学生找出上堂课和这堂课的关联,是培养他们建立学习方法的重要过程。事实上花了这些时间后,教师的讲解分析与概念补充会明显提升效果。“回馈”就是让学生们能够发问、讨论、实际操作,有什么创新议题或有好的想法,请千万留时间给学生。我们东方的孩子不太会问问题,原因之一是我们没有留时间给他们去天马行空的思考。

6 课程实施

在课程实施上我有如下的规划:

(1) 有非常清楚的课程大纲:就好像旅游导引地图,要说明这个课程如何实施,让学生能随时清楚他所在位置。

(2) 依学习状况给予明确的进度:师法芬兰不放弃后段学生的原则,进度会为落后的学生不断作调整,不会为赶进度而赶。对进度快的学生给予额外的材料,也要求他们协助落后的学生,养成一种帮助他人的良性社会行为。

(3) 不指定教科书:数据结构不是一个新的学科,发展已经几十年了,图书馆的数据多,网上的免费教材也很多,要让孩子们自己去找资料。将来他们进入业界,老板指定一个项目,不会告诉到哪找参考书。不指定教科书的另外原因,是不希望一本教科书就可能把学生的概念给固定了。

(4) 鼓励读书小组:将来学生进入业界,会经常需要小组互动。读书小组为将来从事社会化活动的前奏,学生偶尔会有矛盾出现,但能学到做人处事的原则。同时学生来问问题时,也鼓励结伴同行,因为事先他们经过脑力激荡的讨论,讲解吸收的果效倍增。

(5) 非常强调预习、复习:预习是希望学生事先了解上课内容,而且课前接触不同的资料,课间讨论时才能积极参与并言之有物。而学生在课堂上只会记得一周前20%授课内容,如果不实时复习,学习成效一定打折扣。预习、复习能奠定良好自我学习基模。

(6) 学生不提问题就不讲课:这是学习态度与责任感的培养,因为如果按规定预习、复习,又认真做作业,学生势必会有相当的困难疑惑,可以在课间提出经师生来一起讨论(而不是由教师直接答复)。学生如果提不出问题,一种可能是完全没有困难,我会立刻以小考验收。另外一种可能是学生没有预习、复习,我会告诉学生因为他们不负应尽的责任,我也就不负责任而不讲课。但话说是不讲课,我会出一堆深浅互搭的问题要学生当场操作,也会选一些同学上台答题,其中可能有错的有对的,我只讨论而不给答案,让他们带回家成为作业。

(7) 随时以小考评量学习果效:小考(pop quiz)就像爆米花一样,随时都会爆出来,完全依照他们的学习状况进行。考试的时候学生就会发现,在真正了解与大概了解之间有很大的差别,他们也会为没有预习和复习付出“惨痛”的代价,因为小考的成绩占很重的比例。

(8) 作业有连贯性:作业会按照主题分类,相同主题下的许多作业有一定连贯性,如果学生前一个作业是抄别人的,然后又没弄清楚怎么回事,后面一个作业就很难继续。而且小考也能立即反映学生有没有花时间在自己的作业上。

(9) 鼓励上讲台演练:学生主导的课堂,台上的主角应该是学生,亲自上台去演练会加强学生的认知学习,教师不要占太多的时间。

(10) 困难的点要重复接触:利用螺旋式课程的概念,对于一些重要且较为艰难的议题,会在学生糊里胡涂的时候停下来,告诉他们不要急、慢慢来,过两个礼拜利用机会再回头来讲,谈到他们又糊里胡涂的时候,就再等段时间续谈。

7 课程特色:谈天、说地、论人

常思考计算机科学能成为一个science的道理所在为何,而西方的学校常将art 与 science组成一个学院,也不明白为什么文学院和理学院能合在一起,后来有了一些领会,因为art 和 science基本上是一个范畴。既然孩子来到了计算机科学系,我就要带领他们从欣赏art的角度进入science的领域。我希望学生将来成为一个“师”,而不是成为一个“匠”。好比学建筑的要先会欣赏房子,同时才来学如何建房子。

有人认为数据结构的教学,只需教学生使用别人写好的template即可,就像盖房子用水泥灌模子就行了。这让我想起曾获世界设计大奖普立兹克奖的名建筑师安藤忠雄(注:http://web2.ntit.edu.tw/~s14938024/ando.htm),他对清水混泥土特别情有独钟,大部分的作品都是以清水混凝土来表现。但是任何水泥工匠都会用的清水混泥土,有多少人如安藤忠雄盛能深入察觉到构成材料与形态之间的关联?今天我们是在培养计算机的专家,而非计算机的使用者,所以个人会花很多时间和学生谈what、why、how,以系统开发者的角色出发。

譬如谈数据结构前,先谈什么是data?计算机里的data type有哪些?然后指派作业去查什么是ASCII/ EBCDIC/UNICODE等,从bit复习到BCD时会要求学生写一个程序,把一篇英文的文字文件,用加减法将字母的大小写互换,(此时还未开始谈linked list却已开始用到了)。接着浅谈Coding Theory,再从Morse Code论到Cryptography。其中谈到二战德军的Enigma密码机,会要求学生去看电影《猎杀U-571》(改编自1994年6月4日美国海军TG 22.3部队在海上猎获U-505号U潜舰史实)。讲到二战时期破密码少不了提到Alan Turing的贡献,至于ACM 与Turing Award的关系当然也会成为学生的作业题目了。

然后要问学生data放在计算机里面什么地方?接着把Memory比喻成大旅馆,每个房间都有号码,除了确立学生有address/pointer的观念,还可谈谈计算机组织结构。当然任何旅馆都需要有管理,这间大旅馆的经理就叫做Operating System,顺便也把OS的相关业务介绍一下,同时也请大家去查一下Edsger Dijkstra这号人物对OS的影响。这个实例说明我如何把计算机核心课程融入教学,目的不是让学生即刻明白组织结构或操作系统,而是落实螺旋式课程的理念。

继续会要谈什么是data structure?如果把水果当成data,水果摊上摆不同的水果方法就不一样,橘子可堆成山,但香蕉不能因为会压坏。再把书视为data,同样的书在书店呈列图书的原则,与图书馆存书的方法也不相同。因此学生很快了解这个科目的大概内容,就是要谈如何有效的摆放data,能易于观察与处理。接着进一步会论到Data Base,当然要秀几个Data Mining的神奇故事。一定也会扯进Artificial Intelligence, 顺便吹嘘一下我与Lotfi Zadeh在新加坡巧遇的经过。

我会把程序设计、数据结构、算法、计算理论这一系列的课,用训练大厨师的概念串起来。从洗菜切菜到抓码,从油锅炒锅到二厨,从大厨到行政总厨,最后能创新食谱。不仅让学生对课程的关联有一个具象的概念,也顺便让孩子知道国际连锁大旅馆的总经理多由厨房出身。还有许多类似的案例就不逐一叙述。学生也许听的似懂非懂,但是有如竹篮子打水,会慢慢净润透的。

个人大概过于古板,不坚持需要用什么犀利的程序语言来教学,C语言甚至BASIC都可以。但是我要求学生们用纸和笔来写作业,例如在讲递归(recursive)的时候,我让学生去校园里“摸”几张没用的大海报或广告,在海报的背面用手写去仿真Fibonacci数列程序的运作,很多同学表示因此对递归有了清楚的概念。用笔纸做作业就算抄别人的,还得看一眼别人写什么,最起码比直接cut/paste有意义。而从环保面讲起,有人以为用计算机可以省纸,却不知道是更耗费电量。

8 课程实施条件和困难

这样由学生主导的教学模式,有其实施上的条件,不是每个科目或每堂课都可如此操作,大概归纳出下面几个必要环节:(1)班级人数不能过多,一个五六十人的大班级是没办法良好互动的。(2)适合操作性强的课程,或技术性低的入门课程,学生容易藉实做来进行学习。(3)有充足的资源,如图书馆、网络资源、助教等。(4)教师对课程内容有十足的把握,不能本身对课程不熟习,然后要学生去自己读。(5)教师有相当的教学经验,能掌握学生的学习状况,明了可能有的学习障碍。(6)教师能实时问问题,将深浅问题灵活互搭。例如先给一个非常深的问题,学生会冻在那个地方,此时再丢一个浅的问题来引导思路。

曾经尝试与同仁交流如是概念的教学,但是发现推动是有相当大的困难。大概原因如下:(1)大学教师对教育原理陌生;大家都认同对大一和大四学生上课,学习能力差异是非常大,读书的心态也都不一样。但是我们对学生的心智发展及认知表征,理解有限还不如中小学教师。(2)成绩不容易量化;因为强调学习过程,我有20%的分数来自教学过程中的学生参与。每个孩子的发展都不一样,成绩量化是不容易的。(3)效果很难及时评量;学生上完我的数据结构,可能双链都还没有讲,如果按照现行热门的工程认证去评量,能力指标表上的许多空格可能都要空白,没办法打勾是因为无法立刻提出证明。(4)学生初期接受度难;在考试导向成长的孩子,都是由人手把手的被动式学习,突然一切要自己来了,会失去方向而不知所措。

9 结论与心得

就在前个学期我用类似方法教大一下的程序设计,学生抱怨的是老师上课不用课本、不讲课只考试、问问题不给答案。期末学生给的评分结果是全校最末5%的教师,还必须接受学校的教学辅导。可是这学期上数据结构,同样一批学生的反映就不同了,其中一位是这么说的:

…我还想用用看不一样的方法解题,比如这tree要用pointer去做的话,回家我就array做做看,比较两个的不同,反正又不是在读死书。答案出来不正确是一回事,更重要的是解题过程中的想法与思考…

另一位外籍生如是说:

…Data Structure (class) allows me to explore this difficult subject by myself without a guiding hand showing me how things should be done….you realize youre not only learning structuring data, but a lesson that can be applied to your life as whole.”

这两位学生的成绩都不算杰出,他们的评语却给我相当的鼓励与安慰。至今仍然有许多同学讨厌我的教学方式,但一位曾经在大学上过我课的究生表示:

…小时候觉得他上课很无聊,不知他所云。现在才发现原来那是自己的无知。

这句话让我动容且雀跃三分,心想夫复何求?

我们的学生很可怜,从小就被强迫急着学东西,而急的过程常伴着反效果。就像让孩子练钢琴急于求成的家长,第一堂课就开始教孩子指法,急于让孩子弹一首曲子却忽略了节奏,而孩子的节奏感是天生的,节奏感带出来再学钢琴,那对孩子的影响才是终身的。许多教师的教学又急又忙,我常在想急着赶什么呢?学生的学习胃口被破坏,给孩子的有多少是他们带着走的能力?

我们一日三餐,中间都有间隔消化的时间,学习也是一样需要时间消化。尝试行为和思考逻辑是一种“慢学”的方式(注:http://tw.myblog.yahoo.com/jw!D4z7iz2CAh5soj50CN8jqtxH7Rdiy9mUJQ--/article?mid=424),就像细细品尝的道理!我们强调培养创造力,而创造力需要时间,没有办法囫囵吞枣,而培养学生创造力的过程更需要有时间。现在的知识太多,你要给学生的几乎教不完,我觉得要让学生慢慢学,是要能喜爱学习的学。敬送给天下教师伙伴一句谚语:”Tell me, and I'll forget. Show me, and I may not remember. Involve me, and I'll understand.”

对于希望培育什么样的学生的问题,有些教育者表示希望自己是对社会国家有责任感的有为青年;有些教育者则希望他的学生会问问题。我绝对相信一个会问问题的学生才能知人、知物、知天,才会对社会国家有“感觉”。身为高等学府的施教者,我们必须有个清楚的认知;知识的传授只是一个载体,我们要借着这个知识传授的机会,来培养学生发展成为一个完整的“全人”,大学教育不能沦为一个就业的战场。

最后特别要感谢改良五段教学法的熊慧英教授,她与我个人关系非常深厚,因为她是我母亲。不仅在她身旁耳濡目染,她不放弃落后学生的坚持,才造就了今日的我。

猜你喜欢
数据结构课程教师
《ERP原理与应用》课程混合式教学改革探索
数据结构线上线下混合教学模式探讨
课程思政在组织行为学课程教学中的探索与实践
重典型应用,明结构关系
未来教师的当下使命
A—Level统计课程和AP统计课程的比较
秋天在哪里
美育教师
自行车的发明
数据结构与算法课程设计教学模式的探讨