杨承玉,陈 媛
(重庆理工大学 计算机学院,重庆 400050)
教学的宗旨在于培养学生的独立人格、探索精神以及学习能力和实践能力[1]。建构主义学习理论认为,学习不是由教师把知识简单地传递给学生,而是由学生自己建构知识的过程[2]。程序开发类课程具有知识点零散众多、实践性强等特点,一味地灌输毫无意义。我们经过多年的探索,逐步形成了大项目驱动的、知识点随机通达的教学主线,“演示、验证、局部优化、扩展创新”这样一个循序渐进的、螺旋式上升的教学过程,以及相应的立体考核与激励机制。
用一个或几个知识点设置小案例说明情景教学法的使用方法[3],并验证其正确性,该方法的优点是教学内容易于设计,可操作性强,能直观地让学生看到知识点的使用方法。但是这些小案例功能简单、涉及知识点单一、应用背景不明确,一门课程中的众多小案例互无关联。小案例教学法还回避了大项目编写过程中可能遇到的问题,当课程结束时,由于缺乏大项目的背景,学生会由于并不了解这些知识点的具体使用场合以及相互之间的联系,因此,很难灵活地综合运用这些知识和技巧[4];由于缺乏大项目的经历,学生没有机会解决大项目中才可能产生的一些问题,如项目文件的空间规划、资源的重用、松耦合开发理念的体验、大项目程序调试经验等。
根据情景教学法,教学中使用的案例与现实情境相似度越大,学习的效果可能就会越好,因此,在教学过程中可以一个贴近实际应用的大项目[5]贯穿整个教学过程,将大项目的完成横向分割成多个步骤,每个步骤对应一次实验,教师指导学生在逐步实现这个大项目的过程中完成课程的学习。建构主义学习理论提倡随机通达教学(random access instruction),认为对同一内容的学习要在不同时间多次进行,每次的情境都是经过改组的,而且目的不同,分别着眼于问题的不同侧面。这种反复绝非为巩固知识技能而进行的简单重复,因为在各次学习的情境中会有互不重合的地方,而这将使学习者对概念知识获得新的理解[6]。
在大项目教学设计中,基于随机通达教学的理念,知识点的重组应遵循按需分配和循序递进相结合的原则,既要做到对课程内容的分解和在项目应用中知识点的重组适应项目的实现需求;也要注意知识点的分布能够凸显不同知识点的适用条件和环境,使学生既能够掌握知识的使用方法,又能够理解其适用的场合。大项目的教学设计既要做到实验的规划是遵循由简单到复杂、由易到难的原则;也要注意对同一知识点,尤其是重难点知识,有意识地反复多次应用,并尽量根据应用需求展现其不同的应用方式。
基于“学教统一、扶放有度”的原则[7],可采用“演示、验证、局部优化、扩展创新”相融合的教学过程。其中,教师可将演示讲解过程制作成微课,以便学生课后反复观看学习;对每次实验纵向分层,设置验证实验、局部优化、扩展创新3个不同层次的实验模块;鼓励学生在验证实验之后,能够应用本次实验所学知识对项目进行优化,进而举一反三、查阅资料,自主设计功能模块对系统功能进行扩展。3个层次是对同类知识的不同程度的应用,能够满足学生中不同层次的能力培养;学生在自主学习的过程中能加深对知识的理解、能力的磨砺,形成的教学过程体系如图1所示。
图1 教学过程体系
以大项目驱动为主线,按需分配和随机通达相结合的原则重组课程内容,使学生不仅能够多角度、侵入式地学习和理解知识,把握知识全貌,而且将基础学习与实践应用同步,知识获取与能力成长交融,引导学生逐步构建良好的知识体系和能力结构。
以移动应用开发课程为例,进行相应地课程教学改革设计。
1)大项目应该是一个接近实际项目的、功能相对完整的系统。
实际项目和模型项目之间有着一定差距。模型项目目标往往局限于功能的可用性,项目运行于一种理想化的环境,这种方式简化了教学内容,但不利于学生实际工程能力的培养。实际项目需要处理包括代码可读性、用户体验、响应性能等实际应用中才可能需要解决的问题,实际项目代码量较大,当程序出现问题时,需要程序员运用适当的调试方法解决问题,以完成实际项目为目标,有助于培养学生良好的工程项目素质。
大项目设计目的是为了便于教学,但是设计细节上可以尽量接近实际项目的设计标准。首先,要培养学生良好的编程习惯,从变量命名到名空间设计、从类结构设计到资源重用设计、从代码的可读性到松耦合开发理念的引入,引导学生编写结构良好的系统,训练其在实际大项目中必不可少的这种基本素质。其次,要重视用户体验。良好的界面操作体验要求设计出来的系统是美观的、方便的、操作方法一望即知的、用户免培训的。然后,要注意响应性能。响应性能是实际项目的一个重要的指标,哪些设计可能会影响到性能需要学生在初学阶段就注意,这有助于学生形成良好的编程风格。同时,要求学生掌握常用的调试技巧,通过设置程序常见的典型错误来训练学生调试程序的能力,并在随后的编程过程中进一步强化学生独立调试解决问题的能力。
2)项目功能需求最好是学生熟知的、易理解的。
完成大项目的过程同步于学生基础知识体系构建的过程,因此,教师在设计大项目时,适宜选择学生熟知或易理解其功能需求的系统,从而将重心放在编程知识的学习上。
3)项目要具有可扩展性强的特点。
大项目的实现需涵盖课程所有知识点,因此,该项目在功能设计上、系统架构上都应该具有良好的可扩展性,以便于方便地插入功能模块。
移动应用开发课程中使用“我的个人空间”系统作为课程大项目,大项目被划分为多个功能模块,每个模块的主要功能大致对应一个实验,但有些实验还需在后期的实验中进行部分修改和完善,如在进行实验7数据库操作实验时,会修改登录模块和好友薄模块,如表1所示。
1)以项目构建过程为线索,按需重组教学内容。
在构建一个登录模块的过程中,可能依次涉及新建Activity (相关文件manifest.xml、Java文件、XML文件的联系;android应用松耦合的系统结构设计及优点)、编辑Activity的Java文件(利用R文件获取XML布局文件中的控件;事件监听机制的使用和理解;利用Intent实现Activity切换;编写过程中常用快捷键的使用)等知识点的讲解。按需驱动教学内容的方式,将理论与实践融为一体,理论不再是孤立的存在,它切实解释每一步实践中的疑惑,并指导实践。每一个知识点都不再是干枯的教条,而是继续前行的必要的阶梯。
2)按需分配同类型知识点。
大多入门型教材遵循知识体系的分类和抽象原则,根据知识点的类型划分章节,分门别类地介绍各个知识点。大项目驱动的教学方式按需驱动教学内容,打破同类型知识点一股脑地灌输方式,分散地将每个知识点应用于各自适合的环境。以布局方式的知识点为例,布局方式有线性布局、相对布局、网格布局、帧布局等,设计项目时,将这些布局分别运用于适合的Activity中,线性布局用于登录模块,网格布局用于注册模块,相对布局用于游戏的主菜单模块,帧布局用于游戏模块。
学生接受某个知识点不是因为它是属于哪种类型的知识,而是因为需要用到它,这直接驱动学生主动学习怎样用它、怎样用好它。在此过程中,学生也能理解知识点的应用场合,从而得以较全面地把握该知识点。
3)同一个知识点在多个实验中应用。
通过对知识点的反复多次的不同应用,帮助学生在实践中逐步加深对该知识的理解和认识,从而构建较为完整清晰的知识体系,如对于Adapter的介绍是一个逐步深入的过程,在注册模块中,通过Spinner使用ArrayAdapter;在主菜单模块,通过GridView使用SimpleAdapter;在好友薄模块,通过ListView使用自定义的Adapter。
4)尽量遵循循序递进的原则。
选择知识点的出现时机时,在顺应项目需求的基础上,需尽量遵循知识链的拓扑关系,将相对简单的、前导知识少的知识点放在前面。循序递进的原则有利于减少学生畏难情绪的产生,建立学生的自信心。
另外,在项目之初,学生可能不具备足够的知识来完成一个完整的子模块,此时可根据情况首先用简单的方案临时代替,随着学习过程的推进,在适当的时候再加以修改,逐步逼近实际项目。表1中的“分步完成计划”就是后期在实验2和实验7的过程中针对实验1模块的修改所添加的内容。
5)为学生自由发挥预留空间。
大项目的总体设计是由教师来完成的,但是在这个具有良好可扩展性的系统架构中,还应为学生自由发挥预留空间。每次实验都包括验证、优化、扩展3种不同层次的实验内容。验证实验要求学生完成教师在课堂上演示实现的功能和效果;优化实验要求学生根据教师所给的资料,对验证实验进行功能或外观效果上的部分改动,使功能更完善或外观更美观;扩展实验鼓励学生查阅相关资料,根据所学知识,自主设计并实现一个不同的功能模块。
通过这种方式,鼓励学生尝试对相关知识的扩展学习,从而对所学知识有更深入更全面的认识,学生在自由发挥阶段往往会发现新的问题,在问题的解决过程中,进一步提升自己的能力。
表1 大项目教学设计(部分实验)
严格合理的考核体系是教学质量的有效保障,程序开发类课程重在培养学生的实践动手能力,因此取消传统的试卷考试,以每次实验的过程评价作为最终考核的依据,督促学生的学习。每次实验采取立体考核的方式,对验证实验、局部优化、功能扩展3个层次的学生给予不同的等级。同时,各个考核层次都要求学生不仅要实现代码,而且要完成实验报告。实验报告的内容包括对本次实验所学知识点的小结、完成本实验过程中遇到的问题及解决方案等。通过这种立体考核的方式,激励学生举一反三,学以致用,灵活运用所学知识扩展创新,不仅能够有效调动学生自主学习的动力,而且还可有效防止抄袭。
大项目教学模式使得学生能够尽快进入开发学习状态,与实际应用开发顺利接轨,并全方位掌握相关知识,受益于该种教学模式的学生课后普遍对程序开发充满了兴趣和信心。但是,当该教学模式应用于具体的程序开发类课程时,具体的课程教学设计质量决定了这种教学模式的实际效果,因此,在推广中需要进一步精心设计与完善。
参考文献:
[1]赖绍聪. 如何做好课程教学设计[J]. 中国大学教学, 2016(10): 14-18.
[2]莱斯特·P·斯特弗, 高文. 教育中的建构主义[M]. 上海: 华东师范大学出版社,2004.
[3]情景教学法[EB/OL].(2015-11-28)[2017-12-12]. https://baike.baidu.com/item/%E6%83%85%E5%A2%83%E6%95%99%E5%AD%A6%E6%B3%95/9363780.
[4]骆嘉伟, 李玮, 殷樱.移动应用开发课程的教学设计与实践[J]. 计算机教育, 2016(3): 136-138.
[5]李锡辉, 王樱. 程序设计类课程教学改革的研究与实践[J]. 实验技术与管理, 2014, 31(10): 206-208.
[6]温彭年, 贾国英. 建构主义理论与教学改革: 建构主义学习理论综述[J]. 教育理论与实践, 2002(5): 17-22.
[7]钟丽佳, 盛群力. 建构主义教学理论之科学性探讨[J]. 电化教育研究, 2016(10): 22-28.