论盲人摸象带给计算机教育的新思维
2009-02-04阮宏玮李华邢海峰
阮宏玮 李 华 邢海峰
摘要:本文针对计算机教学的难点和普遍存在的重理轻文倾向,以盲人摸象的新解另辟蹊径,提出教学过程中应注重结合文、哲等学科以提升教学效果,实践教学证明,这样的思维方式有益于启发学生的跳跃思维,对传统的计算机教育有一定的启示意义。
关键词:盲人摸象;重理轻文;新思维
中图分类号:G642 文献标识码:B
1引言
随着计算机学科的发展进步,各种新颖的技术蓬勃发展,吸引了越来越多学校的教师、学生关注,竞争的资本相应地演变为具体技术掌握多少的评比。为了使学生在竞争中脱颖而出,也就迫切要求学校努力跟进比拼,在不断追逐的过程中,计算机的教与学之间暴露了一些不平衡现象。
对于教师而言,由于其本身素质积淀,直接获取信息能力、理解能力都比较强,从技术到技术的过渡并不需要很大周折。相对于教师全面综合地教授,对学生来说,其自身能力有限,底子薄,甚至于没有任何基础知识,直接接触、吸收消化起来就会感到艰涩,直接从技术层面入手困难重重,许多学生经过几年学习依旧跨不过门槛,实际动手能力很弱。
是什么导致了这样的结果?应该承认,教师在每节课前都会精心准备,力求生动细致,融会贯通,讲授必尽心竭力。但每门课程都会发现这样的现象,学生的入门过程及灵活实践是困难的。比如,在讲解C++语言编程的时候,一个首先的问题就是如何认识编程语言的数据类型。一般讲授时都会把它作为一个重点反复阐述,而学生虽在数学课上学了不少的数,也知道有整数、小数等等之分,但仍旧被计算机语言中的数据类型弄得一头雾水,不知所以。最后导致徘徊在门外很久,即便入门,很多学生很长时间内也都是“机械的”,“短视的”。本文针对这一教学实践碰到的普遍问题,试图通过探讨新的思维教学方法以改善教学效果。
2盲人摸象的新思维
2.1新解盲人摸象
盲人摸象,出自《大般涅槃经》三二:“其触牙者即言象形如芦菔根,其触耳者言象如箕,其触头者言象如石,其触鼻者言象如杵,其触脚者言象如木臼,其触脊者言象如床,其触腹者言象如甕,其触尾者言象如绳。”这个典故的大意是几个盲人将大象理解为他接收的信息所表达的样子,比喻对事物只凭片面的了解或局部的经验就乱加猜测,试图作出全面的判断。
这里,让我们换一个角度,重新审视这个成语的含义。首先,暂且摘去其贬义词的帽子,回归它的本源,就是简单的一件事情:几个盲人触摸大象,感受信息,表达理解。大象,作为一种客观存在,它本身所具有的性质已经固化了,并不为外界的思维所决定。下面就是我们认识大象的过程了,这个认识过程自然是包含对错多少的问题了。几个盲人各自按照自己不同的视角,接收信息,得出了各自认为正确的结论。这里还要注意一类人,在这个故事当中,视力正常的人,在哄然大笑的同时也表达了他们的想法,那就是大象似乎应该是几个盲人结论的有机综合才更合适一些,这样的结论才更靠谱。结果,这个成语就被视力正常的人引为片面观察的典范!其实,这个摸象的过程还可以继续深入下去,给视力正常的人空个位置出来,也请下场摸摸,说说大象“如”“何”?恐怕这个问题也并不好回答。把所有盲人的感受都综合了就是对了?好像是了。那对了多少?还有多少没说清的?啥时候能说清?有个答案倒是似乎更贴切一些,大象就是大象,四不像。另外的一个表述会更玄妙一些,“大音希声,大象无形”。明眼人都朦胧着,还苛求盲人看清么?那大象到底像什么?只有天知道!
现在,请跳出这个有些让人陷入诡辩的圈子,停止可能无休止的争论,回到现实认识的角度简单梳理一下。其实,从上面的分析可以看出,各色人群都给出了基于自身视角的判断,这些判断都有一定的依据,不能说其完全对错。站在某个角度看,这个判断恰恰是一种正确的体现,是有闪光之处的。这个闪光点在一定条件之下也是可以为我所用的。
2.2解困教学难点
如果上面的新解能够被接受的话,那么回到前文提到的教学难点,还是以对数据类型的理解作为突破口。以往的教学过程中,讲授着重是从计算机的观点入手,依托已有的数学知识,硬性地将数据类型向现实模型需求映射的角度理解,有些还是语焉不详。对于教师这是再自然不过的事情了,但对于学生则是一件痛苦的事情。刚学习编程的学生大多没有任何基础,对于事物的理解多是基于现实模型的,而计算机入门突出的一点就是向机器学习,学习它的思维模式,将人脑中所理解的思维模型映射为机器可以理解的编程模型,这个是需要功底火候的,并不是一朝一夕就可以解决的。而讲授的时候要求其从需求直接往类型上过渡,多数学生都要经历一定的时间,有些是死搬硬套,就着一锅夹生饭吃了下去;还有一些则始终不得要领,最后简单地斗争在了编程怎么会有这么多不可思议的类型上了。一些学生从这里开始就感觉计算机编程并没有想象中的那么有意思而逐渐拉开了距离。
教与学之间的差距是怎么产生的呢?这里拐个弯儿,先看看教材是如何编写的吧。大部分编程的教程,其立足的基点都是有经验的作者千锤百炼提纯而后生成的结果。为避免繁复使学生陷入混乱,为什么定义数据类型等探讨本质源泉的知识统统都被抹掉了,留下的仅是思考后的结果。这在编写教材的角度是可以理解的,毕竟不能苛求它一网打尽。下面就是讲授阶段了。教师在讲授的时候,站立的源点是已经有了数据类型,要做的就是讲授数据类型的用处和怎么用。如果回忆一下自身的感受,可能会发现,当初就是这样走过来的,思想斗争了一段也就接受了,再往前往深似乎是无意识的过滤掉了。当初的学习历程就是这样,现在的讲授历程也就是这样,以后的学习历程就还是这样。
讲授的书定了,讲授的对象定了,那差距就要从讲授的人身上找了。如果以往的教学方法效果不佳的话,换个思维也许会好些。现在重新来认识下我们的老朋友,数据类型。
为什么要有数据类型?类型是对系统的实体的一种抽象,它描述了某种实体的基础特性,包括值的表示以及对该值的操作。这个定义高度概括了类型的本质。和现实事物对比,这个概念不难理解。如果这个容易的话,看看下面的问题。为什么要有这么多不同的数据类型?为什么要有长度限制?……最后,为什么不能没有数据类型或者有个省事的方法,想什么就是什么,不要让程序员受累?大概最后一个问题的答案才是学习C++语言的学生最希望的。
所有这些问题的答案可以试试采用盲人摸象的思维方式来思考。从计算机的角度看,所有的信息都采用0、1组成的二进制流表达。面对滚滚而来的二进制流,如何才能明白它的意思?这首先就是一个切分的问题。切分之后,又该如何理解这些一段又一段的片段呢?所有这些就好比是大象,客观地摆在那里,如何认识就看理解方式了。这时就需要一个视角,即以什么样的视角来认识问题。一般,我们在定义时就指定了视角,也就是数据类型。接下来所有的操作都按照这个视角去理解。如果有什么需求的话,还有强制类型转化,这恰好是从另一个视角来看待,如果在精度范围内那就相当于看对了,反之就是看偏了。再想想C++的重要特征,继承与多态。子类与父类相互转换也可以理解为对于同一实体的不同视角。如果可以转换就是对了,否则就是类型匹配出错。现在换个新颖的角度。在并行编程库MPI,提供了许多适合于数据传输的自定义数据类型。发送者和接收者在进行消息传递的时候,并不需要类型严格匹配,相反,只要能保证数据正常传递,双方完全可以按照各自所定义的类型去看待数据。再来更广泛地看看数据类型的发展。C++作为强类型语言对于程序员的要求比较高,自然也比较精确,但很多时候用起来感到并不顺手,学习曲线比较长。后来逐渐发展出了各种各样的动态语言,比如JavaScript。也许是倾听到了程序员的心声,基本上各种动态语言都支持动态数据结构,好多都只有寥寥的几个,一般时候只要一个就包办了,采用的是“想要它是什么,它就应该是什么”的理念设计的,一下子将程序员从数据类型的“苦海”当中解放了出来。当然,数据类型演变到如今,各有所长,不能一概而论。
总之,从上面可以看出,视角决定了认识的程度,不同视角都有其作用的方面。从实际效果观察,最初在引入盲人摸象新解的思维时,这已经不仅局限于计算机教学了,所以这种颠覆性的思维必定有个短暂的接受过程,一旦禁锢的思维打开了一扇天窗,反响必定热烈,而事实上取得的效果也是明显的。
3新思维的启示
计算机编程课程设计是体系化,一环套一环,并不是一蹴而就的。一般每位老师只是从某一环入手,在了解了学生基础现状后,按照所授课程目标着力精炼、塑造学生,力求符合本门课程要求,为后续课程提供坚实基础。但实际当中往往并不如意,等到后续课程跟上来才发现原来的基础也不如意。
以笔者所教软件编程实践为例,这一环就是以“C++编程”课为基础的。如果照本宣科,那么就应该以实例带动能力,通过高标准、严要求的实训,不断训练以打磨出专业的气质和素质。但经常是真正开始的时候才注意到所要求的基础其实并不扎实,并且思维僵固。实训开始时期,许多学生经常停留在某个数据类型如何定义上面,提起笔来很长时间就是落不下去,即便落下去也是写五行删三行,反反复复好几回。通过交流调查发现,学生在当初学习编程基础时对于这些概念就半生不熟,而教师在讲解的时候又将其作为重点反复加强,结果在学生看来就是越描越黑、不知所以,最后只能是按书本例子强化记忆,其结果就导致思维僵化,应用生硬,一旦遇到实际问题就难免畏首畏尾,这时侯就不得不暂停下来先克服数据类型带来的困惑。如果仍然照搬套路原地打转,其结果难免流于形式。此时需要有新鲜的思维方式注入,这样才能给禁锢的思维起些化学变化。从前面也已看到,其实就是要换个视角,但是直白的讲解可能会变得苍白,顶多就是翻些浪花,感受并不深刻。但是如果讲授时能够跳出自己的圈子,充分借鉴其他门类,尤其是对于学生影响很大但又经常忽略的文、哲领域可能更好,而事实上这些领域又的确在更宏观的范围内提供了高度概括的思想,比如以笔者借鉴的盲人摸象,在软件编程实践课中将其引入并加以结合,针对困惑讲解问题,就可能会掀起大浪。
从后期效果对比来看,很多学生都能够充分意识并有意地开拓思维,即使一些学生仍然有困难,但由于触动了思维,也会更加积极思考。现在再深入思考一下,是什么阻碍了我们放宽视野呢?目前,计算机教与学当中普遍存在的一个问题是重理轻文倾向严重,不仅仅是学生对于文科有偏见,就是一些教师也有这种倾向。学生本身学习计算机对于理科要求就很高,这已经是很大一块了,还得拿出大把时间去学习文、哲方面的内容,而且很多时候并不能学以致用,反倒有耽误精力之嫌。所以教学时不自觉地只在相关的领域内打转,讲授偏重技术,学习更是看重代码,这样,按照原本的算法思路直接讲授、理解起来颇费周折。即便理解了,多数也局限于这个圈,难于跳出。事实上,很多定理、概念、算法等等都渗透了鲜明的文学、哲学色彩,从这样的角度来解释会更加清晰明了。比如操作系统中经典的LRU算法,即便以示例方式解释起来也比较麻烦,其实,可以换一种精炼的解释方法,“温故而知新”,这就高度概括了该算法的核心思想。再比如计算机体系结构,无论是奠定基石的基本原则、大概率事件优先和Amdahl定律,还是指令集设计等,处处闪现了抓主要矛盾的思想。而在许多时候学习这些都被认为是在浪费时间,学用两张皮,即便事实上直接或间接地在起着作用,但不能做到有意识地积极发挥。这固然有文、哲课程本身值得检讨的地方,但计算机教学也要有意识地积极包容,博采众家之长。
从上面分析可以得到这样的启示,无论是教还是学,应当综合充分利用各个门类的知识,而不是厚此薄彼,这样才能事半功倍,真正做到融会贯通。
4结束语
本文从“盲人摸象”这个人所共知的成语入手,通过新的思维方式对目前计算机教学中的一些问题做了探讨,并引申到各个层面启示传统学科对于计算机教学的重要意义。通过实践教学发现,这样的思维方式不仅使教学本身取得了良好的效果,而且也有益于启发学生的跳跃性思维。
参考文献:
[1] 吕凤翥. C++语言基础教程[M]. 2版. 北京:清华大学出版社,2007.
[1] 张晨曦,王志英,张春元,等. 计算机体系结构[M]. 北京:高等教育出版社,2003.