针对高职院校Java程序设计教学内容的改革研究
2022-07-09蒋晓南
蒋晓南
(苏州托普信息职业技术学院,江苏 昆山 215311)
1 J a va 程序设计教学中普遍存在的问题
1.1 教学目标问题
教学目标是一个很值得讨论和研究的问题。 作为一名高职高专院校的教师笔者一直很疑惑,究竟高职高专院校培养人才的目标是什么? 通常得到的答案是,培养高素质的应用型人才。 如果这是真的,那么整个教学体系的设计就存在着严重问题。
包括Java在内的许多程序设计类课程,多以考证作为教学的最终目标。 不可否认这是非常务实的做法,因为在对高职高专院校的评价体系中,这是重要的指标。 然而,以考证为目标的教学,真的可以让更多学生通过程序设计类的考试吗? 考过了又代表什么呢? 就可以胜任程序员的工作吗? 一位著名互联网公司的程序员曾经说过,100 张证书也不及1 个Demo。
计算机程序设计类的竞赛考试,普遍以数据结构与算法的知识作为考核重点。 不可否认,数据结构与算法是程序设计的核心,然而是否所有应用型人才都必须掌握这种核心呢? 或者说是否要在刚接触程序设计不久就掌握这种核心呢? 不精通算法就不能成为程序员吗?
事实上,程序员分为两大类,Class Creator(基础类设计师)和Client Programmer(客户程序员)。前者的确需要更好地掌握各种数据结构与算法的知识才能设计出效率更高的方法(函数),而后者在绝大多数情况下只需要调用前者设计出来方法(函数)解决实际问题就可以了,没必要深究方法(函数)的具体设计过程。 高职高专院校的宗旨是培养应用型人才,应该以后者作为培养的目标。 实际上,生活中所接触到的大量程序员,基本都属于后者。
1.2 教材问题
高职院校的宗旨是培养应用型人才,但多数高职高专教材与本科教材没有本质的差别,只是在内容上进行部分删减,完全没有针对性。 当然在提倡项目式教学的时代,也有不少教材在内容上做出了比较大的调整,加入了一些大型应用案例,拆散后分布在各个章节加以介绍。 个人认为,这样做太过急功近利。
一个婴儿不能一出生就大鱼大肉的喂食,即使撕成小块他也无法消化。 一个程序设计的初学者就好比一个婴儿, 应该先以一些容易消化的食物进行喂养,再慢慢加入一些高营养却难消化的食物。
1.3 教学内容问题
教学内容往往与前面提到的两点密切相关,传统的程序设计类课程一般会安排大量课时讲解基本语法, 以及利用基本语法知识进行大量算法习题训练,超过半学期的课程都停留在main 方法(函数)的编写和命令行的输入输出。
必须承认,这样的教学内容安排可以很扎实地打下编程基础,也可以在一定程度上提高学生的逻辑思维能力,与各类程序设计考试、竞赛都非常合拍。 但这种教学内容安排只适合于逻辑思维能力较强,拥有较高学习主动性的学生,而对于绝大多数高职高专的学生来说,无疑是致命的打击。 抱着好奇心而来的学生,往往很快感到乏味,不少有上进心的学生也会因为对自己的逻辑思维能力缺乏信心而最终选择放弃。 而且,这样的教学内容安排,忽略了Java是一种面向对象的程序设计语言,学生学完整学期的课程仍然只拥有面向过程的程序设计思维,即使是通过了计算机二级考试或是其他程序设计类考证的优秀学生,也根本无法完成简单应用程序的开发。
个人认为,即使以考证作为终极目标,也不该过早地将算法内容强加给学生。 算法属于基础研究的领域,应该把它作为学习和提高的目标,而不应该作为学习的起点,因为这违反人类基本的学习习惯。 人总是先学会吃饭,再学会做饭,最后才学会种地。 当然你可以说,不学会种地,哪来的饭吃? 但如果你教一个刚出生的婴儿,先学种地,再学做饭,最后才吃上饭,他一定会饿死。 今天,很多人都不会种地,然而一样生活得很好。 当然你还可以说,如果不懂种地,你就不知道什么是真正有机和健康的食物。 笔者承认,然而这并不妨碍一个有动力的人继续学习和提高。
2 J a va 程序设计教学改革方案
前文中讨论了Java教学中存在的各种问题,下面针对这些问题提出笔者的改革方案。
2.1 教学目标
抛开传统桎梏,培养新时代应用型人才。 完成一学期的Java程序设计教学,应该能够让学生完成简单应用程序的设计,至少能在现有程序的基础上加以改造和创新,不需要高端,不需要新颖,只要能够亲自动手完成设计即可。
在这种教学目标的驱使下,学生能够更多地体会到软件设计带来的成就感,从而迸发出更强烈的学习热情。 俗话说“师傅领进门,修行在个人”,靠的便是这份热情,有了热情,教师就可以引导学生自主地进行更深层次的学习,从而完善提高自己。
2.2 教材选择
项目式教学是目前较为推崇的教学模式,它和高职高专院校的人才培养目标也很吻合。 然而,如果只玩弄名词,不尊重实际教学过程,很快就会将这种教学模式埋进历史垃圾堆。
有些教材为了吸引眼球,直接将一些大型的甚至是企业级的案例原封不动的搬到教材,拆散后放到各个章节讲解,且不说学生无法接受,就是教师看着都吃力。 而且,这种级别的案例往往需要完整学完才能看到系统运行的效果,如果学期不够长,根本学不完,即使能够学完,也会因为反馈周期太长,而使学生丧失兴趣和信心。 如果不慎选择了这些教材,将使教学成为一个个烂尾工程。
所以在教材选用方面,个人钟情于一些以小型案例为主的教材。 这些案例通常可以在2~4 学时内讲完,同时还留有改进和升级的空间。 这样的案例放在教学中,不仅能让学生感受到及时的反馈,还能留给学生发挥创意的余地。 这样,经过几个案例的讲解,学生就会对软件设计开发产生基本的认知,从而产生浓厚的兴趣。
2.3 教学内容设计
个人认为,如果在开设Java课程之前已经开设过C 语言课程, 那完全可以略过语法基础部分的讲解。如果没有开设过,也不应该花太长时间讲解语法基础和程序结构,更没有必要在算法里打转,只要够用就可以引入一些简单的案例进行讲解,伴随着案例难度的提升再慢慢引入其他必要的基础知识。 就好像一个婴儿,没必要等他把刀、叉、勺、筷子等所有餐具都使用熟练后才教他吃饭,只要会用勺就可以把饭先吃起来,等遇到了瓶颈再教他使用其他餐具。 否则,没等到他把刀、叉、勺、筷子都练熟就先饿死了,即使幸存下来也会惊奇地发现自己连咀嚼和吞咽都不会。
以上是针对Java教学内容设计的概要论述,下面给出具体的教学内容设计方案。
第一阶段:语法及编程基础
如果没有开设过C 语言课程,那么必要的基础知识应该包括:(1)实验环境的搭建:主要讲解实验环境的安装、使用以及第一个Java程序“Hello World”的编写;(2)标识符与关键字,数据类型与常量、变量,运算符与表达式:关键字、数据类型和运算符可以有选择性地讲解,没必要一开始全部交给学生;(3)语句与程序控制结构: 程序控制可以主要讲解if…else、for 和while,并且不要在此陡然增加程序难度,尽量避免多重循环嵌套的复杂例题讲解,会用即可;(4)方法(函数):此处应该重点讲解,因为它是面向对象的基础。当然,应该侧重方法定义、方法调用、入口参数、返回类型等相关知识点的讲解, 至于方法内在功能设计、形参实参和递归调用等问题也可暂缓介绍;(5) 数组和字符串: 简单介绍数组和字符串的定义和应用即可,不必在此升级问题难度。 尽量避免数组排序、二维数组遍历等较为复杂的例题讲解。 在讲解字符串时,也可顺便引入Java的API 文档,有选择性地介绍一些字符串常用方法。
如此一来,不出24 学时便可结束第一阶学习。 如果开设过C 语言课程,那只需要讲解上述(1),省略上述(2)(3),上述(4)(5)也可以根据学生掌握的具体情况,进行重点的强调和补充,不出12 学时便可结束第一阶段学习。
第二阶段:面向对象思想与基础
笔者认为, 应该以图形用户界面作为起点开始真正的Java旅程。 原因有以下几点:(1)虽然桌面应用程序并非Java最常见的应用领域,然而在Windows 环境下成长起来的中国人对于图形界面却非常熟悉和亲切,这样有助于提高学生的学习兴趣;(2)图形界面可以非常直观地体验到人机交互, 在讲解案例时可以紧紧抓住课堂上的注意力, 在改造和完善案例的实践中也可以调动起学生的积极性;(3)图形界面拥有很好的扩展性和延伸性, 可以顺利扩展延伸到其他知识内容中,可以让学生在不知不觉中涉猎和巩固更多知识点。
在起步阶段可以使用一些常见的图形组件, 如:窗口、菜单、按钮、文本框等搭建一些经典窗口界面,并直接引入类、对象和包的概念;接着可以继续引入类的实例化、成员方法的调用、构造方法的作用以及类的设计原则。
为巩固知识可以让学生自主设计各种界面进行练习。 需要注意的是,在起步阶段不应该使用IDE 工具直接手绘界面,否则无法引入相关知识,也无法锻炼学生程序设计能力。
如果平稳起步,接下来就可以将教学内容进行逐步地扩展与延伸。
首先, 可以利用更复杂的界面设计案例引入继承、多态的知识点,还可以回头针对第一阶段的内容进行加深巩固。
其次, 可以讲解图形界面中事件处理的问题,并顺利引入抽象类、接口、内部类及匿名类的相关知识点。 当然,在此不必深挖概念和特性,了解会用即可。
最后,可以利用如“计算器”这样的完整小案例对第二阶段的知识点进行复习与总结,并在实践环节中加以引导,充分调动学生的好奇心与积极性。
第三阶段:案例牵引
利用案例牵引着学生涉猎Java其他模块的相关知识,虽然只能浅尝,但是也可以开阔眼界、增加兴趣。
首先,可以利用类似“记事本”这样的文件操作案例,引入JavaIO 系统和异常处理的相关知识。
其次,可以利用类似“画图”这样的图形绘制案例,引入Java图形绘制以及图像处理的相关知识。
最后,可以利用类似“计时器”这样的案例,引入Java多线程的相关知识。
通常到了这个阶段,学时已用大半,可根据学生接受情况进行灵活调整。 如果学时充足,可以再利用“网上聊天”案例引入网络编程的相关知识,或者利用“贪吃蛇”这样的桌面小游戏进一步提高学生的学习兴趣。但如果学时不足,也可将第三阶段的部分案例去除。
至于数据库编程部分, 往往都和大系统开发相关,案例通常较大,不太适合直接引入Java基础教学,所留学时也必定不足以进行详细的案例分析和讲解。如果要讲,可以只讲一些基本的技术手段,其他内容可以留待Java后续课程开展。
3 Java教学改革实践总结
3.1 教学改革成果
经过多年教学实践,发现改革后教学效果有了明显改善,主要体现在以下几个方面:(1)课堂提问率比原来提高了20%;(2)不少学生在作业完成后,为了精益求精,多次改版并重新提交;(3)少数学生课后主动上网寻找案例研究,并在线寻求本人解答;(4)笔者曾被多次询问,何时开设Java后续课程。
3.2 存在的问题
当然,在多年教学实践中,也发现了一些问题,主要体现在以下几个方面:(1)当案例难度提升时,学生开始感到吃力,热情也开始慢慢下降。 说明案例的选择还需进一步优化;(2)在Java后续课程如“JavaWeb开发”中,突然运用多项技术进行综合开发,让学生感到极为不适应。 说明课程衔接做得还不够好;(3)面对一心只想考证或者升学的学生,未能起到更多辅助作用。