软件教育杂感

软件教育杂感

 

我是一个从自学路上走过来的高校计算机专业教师,对计算机技术的热爱支持我走完了这条漫长的长达数年的自学之路,出于理智的思索,我又脱离了职业程序员的道路,迈入了教师的行列,走上讲台也已将近两年,面对着计算机技术日新月异的风云变幻,面对着一个个学生求知的渴望与困惑,真有不少感触。

1.从计算机等级考试内容的调整谈起

20039月以来,各大新闻媒体都报道了这么一则消息:《2004年全国计算机等级考试将作调整》,文章中说,这个调整是“经过专家充分论证”的。

作为一名计算机教师,对于这种本行业领域内的全国考试,自然是关心的,于是,我上网去将以前的等级考试旧大纲和现在调整方案都收集了一份。

当我将新旧大纲都浏览了一遍之后,我越看就越弄不明白一件事:这个全国计算机等级考试到底是针对哪种类型的人的?是针对有志于成为计算机专业开发者的人,还是想掌握计算机技能以用于提高自己工作效率的人?

看看内容,我得出两点结论:

1)考试的设计者是“考古学家”:一些属于古董级的“文物”,比如DOS,仍然是考试的主要科目之一,而且居然一直从上世纪90年代一直考到二十一世纪,万幸终于在2004年宣判了这门课的“死刑”,不过还得“缓期执行”;看看二级科目就更奇怪了,QBasic是现在的VB.net“祖爷爷”一辈的语言,Fortran更是历史悠久,它是计算机史上的第一门高级语言,只可惜它的地盘被后来的C抢了不少,在实际开发中用得很少,至于Foxbase+,恕我无知,难道现在还有公司用它来开发MIS系统?等级考试这种全国性的考试,往往起着一种引导性的作用,那它要把参加考试的数百万人引导到何处?都去“考古”?

2)考试的设计者显然希望人人都能成为计算机专业的开发者,愿望真的实现,中国必是IT世界第一强国!新的二级加了JavaAccessC++三门课目,我们看到等级考试设计者终于开始“与时俱进”了。从学习难度上看:C++ >> Java >> Access,将这三者同处一级值得商榷。写程序的都知道,C++是一门最难学好的程序设计语言,除非专业程序员,一般的计算机应用开发者不会采用C++进行开发正式的应用程序。而且要培养一名优秀的专业C++程序员,至少得两年的时间,对于一个刚通过一级考试的人,直接叫他学C++,这跨度也太大了吧?

据大纲说:二级定位于程序员。我又糊涂了,另外不是还有一个全国软件资格与水平考试吗?这二者不是撞车了吗?那叫人该考哪种?不过我想中国人口世界第一,任何一个考试都不用发愁没人报考。中国的考试,已催生了一个考试行业,养活了多少培训机构,呵呵,看来考试有降低社会失业率的作用。

       废话少说。我看了这个大纲之后的感觉就是:真是太有“中国”特色了!远远脱离中国计算机应用的实际情况。

       等级考试暴露出了中国计算机教育存在问题的冰山一脚。

2.学生的困惑

       我给本科生讲授以语言为主的程序设计系列课程,课前课后,学生问的问题具有惊人的一致性,摘录几个问题如下:

       老师,C++/Java/C#,我学什么比较好找工作?

       老师,推荐几本好书吧……

       老师,有没有什么书是说明面向对象的产生过程,我现在知道他的很多概念和功能,但是不知道什么时候该用他的哪个特性……

老师,计算机专业女生毕业以后可以干什么工作……

对学生问的问题进行一下分类,就很吃惊地发现许多学生对计算机理论课严重地“消化不良”,对真正的软件开发过程没有真正的理解,不知道学计算机技术的正确方法,学到的一点理论也不知该如何应用,面对一些开发中真实的问题,绝大多数学生都不知道该如何下手。此外,面对着以“火箭般”的速度发展的计算机技术,层出不穷的新名词,互联网上爆炸的信息资源,学生们更是盲然,不知如何应付这信息暴炸的现实。有些学生不断追新,每种新技术都拿来学几个月,一到看不懂了的时候就放弃,另有些则干脆采取舵鸟政策,只管把课本学好,考试考出好成绩,对校园外的技术变化不闻不问……

女生的情况更让人担忧,计算机专业的女生许多都在使用错误的学习方法来学习计算机技术,例如一些女生把程序设计课程当成是“政治课”,通过“背”的方法来应付考试。较之男生,女生一般不喜欢编程序,因而实际开发能力较低,但由于考试成绩好,就业压力大,许多女生又盲目地考研,想着毕业后可以留校当老师有个稳定的工作……,这种想法不管男生女生都有,很好理解,大家也能接受,但这样出来的计算机教师,能教出好的学生来?难道不是对下一代学生的不负责任?

       1999年扩招的学生2003年涌入就业市场,就业情况的严峻让许多学生选择了考研,现在中国除了高考,又出现了“千军万马过考研独木桥”的情况,我的一些学生为了考研,国庆长假也不休息,每天花10个小时去学习考研课程,作为大四的计算机专业学生,在大学生涯的最后一年,上半年准备考研,下半年准备找工作,四年大学其实只相当于学了三年,真正学习计算机专业课的时间算起来就更少了。面对着博大精深的计算机科学,许多学生连门都没迈进去,万一考研失败,要找工作时,又发现自己没有真正掌握计算机专业人员的基本技能,心虚,不知自己能干什么活,在IT业,没有一定的能力与实力,找工作怎会不难?

       这是一个怪圈,圈中的学生苦恼不已,圈外的人也爱莫能助……

    3.我看中国高校计算机教育体制

从我所看到的现象,我发现目前的计算机教育存在的最主要问题是:重理论轻实践,重灌输轻探索,重应试成绩轻能力培养。

许多学生由于计算机理论课难度过大,讲授内容与软件开发实际情况相脱节,再加上学生普遍缺乏开发实践基础而抑制了对软件开发的兴趣,视软件开发为畏途。对于计算机专业之外的其它工科专业,在软件开发技术教育上更是薄弱,许多学生对现代软件技术知之甚少。

据国外的朋友说,美国一些大学计算机专业的学生,四年本科期间至少要编著写数万行代码。而中国计算机专业数十万在校生中,独立编写并调试过2000行以上代码的有多少(直接Copy别人程序的不算)?

计算机技术具有极强的实践性,不去实践,根本不可能学好。对于缺乏经验的学生,学校必须引导他们进行实践。而要做到这一点,则需要有大批具有深厚行业背景的高素质的教师,师资力量的数量与质量,成为了中国高校计算机教育的软肋。

记得哈佛大学的校长曾说过:我们学校的任何一位教师,都是世界上他那个领域内的一流学者。其自豪溢于言表。

名师出高徒。劣师难出高徒,如果劣师出了高徒,那一定是学生自己努力的结果,而这个高徒如果有缘得遇明师,成就定不止此。

高等学校要有能吸引一流人才任教的机制,才能实现一种良性循环。

当前中国高校的计算机教学师资力量中,有相当一部分是从刚毕业的硕士博士中产生的,而这批人中的一流人才往往不是出国就是去了外企,或是一些大的公司和科研机构,留校任教的有不少是本硕博连读下来的,自己都缺乏相关行业实践经验,怎样强求他们能将实践性如此之强的计算机科学技术向学生讲好?另外,毕业留校其实就是近亲繁殖,从生物学上看,近亲繁殖不能促进生物群体的壮大,弊端不少。

此外,高校现行体制中,教师的报酬是与讲课课时数,职称高低以及发表论文数等“硬指标”来决定的,几乎甚至完全不考虑教学效果与科研质量,于是有人开玩笑说:爱因斯坦如果在中国大学任教,他是不可能当上博导的,他一辈子才发了几篇论文?

这种体制下,教师们都忙着争职称,发论文去了,还有几个能静下心来把教学搞好?计算机开发与技术创新的主力军是40岁以下的年轻人,许多优秀的软件人才甚至30不到或30刚出头,按照高校论资排辈的制度,这批人在学校内收益是远小于社会上给予的,因此,他们中有几人愿意在学校中浪费青春熬年头?这种体制又怎能吸引一流软件人才加盟软件教育职业教师队伍?

教育的两个主要方面就是教师与学生,前者有心无力,后者困惑不已,这种情况之下,怎能指望中国高校能培养大批合格的软件人才?没有人才,什么发展都是空话。

但坚冰是迟早被打破的,因为这是社会发展的必然要求,是个大趋势,大锅饭是不能永远吃下去的。

4.我对计算机教师职业的看法

唐代著名文学家韩愈在《师说》中写到:师者,所以传道,授业,解惑者也……

何谓传道?讲授做人的道理。

何谓授业?传授专业的技术知识。

何谓解惑?回答学生各种各样的困惑。

作为一名教师,得努力在以上三个方面履行自己的职责,方才无愧“教师”这个称号。

一直认为,在思想道德方面的因素,比单纯的技术因素对一个人的最终成才影响更大,在现在这个功利并且浮躁的时代,更需要精神方面的支柱。我接触的许多学生,真的非常聪明,学习能力很强,只要能注意培养出良好的思想素质,比如求实严谨,勤奋创新,立志高远、脚踏实地,具备坚韧的毅力,未来的前途定然不可限量,真是羡慕他们!软件人以年轻为最大财富。

我所在的大学是一所理工科为主体的大学,人文方面的教育实在太少。我有过数年独自自学计算机技术经历,知道我这一经历的一个学生问过我当时怎样是坚持下来。除了个人性格方面的因素,我感觉最主要的就是当时我看了不少充满着乐观向上精神的历史、社会及人文书籍,这些古今中外的意志坚强成就卓著的人的言语与事迹,是一种无形但极为巨大的力量。

       我想,作为一名教师,就一定要向学计算机的学生指出:多学学人文方面的东西,对个人未来的发展是极为重要的。

       谈到软件技术,话就多了。现在的软件技术进步之快,真叫人眼花缭乱。在新技术面前,学生和老师往往居于同一起跑线上。

作为一名教师,应有勇气承认自己在日新月异的技术面前,有大量的东西不了解不掌握,跟不上时代的发展,而学生则具有学习能力强,吸收速度快的优点,完全可以在几年内在某个具体领域内超过教师的水平,青出于蓝而胜于蓝。如果学生不能超过老师,这样的教育又有何意义?不打破教师一定比学生强这一“神话”,学生就不能解放思想,做出创造性的成就。

中国缺的不是考试八九十分的好学生,最缺的就是具备创新意识与能力的高素质人才。教师年岁较长,经验与知识较多,但相应的条条框框也很多,很难打破。软件最讲究创新,在这方面,年青学生最有创造性。看看在软件技术方面有成就者,许多在大学本科和研究生阶段就有突出的成绩。中国的孩子从小学,中学再到大学,接受的都是一种被动灌输的教育方式,在大学再想改,已很难了,但大学阶段往往是人生预备生涯中最后最好的一个培养创造能力的阶段,教师应努力让学生意识到这点。

教师是个职业的“授业者”,讲授计算机课程的教师应该同时具备软件开发者与职业教师两方面的素质,必须研究教学法。我总结了一下,可以把大学教师讲课水平大致分为以下几个层次:

1)原样照书念;这种教师99%是因为自己对要讲授的课不懂,所以只能照书本念,遗憾的是,这样的老师在我十几年的学生生涯中,还真有一些,这种老师的课,逃课的学生比例之高是一定的,如果学生不逃课,一定是因为有惩罚措施,比如中途上课点名,不到者期末成绩扣分之类(一向遵守纪律的好学生例外)。这是一种不合格的老师。

2)照书讲,对一些难理解的地方举些例子,让学生好懂一些。这种老师好一些,至少他是对这门学科是学进去了,是懂的,他的讲课对学生缩短学习过程是有帮助的,因为他至少把教材上的内容给学生讲明白了。这种教师,勉强算是合格。

3)不照书本念,从实际出发对教材内容进行结构重组和优化,扩充教材薄弱的部分,讲自己的理解与体会。这种老师一般都有一定的实践经验,因而知道教材哪些部分知识老化已被淘汰,他对自己讲授的学科有自己的理解,可以用自己的话解释书上枯燥的理论,并能展示理论是如何与实践结合的。这种老师讲课时会有不少新东西,学生对于新东西的好奇感弥补了教师在教学法方面的不足,但存在的弱点是引入的新东西可能过多,让学生消化不良。这种老师我遇见的不多。这种老师可以说是合格的。

4)对讲授的内容精熟,对相关的理论教学找到了精巧合适的例子,能在很有限的教学过程中让学生非常自然地吸收与掌握相关的知识;这种老师比较第三种老师的更高明之处在于他对大量新技术和知识进行了深入的思索、总结,有选择有针对性地讲授相关的知识,并下了大功夫去设计合适精巧的实例,让学生能很快把握住知识的脉络与核心,从而引发学生强烈的学习兴趣,这种水平的老师,可谓好教师了。我见过几个这样的老师,他们的讲课,是不需要通过点名这种措施来限制学生逃课率的。

5)真正做到了深入浅出,用大白话讲述复杂的理论,语言精彩,能始终吸引学生的注意力,让他们在有限的教学时间中时有所悟,听这样的课,学生上课想睡觉和逃课的可能性几乎为零……。这种老师,具有相当高的语言艺术水平,言语平和幽默,听他的课,学生始终兴趣勃勃,时常开怀大笑,而又于笑声中有所感悟,有所启发,是专业技术与表达能力完美结合的典范。这种老师,我有幸见过一位,印象极为深刻,这种教学水平,没几十年的人生磨练与工作实践,达不到的。

一方面不断学习与研究专业技术,另一方面要不断提高自己的教学水平,这是从事计算机教育的教师所面临的两大主要任务。

时代在进步,现在学生与教师所面临的情况已与过去有很大的不同。尤其是作为人类技术进步速度最快的学科之一,软件教育又与其他工科教育有着不同的特点。

从教师的角度,面对汹涌而来的技术浪潮,自己得不断地学,只有自己先懂会用了,才能将这些新的知识及时补充到教学中去,这是一个非常沉重的负担,在现有教育体制下,这种额外劳动并不能带来直接的回报,只能靠教师自身的责任感了,但我相信,教育体制的改革最终一定会转到真正以教学质量为根本的方向上来的,在体制上保证教师的这种努力有相应的回报,就可以形成一种良好的教学研究环境。

       计算机技术具有极强的渗透性,在目前的各行业中,几乎找不到一个没有使用计算机技术的,因而各个专业的学生都有要学习计算机技术的愿望。

       我所在大学各专业的本科生中,有部分出于强烈的兴趣,自学软件技术已到了一个较高的水准,部分学生甚至在中学阶段就已接触计算机并进行过一定的编程实践。除了这部分学生之外,还有相当大比例的学生对软件知之甚少,但如果能让他们接触一些先进的软件开发技术,其中一定会有对软件技术产生兴趣并主动钻研的学生。适当地激发并引导学生这种热情,是搞好计算机教学的关键。

事实上,软件技术具有极强的实践性与创造性,是很容易地引发青年学生强烈兴趣的,关键在于用哪种方法来激发并引导这种热情。

学习软件技术,重在能力培养。个人认为,应该从理论与实践两个方面,走相互促进的道路。换句话说,一方面要学习相关的理论知识,另一方面也需要同步掌握现实的软件开发技术以将理论付诸实践。在学习理论并将理论主动应用于实践的过程中培养真正的软件开发能力,进而达到提高学生各方面素质的目的。

软件开发能力的培养是一个长期的过程,必须由浅入深,循序渐进。为此,我认为针对理工科专业的大学生学习现代计算机技术的需求,可以开设以下三个级别的开发实践系列课程(以软件技术为例):

1.入门级:针对低年级本科生开设,讲授VB,DelphiRAD开发工具,利用这些开发工具软件简单高效的优点,讲解程序设计的基本知识,介绍Windows的基本技术,主要目的是激发学生的兴趣,引导他们迈入软件开发的大门;

2.实践级:在这一级别,主要介绍面向对象的软件技术,计算机系的课程如C++/Java类就是,但现在的问题是这些课程以学习语言为主,不能让学生意识到该如何应用学到的知识。为此,建议开设讲授现代软件开发平台的课程,如.net平台技术。这种课程学生学习的难度并不比C++Java大,但却较纯语言教学有趣得多,可以巩固学生的兴趣并引导他们深入钻研。这一部分课程以大二大三学生为主。

3.提高级:面向高年级本科生,目的是提升他们的应用知识解决问题的能力。比如面向对象分析与设计,J2EEUML,软件工程等等。

通过这三个级别,安排一系列的相应软硬件开发实践项目,从大二到大四,用三年的时间培养出具备一定计算机应用开发能力的专业人才。

对于计算机专业的学生,则应提出更高的要求,除了必要的专业基础课,要扩充对计算机应用各领域技术的学习,比如可以开设Unix/Linux操作系统,嵌入式软件开发平台,工业自动控制系统开发等课程。这些课程,其教学目的不在于讲得很深很专业,而是要让学生明了这些领域是如何应用计算机技术的,从而为他们在广阔的计算机技术应用领域中进行选择提供基础,最终确定自己的未来发展方向。

另外,计算机专业的培养方向应分为工程师和研究者两个大方向。在每个大方向又应设计出多个成系列的具体子领域的课程,供学生进行选择和学习,而不是象现在这样,不分对象场合,眉毛胡子一把抓,所有学生上同样的课程,软件硬件理论课程一齐上,一学期学它八九门理论课,结果理论课全都煮成了夹生饭,学生吃不下不说,就算硬咽下去也消化不了,因为用于实践这些理论的机会少得可怜!不咀嚼过的饭怎可能被好好消化吸收?长久下去,学生必得胃病无疑!

在我看来,学生的很多困惑都源于对自己发展方向的不明确,我们的高校应该提供大量的教学和实践资源让学生有机会去了解,去尝试各种不同领域的东西,从而开阔学生视野,培养他们独立思索的能力。教师在其中给予学生适当的引导,起一个“煸风点火”的作用。

教育应把学生看成是一个有着无限发展可能的潜在人才,而不是只会被动接收知识的容器,教育的目的就是让学生能更好地认识自己,有目的地培养适应未来工作的能力,成为某一领域合格甚至是优秀的人才。

要成为一流的大学,前提是“生产”出一流的人才。毕业生中成为合格或优秀人才的比例越高,这样的大学教育就越成功,这样的大学就是“牛人聚集”的“牛校”,其对社会与国家的贡献就越大,这种“牛校”越多,国家就越有希望。

倘能如此,那么,在中国数百万的在校大学生中,其中一定会涌现出极为杰出的人物,为人类的发展作出自己独特的贡献,我们就会看到,会有越来越多的理论与高精尖技术有我们中国人的名字和身影。

坚冰必将打破,航线即将开通,中国IT这条大船,终将驶向无垠的大海……

 

 

                                           

你可能感兴趣的:(人生感悟,计算机教育)