文章编号:1672-5913(2008)20-0151-02
摘 要:本文分析了计算机程序设计在通识教育与计算机基础教育中的差异,说明了在通识教育中开设程序设计基础课程的重要性,讨论了该课程在通识教育中的特点与定位,说明了我们在该课程中采用的教学策略和手段、并给出了教学效果,最后提出了今后要继续研究的有关教学问题。
关键词:通识教育;程序设计;教学研究
中图分类号:G642 文献标识码:B
1 为什么在通识教育中设置程序设计课程?
通识教育的倡导者认为,大学教育不能局限于专业知识与技能的传授,还应注重“全人”的培养,即对学生素养、品格、价值观的培养,希望个人潜力得到最大限度的发挥,而不局限于个人选择的专业。计算机技术的飞速发展带来了信息技术的革命,使社会发展步入了信息时代,在大学的通识教育中增加有关计算机技术基础知识与能力的课程,有助于非计算机专业大学生,特别是其中文科学生,综合素质的提高。
计算机程序设计的思维方式具有鲜明的独特性:系统论、抽象性和自动化。软件专家温伯格认为,这种思维先于专门的学科知识的存在而存在——有时绕过专门的学科知识,有时又把专门的学科知识综合起来;把这种思维和教育方法称为一般系统论的方法。其次,程序设计的最终结果是让计算机按照程序执行,去解决一类问题,而不是某个具体问题,这与数学的抽象性类似。这种思维是让机器自动地完成任务,却又允许人进行干预,即所谓的人机交互式的问题解决模式。而且,不同的计算机语言会影响人们的思维模式,但是,基于程序设计的思维原理是普遍的。系统化的思维与计算机编程思维与之有着深刻的内在联系。
像其他大学一样,我校已经开设了计算机基础教育,也包含了Visual FoxPro的程序设计课程。在通识教育中开设计算机程序设计课程与计算机基础知识的教育没有冲突,而是一种补充。根据教育部高教司的建议和要求,目前国内大学的计算机基础教学分成三个层次:计算机文化基础、计算机技术基础和计算机应用基础,在第二层次中包含计算机程序语言进行编程建模。因此,我们在全校的通识教育中开设了“Java程序设计基础”的课程。此课程属于选修课,在教学内容、形式、手段、考核等方面与必修课不同,同时给了学生更多的选学余地。事实上,自从我们在全校开设这门通识教育课程三年以来,每学期限制的120个名额远远不够!
2 课程的特点与定位
作为通识教育,“Java程序设计基础”具有如下特点:课程面向全校学生,面大、量广、专业种类繁多、对计算机的兴趣、知识和技能的需求各异,基础知识参次不齐,而且是低年纪的学生,缺乏必要的自学能力;学时有限,比教育部非计算机专业计算机课程教学指导分委员会提出的最低学时还少3个学时。
学生的期望不同,大致包括:
●学习计算机编程:了解程序设计是什么。
●学习一种程序语言:Java程序设计语言是什么。
●学习新的编程技术:面向对象的程序设计是什么:
●学习更多的计算机语言:Java语言与C、C++或者Visual Basic的区别。
●当然,也包括通过该课挣得学分。
作为通识教育课,“Java程序设计基础”课程的目的不是或者不仅仅是培养计算机程序设计员,该课程的定位是计算机科学与技术的一门普及课、入门课,希望通过学习计算机的核心知识与技术,
●让学生理解计算机软件,进而深入地了解计算机系统的工作原理和方式;
●学习程序设计的思维方式,全面培养学生的综合素质;
●提高对计算机科学与技术的兴趣,促进更多的学生在未来的学习和工作中应用计算机来解决实际问题。
因此,着力培养学生对计算机及其编程的兴趣和理解,成了“Java程序设计基础”的根本目标。
计算机已经成为现代社会的一个基础知识和工具,85%以上非计算机专业的学生未来在从政、经商、在某个专业领域(如电力、汽车、物流、军工、艺术)从事技术或服务工作,都可能使用计算机系统,也许会有人因为工作需要而自己动手修改或创造新的计算机软件工具或系统。这在计算机的发展史中比比皆是。例如,统计软件包SPSS最初是由斯坦福大学的政治学研究生Norman Nie开发的,国内广泛使用的财务软件用友是由在财务领域工作的王文京领导研制的,数学软件Mathematica是由数学家领导研制开发的,雅虎搜索引擎最初出现是杨致远与费洛为了把在网络上寻找的资料类别整理好而编制成的软件。最初这些简单的应用软件经过发展、进而形成了新的商机和技术,同时也极大地推动了计算科学与技术的发展。
3 教学的策略与手段
3.1 教学策略
教什么、如何教就成为通识教育的关键问题。针对该课程以及学生的特点,我们经过实践、总结了本课程教学的策略:了解概念,理解思想,“不拘小节”,“不求甚解”。
“理解概念”是任何学科的基础,每门课程都有自己独特的概念。我们在讲述Java程序设计的概念时,重点在突出差异、采用比较的方式讲授。如把数学中的实数与计算机中的浮点类型数进行比较,并分别从计算机存储与安全检查两个方面简述为什么要区分出单精度浮点和双精度浮点类型的实数。
写出好的计算机程序,除了要掌握程序设计语言本身以外,还要求理解计算机的基本组成、运用数据结构、算法设计以及软件工程的基本知识和技术,最主要是要掌握程序设计的过程,让学生理解程序设计的思维模式和工作过程。这些知识都属于计算机专业的核心课程,不可能在通识教育的程序课程中充分展开,我们只需讲解与程序设计相关的要点。
例如,变量名在数学与计算机中都表示未定的值,但是在计算机中还表示值在内部存储地址的抽象,这样就顺便补充了计算机组成的核心——存储。在软件工程方面,需要学生掌握的的基本思想是:程序是机器执行的,但更多的时候是让人阅读的!因此,写出符合规范的、让人容易看懂的程序更重要。这就要求在教学中培养学生良好的程序设计风格和习惯,如规范的变量名、必要的代码注释、清晰的程序结构等。
经典程序设计的思想是“算法+数据结构”。算法设计是编程的核心,程序是用计算机语言实现的设计思想,数据结构与算法设计环环相扣,是不可分离的程序的两个方面。变量类型、数据结构和控制结构是冯诺伊曼式计算机系统的基本模式和组成。封装、抽象、复用发展成现代向对象程序设计的核心。在讲授这些抽象思想和原理时,我们尽量采用理论结合实际、案例引导、直观教学。
我们把程序的阅读与执行结合起来,让学生直观地学习静态的程序如何动态地执行、产生结果。由于一开始就阅读实际的程序,有很多知识可能还没有学到、甚至在课程中就不出现,使得学生“一知半解”,不能完全理解,对有些问题或知识可以“不拘小节”、“不求甚解”,这样有助于在短时间内让学生了解程序设计过程和程序结构,掌握编程的基本要领。这种方式类似于在外语学习中所采用的猜测法:在阅读中出现的生词不要急于查字典,可以通过上下文来猜测,通过大量的阅读来培养语感、文化直接用外语的思维模式。程序语言类似于外语,编程者需要逐步培养用程序化的思维方式、常用的表达模式和惯用语,而不必计较一些不懂的函数、表达、语句、或者类,特别是不要在编程工具可以解决的以及需要经验积累的细微末节上花费宝贵的时间。
3.2 教学手段
在教学的内容和形式方面,我们重点采取了下面的手段。
1) 基础知识不求全。因为,在一个学期的课程中不可能让学生把一门程序设计语言掌握到实用的程度。与其泛泛的介绍Java标准版的所有内容,还不如通过Java语言深入理解程序设计的精髓。因而,我们选择与语言无关的、所有编程的基础知识,如变量、表达式、逻辑运算、控制语句、类与对象以及GUI。知识的取舍取决于学生未来可能的应用。例如有关数的运算,我们只讲十进制的数,不讲各种数进制之间的转换,不讲二进制及其运算(尽管这是计算机的基础),也不讲位运算;对面向对象部分,不讲内部类和匿名类,等等。
2) 潜移默化思维模式。培养学生程序化、系统化的思维模式,让学生抽象的、类问题的解决模式(而不是个体问题)。通过实践使学生掌握程序设计的过程,包括如何分析问题、如何用计算机语言描述问题的解决过程——即编程,如何分析并解决程序中出现的错误(调试程序),如何在不同的环境下运行程序。
3) 培养自学能力。计算机技术、尤其是软件技术的发展日新月异,没有一本语言的教材能够与语言同步。现在的计算机发展为深入学习编程语言及其技术提供了广泛的手段,学生应该掌握自学能力。我们通过演示,让学生自己动手编程、分析代码、得到结果;直接上网查找资料,使得学生自己可以查找包括wiki、Blog、用户组、厂家在内的资料,了解语言的发展,更新知识,同时培养独立研究的能力。
4) 使用工具、动态学习。计算机是实践的技术、应用的技术,唯有动手才能掌握技术和技能;很多细节不需要花费时间(也没有时间),要充分利用工具来解决非核心的问题。例如括号不配对、变量未赋值就使用,程序美化排版,甚至需要引入的类库等;将有限的时间集中到概念的解释和计算机工具的使用,例如通过例子解释为什么变量使用前要先赋值,面向对象的属性有缺省值,然后如何利用编译器来发现变量未赋值引用的错误。
针对学生的不同基础和需求,我们还采取了如下的措施:对不同的学生采取灵活的教学方式,允许部分学生以难度较大的练习代替少量的缺席;针对学生课后时间有限以及编程是动手实践的活动,我们的课堂教学采用了理论+上机实践,课时分配位1:1,其中实践的内容包括学生自己阅读程序加上动手编写程序。理论上我们分配的课堂与课后的学时位2:1,实际上有一半以上的学生课后花费不足一个小时就能完成作业,没有花更多的时间去深入学习课程内容。考核以课堂练习和课后作业为主,考核也遵循“不拘小节”的策略,主要考查学生对程序的结构、语句的选择等设计思想的掌握,而忽略语言的细节,如变量名是否正确。
4 实践与挑战
在我们已经连续开设5个学期的通识教育课程“Java程序设计基础”中,教学策略和手段经过不断改进,逐步得到了学生的认可。表1列出了最近3个学期该课程的部分统计数字。每期的120个名额都报满,参加学习的学生分布全校理、工、文、艺、管、医的各个学部。学生的合格率也在逐年提高;其中音乐、艺术和服装设计专业的学生不合格的比例较高。选该课的一年级的学生几乎都在80%,而在第二学期的比第一学期的学生要多。
下面是一些需要我们继续研究、并通过实践来检验解决方案是否可行的典型问题和挑战,也希望与同行共同探讨:
教学程度。通识教育中计算机程序设计的教学内容到什么程度合适?是否要再开设一个提高班,以满足部分学生对计算机技术的更高追求?
分班教学。理工科学生在计算机的基础和理解力方面明显比其他专业的学生要强,是否有必要进行分班教学、因材施教?如何平衡学校、学院、学生以及教师的各种关系?
教材问题。难有教材满足我们的教学思想和内容,我们给学生只列举了主要参考书和网址。这种西方通行的教学方式在我校实施起来有难处:学生不愿花钱买参考书、图书馆没有足够的教材、大一学生的自学能力尚需培养。没有教材如何使得学生学好一门课?
语言与编程:程序语言是算法设计的体现,不同的语言适合不同的编程风格与应用领域。是选择流行的、应用广的编程语言还是选择体现计算机思想、适合教学的编程语言?
共性问题。如何处理通识教育与计算机基础教育中程序设计技术的关系(如学分可否互换)?是否应该对通识教育课的设定课程通过率(四分之一的不及格率是否过高)?
参考文献
[1] G. Weinberg. An Introduction to Systems Thinking[M].北京:清华大学出版社,2003.
[2] 谢中科,肖增良.程序设计系统化思维培养模式的探讨[J].计算机教育,2007,(4).
相关热词搜索: 教学研究 程序设计 实践 课程 教育