APP下载

程序设计课程项目学习路径与方法

2020-07-09方其桂

计算机教育 2020年6期
关键词:程序设计编程程序

方其桂

(安徽省教育科学研究院,安徽 合肥 230061 )

0 引言

程序设计是各类高校计算机专业主要课程,传统的教学模式以编程语言的语法教学为主线,通常是教师先讲解编程用到的语句,再通过练习巩固所学的语法规范。教师讲解时学生难以掌握大量的专业名词,等到上机实践时,往往要么无从下手,要么只是将书上程序搬运到计算机中,遇到实际问题无法编写出相应程序。

在程序设计类课程中开展项目学习,引导学生经历发现问题、分析问题和解决问题,将知识建构、技能培养与思维发展,融入解决问题的过程中。其主要过程分为“项目选题”“项目分析”“项目规划”“实施项目” “项目支持”和“评价总结”等阶段,如图1 所示。与传统教学模式相比,能有效提高学生分析问题和解决问题的能力。

图1 程序设计项目学习流程图

1 项目选题

将项目学习模式应用于程序设计课程教学中,首先教师要依据课程目标和实际情况设计项目。项目是教学活动的核心,项目合适与否,对教学效果将会产生直接的影响。项目必须让学生在规定的教学时间内完成,因此,项目的选题非常重要。项目的选题立足点是教学目标,同时要充分考虑学生的实际[1]。

1.1 依据教学目标

程序设计教学目标是让学生通过学习,更好地运用计算机高级语言编写程序,解决实际问题,提高思维能力,重点在于培养学生的计算思维。目前各类高校程序设计语言大多数有Python、C、Java 等,教师在教学之前,首先需要将这些编程语言在教学中的相关知识点整理成体系,然后对知识进行合理切片,融入相应的项目中,项目不能过大或过小,使之能在一次课(可能是二节课连上)中让学生达成教学目标,如一般情况下,一次课很难完成“图书管理系统”之类大项目,但是如果把项目设定为“两个数比较大小”,又很难覆盖太多知识点。要搞清楚项目对应的知识点,要让学生在项目学习后,能掌握这些知识,并能运用知识解决简单问题,提升学生的计算思维[2]。

1.2 贴近学生实际

首先要了解学生的情况,项目要建立在学生已有知识和能力的基础之上。因此要了解学生的兴趣爱好、学习条件。也就是说,项目要贴近学生的兴趣点,符合学生的能力,让学生有能力解决。学生真实世界中遇到的问题往往是复杂的,教师需要紧紧围绕教学目标进行改造,使其变得简单易行,规模可控,让学生跳一跳能够够得着,才能激发其参与的积极性。另外,项目需要有一定的探究性或启发性,否则会造成学生参与兴趣不浓、积极性不高的现象,进而导致学生在规定时间内难以保证项目的完成。例如,教师可以将Python 的turtle 库设计成创意绘图项目,如在国庆节时绘制国旗、情人节时绘制一朵玫瑰花等,很受学生的欢迎。

2 项目分析

项目分析是项目学习中的关键环节,通过分析,发现问题、找出解决问题的方法,培养学生的思维能力。教师对项目的背景、目标要求、相关的知识点进行详细分析,适当讲授项目中的重点和难点,帮助学生理解项目,知道要做什么,要学习知识,练习的技能,达到的目标,以此培养学生的思维能力。

2.1 分析已知条件

项目的价值在于它贴近生活实际,实际生活的项目都是比较复杂的,不是简单的数学题,要从真实的情境中将解决问题条件分析出来,将无关的因素去除,便于后面构建数学模型。在分析项目问题时,要明晰项目中可能涉及的知识和项目背景知识,弄清楚程序设计课程内容中所蕴涵的应用情境。例如分析“出租车计收费”项目的已知条件时,为了便于理解出租车是如何收费,可以采用图示的方法理解题目已知条件。

2.2 分析内在问题

鼓励学生就项目提出各种各样的问题,因为提出问题也是一种能力,而且这种能力比解决问题的能力可能更为重要。教师需要通过提问、头脑风暴、分组讨论等各种方式,将学生的思维活动激发,让学生尽可能就项目提出各种各样的问题,即使解决问题的方法很简单、考虑不够全面也应受到鼓励。

2.3 分析项目目标

项目学习的最终目标是解决问题,在解决问题的过程中提升学生的信息素养,培养学生利用信息技术解决问题的能力。解决什么样的问题,做到什么程度,需要定位,就是要确定学习的目标。通过师生共同讨论,分析出项目最终要解决什么样的问题,其结果用什么方式输出。只有明确起点和终点,才有可能找到解决问题的路线和方法。比如分析“走迷宫”项目,要找出走出迷宫的最优路径,首先要知道迷宫结构数据是如何存储,然后根据不同的存储形式设计不同的算法。另外,通过项目目标分析,学生要知道解决什么问题,在解决这个问题自己需要的知识储备、解决问题的方法,以及解决问题中可能遇到的问题。而教师要知道在学生解决问题的过程中给他们能提供什么样的帮助及学习资源等[3]。

3 项目规划

在确定好编程的目标任务之后,需要学习基础知识,然后研究编程思路、分析编程算法,制订出程序编写的实施方案。

3.1 学习准备知识

以前高校的程序设计课程以教授编程语言的知识为主,强调的是知识的学习,现在则将培养计算思维作为重中之重。以训练思维为主的项目学习,也离不开知识的学习,需要知识作为解决问题的支撑,因此在项目学习之前,教师需要教授学生一些基本知识作为准备,当然,这种教授方式可以是教师讲解,作为项目学习,更主要是教师课前准备相关知识的微课,不同学生根据需要进行自主学习,随学随用,学习效率相对比较高。这些准备知识主要是相关命令、语句、函数等的基本格式、语法和基本使用方法。例如分析“智能胖瘦分析程序”项目时,除了数学知识外,还需要用到If 语句、float()浮点数转换、“/”除运算符等相关知识。这些知识不需要讲得太多,它的学习主要是通过后面的项目实施来让学生深入领会。

3.2 研究解决思路

通过讨论、观察、阅读、实践、分析、探究、实验等各种学习活动,找到项目解决的基本思路,也就是要完成这个项目,编写这个程序需要哪几步,每一步解决什么问题,用什么方式解决,其解决思路可以让学生分步骤写出,有的复杂项目为了便于理解、表述,最好用思维导图工具梳理思路。

3.3 分析编程算法

编程的核心是算法,是将生活中的实际问题转变成能用程序解决。规划编程算法要做的,也就是要将计算机的处理问题过程具体描述出来,让计算机知道做什么和怎么做的具体步骤。通常,为了便于让人们清晰直观了解算法,编程时大多数使用流程图来描述算法。

3.4 制订实施方案

对于复杂项目,教师需要引导各项目小组对项目进行分解、细化,制订出项目计划,包括项目主题、任务清单、小组成员及分工、时间安排、工作步骤和方法等。项目计划是整个教学过程的重要依据,计划制订是不是合理,直接关系到项目完成的效果优劣。如果项目内容较多,也可以考虑将大项目分解为若干的子项目。

复杂项目一般要分组进行,需要将其进一步细化,形成一个初步可行的方案,包括制定任务分配表及进度表等。

4 项目实施

项目实施是项目学习的核心环节,对于程序设计,需要在本环节编写出程序,然后调试、优化,最终目标是让每个学生能顺利完成项目。此处应该注意,每个同学根据任务分配表选择任务时,有的同学负责编程、有的同学负责程序测试,有的同学负责制作演示文稿进行汇报等,在各项目的实施中选择不同类型的任务,达到各方面锻炼的目的。

4.1 编写程序

学生根据前面所学的基础知识,将算法用程序设计语言的不同命令、语句表现出来,集合到一起,就构成程序。在这个过程中,教师要摆正自己的位置,以一个参与者的身份,走进学生小组之中,帮助他们解决问题,不能直接演示编写代码的过程。特别是在编程学习到中后期,由于学生学习的命令越来越多,掌握的算法逐步丰富,因此不同学生编写的程序将会有较大差异,这个是好现象,教师不需要强迫学生编写的程序完全一样,那样学生就变成编程代码的搬运工,只是简单将纸上的程序录入编程语言中,完全失去编程的意义。对于较大的项目、较复杂的程序,最好通过分组教学来实施,即组内成员经过充分研究、讨论、探究,形成程序,这样也能培养学生团队协作、人际沟通等能力。

4.2 调试程序

大多数情况下,编程不会一蹴而就,一次就能运行通过,需要通过调试找出程序中的语法错误、逻辑错误,分析错误原因并改正。对于大的程序,需要分阶段进行调试。这个过程非常符合人们日常生活中处理问题的方法。所以,合理运用程序调试工具调试程序可以培养学生的耐心和发现问题、分析问题和解决问题的能力。教师可以把编程语言调试工具的使用制作成微课,供学生随时学习,掌握调试的基本方法。

4.3 优化程序

用不同语言编写一个程序能训练学生思维的广度,用多种方法解决一个问题可以训练学生思维的深度。由于一个项目可以由多种算法写出不同的程序解决,教师要引导学生掌握算法效率分析的方法,对程序进行优化,通过不断优化,训练学生的思维。如“我要站在谁后面”项目要求学生了解各种排序的方法。教师可给几种排序的算法基本思想,让学生根据自己对各种排序算法的理解程度,自主选择算法进行研究,并根据所选算法分组,再通过讨论、学习相应的算法,完成程序的编写,再分小组汇报,比较各种算法。汇报的过程是同学们比较的过程,同学们接触不同的排序算法,各抒己见,并与先前自己编写的程序进行对比,很快能发现可以根据不同的情况选择不同的算法,如排序的量较大时,则应采用快速排序,它是目前基于比较的内部排序中被认为是最好的方法。程序设计课程的教学重点是训练学生的思维,提高学生解决问题的能力。更重要的是,让学生将算法解决的思路和方法,迁移到生活中类似问题的解决之中,有利于培养学生的发散性思维能力,还有利于训练学生思维的严谨性。

5 项目支持

项目学习主要是由学生自主探究学习完成,在学习过程中,需要给其提供足够的支持,使其能够顺利开展学习。

5.1 知识归纳

项目学习的重要目标是要掌握相关知识与概念,但这些知识与概念只是作为工具在项目中使用,从外表难以看出知识体系,为了弥补这一缺位,教师需要将本项目涉及的知识进行归纳、总结。学生在前面的完成项目中已经对所涉及的知识有了一定的感性认识,再学习这些知识就水到渠成,容易很多。而且,通过这部分学习,可以帮助他们形成编程知识体系,掌握学科的核心概念和原理。例如,教师可以把知识点与项目结合起来,与学生一起在完成项目的过程中,用思维导图工具,绘制课程的知识图谱,整体上把握知识体系。

5.2 释疑解惑

由于编程项目对学生的抽象思维能力要求比较高,而且程序本身也有较高的要求,如程序中符号、缩进稍不注意就会出现南辕北辙的计算结果,因此,教师需要对程序中的重点语句、容易出现问题的语句进行讲解,降低编程难度,让学生尽快调试通过程序,让其收获成功的喜悦,保持学习编程序的兴趣。同时,教师要创造条件、营造良好的互帮互助的氛围,同伴之间的学习往往更容易释疑解惑。

5.3 提供资源

项目学习中,学习的主体是学生,不是教师,教师不用不停讲解与演示。但学生毕竟是在学习全新的知识与技能,学生在自主探究过程中肯定会遇到各种各样的问题,因此教师有必要针对学生会遇到的主要问题制作相应的微课,供学生在遇到问题时自主学习。更为主要的是,自主学习不是自由学习,这种学习是按教师预设的学习方案展开的,因此,教师要提供学生学习方案。项目完成时,教师需要组织学生对作品进行评价,因此要准备评价量规和评价表。为了让学生方便使用这些资源,最好能借助一定的教学平台,将这些资源有组织地存放到教学平台上[4]。

6 评价总结

在项目学习后期,学生编写出预定的程序之后,需要教师对其进行评价,总结项目学习过程的得失,同时让学生交流分析问题、解决问题的方法。

6.1 项目评价

让学生将完成的项目在小组或全班进行展示,展示内容包括:其编程思路及方案、算法、如何学习编程中用到的知识、程序的核心代码、遇到的困难和问题,交流编程过程的感悟,组织学生自评和互评。教师对各小组进行过程性和总结性评价。项目学习评价不以成绩检测来评价学生,评价的重点不再是学到了什么知识,而是应用知识解决真实问题的能力。需要指出的是,虽然项目学习最理想的情况是每个学生(或小组)都能够提交出最优化的程序,但是,如果学生的程序不是很成功,也不能说明项目学习没有取得好的效果。如果学生在项目中确实学到了知识,掌握了技能,并且能够知道程序不成功的原因以及改进办法时,可以说他的学习是成功的,已经达到了项目学习的目标。

教学中,教师应组织学生通过多种数字化平台提交作品及相关文档(设计思想、技术文档、交流文稿等),开展项目成果的交流与评价,并选择典型成果进行课堂展示和交流评价。

通过评价,同学和老师能提出一些建设性的意见,据此改进、完善程序。

6.2 项目总结

项目总结的主要任务是让学生总结项目学习中的成功与失败之处,有助于学生下一个项目的学习,并帮助教师提高项目学习实施的质量。在评价的基础上引导学生完善、改进程序,完成知识与能力的迭代,再通过总结,尽可能将项目所学向外延伸,扩展所学的价值。总结典型算法,尤其是总结出常见错误,避免以后再犯类似错误。

项目总结的主体应当是学生,包含个人和小组。教师要鼓励和引导学生从自我建构知识、掌握技能、学习情况(包括学习态度、时间观念、认真程度)等方面对项目进行小结。项目小组也应当从项目任务执行过程中的分工情况、协作能力、创新能力、项目完成情况等方面进行总结。

通过对项目活动总结,对项目进行完善,同时对项目学习过程的得失进行总结,为下一个项目学习奠定良好基础。学生通过一系列目标式学习活动后,一定要及时引导其对学习过程中的成功或失败经验进行反思,使之能迁移应用到与其相关的其他问题解决之中。

7 结语

程序设计课程传统教学过程是讲授编程知识,根据范例上机训练,考查的是知识的记忆力。项目学习的过程是项目选题、项目分析、项目规划、实施项目、项目支持、项目评价等,训练的是计算思维,培养的是创新精神和实践能力。有趣的项目可以提高学生的学习积极性,灵活的项目可以培养学生自主学习的能力,综合性的项目可以训练学生的计算思维,提高学生的核心素养[5],实用性的项目可以培养学生利用学习到的知识与技能解决实际问题的能力,从而达到预期的实践教学效果。因此,项目学习非常适合在各类高校程序设计教学中推广,让学生真正成为学习的主体。当然,要克服我们一直习惯的教学模式,前面的路任重道远。

猜你喜欢

程序设计编程程序
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
元征X-431实测:奔驰发动机编程
编程小能手
给Windows添加程序快速切换栏
纺织机上诞生的编程
试论我国未决羁押程序的立法完善
学编程,先画画