浅谈实践在计算机专业本科教学中的作用
-----------------------------------------------------------------------
注:
去年的CSDN论战,许多网友并未全面了解我的观点,就在那儿议得不亦乐乎。我何尝是只强调实践而不管理论?
发表在这里的文章是我写的一篇教学论文的原稿(大约于2006年底完成),集中阐述了我个人对软件开发实践与理论学习的观点。写作时虽然正值CSDN论战,有点回答网友置疑的意思,但当时写完后最终并没有发布在网上,而是经过修改之后直接投给本校学报了,此文在电脑上一搁就是几个月。
近期整理硬盘,又把此文给翻出来了,重读一次,想想还是应该发在网上的,文中观点毕竟是我经过思考得到的结论,不是在争论中我说的只言碎语。
我想,发布此文,可以明晰一些东西,减少一些无谓的口舌。
去年的争论牵扯了我相当的时间精力,有些后悔,当时确实没那个必要一定要表白什么,说得再多也没用,毕竟实干比
争论重要,
坐而议,不如起而行。所幸还能把握住自己,集中精力修改自己的作品,于2007年元旦前终于完成了新作《.NET 2.0面向对象编程揭秘》的写作任务,又于今年3月4月完成全书的最后审校工作,现在只剩余确定封面最后一件事了,终于可以大松一口气。写书是场“马拉松”,对脑力体力的耗费实在巨大,绝不亚于完成一个复杂的软件项目。我估计再有一个月新作应该就可以与读者见面。届时我将在CSDN和新浪两个个人博客针对新书开贴,听取意见,回答问题,期望能与热心读者们真诚沟通。
好了,废话不说了,该自己做的、自己能做的就要尽心尽力做好。如是而已!
金旭亮
2007.4.27
---------------------------------------------------------------------
自
1999
年以来,我国高校开始大规模地扩招。作为热门专业之一的计算机专业,更是走在各专业学生数量扩张规模的前列。
大多数中国高校计算机专业目前的培养体系,大都于二十世纪八十年代建立并完善起来的,面对着
21
世纪计算机技术日新月异的进步和中国经济和社会状况的变化,这一教学体系面临着巨大的冲击,弊端开始显露。
引发问题的关键之处在于:教学主体(指在校学生)整体状况的变化。
一、我国高校计算机本科教育的现状分析
目前在校的计算机本科生中,其主体是被称为
“80
后
”
的年轻一代,独生子女占绝对多数。这一代的大学生,伴随着中国经济的快速发展而成长,家庭经济条件的改善使他们比以前的大学生拥有更好的学习环境,从小接触到更多的信息,受到更多的正规教育,而且思想活跃,接受与学习能力强。
然而,这一代的大学生也有自己的问题。由于许多学生从小在比较富足的环境中成长,又是独生子女,从小受到父母长辈过度的呵护,生活一帆风顺,走的都是父母和老师事先安排好的道路,加上社会风气的影响,带来了一些问题,比如依赖性强、自制力弱、缺乏吃苦耐劳的精神
……
。
学生主体状况的改变,会直接影响教学方法与方式的选择。
根据北京理工大学计算机学院
2006
年对
2004
级本科生所作的不计名问卷调查结果,发现许多学生都出现了对计算机专业缺乏兴趣的状况,有的学生打算毕业时转行,有的表达出对未来的迷茫与对激烈就业竞争的忧虑。有不少学生抱怨:我都到了计算机专业
3
年级了,还不会写程序
……
事实上,据笔者了解的情况,不止北京理工大学,其他高校计算机专业的学生情况也大致相同,这种状况具有相当的普遍性。
我国高校采用的是通过全国统一进行的高考选拔学生的体制,为了让孩子能考上一所理想的大学,家长为此是
“
不惜花费一切代价
”
也要让孩子的成绩好。在这种需求的强劲推动下,中国普遍形成了从小学到高中的应试教育,将对学生其他素质的培养放到了次要的地位。学生在这种强制性的潮流面前,没有任何的自主权,只能被
“
押着
”
上了高考的
“
战车
”
,其心中的反抗心理是不难想象的。
从小学到高中,家长和老师几乎为学生
“
包办
”
一切,甚至包括为他们选择所读的专业。笔者是
2004
级学生的班主任,在新生入学时做过调查,全班
28
个学生,只有不到三分之一的学生回答他们选择计算机专业是出于
“
喜欢计算机
”
。事实上,说喜欢计算机的学生中,大部分只是喜欢互联网,喜欢游戏,觉得计算机
“
好玩
”
,是个热门专业,就业后收入高,
……
,真正了解计算机专业内涵的学生是少之又少。可以这样说,大多数学生的专业选择是盲目的,许多学生在入校时对计算机专业的认识是
“
一张白纸
”
。这就为日后出现的问题打下了伏笔。
我国许多高校计算机系课程教学体系是在扩招之前形成的,近年来虽有所调整,但总体框架并未变化。从各门专业课程的设置来看,大都要求对学生要有扎实的理论基础,强调培养学生自主学习与探索的能力,这是一种以培养计算机科学的研究者为目标的
“
精英教育
”
。应该说,在扩招之前,这种体制的确培养出了许多人才。
然而扩招之后各方面情况都发生了变化。最明显的就是由于学生规模的迅速扩大,师资力量严重不足,原来可以比较密切的师生交流现在难以为继,出现了动辄上百人的大课,使教学效果大打折扣。
为了快速地补充师资,各高校大量将计算机专业硕士和博士毕业生直接补充到教师队伍中来,教师的平均学历指数虽然上升了,但总体平均的水平并未随之有相应的提高。反过来则有下降的趋势。新进的教师中大多从学校到学校,很少或没有业界经验,因而在教学中也只能从
“
理论
”
到
“
理论
”
,难于做到理论与实践相结合。学生是一张白纸,教师是
“
纸上谈兵
”
,其结果是计算机专业开设的理论课打掉了多数学生的兴趣。
计算机科学与数学等传统的学科不太一样,其实践性非常强,许多重大的计算机理论与技术创新都有一定的应用背景,是由实践推动发展的。
目前的计算机专业教学过于偏重理论基础的培养,在培养学生实践能力上显得比较弱,结果实践能力的匮乏严重打击学生的自信心,当他们想到毕业后所面临激烈的就业竞争时,其忧虑甚至恐惧的心理是可以想见的。由于大多数学生过去的生活一帆风顺,缺乏足够的人生经历,挫折承受能力不强,面对挑战,有些学生就采取了逃避的态度,于是高校中
“
网络游戏
”
成为不可治的顽症,毁掉了许多学生的学业。
人类已进入信息时代,
IT
业是发展最迅猛的行业之一,快速发展的整个行业对人才提出了迫切的要求,几乎所有的
IT
企业都
“
求才若渴
”
,在招聘上投入巨大的人力和财力,却痛感要找到一个合乎企业要求的人才是如此地困难。另一方面,每年又有大批的毕业生找不到合适的工作,据报道,
2006
年全国有
124
万大学毕业生无法当期就业,在大学生占总人口比例仍非常低的中国,在经济快速成长制造出大量就业机会的时代,在发展迅速对人才需求量很大的
IT
业,计算机专业大学生就业难居然成为了一个问题。
大学应服务于社会,应为国家富强与社会进步提供巨大的推动作用,然而,现状表明:我国各高校计算机及相关专业作为当前最大的为
IT
业提供人才储备的大本营,其教育成效并不能满足社会对人才可渴求。
二、高校计算机本科教育改革的突破口
我国高校计算机本科教育面临的一个带有全局性的问题是:大学计算机教育是要培养计算机行业高级技术管理人才和科学研究者,还是要培养出大批合格的软件工程师?
这本质上是大学教育的本质性问题:大学教育是精英教育还是大众教育?
在高等教育发达的美国,象耶鲁等世界一流名校,其策略是非常明确的:四年本科阶段给本科生提供大量的选修课,培养其基本素质,增加其对社会的适应力,以培养通才为主要目的,到硕士阶段进入才进入与特定行业密切相关的职业训练阶段,博士阶段的培养目标是科学研究者。
耶鲁这样的大学,很明显是一种
“
精英
”
教育。但美国数千所高校中,除了哈佛、耶鲁等名校之外,还有大量的社区大学,在数量上占绝对多数,它们完成的却是
“
大众教育
”
的工作。
美国高等教育的成功经验,对我们有很大的借鉴作用。但中美之间有着巨大的历史、文化和社会背景差异,不能简单地将美国的体制全盘照搬到中国。
笔者认为,目前我国大学计算机本科教育的主体是
—
大批入学时对计算机专业知之甚少的学生,因此应实事求是,走
“
大众教育
”
这条路,以培养业界合格的工程师为主要目标,满足业界对人才的迫切需求。在此基础之上,给少数优秀的学生以较大的自由发展空间。
根据我们的调查,经过两年左右的大学学习,真正喜欢上计算机不足学生总数的
10
%,大多数学生的状况都是
“
不能说讨厌,但也不是喜欢
”
,居于一种茫然的状态。笔者与许多成绩不理想学生进行沟通,发现他们之所以不喜欢计算机,多由于所学理论课程枯燥无味、脱离实际而导致。在现有教育体制之下,这些学生几乎不可能有机会转换专业,他既不喜欢所学的课程,但又不得不学习,教学效果差就可想而知了。
那么这些认为不喜欢计算机专业的学生中的相当部分,是不是真的无法成为一名合格甚至优秀的软件工程师?
解决问题的关键在于我们的教学体系能否帮助学生培养出对计算机专业的兴趣。
根据教育心理学的相关理论,兴趣是最好的老师,有了强烈的兴趣,学生就会主动地去学习,在兴趣面前,各种枯燥的理论也都呈现出另一种面貌。
培养学生兴趣就是实践。事实证明,学生通过实践对计算机技术产生兴趣是非常普遍的现象。
目前,大学生中沉迷于网络游戏的现象日益引起教育界的重视,仔细分析一下游戏设计者的思路,可以对我们大学计算机教育如何引发学生的兴趣有着很大的借鉴作用。
我们来分析一下网络游戏的一些特点。
(
1
)
游戏通常有许多关卡,开头的关卡很简单,过关很容易,以后每一关都比前一关难,每一关都比前一关更有挑战性,正是这种由于游戏的这种持续性与挑战性,玩家在整个玩游戏的过程中其潜在的争强好胜的天性被激发,他们通过不断完成日益困难的任务,获得了很大的成就感,这正是许多学生沉迷游戏的原因之一。
(
2
)另一方面,人是需要朋友的,而许多网络游戏就提供了这样的一个场景:同玩一个游戏的玩家在一个虚拟的环境中相互合作,满足了人的情感需求。
网络游戏的设计方法,给我们设计计算机专业的实践环节提供了很好的思路:
注重持续性,由浅入深,组建团队协作的学习与实践环境。
在整个实践环节中,教师起着一个关键的引导作用。
1940
年代,清华大学校长梅贻琦在《大学一解》一文中提出了
“
大鱼带小鱼
”
的教学理念:
古者学子从师受业,谓之从游。孟子曰:
“
游于圣人之门者难为言
”
,间尝思之,游之时义大矣哉。学校犹水也,师生犹鱼也,其行动犹游泳也,大鱼前导,小鱼尾随,是从游也,从游既久,其濡染观摩之效,自不求而至,不为而成。
学校是江河湖海,老师是大鱼,学生是小鱼,小鱼跟着大鱼游,小鱼在游的过程中也成了大鱼。
在计算机教育而言,游就是实践。实践包括科研实践与开发实践。对于计算机本科生教育而言,应以开发实践为主。
这里面有一个问题,那就是理论课学习与开发实践的关系问题,处理得不好,会顾此失彼。
笔者认为:理论与实践是相辅相成的,对于绝大多数学生而言,只有在实践中才能真正地理解与掌握理论。
比如比较抽象的《数据结构》课程,许多学生学完了之后并不知道里面介绍的树、图、堆栈等概念有什么作用,而让学生去亲自设计并开发一个真实的四则运算器程序之后,学生不仅巩固了原先学过的
C++
、
Java
等编程语言,也熟悉了业界流行的开发工具如
Visual Studio
和
Eclipse
等的使用方法,还弄明白了数据结构到底有什么用
……
,一举数得,这就是
“
实践促进理论学习
”
的例子。
笔者将计算机本科教育中的理论与实践的关系总结为
“
珍珠与项链
”
关系:
可以把计算机专业开设的《编译原理》、《操作系统》等理论课比喻为一颗颗的珍珠,而实践就是那根将珍珠串成项链的丝线。一串项链的价值,大于单个珍珠价值总和。
因此,高校计算机本科教育改革的突破口就是实践。
三、高校计算机教育实践环节的实施建议
一个重要的改革方向是压缩必修课的数量。现在的普遍情况是大学二三年级安排的必修课太多,而且许多课程在教学方式上并未摆脱高中教学那种满堂灌的方式,加上大量的闭卷考试,这实际上是鼓励学生为追求高分而死记硬背,无利于学生培养出真正的能力,应减少专业课的闭卷考试,而采用课程设计、上机考试、撰写论文、课堂讨论等多种方式,增大开放式课程考核的比重。然而,采用开放式课程考核方式也有一些问题,比如抄袭问题在目前的学生规模之下难以避免,另一个出现的问题是评分主观性强,尺度难于把握。一般来说,对于实际开发能力比较出色的学生,他们是欢迎采用开放的考核方式的,其余的学生则更希望采用传统的考试方式。为此,可以尝试采取一种
“
一课两制
”
的教学方案,即一部分学生采用传统的卷面考试方式,而另一部分学生则采用开放式的课程设计方式,由学生自由选择。
另一方面,计算机科学涉及相当广阔的领域,每个学生的情况千差万别,在课程安排上不能软件硬件课程一起上,眉毛胡子一把抓,这不仅会加重学生的负担,而且在短时间内安排多门难度较高、抽象复杂的专业课(比如三年级学生一个学期要学七八门计算机专业课程,绝大部分采用闭卷考试),学生很难在这么短的时间内理解并掌握大量的知识,其结果是学生没有足够的时间通过实践去逐步地消化这些知识,将这些课程煮成了
“
夹生饭
”
。笔者认为应根据计算机学科的内在发展规律提供大量的选修课供学生自主选择,学校和教师为学生选课提供足够的指导与帮助。在这点上,国内许多大学都先后实施了本科生的全面选课制,为本科教育改革走出了重要的一步。
人们在长期的教育实践中发现,学生对于具体的知识易于掌握,而要掌握抽象程度较高的知识必须付出更多的努力。因此,在教学内容安排上就遵循从简单具体再到抽象复杂的认知规律。
那么,应如何安排实践环节,让实践渗透到计算机专业四年本科的教学体系中?
这是一个复杂的问题,需要许多教师与教育专家的共同探索。
就笔者看来,可以采用以下的模式:
在计算机专业的一年级,学生处于从高中到大学的过渡阶段,实践的内容主要是
“
用
”
,即让学生使用现成的各种软件工具培养兴趣,并和他们正在学习的理论课程结合起来。比如计算机专业一年级学生通常都需学数学(高等数学、线性代数等),这时可以同步开展学用数学工具软件(比如
MathLab
)的教学实践。又比如,
C
语言是许多学生第一门学习的高级语言,这时可以同步安排
LINUX
操作系统的实践活动,让学生试着在
LINUX
这种
C
语言最适合的
“
原生环境
”
中编程,直接拉近学生与现代软件开发技术前沿的距离,并为以后学习《操作系统》等专业课程打下良好基础。
笔者认为,应该在计算机专业低年级(大一或大二),让每个学生都掌握一个主流的开发工具和语言,在目前而言,
Java
和
C#
是两个很好的选择。通过在低年级开设
Java/Eclipse
或
C#/Visual Studio
等选修课,可以让学生直接接触到当前主流的软件开发(或硬件设计)技术,不让其与当今计算机技术的发展脱节,同时更重要的,是让学生培养出基本的开发能力,为他们在高年级(大三大四)接触到更抽象复杂的课程(比如《数据结构》、《编译原理》、《软件工程》、《面向对象分析与设计》、《数据库原理》等)时,让给理论有一个落脚点,就不会出现
“
纸上谈兵
”
,
“
空对空导弹
”
的问题。
除了在课程安排上要注重突出实践,另一个也很有效的教学环节就是促进团体学习环境的形成,可以尝试组建学生科技活动中心、创新基地、各种专业兴趣小组等,一旦形成了一个良好的学习与实践氛围,于正常的课程教学之外,这些组织对学生能力的增长帮助尤大。
在创建团队学习与实践环境的过程中,要特别注意发挥教师的引导作用。可以采用从我国古代历史悠久的书院体制,形成密切的师生关系,以
“
师傅带徒弟
”
的方式培养精英人才,非常有效。
总之,在当前我国经济快速增长,各方面都在发生巨大变化的时代,高等学校的计算机专业教育必须进行必要的变革,不进行这种变革,就无法满足社会对人才的渴求,不管对国家还是对学生个体,都是一种巨大的人力资源浪费。而在这一变革中,大力加强实践环节在整个计算机教学体系中的地位,将是一个重要的手段。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1586100