我国软件行业每年需要大量的编程人才,而我国高等教育培养的计算机人才数量可以满足需求,但质量仍远远落后于软件企业的要求。事实上,很多计算机专业的学生毕业后都需要参加社会培训,才能从事软件开发行业。这说明我国程序设计课程体系的教学效果还不尽如人意,尤其是对于学生基础一般的应用型本科院校。
由于编程能力是计算机专业学生的核心能力,如何改进教学,高效培养学生的编程能力一直是一个具有重要研究意义的课题[1]。目前的教学研究大多是对教学方法和手段的改革,对课程体系结构、培养目标层次等教学改革的基本问题的研究很少[2-4]。

一,当前程序设计课程体系存在的问题
与中国相比,印度的高等教育毛入学率不如中国,但培养了大量合格的软件开发人员,这说明印度的软件教育比中国更成功。有人认为这是因为印度的母语是英语,所以学软件开发有语言优势。其实这种观点并没有意识到问题的症结所在。我们认为这是由于两国在编程人才定位、培养目标、课程层次侧重点等方面的差异。
中国的高等教育是从精英教育开始的,编程教学一开始也是面向精英学生的。因此,较高层次的培养目标导致课程体系中高层次课程较多,而低层次和应用型课程不足。随着我国高等教育逐渐从精英教育走向大众化教育,虽然做了一些调整,但仍然存在盲目提高层次、程序设计课程体系层次不清等问题,这是我国程序设计课程教学效果不佳的真正原因。
首先,各层次的教学目标不够明确,表现在以下几个方面:①课程设置和教学内容没有体现分层教学目标;②一些高层次的课程或知识点,是在低层次的教学目标还没有达到之前设置的。比如学生在学习数据结构时,甚至无法理解代码中出现的大量函数定义,导致学习效果不佳;③大学教学中讲解比较空了一些应用价值较高的编程技巧,但没有深入和强调。
其次,根据建构主义学习理论,学生要掌握新知识,必须与旧知识联系起来才能掌握,这就要求必须明确程序设计课程的层次结构和认知的逻辑顺序。如果不明确课程的层次结构,学生在构建知识体系时就不能很好地将新知识和已有的旧知识构建在一起。
三是存在盲目提拔上级的现象。比如高校大量的数据结构课程都在讲一些高级的数据结构。但实际上,这些先进的数据结构可能只在一些科研软件的开发和编程中使用,而在大多数行业软件的开发中一般不会用到。相反,在软件公司,一些经常使用的技术在高校开设的课程中并没有系统的教授。比如学生没有学过微观设计软件的课程——“设计模式”,就去学宏观设计软件的课程——“软件工程”,教学效果肯定不会好。
最后,没有兴趣引导和任务驱动的教学策略。过去有一种普遍的误解,认为教编程课程就是教编程语言。事实上,学生学习的第一语言大多是C语言或VB,但这两种语言并不能为初学者做出更实用的程序。另一方面,它们侧重于语法教学,使学生容易陷入语法格式等繁琐的细节中,忽视了编程的本质,忽视了编程语言设计者的设计思路,降低了学生的编程兴趣,不利于学生编程思维的塑造和培养。
总体而言,程序设计课程体系的设置和教学研究仍处于逐步深化的过程中,存在以下问题和不足:①由于研究者多为教育工作者,缺乏开发大型软件的实践经验,对程序设计学习的层次和路线大多缺乏切身体会;②教学模式中只提出了分层阶段模型[5],没有对程序设计课程的知识结构进行分层分析,导致教学模式的转换难以应用到实际教学中;③过于强调教学内容的系统性和完整性,对编程中需要掌握的关键技能重视不够。
2程序设计课程体系的维度和层次设计
虽然编程课程的教学体系庞大且不断发展变化,但学习编程的模式和步骤是相对固定的。根据编程需要学习的各个知识领域,抽象地分为三个方面,称为编程课程体系的三个维度,如图1所示:
图1程序设计课程体系教学的维度和层次划分
维度1:界面编程和用户交互。
维度2:对外部资源的编程访问。
维度三:各种平台下的编程。
划分维度后,根据每个维度的难度和学生的兴趣,可以更清晰地规划学生的学习路径,为更好地编写课程标准和人才培养方案提供参考。对于应用型本科人才的培养,教学内容的改革应该在一维度和二维度上进行。
接下来研究编程课程的学习水平,根据学习水平设置相关课程。根据编程能力是一种分层次的能力,教编程不是教语言,每种语言都有一些共同的内容。编程课程对语言的依赖性低,对几种固定能力的依赖性高。编程所依赖的几种固定能力可以分为五个层次,如图1所示。
第一级:学习基本语法和基本程序结构。
第二关:学会包装程序。
第三个层次:学会用设计模式抽象问题。
第四关:学会使用特殊的数据结构,设计高效的算法。
第五层次:掌握软件开发的流程和方法。
最后,研究初学者学习编程的习得过程。在课程内容设置上,注意分散难点,由浅入深,问题驱动。在实验案例的设置上,要注意案例的实用性、综合性、趣味性和难度适中。
3课程体系的教学实施

3.1教学改革与课程体系重构
基于维度和层次课程体系的划分,给出了总体的培养目标、课程体系安排、课程教学模式以及可操作的教学模式和方案,为计算机程序设计课程的理论和实验教学提供了参考和推广价值。具体实施步骤如下。
分析程序设计课程体系的层次和维度,寻找最佳学习路径,根据层次培养目标,根据维度确定最合适的切入点和学习范围。
按照分层教学目标构建课程体系,重构各层次的课程设置和各门课程的教学内容。
分析新建课程的知识结构,将知识点分为元知识、硬知识和软知识,分别设计教学策略和教学方法。
按照上述步骤进行教学实践,然后总结出一般的教学过程、教学方法和教学策略,并以培养计划、课程标准、教材、研究论文等形式展现出来。
3.2课程体系维度的教学讨论
划分程序设计课程体系的维度和层次,并不是要求在开设课程时涉及所有的维度和层次,而是要根据学生的实际水平或社会对专业人才的需求,灵活选择一些层次和一些维度。对于应用型本科院校,课程体系的维度可以设置如下。
对于偏硬件开发的方向,要重点学习维度三的内容,即掌握各种平台下的编程;在编程层面,学生达到二级就够了。
对于网络发展方向,可以重点加强2维的学习,包括网络编程和Web编程。学生可以达到第二级。
对于软件开发方向,学生至少要达到三级。对于维度,主要学习维度1和维度2的内容,包括各种接口和交互的编程,以及对外部资源的编程访问。
3.3基于分层和维度的课程
应用型大学要培养出满足软件企业需求的编程人才,在教学上应该以第三层次为目标,只对第四、第五层次有一定的了解。因为第一层次是基础,第二层次和第三层次是重点,所以教学改革的重点应该在第二层次和第三层次。
基于层次化和立体化的方法,构建了程序设计课程体系。
对于第一层次,主要通过编程语言学习基本语法和基本程序结构。设置2 ~ 3门编程语言为宜。在教授第二语言时,要注意与第一语言的对比分析,通过比较几种编程语言的异同,让学生对编程有更深的理解。在编程语言的选择上,可以根据专业学习或者社会的需要灵活选择。比如我们学校一般选择C++、Java、Python作为一级教学的编程语言。
一级课程可与一级课程结合开设,如“Windows界面编程”、“Web编程”等。界面编程和数据交互是制作实用程序的基础,学习界面编程可以有效激发学生学习编程的兴趣。界面编程本质简单,适合尽快开通。根据难易程度,可以按照Web编程、Windows编程、Android编程的顺序学习。
对于第二个层次,可以提供“程序封装方法”。本课程的主要内容是函数和面向对象程序设计,对于应用型大学的学生来说是非常必要的。应用型大学的学生在学习了几种程序设计语言后,往往无法理解程序封装的方法和功能,导致他们很难学习数据结构等后续课程。因此,单独把程序封装方法作为一门课程来开设,可以起到很好的衔接作用。另一方面,在软件开发行业,能够编写函数是参与团队软件开发的基础,而类作为面向对象编程的核心组件,本质上就是对函数和数据进行二次封装,进一步结构化程序。可见,掌握了程序封装方法的学生,就相当于拥有了进入软件开发行业的敲门砖。
对于第二个维度,可以设置“数据库与Web编程”,将数据库与Web开发结合起来学习更有效;以及“Socket网络编程”,结合了访问网络和访问文件的技术。
对于第三个层次,可以开设“设计模式”课程,该课程应该以任务驱动的方式介绍几种常见的设计模式和UML软件建模方法[7]。这样学生掌握了这个水平后,就可以适应软件公司程序员或者系统架构师的工作需要。
在第四层次,应开设“数据结构”课程,重点介绍几种简单常用的数据结构和算法。应当注意,第四级和第三级学习也可以同时进行。
第五层次是开设“软件工程”课程。只有学生有了一定的编程经验,才能更好的理解这门课程。所以这门课需要在大四,经历过编程课程设计或者实习之后开设。在这个层面上,还需要注意培养学生的软件团队开发技能。
3.4教学实施案例
以衡阳师范学院网络工程专业为例,按照课程体系维度和层次的划分方法,重构了该专业的人才培养方案和课程设置。编程能力的培养目标是达到第二层次:第一层次开设C++和Java的课程,第二层次开设程序封装方法的课程。

关于课程设置,以一维和二次元为主,开设Web编程、Socket编程和Android编程。此外,还提供了几门先修课程,如数据库原理、计算机网络和Linux操作系统,以支持相关编程课程的学习。
教学改革实施后,取得了良好的效果。学生的学习兴趣和编程自信心得到了显著提高,就业质量也得到了显著提升。
4结束语
程序设计课程体系的维度和层次划分方案在衡阳师范学院计算机专业进行了初步实践,取得了良好的效果。极大地改善了程序设计课程的教学效果,从而提高了应用型本科院校计算机专业人才培养的质量。通过本项目的研究,可以完善和改进专业人才的培养方案。同时也将大大提升学生对学校和专业的认可度,提高毕业生就业率,为中国软件产业的发展做出一定的贡献。
本文已发表于《计算机教育》2019年第11期。


