(重庆邮电大学软件工程学院 重庆 400065)
当今科技迅猛发展,计算机行业日新月异,高校计算机课程设计过程中也越来越重视对学生的计算机应用能力和计算机思维能力的培养教学重点围绕基础课程的精炼讲述和反复练习,让计算机专业类的学生学以致用。
《编程基础(1)面向过程》是软件工程学科本科培养方案中重要一门课程,该课程不仅要求学生针对现实问题进行抽象和编码、能独立排查程序错误,且对计算机硬件相关知识需要基本了解,特别是计算思维的培养至关重要。
目前,从学生就业和相关课程教学反馈回来的信息,直接指出了课程在培养学生独立运用程序解决实际问题时的能力欠缺。由于受学时和传统教学方式的限制,教师只能在课堂上教授浅表层的知识点,没有过多阐述编程语言与数学计算思维之间的内在关联性。因此,针对这一问题,在进行面向过程编程的教学过程中,要关注到编程语言的学习与学生计算思维的提升有着密切联系。在大量优质的MOOC、SPOC出现以后,学生完全可以借助新的教学手段在课前进行浅表层学习,老师则负责指导学习在课堂上进行以培养学生计算思维为核心的深度学习,这种学习可以以实验、研讨、报告、辩论等形式展开,教师在整个教学活动中,只是一个引导者、组织者。
我校围绕面向过程编程课程进行了一系列改革、实践,积累了丰富的经验。但目前还存在如下问题:
目前,我校的面向过程程序设计课程教学大多还是采用多媒体讲解、多媒体演示为主,采用演示+实践相结合的方式进行,在这样传统的教学模式下,让学生按照实验教材或者课后实践进行实际操作,教师根据学生操作情况进行相应辅导,二者不能互相融为一体。学生脱离了实际问题的环境,对所学知识的理解和掌握仅仅停留在知识点的程度,如何将实际问题抽象为计算问题,进一步表达为编程语句这一过程,难以做到融会贯通。
数学思维的训练始终是编程语言教学的核心任务之一。然而,由于学生的个体差异和教学内容的区别,有些知识中的思维过程比较难以把握。学生对编程语言的学习更多停留在语言层面,对语言背后所体现的编程思维、编程模式和编程思想的把握,难以深入领悟,无法将其转化为一般编程指导思想,对后续编程课程的学习难以起到应有的引导作用。
教师在讲解编程语言时,大多数把语法、规则、结构等作为教学重点进行讲解相关理论知识,不太注重计算思维的训练,进而难以将所学知识通过类比推理到后续编程语言的学习中。现阶段软件技术快速发展,越来越多的编程语言不断涌现,不仅要求学生掌握牢固的基础编程知识,更要具备快速学习编程语言的能力,因此掌握编程语言的内在计算思维至关重要。
针对上述存在的问题,本文结合实践经验,从教学的方法、手段、内容等方面进行阐述,以培养学生计算思维能力为核心,构建面向过程程序设计教学改革与建设新的参考方案。
在充分调研现有教学改革的经验和教训基础上,借助全面的线上课程资源,根据本课程的特点,设计的具体模式如表1:
表1:试点翻转课堂上采用的教学模式
对应的整个教学流程如图1:
图1:翻转教学流程
面向过程编程教学课程中的知识点大多是需要学生充分发挥自身的主观能动性,对于程序的设计、分析同抽象的计算思维紧密结合起来,将程序需要解决的应用问题转化为数值、符号、表达式之间的逻辑运算关系问题,进一步针对该逻辑运算关系进行编程实现,从而运用编程语言解决目标问题。如:编程中经典的“冒泡排序”问题,可以先从数学的角度出发,让学生理解在解决该问题时所需参与运算的变量,为什么需要这些变量,不同变量之间存在怎样的逻辑关系,最终需要参与怎么样的表达式计算,再针对该表达式与编程语言实现之间的异同进行重点讲解。整个讲授过程,循序渐进地引导,多媒体与板书相结合,层层深入,达到良好的教学效果。
通过问题启发式教学将学生学习编程语言的过程,从抽象转为具体的逻辑思考过程,以提升学生计算思维为核心,启发学生将抽象思考过程转化为实际的逻辑推理过程,最终结合编程语言自身语法等知识,将逻辑推理结果代码化,以达到问题解决的目的。
项目驱动是以学生为中心,利用情境教学的方法,将学生带入具体项目所设置的情境之中。引导学生发挥自身的主观能动性和创造性,对实践中遇到的各种问题,以所学知识为依托,深入分析问题并明确逻辑推理过程,并将逻辑结果以程序代码的形式呈现。在上述过程中,学生始终处于核心主体地位,而教师的主要任务是引导和逻辑启发,鼓励学生之间的讨论和大胆尝试,努力做到将教师地位边缘化。
通过设置实际有意义的项目,以项目驱动教学,以实践教学为主,将学生的学习过程和实际项目紧密结合,以项目中遇到的实际问题逐步解决来激励学生学习的积极性。结合学生自身兴趣,合理加以引导,由易到难的设置不同阶段的实践项目,最终达到学生对知识掌握的螺旋上升模式。上述过程从教学层面来,看不难看出,在项目驱动实践教学中,如何根据学生的知识掌握程度和自身兴趣爱好选择恰当的实践项目是关键。可以结合大多数同学在生活、娱乐等方面的兴趣爱好,如:游戏、球类运动、网络社交等,由现象到问题逐步引导学生思考,并提炼其中所蕴含的底层抽象软件逻辑,进而具体化化为具体的程序设计实践种子项目,在此基础上逐步增加需求和难度,引导学生分阶段的在种子项目的基础上不断利用新学知识对其进行改进迭代,最终形成完整的具有实际意义的实践项目。
从广义而言,编程是将一个计算问题经过一系列计算过程来引出一个可执行的程序。它强调通过任务驱动来引导学生掌握编程技巧,并应用于生活情境,从而提高学生的批判思维和解决问题能力。如果将其内涵作进一步界定,编程教育应包括两个维度:一是培养计算思维;二是培养计算实践,其中计算思维是编程教育的核心。2006年,周以真提出了计算思维的概念,认为计算思维是运用计算机科学的基础概念去解决问题、设计系统、理解人类的行为。计算思维包括三个层面:一是抽象化(Abstraction),二是算法(Algorithm),三是自动化(Abstraction)。因此,学生应该了解计算思维的基本概念,包括抽象化、算法和自动化等核心概念。
面向过程编程语言的教学中,将编程语言的定位明确为工具,其服务对象为现实问题或现象,通过实际的教学过程,以培养学生计算思维为核心,着重培养学生问题抽象化、算法与逻辑推理过程之间的转换、代码实现算法的自动化等概念的理解与掌握程度,并且结合大学生的年龄特点,以其日常生活中的生活、娱乐等项目为目标,逐步引导学生采用计算思维、逻辑推理方法和软件工程的分治模型解决实际问题。最终将学生学习编程语言的注意力从语言本身转到问题本身,明确问题与工具之间的相对定位。
计算思维对计算机思维的形成至关重要,同时对编程语言的学习起到直接的决定作用。计算机软件技术的快速发展导致编程语言的快速涌现。面向过程编程对于培养学生分析问题、解决问题、计算机专业相关核心课程的综合应用能起到良好的促进作用。本文针对程序课程教学在翻转课堂教学模式实施过程中采用的方法、实践过程等进行总结,提出以计算思维为核心的面向过程编程语言教学新思路,为学生掌握编程语言提供良好视角,对学生综合素质能力的提升起到有益的促进作用。