金旭亮
进入21世纪以来,人类已进入信息时代,社会对计算机人才的需求大增。在这个大趋势下,我国上千所大中专院校,除了少数极为专业的院校,绝大部分都开设了计算机及相关专业,在读的学生估计可能达到数十万人。
巨大的市场需求推动了计算机教材的繁荣,各大出版社或引进或组织教师编写,各种计算机教材陆续走进了课堂。
供需两旺,市场繁荣,好像局势一片大好。然而,这欣欣向荣的表象之下,真的是“局势一片大好吗”?
计算机类教材的隐忧
1.题材撞车与“自留地”现象
有谁能说出全国一共出了多少种《C程序设计》教材?有谁能说出全国出了多少种《编译原理》教材?还有《数据结构》、《微机原理》、《软件工程》、《离散数学》……几乎所有的计算机专业骨干课程,都可以列出长长的一个书单。而这些教材,几乎都是一个模子里出来的,从目录上看,内容差不多,甚至连写作的语言也让人“眼熟”。
很明显,教材的写作似乎已进入“工业化大生产”阶段,教材成了“教材生产流水线”上的产品。
然而我怀疑,这样的生产流水线能出得了堪称精品的教材?
教材内容雷同的现状,催生了各个院校在教材选用上的“自留地”现象,即选教材时优先选用本校教师写的教材。因为大部分的教材内容大同小异,那为什么不用自己的?作出这个决定省时省力,而且可以说出一连串“合情合理”的原因。
但教材选用上的“自留地”现象,客观上却为推广优秀教材带来了阻碍。
2.面孔严肃,拒人千里
我的一个朋友有句名言:“书非K不能读也!”他的意思是,学习教材的过程是非常痛苦的,要经历一个“死去活来”的过程,才能最终琢磨出味道来。
在我看来,这实在太确切了。
我们太多的教材,老板着个脸,文字乏味枯燥,拒人于千里之外。在这方面,最典型的是理论性本身就很强的教材。比如《离散数学》教材,大多数都充满了大量的抽象的概念与定理,并夹杂着大段大段枯燥的形式化推导与证明,如果有人告诉我这样的书他读得“很享受”,那他不是一个“数学天才”就是在说反话。
我手头有一本北京某著名大学的老师编写的《离散数学教程》,写作风格比较简洁,但太简洁时就增大了阅读的难度,薄薄的几页有时就得耗去读者数个小时。刚好手头还有另一本机械工业出版社引进的《离散数学及应用》(《Discrete Mathematics and Its Applications》,Kenneth H.Rosen著),就显得平易近人多了。论厚度,这本是那位老师写的书的1.5倍左右,但相比之下,我还是宁愿抱着台电脑用“金山词霸”去啃这厚厚的“英文砖头书”。
这位著名学府的老师她本人无疑具有很高的数学水平,而这本教材,我想可能是针对该校基础很好的本科生编写的,对于像我一样数学水平有限的普通读者选它来学习,无疑是个错误。
国内国外同类教材对比,我不由得产生以下疑问:
为什么国内作者在写作时不能多举些例子,不能多一些通俗的解释?为什么国内作者如此惜墨如金,能不能在书中多写几段话,点明这些理论的实践意义?为什么国内的作者不能在教材中对最重要的知识点给出“画龙点睛”式的强调,以帮助读者去把握这一领域的脉络?
我衷心希望国内作者在写教材时多从读者的角度去想想,不要对读者已掌握的知识与技能作太多的假设!
真正有成就的人,比如许多大科学家,都说他们之所以取得一定的成就,都是因为他们对各自的领域有着强烈的兴趣,著名数学家陈省身就说过他是在“玩”数学。能把如此抽象的学科看成玩具,难怪陈先生能成为一代数学大家!
那对科学的兴趣从何而来?
现在的家长和教师,从小学到大学,无不为孩子沉迷于网络游戏而发愁。为什么这么多的学生会喜欢上网络游戏?很简单,因为网络游戏有趣,好玩,让他们有成就感,可以让他们逃避令他们感到痛苦的学校学习生涯。
为什么学生认为学习是件苦差事?他们天天要啃的教材是这样一副冷冰冰的模样,有哪个学生会喜欢?这是非常自然的事情。
当然,无论怎样编写,教材是无法做到像游戏一样引人入胜的,但教材的编写者完全应该想办法让学生的学习多一点乐趣,少一点痛苦!
当前大多数教材读起来毫无乐趣可言,这点无庸多说,每个过来人都有体会。
3.在写教材还是在写论文
教材的写作风格与论文有很大不同,然而,真有一些教材是以“论文笔法”来写的。
论文有特定的写作方法,高水平的论文可能会用高深的数学语言来表述,比如爱因斯坦最初的有关狭义相对论的论文,据说当时全世界科学家中能看懂的没几个,不为大众所理解,并不影响论文本身的水平。
然而把这种“论文笔法”用到教材上,那就走入了误区。教材的主要目的是传播知识,而不是向世界宣告您又发现了什么新理论。如何让读者能更快地汲取书中的营养,这是教材编写者必须考虑的问题。
除此之外,还有更严重的问题。
当今中国高校非常强调论文的发表数量,太多的人为发论文而忙碌。为了发表论文,出现了一种很不好的论文写作风格,笔者称之为“浅入深出”。作者自己并未作太多的研究,也没有多少真正的成果,为了论文更易于发表,必须人为地加大论文的阅读难度,比如某个问题其实可以用几句大白话就讲清楚的,却一定要绕个大弯子,加上N多数学公式……别人看不懂,呵呵,那是你水平不够!大批这样的论文中不乏“南郭先生”。
由于教材也是晋升高一级职称审批的指标之一,就有人为此目的而拼凑教材,自然而然地将拼凑论文的套路用到了教材编写上,习惯成自然嘛。对这种“新鲜出炉”的教材,只能用一个词来形容——“误人子弟”!
4.从理论到理论的“空对空导弹”
计算机科学本质上是一门实践性非常强的科学,正是实践在推动计算机科学与技术的不断进步,许多的计算机理论都可以找到它的实践基础。
拿《编译原理》来说,其中介绍到的许多理论与方法在软件开发中应用是很广的:复杂的软件如一个编译器,简单的程序如一个计算器;大规模的软件如现代软件集成开发环境,小的软件如某个MIS系统中四则运算公式的解析模块,都可看到编译理论的巨大威力。
然而,太多的编译教材只重理论不重应用,讲了一大堆的文法和自动机理论,啰啰嗦嗦地详细介绍各种分析方法,却都是“纸上谈兵”,从理论到理论,难怪有这么多的学生困惑不已:我为什么要花这么多的时间去学这么难的课程?它有什么用?难道仅为了考试?
知识的获取与掌握是有其客观规律的,一般而言,具体的知识易于理解,而抽象的知识则难于把握,在学习过程中,应遵循“具体→抽象→具体→……”这样一个无限循环的过程。
如果某人对一门学科所知不多,却指望他能通过理论学习迅速地把握这门学科,这违反了人类认识世界的客观规律。
因此,从认识论角度出发,教材的编写是不能从理论到理论的。必须先从实例引入,再介绍理论。教材应尽可能地展现出人类在探索某个问题时所经历的具体过程,理清其来龙去脉,阐明知识之间的内在联系,从而帮助学生在学习过程中循序渐进地建立起一个相对完整的知识体系。
改进之路
那么,应该如何写出一本好的教材呢?
1.作者要有责任心
教材的作者,绝大部分都是教师。要牢记教师的职责:传道、授业、解惑。我们身上是有责任的,误人子弟,则罪莫大焉!
这就要求作者厚积薄发,尽可能不要出于功利性目的(比如升职称)而写教材。当然,现实中功利性因素是不可避免的,只能要求作者既然要决定写,就要尽可能地写好。
我强烈反对没有任何实际开发经验与教学经验的人来写计算机类教材。孙子有语:不知彼不知已,每战必败。这样的人既对计算机技术不熟,又不了解学生的真实情况,怎可能写出好教材?
另一个对作者的要求是与时俱进。计算机理论与技术的发展太快了,因此一本好教材应及时补充新内容。在这点上,国外的许多经典教材做得很好。比如我前面提到过的《离散数学及应用》,我手头上的已是第5版。还有一个例子,比如著名的Deitel父子写的《Java How To Program》(《Java大学教程》),几乎做到了Java每出一个新版本,相应地他们也会跟着更新书中的内容,出一个新版。
第三个对作者的要求是能与读者互动。在互联网大普及的时代,网络是获取读者反馈信息最便捷的手段。国外的著名教材,几乎每本都有一个网站提供各种的附加资源,并给读者答疑解惑。对于国内的作者而言,要求每本教材都建立一个独立的网站是不切实际的,但最起码作者应该留一个电子邮件地址。目前Blog非常红火,许多博客网站都提供免费的Blog服务,笔者认为这是一个很好的作者与读者互动的平台。
2.弄清楚教材是给谁看的
教材与理论专著不同,教材是学生学习的依据,其目的是更快更好地将知识传授给学生,因此,应从学生角度而非教师角度编写教材,要让学生“便于学”,而不是教师“便于教”(当然最好两者兼顾,不能兼顾则学生优先)。
我看到许多的教材都是“教师编给教师看的”,而不是“教师编给学生看的”,这种教材如果没有老师教,学生几乎无法自学。
比如看到某教材有“教师手册”与“学生课本”之分,或者有“正式课本”与“辅导材料”之分时,我觉得这是一种“一切以教师为中心”的教学思想的反映。其本质在于教师要比学生垄断更多的资料,以便树立教师的“权威”,而学生只能在教师的讲授与指导下学习。有这个必要吗?这种方式,我怎么看都有点“武大郎开店”的嫌疑。
在现在这个信息爆炸的时代,重要的是培养学生的自学能力,怎能让学生离了教师就不会学习了?
另外,按“便于学生自学”的方式编写教材,其实反过来也有助于教师(特别是新教师)深入理解教材,从而把教学工作做得更好,真正做到“教学相长”。
3.深入浅出才是好教材
一本适合于学生自学的教材,一定要做到深入浅出。这是很不容易的。其前提是作者要有深厚的积累,才能“用普通话讲抽象的理论,用大白话讲复杂的技术”。我个人发觉,如果做到八个字,教材的可读性就可大大增强。这八个字是:善用比喻,实例为王!
一个好例子,胜过千言万语。例子在帮助学生掌握知识方面的作用是无法估量的,尤其是针对理论性强的课程。
举个例子,《数据库原理》往往要讲到数据库范式,理论讲得太多,不如举一个学生都非常熟悉的网上选课系统,详细分析将学生信息与课程信息分布到数据库表中的不同方案,比较每个方案的优缺点,进而自然地引出范式的概念,并让学生能直观地理解如何在数据库中应用范式去解决数据完整性、冗余性等在实践中遇到的问题。
另一个方面,计算机科学理论与技术中都涉及到大量抽象的概念,教材在向学生介绍概念的内涵时,既要注重科学性与严谨性,更要注重通俗性。
在这方面,比喻这一修辞手法大有用武之地。
比如,介绍C++课程中的名字空间(namespace)概念时,将“类”比做书,将“名字空间”比作图书馆或书架,则学生很快就能明白这一抽象概念的含义。
还有《数据结构》中的堆栈,可以将其比喻成羽毛球筒,其特点是每次只能从开口处塞入和取出一个羽毛球。
《软件工程》中介绍软件项目的迭代开发原则时,可以用“滚雪球”来类比软件项目的进化过程。
其实汉语有着丰富的表现力,看看过去和现在各个文学家的著作,难道我们的教材编写者不能从这些地方汲取营养,把教材写得尽可能地“好看些”?
4.授人与鱼,不如授人与渔
“授人与鱼,不如授人与渔。”
传颂千古的名言,蕴含着深刻的道理。
计算机科学的每个领域,其实都有一些最重要最基本的思维方法。在教材中,应致力于将这些非常重要的思维方法以直观的形式突显出来,引导学生先去认识这种思维方法,再让他们去尝试应用这种思维方法,最终能活用这种思维方法。
因此,好的教材,应该让学生能领会不同领域具有不同特点的思维方法,而不是仅仅只关注一些具体知识的传授。
比如,学数学就要让学生知道怎样从特殊到普遍,从已知推未知,知道怎样从假想开始再以科学的推理方法去证明假想的对错,掌握从大量的数据中去找出其中蕴含着的特定的数学规律的方法……
学编程就要让学生知道针对某个问题,应怎样去设计一个解决方案;在具体开发中,面对着技术难点,用什么方法去攻克它;理解为什么在编码过程中,要高度注意编码的规范性;知道如何将软件工程的相关理论渗透到具体开发实践中……
只有具有这样特点的教材,才能使学生掌握做事的方法,并使他们的思想深刻起来,成为一个有着独立思维能力的人。
我想,作者如能作到以上几点,写出的教材其质量应是不差的。
写出特色来——我的教材编写实践
作为一名高校的一线教师,我既热爱教学工作,又喜欢钻研软件技术。
在工作中,我一直都在琢磨着有关计算机教育方面的一些问题。本文前面的一些观点就是我在教学实践中逐渐总结的。
但这些观点是否正确,是否可行,这只能由实践来说话。我决定编写一本教材,全面地尝试我在上面所提到的各种观点。
从2004年11月到2005年7月,我用了9个月的时间写了一本不像教材的教材:《编程的奥秘——.NET软件技术学习与实践》,这本教材与传统教材的模样有很大的不同。
这本书的基本原型是我在北京理工大学开设的“.NET软件开发技术基础”选修课教案,该课程得到了微软公司2005年“微软高校精品课程支持计划”的资助,教材于2006年1月由电子工业出版社出版。
在写作过程中,我想得最多的就是如何走出一条教材编写的新路子,探索一些新的教材编写方法,一句话——写出自己的特色来!
书出版以后,我在自己的Blog上(http://blog.csdn.net/bitfan)建立了一个读者作者交流区,自己的邮箱也陆陆续续地收到不少读者邮件。
在我收到的读者反馈信息中,大都对这本书给予了充分的肯定。而这些读者中,绝大多数是在校的大学生,由于书价较贵,有读者来信说他省了半个月的饭钱才买下这本书,还有的读者在书店“站读”数个小时……令我非常感动。
学生对这本教材的肯定给了我很大的鼓舞,我想应该把自己的这些观点公开提出来讨论,这种讨论是有益的。
关于计算机教材的编写,其实是个非常大的话题,我所知道的一些朋友中,有不少在这个领域有着独到的见解,从他们那儿我得到了许多启发,而这篇文章仅仅代表我个人对计算机教材编写问题的思索结果,其中一定有许多偏颇不当之处,敬请读者海涵。非常欢迎大家与我共同探讨计算机教育的相关问题,我的电子邮件:JinXuLiang@bit.edu.cn。