徐力杰,王磊,黄璞
(南京邮电大学计算机学院,南京210023)
Java语言作为移动互联网时代最重要的计算机语言之一,越来越受关注。近年来在TIOBE编程语言社区排行榜上Java语言长期稳居前列,这反映出Java受全世界软件开发者的喜爱程度。Java语言具有面向对象、与平台无关、安全、稳定和多线程的优良特性,特别适于网络环境下应用程序的开发。为了适应信息社会和知识经济时代的需要,我校面向全校经管类、人文类和少数理工类非计算机专业的本科低年级学生开设了《Java语言程序设计》这一门程序设计类通识基础课程,通过全面系统地讲解Java的数据类型、基本语法、类与对象等重要概念,使学生逐步建立面向对象程序设计概念,通过使用集成开发环境和相关调试工具,进行简单的应用程序开发。在几年前,本门课程采用了传统的统一教学组织模式,即所有不同的专业都采用相同的教学目标、教学内容、教学方法,并采用相同的考核内容,我们在教学实践过程中发现这样的教学方式会带来很多的问题,不同专业的学生基础能力和培养目标存在一定的差异性,如果讲解难度和考核要求稍低一些会降低理工类专业学生的培养质量,如果讲解难度和考核要求稍高一些又会对文科类专业的学生学习产生困难,从而打击学习的积极性。因此,为了达到更好的教学效果,近年来我们对该门课程进行了分层次教学改革,即针对不同专业学生的实际情况分成不同的层次,分别制定不同的教学目标、教学内容、教学方法和考核要求,真正实现了因材施教和因专业制宜。尽管分层次教学在实践过程中取得了一定的成效,但是面向文科专业的Java课程教学依然存在很多问题和挑战。本文主要针对《Java语言程序设计》课程在面向文科专业的分层次教学过程中的教学方法展开探讨,并通过实践证明了其良好的效果。
相比较于计算机专业和其他理工科专业学生而言,文科专业的学生在计算机方面的基础相对较为缺乏,对编程知识的理解接受能力和动手能力也相对较差,并且对计算机编程的学习普遍有一种畏难情绪。在以往的教学过程中,经常会有很多学生问关于文科为何要学习编程,文科专业学习编程有什么用这样的问题,甚至一些学生会将自己没学好的原因归结为自己是文科生,似乎文科生学不好编程是理所应当的事情。这样的现象反映了文科学生对计算机编程的学习是普遍缺乏自信的,如果学生一开始就有这样的畏难情绪和自我否定意识,很显然这门课程是一定很难学好的。因此,如何尽可能激发文科专业学生对编程语言课程的学习兴趣,树立他们的信心,是我们在教学过程中需要首先解决的问题。
对于计算机专业和一部分非计算机类理工科专业的学生来说,Java语言课程并非他们的第一门编程语言课程,在此之前基本都开设过C语言或C++课程,对编程有了一定的初步了解和基础,而不同的程序设计语言在数据类型、程序流程控制等基础方面其实是具有相似性和共通性的,因此他们再去学习Java语言相对来说入门会快一些。然而,文科专业的Java语言课程通常都是在本科低年级(通常是大一下学期)开设的。对于文科专业学生而言,这是他们的第一门编程语言课程,大多数学生之前没有过任何关于程序设计学习的基础甚至没有过任何计算机方面的基础,并且学生本身对这门需要较强逻辑性和实践性的课程的理解接受能力相对较弱。在以往教学过程中,经常有学生反映跟不上教学进度,因此经常会出现教师教学计划进度较快和学生理解接受时间较慢之间的矛盾,教学效果并不是非常理想。
对于Java编程语言的学习,计算机专业的学生和非计算机类理工科专业的学生明显要比文科专业的学生具有更强的自驱力,因为Java是与计算机专业相关度较高的专业课程,也是与未来工作密切相关的专业技能,计算机专业的学生通常比较重视,学习上会有一定的内驱力和积极性。很多非计算机类理工科专业(例如通信、电子、自动化等)从事的工作也经常会依赖于程序设计的基本技能,因此这些专业的学生也会有很强的内在动力渴望学好这门课程。然而由于文科专业与编程语言课程的专业关联度较小,很多文科专业的学生对其重视程度不够,甚至一度从思想上将这门课看作是和自己专业无关的“副科”,因此很多文科学生对这门课更多的是被动学习和灌输式学习,仅仅在课堂上花一些时间,缺乏内在的动力去主动花更多的时间在课外。而我们知道对于任何编程语言的学习,只满足于课堂上的学习是远远不够的,需要在课外进行大量的实践练习才能逐步提高编程水平。按照教学大纲的要求,《Java语言程序设计》课程总计48学时,其中40个学时为理论课时,8个学时为上机实验课时,很显然,如果学生仅仅满足教学大纲规定课时是很难学精这门课的,尤其是上机实验课时相对较少,需要学生在平时花更多的时间在实践操作上。如何激发文科学生对于编程学习的自驱力以及如何为他们在课外提供足够广阔的辅导和实践平台是教师需要思考的问题。
在以往的教学过程中,我们发现很多的文科专业学生在课程的开始阶段就明显表现出自信心不足,这样的畏难情绪和自我否定意识在学生整个课程的学习过程中起着极大的负面作用。因此,这就需要我们在这门课的开始阶段就要给学生正确积极的引导,通过介绍大量身边实际事例告诉他们,很多非理工类专业出身的学生也能将编程学好,有的甚至能够进入著名IT企业,具有很强的竞争力,以树立他们的自信心。另外,需要向学生强调编程学习的重要性和价值,学习编程并非只是为了谋求IT相关的工作岗位,它可以培养我们的逻辑思维能力,可以帮我们解决很多日常工作中的实际问题,编程也越来越像英语一样成为现代人的基本技能。通过课程初期正确的引导,使得学生树立学习的信心,在实践中我们发现这一点会对整个课程的教学效果起到尤为重要的作用。此外,我们可以尽可能将课程与专业背景相结合,将一些原本枯燥的编程题目融入到具体的相关文科专业的背景和应用中,通过让学生利用编程解决自己专业背景下的具体问题,使得学生能够体验到编程的乐趣和价值,让他们不再认为这是一门和自己专业毫无关联的课程,从而激发学生的学习兴趣。对于学生频繁的询问问题,尤其是面对一些简单甚至幼稚的问题时,任课教师要能够保持足够的耐心解答,不能过于打击学生的学习热情,同时也要进一步引导他们培养独立思考问题的能力,减少他们学习过程中对教师过于依赖的心理,引导他们在遇到问题时应该要先多思考,通过查阅书籍、搜索网络资源、和周围同学讨论等方式寻求答案,实在解决不了的问题再来请教教师,避免遇到任何问题时不经思考地就去请教教师,从而丧失了独立思考的学习能力。
《Java语言程序设计》课程涉及的知识点较多,主要包括两大部分的内容,第一部分包含数据类型、运算符、表达式、程序流程控制、数组和方法等一些Java基本语法知识,这部分内容属于大多数程序设计语言所共通的基础;第二部分包含类和对象、继承和多态、异常处理、线程、文件处理、GUI图形用户界面等在内的Java语言特有的相关知识点。在以往的教学计划中,各个知识点上的教学时间是近乎均衡分配的。大多数理工科专业的学生能够适应这样的教学计划,这是因为理工科专业学生对于编程的理解接受和动手能力相对较强,并且一些理工科专业在开设这门课程之前还开设过C语言的课程,而不同高级编程语言的基础语法部分是基本相同或相似的,因此这样的基础也能使他们学习Java语言更容易入门。然而对于文科专业的学生而言,大多数同学对于编程的理解接受和动手能力相对较弱,并且这是他们接触的第一门高级编程语言课程,入门相对较慢。在以往的教学实践中,我们发现对文科专业的教学效果并不是很理想,经常有很多文科学生跟不上授课的进度,尤其是在前面最重要的基本语法知识部分,很多学生在课程结束后对这部分基础依然掌握的很差,而这部分内容没学好会直接影响后面部分知识的学习,造成后面进度也跟不上从而丧失学习信心和学习兴趣,而越没有信心又会进一步拉下更多的进度,造成恶性循环。其中主要的原因在于课程内容较多而平台课的课时较为有限,很多教师为了保证教学计划需要赶进度,这就造成了与文科学生理解接受时间较慢之间的矛盾。因此,考虑到文科专业的特点以及课时的有限性,我们应该设置更加合理的教学计划。具体地说,我们应该在教学计划中添加一些计算机基础知识的介绍,并且重点加强Java基础语法知识教学的比例,因为这部分内容不仅是Java语言的基础,也是所有高级程序设计语言的共通基础,因此对于初次学习编程语言的文科生来说,这部分内容是学习的重点和关键,只有保证这部分基础内容扎实,后面部分的学习以及其他语言的学习才会更加容易。同时,我们进一步压缩一些Java特有的知识点在教学计划中的比例,去掉一些较难的内容,并且将其中一部分内容(例如文件处理、GUI图形用户界面等)重点放到集中实践的程序上机环节结合项目实训去讲解。我们对《Java语言程序设计》课程开设了对应的32学时的程序上机集中实践课,该实践课要求利用所学知识设计一个基于Java语言的中小型桌面应用程序,以往的程序上机教学只是要求学生在机房上机实践,教师负责答疑但不进行讲授。通常程序设计实践课程会安排在理论课程授课学期的下一学期进行,很多学生特别是文科专业学生经过一个暑假后很多知识点都有所遗忘,因此上机实践效果并不是很理想。通过重新调整教学计划,我们可以将GUI图形用户界面、文件处理等这部分与桌面应用程序设计密切相关的内容重点放在集中实践的程序上机课上进行讲解,这样一方面可以在理论课程的教学计划上调出更大的空间重点讲解基础内容,另一方面也可以进一步提高程序上机实践课程的教学效果,能够让学生立即学以致用,提高实践能力。
对于任何一种编程语言的学习,上机实践操作都是非常重要的一个环节,只有通过实践操作多多练习编程才能逐步提高程序设计的水平。然而,《Java语言程序设计》课程只有8个学时(4次)的课内实验上机的安排,仅仅依靠这8个学时的上机进行实战操作显然是不够的。不过好在现在绝大多数学生都有属于自己的笔记本电脑,同时学校机房和图书馆的计算机也是随时向学生开放使用的,因此学生的上机操作并不是只能依赖于这课内的8个学时,课外的时间也可以利用进行上机操作。我们建立了一套健全的课外辅导体系,除了每周任课教师在固定的时间和地点提供面对面的课程答疑外,我们也充分利用了网络平台,通过建立课程公众号、课程QQ群,在课外时间向学生在线提供与Java课程相关的各种电子资源,随时提供在线答疑和讨论。同时,本课程组还开发了一个基于云端的Java课程作业管理平台,该平台同时支持PC端和手机端的登录使用,目前该作业平台可以支持的题型包括选择题、程序填空题、程序改错题和编程题。任课教师可以在该作业平台上通过教师权限发布作业,学生可以登录平台在线完成并提交作业,后台会对提交的作业自动进行批改得出评分。对于编程题,学生只需要在线写出程序,点击测试运行后,后台云端会自动进行程序的编译和运行(因此本地设备无需安装JDK和配置环境变量即可使用该平台),并且判定运行结果的正确性,同时平台还能够自动判别学生所写程序与其他学生写的程序之间的相似性,以识别作业抄袭。通过定期在作业平台上发布课程作业,尤其是增加编程题作业的比重,可以使得学生在课外有更多的机会进行程序设计的实践,通过以练代学,逐步培养他们的动手能力和学习兴趣。同时,我们设定每次作业的提交时间范围并且允许每次作业在截止时间内可以进行无限多次提交,即学生在一次作业提交后可以对错误的地方纠正后再次提交,直到完全正确为止,这样可以加强学生的学习效果。我们注意到并非所有的文科专业学生都是不擅于学习编程的,少部分文科学生也有较强的学习能力,能够及时跟上教师的进度,这就要求我们在平时的教学中能够擅于发现这些学生并且进行因材施教。对于基础较好、学习能力较强且求知欲也很强的学生,在课外辅导时可以进行区别对待。
通过采用上述的教学方法,我们在2016-2017学年第2学期针对2016级公共事业管理专业进行了实践,取得了很好的效果。学生的学习热情明显提升,课堂的出勤率和听课专注程度都得到了提高,课后主动参与答疑和讨论的人数比往年增多,形成了较好的学习氛围,答疑过程中所问问题的层次也比往年学生有所提高,作业管理平台参与度较高,大多数学生都能够及时在线提交作业,作业完成情况较好,最终的期末考试成绩也比往年得到大幅度的提升,卷面成绩的平均分和2015级同专业相比提高了12分,同时对应的程序上机实践课程也取得了较好的教学效果,无论是从验收答辩环节的学生表现还是最终提交的实物质量来看,都明显好于往年的同专业学生。因此,上述教学方法能够在一定程度上提高面向文科专业的Java课程的教学质量。
本文主要针对面向文科专业的Java语言课程教学方法进行了研究,首先对Java语言课程在文科专业教学中面临的问题进行了深入的分析,然后针对这些问题分别提出了相应的教学方法,并且通过将所提出的方法应用于实际的教学实践,从而验证了本文所提方法的有效性。