程序设计类课程的层次化教学模式研究与实践

来源 :计算机时代 | 被引量 : 0次 | 上传用户:duandan718121553
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要: 高校计算机程序设计类课程内容具有层次化特点,教学内容可作算法、方法学、语法和集成开发环境四个层次的划分,忽视了该特点往往会使学生的学习目标不明确。根据认知心理学和学习理论,提出了程序设计类课程的层次化教学法,使之无论从行为主义、认知学派,还是建构主义的观点出发,都能构建一个全新的教育传播模式,提高了教学效果。此外,以C语言为例,给出了一个具体的实施步骤。
  关键词: 程序设计; 教学法; 层次化; 教育传播; 学习理论
  中图分类号:G642.4 文献标志码:A 文章编号:1006-8228(2013)03-58-04
  0 引言
  《国家中长期教育改革和发展规划纲要(2010-2020年)》指出,信息技術对社会发展具有革命性影响,应把信息化能力纳入学生的培养目标,作为一项基本技能。对高校学生来讲,程序设计类课程是信息化能力培养的一个重要组成部分,在高校的人才培养方案中具有举足轻重的地位,学生程序设计能力是信息化时代的一个必要素质。
  目前我国高校的计算机公共基础课,以及部分计算机专业课,程序设计类课程的开设内容和教学方法大都是“一条龙”式的,即从问题描述、算法的设计、程序流程图到最后的编译连接、运行调试,其具体操作是作为一个完整的解决方案介绍给学生的,这种方式对大部分学生未必合适。我们在分析了程序设计类课程内容的层次化特点之后,将教学内容作了横向的层次划分,向学生传递归属层次明确的知识。通过这种内容上的层次化重组和定位,使之无论从行为主义、认知学派还是建构主义的观点出发,都能构建一个具有全新视角和明显高效的教育传播模式,为学习兴趣的培养和教学效果的提高奠定了基础。
  1 国内外研究现状
  国内外教育研究专家和计算机教育实践者做了不少的研究和实践,试图提高程序设计课程的教学质量,探索程序设计课程教学的新路子。Wulf(2005)从建构主义出发提出计算机程序设计的新教学法,如主动学习、学徒制、团队合作,并针对24人以下的小班设计了课前阅读与评分、课内评论、教师指导下的自主实践、个体作业和团队作业等具体教学措施[1]。Caspersen和Bennedsen(2007)根据认知科学和教育心理学中的认知载荷理论、认知学徒制和精加工实例的原理,提出一种模型驱动的面向技能教学的程序设计教学法,其中将程序设计课程涉及的模型分成类间模型、类内模型和算法模型三种[2]。Lui和Kwan等(2004)专门针对弱基础学生提出一个建构主义的Perform教学方法,该方法在主观上以达到“全民编程”为设计原则,首先分析了弱基础学生感情上和认知上的5个弱点,然后提出有针对性的C语言课件开发指导原则[3]。Zhu和Zhou(2003)提出了方法学优先的教学策略,认为像C++这样的面向对象程序设计语言的教学应该先教方法学再教语言本身,同时给出了方法学的6步骤教学法[4]。莫永华和寇冬泉(2005)以认知心理学为基础,秉承OSI七层参考模型的分层思想,对学习和记忆的信息加工模型加以改进,提出了一个更加有效的、全景式的人类分层传播模型,并结合该模式探讨相关学习理论[5]。张晓竞和陈元琰(2004)做了面向对象程序设计课程的感性化教学探索,提出了横向列表比较法、纵向特征点延伸法等具体措施[6]。高枚和杨志强等(2005)从教材建设、教学内容的组织以及教学方法等几方面总结了“C/C++程序设计”课程教学的一些新思路和体会[7]。刘璟(2003)指出,对于程序设计的研究,可以分为四个层次:算法、方法学、语言和工具,其中算法设计与分析的研究在最高层次上[8]。
  在与层次化有关的教学理论或实践方面,文献[4]虽涉及了方法学和语言的教学层次关系,但实际的层次不限于这两个,其中的6个教学步骤也仅限于C++。文献[5]的人类分层传播模式虽然提到分层,但并不是教学内容的分层问题,而是教育传播的分层问题。文献[8]把算法看成是程序设计的最高的、终极的层次,但在实际的科学研究中,一方面算法最终离不开实现工具的支持,另一方面工具的运用(如软件包、GPU)也能使许多课题的研究获得进展和创新,在工程技术领域更不能忽略工具的重要性。包括工具和集成开发环境在内的较低层次内容无疑是程序设计的重要教学内容。
  2 层次化教学的思想
  2.1 程序设计类课程内容的四个层次划分
  计算机科学家沃思(N. Wirth)提出过一个著名的公式:
  数据结构+算法=程序
  我国的计算机教育家谭浩强教授改进了这个公式[9],提出:
  程序=算法+数据结构+程序设计方法+语言工具和环境
  他们都是运用层次化的思想观察程序的本质。我们根据多年来的教学实践和总结,程序设计语言课程内容也有一个清晰的层次划分,它可以分成四个层次:算法、方法学、语法和集成开发环境。这四个层次从窄到宽,从抽象到具体,构成一个金字塔,如图1所示。
  算法(Algorithm)是计算机科学的核心,是指解决问题的结构化流程,是编排计算机指令的策略性步骤。按照D. E. Knuth的定义,算法是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列,算法应具有如下五个重要特性:有穷性、确定性、输入、输出和可运行性[10]。算法是方法学无关的,也是语言无关的,即算法的设计不依赖于用什么样的程序设计方法,更不依赖于具体的编程语言。
  方法学(Methodology)是计算机语言的设计方法,比如简单过程式的程序设计、面向对象的程序设计、并行程序设计和网格计算[11]。以前的Fortran语言和C语言是按照简单过程式语言设计方法设计出来的语言产品。而现在流行的Java和C++是按照面向对象方法设计出来的语言产品。
  语法(Grammar)描述了组成一个有效程序的符号的顺序,语法为理解一个程序提供了重要的信息,同样也为将它翻译成目标程序提供了必要的信息[12]。语法包括词法和句法,语法是学习计算机语言的最基本、学生最直接感知到的内容。程序设计语言不同,直观地看,就是语法不同。   集成开发环境(Integrated Development Environment, IDE)是为了让某一种语言的程序代码能方便地录入、编辑、存储、编译、运行和调试,以及为函数库调用、类库导入、命名约定、硬件相关的优化、编译选项等提供接口的应用软件[13]。
  这四个层次从上到下构成一个从抽象到具体的概念范畴。上一层次与下一层次都存在一对多的关系。一个算法可以用过程式的语言实现,也可以用面向对象的程序实现;在同一种方法学(如面向对象)指导下设计的语言有多种(如C++、Java),它们的语法不同;同一种语言(即语法相同)可以有不同的集成开发环境,比如C++的IDE有C++ Free,VC++6.0,VC++.net等。
  層次越高,越具长期性,层次越低,越容易被更替和淘汰。优秀算法的生命力很强,能生存几十年、几百年甚至几千年;方法学具有计算机发展的时代特征,一般有几十年的生存期;计算机语言则不断推陈出新,有的能用几十年,有的则几年后就被人遗忘;而集成开发环境更加短命,IDE的新产品不断出现,版本几年一更新,程序员需要不断去做升级,跟上变化。
  2.2 层次化教学的心理学和教育学基础
  层次化教学的思想虽然源自教学实践,从学习理论的观点来看也是具有它的理论基础的。
  关于学习理论,经历了一个从行为主义,到认知学派,再到建构主义的发展历程。最早的行为主义学习理论以华生(Watson)为代表,将巴甫洛夫的条件反射理论应用到教育传播和学习理论的研究中去。但是行为主义的学习理论过于强调环境对学习的决定作用,认知主义的学习理论则以学习者主体为主要决定因素,指出学习过程是一个学习者根据个体的已有知识和外部环境加工形成新知识的过程。建构主义更加强调学习者的主观能动性,提出学习是一个发现过程,而不是一个接受过程,更不是信息传送过程[14]。
  如果单纯从行为主义出发,知识的分层至少能够提高刺激-反应(S-R)联系的形成效率。
  在学习理论的认知学派中,奥苏伯尔(Ausubel)提出的先进组织者(Advanced Organizers)理论指出,教师的角色是教学内容的组织者,教师的责任是将教学内容进行有意义的组织,使得它成为学生长时记忆的骨架(umbrella),起到提纲挈领的作用,具体的知识将由学生自己填充。教学内容层次化结果就是一种长时记忆的骨架或教学内容的先进组织,这种层次化模式还具有如下优点。
  ⑴ 有利于注意(Attention)的参与。注意是感知的重要特征和学习效率的基本保证,在学习过程中,感知到的内容包括知识点本身、知识点所处的层次、教学环境、教师的态度以及干扰信息等,层次作为其中一种特意安排的新感知内容引导了注意的方向,强化了知识点本身,使学习者尽早抛弃非相关内容,避免了许多混乱的感知内容进入后续的加工过程。
  ⑵ 它是概念形成的良好框架。能激活原有的知识(长时记忆),与感知到的新知识经重新编码成为新的长时记忆,从而使新概念以及该新概念所属的层次存储在长时记忆中,由于这些概念在存储时增加了“所属层次”的编码,使以后的检索和理解更加快速和准确。
  ⑶ 有利工作记忆中块(Chunk)的信息量提高和加工的效率。工作记忆是一种短时记忆,其中的内容以块为单位,是学习过程的加工对象,米勒(Miller)认为工作记忆中块的个数是相对固定的(约7±2),与块的信息量(比特数)无关。层次化处理很容易将同层的知识同块化,从而提高块的信息量和学习和记忆加工的效率。
  ⑷ 一定程度上迫使教师的隐性知识(Tacit Knowledge)转换为显性的可分解的步骤,降低学生的学习难度。例如,C++的#include命令不仅是一条简单的语句,而且会涉及到后续的文件和存储目录,含有语法和IDE两层知识,分层次的教学就自然使教师讲解#include命令时分解到位,两层均及,使学生能充分建立该语句的概念和机制。
  建构主义是上世纪末兴起的学习理论,重新从学习者的角度分析了认知活动的规律。基于建构主义观点提出的教学法层出不穷,关键思想是认知的主动性、教师角色从“教导者”转为“推动者”、教学内容的结构化等等。程序设计类课程的层次化有利于提高认知的主动性,顺应学生的偏好和个性,教学内容的结构化程度自然上升,同时从课程内容的四个层次来看,教师客观上成为四个层次知识传授的推动者,在算法和IDE两端层次尤其如此。
  3 层次化的教学方案和实例
  3.1 层次化的教学方案
  基于上述分层次思想,我们提出的总体教学方案是:对计算机程序设计类课程的教学内容做算法、方法学、语法和集成编程环境四个层次的划分。以计算机语言课程的四个层次为框架,重新梳理教学内容,分层定位知识点,将各章节各知识点归到各个层次。这个分层过程对理论课、实验课和课程设计同步进行。
  以教学内容的层次化为导引,将层次化的思想贯彻到各个教学环节,包括教学大纲修订、教学进度安排、教学手段创新、学生学习引导、考试、课程设计、毕业设计等。
  值得注意的是,四个层次之间的关系并不是简单的相加关系,而是抽象与具体、调用与支持的关系。层次化的教学方案并不是说按照算法到IDE或相反方向的顺序重新安排教学过程,而是教学过程仍然按照原来的章节顺序,只是在每个章节、每堂课将所讲授内容明确指出所属的层次,以方便学生的领会、掌握和主动学习。
  此外,传统的以问题为中心的教学方法是以“问题”为格式塔(Gestalt)进行问题的求解,本方案并不是以“概念”或“操作”为新的格式塔,而是仍以“问题”为初始格式塔,只不过特别强调问题求解过程中学生顿悟(insight)到的各种子格式塔,这些子格式塔对应于它所属的各个层次,由于有了四个层次的划分,这里的顿悟已退化为平凡的获取,需要顿悟的仅为子格式塔内部的顿误了。   3.2 实例
  以C/C++语言为例,给出一个具体可操作的教学实施步骤如下。
  第一,划分计算机语言类课程的四个层次:算法、方法学、语法和集成开发环境。分析四个层次在C/C++教学内容中的分布情况。
  ⑴ 算法在本课程中涉及较少,它主要在数据结构、算法设计与分析等课程中讲授,但不是不能涉及,比如线性搜索的二分法在本课程要讲到。
  ⑵ 方法学在本课程中重要且较难接受的内容,它主要包括模块化的编程思想,面向对象程序设计思想,如封装、抽象、继承、多态等。
  ⑶ 语法内容是本课程的主要内容,包括函数的定义、声明和调用,对象和类的定义、类的派生等,占授课内容的70%左右。
  ⑷ 集成开发环境在本课程的理论部分占得比较少,但在实验部分占得比较多,具体就是C编译环境、VC的使用方法,Windows应用程序框架的构建方法。
  第二,在C++程序设计的知识点的分层梳理和归类的基础上,编排和修订理论教学内容、实验教学内容和课程设计教学内容,以所属层次和学习要求的二维坐标来标注各个知识点。在教学大纲中记录教学内容及其所属层次和学习要求。教学大纲的“基本要求”按照图2例子的格式记录。
  第三,以层次化思想指导教学活动的各个环节。从教学内容上看,第三层次的内容都是教师讲授、学生学习的主要内容,但从教学主体和客体的细分角度看,对动手能力强、有志于创业的学生宜偏重于第四层次的知识,对理论兴趣浓厚、科研型的学生宜偏重于第一、第二层次的知识。从课件的制作看,宜在开篇第一课就向学生展示四个层次的“金字塔”图。从上机实践看,对IDE的操作知识要及时向学生明确指出,以正确构建认知模式。
  第四,实施一些配套工程,如编写相应教材、实验教材和课程设计指导书,制作全套课件,开发网络教学资源,在每一环节都强调层次化意识。
  4 结束语
  作者通过在温州大学五年来C语言、C++语言、Java语言等课程的层次化教学实践,教学年级覆盖大一、大二、大三,对象程度覆盖二本、三本和专科,发现层次化的教学法能够明显提高教学效果。具体包括:①学生的动手实践能力明顯提高,学习兴趣增大,对参加毕业设计、专业实习更有信心,专业技能更符合社会需求,更受用人单位的欢迎,就业更具竞争力;②算法和程序设计方法的理论更加扎实,参加程序设计竞赛、考研、考软件设计师更加积极,参加人数逐年递增,为他们在将来的研究工作中打下更坚固的基础;③后续课程的学习更加轻松,合理引导了继续学习方向,培育了主动学习的动力。
  层次化的思想具有一定的推广价值,对程序设计类课程如C/C++、Java、VB、Python、Delphi、PHP等教学改革都有指导意义。
  参考文献:
  [1] Wulf T.: Constructivist approaches for teaching computer
  programming. In: Proceedings of the 6th conference on Information Technology Education,2005:245-248
  [2] Caspersen M E, Bennedsen J.: Instructional design of a
  programming course: a learning theoretic approach. In: Proceedings of the third international workshop on Computing Education Research,2007:111-122
  [3] Lui Andrew K, Kwan Reggie, Poon Maria, Cheung Yannie H Y.:
  Saving weak programming students-applying constructivism in a first programming course. ACM SIGCSE Bulletin,2004.36(2):72-76
  [4] Zhu Haibin, Zhou MengChu: Methodology first and language
  second: a way to teach object-oriented programming. In: Conference on Object Oriented Programming Systems Languages and Applications,2003: 140-147
  [5] 莫永华,寇冬泉.基于认知心理学的人类分层传播模式[J].电化教育
  研究,2005.11:38-41
  [6] 张晓竞,陈元琰.面向对象程序设计课程的感性化教学与创新应用
  [J].计算机教育,2004.10:73-75
  [7] 高枚,杨志强,许兰兰,龚沛曾.C/C++教学改革的探索与实践[J].计算
  机时代,2005.11:8-10
  [8] 刘璟.计算机算法引论——设计与分析技术[M].科学出版社,2003.
  [9] 谭浩强.C程序设计(第二版)[M].清华大学出版社,1999.
  [10] Knuth D E. The Art of Computer Programming(Third Edition)
  Vol. 1: Fundamental Algorithm[M]. MA,USA: Addison-Wesley,1997.
  [11] 胡正国,吴健,邓正宏.程序设计方法学[M].国防工业出版社,2003.
  [12] Pratt T W, Zelkowitz M V.著,傅育熙等译.程序设计语言设计与实
  现(第3版)[M].电子工业出版社,1998.
  [13] Wikipedia: Integrated development environment. http://en.
  wikipedia.org/wiki/Integrated_development_environment,2012-8-3.
  [14] Gredler M E. Learning and Instruction: Theory into Practice(Fifth
  Edition), Prentice Hall, Pearson Education Inc., 2004:27-47,74-92,196-262
其他文献
历史教学要抓课堂教学的主流形态,这样在课改中才能收到良好的教学效果。
摘 要: 分析了企业中大量现有的.NET应用程序与J2EE应用程序集成的关键问题,阐述了目前应用WebService的集成方案所存在的缺点,在此基础上提出了基于ESB的.NET应用程序与J2EE应用程序集成方案。该集成方案可以保证消息的可靠传递,提供灵活的消息路由,增强服务的可管理性,并且提供协议的转换功能。  关键词: .NET; J2EE; 系统集成; Webservice; ESB  中图分
文章论述了文献信息资源和通识教育的内涵,从通识教育模式、高校中开展通识教育存在的问题以及相应的对策等方面阐述了图书馆文献信息资源在高校通识教育中的作用。
近期,英国能源与气候变化部启动一个能源资助计划,叫做海洋能源阵列示范项目(Marine Energy Array Demonstratorscheme,MEAD),支持额度为2000万英镑,这一计划主要支持波浪能和潮汐能
通过文献资料法、录像分析法、专家访谈法及数理统计法,对获得第12届健美操世锦赛男单前四名的成套动作进行对比分析。
摘 要: “汇编语言与微机原理”是计算机科学与技术专业的必修基础课程。在教学中汇编语言子程序实验设计普遍存在两个问题:实验学时安排不足;实验内容片面。针对前者,通过合理整合实验项目以增加子程序实验学时;针对后者,通过调整实验内容补充与子程序密切相关的宏和中断加以解决。最后给出了一个实验设计的实例。该实例简单实用又不乏创新之处,应用效果良好。  关键词: 汇编语言; 子程序; 宏; 中断; 实验设计
互联网的迅猛发展是时代与科技发展的必然趋势,网络文化对当代青少年的体质健康带来的影响越来越大,成为当前社会关注的焦点问题。
提出利用一种局部的幂函数映射图像增强方法(LPFM),来提取大米数字图像中的特征信息,以实现大米的边缘检测。该方法基于图像子块和迭代窗口,对照度不均的图像增强效果显著,与传统的方法比较,具有速度快、所得图像区分度高、背景噪声小的特点;它结合Otsu算法实现了对大米边缘的精确性检测,对图像背景噪声进行了有效滤除,并能够正确提取大米边缘。LPFM方法在食品储存和运输过程中对大米质量的检测起到了很好的效