APP下载

以计算思维能力培养为核心的案例式程序设计教学探索与实践

2021-08-18宋建萍李雪娇郑晓东

电脑知识与技术 2021年18期
关键词:案例式教学计算思维程序设计

宋建萍 李雪娇 郑晓东

摘要:计算思维能力是高校大学生尤其是工科类学生的一项不可或缺的素质,该项能力的养成也有赖于教师在授课过程中的刻意引导和强化训练。笔者结合所在独立学院工科类专业开设的程序设计类课程的教学现状,探讨了在该类课程中融入计算思维能力训练的案例式教学法的应用和实践过程。通过创设形象生动的情景案例,使学生更易于理解和分析问题;通过对简单案例改造升级,提升难度,强化学生分析问题、设计求解过程的抽象思维能力;通过设计综合型应用案例,加强学生对软件项目开发的整体性思维锻炼。实践表明:教师通过优化课程教学案例、强调计算思维训练,对学生的计算思维能力提升及运用编程思维求解问题,起到了积极的促进作用。

关键词:计算思维;能力培养;程序设计;案例式教学

中图分类号:TP3文献标识码:A

文章编号:1009-3044(2021)18-0155-03

开放科学(资源服务)标识码(OSID):

2006年3月,美国卡内基·梅隆大学周以真(Jeannette M. Wing)教授在《Communications of the ACM》杂志上发表论文,首次提出“计算思维(Computational Thinking)”这一概念进行定义:“计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。”并基于这一定义给出了一系列详细观点。一些学者结合计算机学科对周教授的观点进行简化,提炼为“问题分解、算法、抽象和自动化”,进一步凸显了计算机学科中“计算思维”的特点。

21世纪初,我国计算机学科的教育专家开始倡导在高等教育阶段的计算机基础课教学中开展计算思维教育。不少教学研究者也将计算思维引入计算机学科的一些课程中,重点研究计算思维在計算机教育领域的应用,如:在教材编写中,《新编计算机导论:基于计算思维》(郑阿奇著,电子科技大学出版社,2013)、《数据库原理与应用(SQL Server2012)——基于计算思维》(刘征海主编,上海交通大学出版社,2018)等教材,充分展示了基于计算思维的课程教材建设的新思路;也有许多教学工作者积极探索并将计算思维融入课程教学和资源建设的实践中,形成了自己的研究成果,如:牟琴老师《基于计算思维的探究教学模式研究》[1]等基于“计算思维”的系列成果;姚天昉老师的《在程序设计课程中引入“计算思维”的实践》[2];叶军老师《以培养计算思维能力为导向的“C语言”教学资源设计》[3]等。可见,在计算机教育教学领域,“计算思维与课程教学”“计算思维与教学改革”等一直是计算思维研究的关注热点[4]。

1独立学院程序设计课教学现状分析

目前,在不同层次的高校,计算机程序设计课程是工科类专业普遍开设的一门通识教育课,同时也是最能体现信息素质教育和计算思维能力培养的课程之一。该课程开设的主要目的是通过课程教学,使学生学习、掌握和运用计算思维中的抽象、递归、复用等思维方法,进行问题分析和程序设计,进一步利用计算机来解决实际工作或工程方面的问题。在教学过程中,通过强化计算思维训练,促使学生逐步形成“分析”问题的整体性思维,能够“设计”问题的求解过程,并“运用”计算机语言和软件等相关技术去解决实际问题,应作为该类课程的核心教学目标。

在程序设计学习中,如果将学生的编程行为分为两个阶段,则“知道与理解”构成编程行为的基础性认知(属于低阶思维层次),“分析与应用”是编程行为的核心(属于高阶思维层次)[5]。笔者结合所在独立学院该类课程的教学现状,观察发现:在编程课中,多数学生能够通过学习,“知道与理解”编程语言本身的语法、语句结构,具备较为简单的算法思维,而在“分析与应用”的高阶思维层次需要花费更多的时间进行思考和求解,对一些较复杂或有些许难度的问题可能表现得无从下手。究其原因:一方面,由于学院对部分通识课程压缩学时,教师难以在有限的课堂教学时间里对学生进行计算思维的充分训练和强化;而另一方面,教师所采用的教学思路教学方法也非常关键。目前,多数学生在编程学习上属零基础,对于编程语言本身的学习和运用有一个适应过程,而教师在授课中若着力于编程语言本身、按照一般教材的系统性知识结构进行教学,则会感觉课时更加不够用,而学生则会感觉细节太多、造成“编程真复杂”的不良印象,从而降低学习课程的兴趣,有些学生则因课程学习后不能解决问题、参加编程竞赛与奖项无缘、连考级也难以过关等种种困难,吐槽“编程课难学”“学了没用”……教学相长无从谈起,教学效果难以评价。

为此,笔者结合多年编程教学经历及学院的课程教学现状,不断改进教学思路和教学方法,研究以“实用性”和“应用性”为目标,采用案例教学法,强化问题分析、过程设计和编码求解各环节的训练,在案例求解中加强对语言本身运用的同时,重点强化学生的计算思维训练。

2以计算思维能力培养为核心,优化教学案例设计

在程序设计课中,我们的教学目标应着眼于让学生在发现问题、分析问题和解决问题的过程中强化计算思维,可采用的教学方法和策略也有多种。笔者以学院开设的“计算机语言C”课程为例,以案例式教学法为基础,突出知识的“实用性”和“应用性”,在案例设计上主要采用了如下策略:

2.1深入浅出,创设情境化案例,使待解决的问题易于理解、便于分析

创设情境化案例的目的,是将编程问题和生活中的一些生动场景结合起来,增加学生学习的兴趣,通过对应用场景模拟再现及分析,让学生自行寻找解决问题的思路,并梳理组织为求解步骤,形成案例问题的完整解决方案。然后,再编制程序代码进行验证。在案例求解过程中,若遇到需用的新的知识模块或知识点,则可顺势引入学习并及时运用。

例如,在学到“选择结构”及“循环结构”这两个模块时,笔者联系到生活中可两人一起玩的小游戏:从一组扑克牌中随机抽取一张牌,让对方猜是哪张牌?假设出牌人是甲,猜牌人是乙,将游戏设置为4种场景,最终目标是用程序来模拟游戏过程:

(1)由甲从一组牌中随机抽一张,乙来猜测,仅给乙一次机会;

(2)甲抽牌,乙猜牌,可给3次机会,乙猜对或机会用尽为止;

(3)甲抽牌,乙猜牌,不限猜测次数,乙猜对或不想再猜为止。

(4)将“甲出牌、乙来猜”升级为多轮游戏。

首先,第(1)种场景的关键信息:甲出牌、乙猜测、一次机会。在这个游戏中,乙只能猜一次,可能猜对或猜不对,这是需要判断的,则使用分支结构即可解决。学生在分支结构学习基础上能顺利解决。

第(2)种场景:甲出牌、乙猜测、最多可猜3次,此时乙每猜一次则需判断是否猜对并作相应的处理。此种场景,让学生自行分析选择使用何种结构进行求解?显然,需要处理乙可能多次猜测及判断,循环结构是最佳处理方式,且需要进行有限次循环控制。通过引导学生分析一次猜测过程中的需要进行的操作,将第(1)种场景的分支处理步骤引入,进而设計求解步骤编制程序并验证。

第(3)种场景下,关键信息提取:甲出牌、乙猜测、无限次机会。此时,重点引导学生思考分析两个问题:一次猜数的过程中可能发生哪些情形,分析不同的情况下怎样进行处理?无限次机会情况下,游戏怎样结束?比如:在用户猜对的时候,进行提示并中断循环;在用户猜错的时候提示“是否再猜一次?”并需要用户选择,如果继续猜,则进入下一次循环,如果不继续猜则中断循环。并启发学生进行求解步骤的设计并编制程序验证。

多轮模式的游戏,则需要再加入外循环控制,问题可交给学生讨论分析和设计。

情境化案例法的策略运用有助于提高学生学习的兴趣和积极性,同时可在生活化场景化案例模拟中强化问题分析与设计思路,联系课程的知识点并加以运用,也能快速促进学生对所运用的知识模块及知识点的理解和吸收运用。

2.2以简单案例为基础,改造案例升级难度,实现抽象思维训练螺旋式上升

素数判断问题是编程中的典型案例,素数问题本质上是物质的几何学问题,如著名的黎曼猜想、孪生素数猜想、哥德巴赫猜想均涉及素数,这些问题既有趣也值得探讨,运用编程方法验证或求解,也有助于抽象思维能力的锻炼。在C语言课程教学中,笔者以最基本的素数判断案例为基础,将案例升级改造成不同版本,做了系列素数问题的探讨,从简单到复杂,举例如下:

(初级版)案例1:找出[m,n]范围的所有素数。

(初级版)案例2:找出[m,n]范围的孪生素数对。

(中级版)案例3:在[m,n]范围中,找出长度为3的连续素数等差序列。

(高级版)案例4:在[m,n]范围中,找出最长的连续素数等差数列。

案例1重点引导学生明确“需要在指定的整数范围内循环取数,并判断取到的数是否素数,是则输出”的求解思路。

案例2的目标是要找“孪生素数对”,若整数x和x+2均是素数,则这两整数即构成孪生素数对,这也是该问题的切入点。可引导学生自行分析并设计求解过程,在[m,n]范围内取数置于变量i中,判断条件isPrime(i) &&isPrime(i+2)是否成立:若成立,则输出孪生素数对(i, i+2);否则,继续取下一个数置于变量i进行判断;直至该范围的数全部判断完为止。

案例3的目标是:在指定整数范围内,要找连续素数等差数列,且数列中素数的个数为3。分析该问题,在[m,n]范围内可能存在多个素数,而形成“长度为3的连续素数等差序列”的前提是:连续的3个素数每相邻两个的差相等(将该差称为“步长”)。假设这3个素数中的第一个是x,步长是step,则后续的2个素数也应满足每相邻两个的差值等于step,这便是问题的切入点。Step的值通过计算前两个相邻素数的差求得。考虑是在一个素数列中找寻连续等差数列,找出[m, n]范围内的素数列并存入数组空间,更便于后续判断。

案例4属于面向算法竞赛类型的问题,由于分析过程和设计较复杂一些,且篇幅所限,在此不展开叙述。

综上,针对较为抽象的问题,如何设计问题求解过程,并在此过程中对学生强化思维训练?可参考以下步骤:(1)分析问题,明确结果;(2)思考需求的知识或搜索新知识;(3)思考切入点;(4)尝试解决问题的一部分;(5)重复前4步。

当然,许多问题的解决过程并非只有一种,我们更应注重引导学生发散思维,提倡多种解决办法,并通过比较找到更优化的解决方案。

2.3用综合型案例加强知识综合应用,强化问题抽象、分解及复用思维

随着知识的积累、思维训练的循序推进,学生也将面临更为复杂的问题求解,新的问题可能更抽象和需求更多。如何思考和解决更复杂的问题呢?一个很重要的能力是:问题分析与拆解能力。在程序设计课中,我们可借助综合型案例来强化学生对复杂问题的分析、分解和设计等能力的训练,逐步建立软件工程的思维。编程中综合性应用案例如“学生成绩管理”“通讯录管理”“银行排队叫号系统”等,均可对基础知识梳理和应用、问题分解思想起到较好的训练作用。在综合型案例中,更强调问题的分解抽象及模块复用思想,将学过的知识模块进行串联应用,既巩固前期所学,也充分锻炼学生面对复杂问题时的分析与拆解能力,建立工科类学生需具备的工程性思维。

3结语

笔者认为,在程序设计教学中,对学生进行计算思维能力训练强化,是对现有课程的优化,且完全可以融入课程中通过潜移默化的方式进行。经过持续的教学摸索和实践,笔者发现,使用案例教学法组织教学过程,对学生不断强化计算思维训练,学生的编程能力较之传统教学法有更快的提升,在面对模糊的、复杂的或开放性的问题时也不再畏惧恐慌,增强了解决问题的自信心,运用编程解决问题的能力也显著提高了。

参考文献:

[1] 牟琴,谭良.基于计算思维的探究教学模式研究[J].中国远程教育,2010(11):40-45.

[2] 姚天昉.在程序设计课程中引入“计算思维”的实践[J].中国大学教学,2012(2):61-62,76.

[3] 叶军,汪一心,王磊.以培养计算思维能力为导向的“C语言”教学资源设计[J].江西广播电视大学学报,2018,20(4):82-87.

[4] 罗力强,王冬青,方远豪,等.我国计算思维的研究热点及趋势分析[J].中国教育信息化,2020(2):1-6.

[5] 姜强,王利思,赵蔚,等.认知水平与计算思维间的隐含关系挖掘——基于编程行为表征视角[J].现代远程教育研究,2020,32(2):94-103.

【通联编辑:张薇】

猜你喜欢

案例式教学计算思维程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
紧扣案例特点,开展有效教学
辐射专业《测量学》课程改革方法的探讨
兽医临床诊断学案例式教学模式的探索与体会
高职高专院校C语言程序设计教学改革探索
程序设计课程中计算思维和应用能力培养问题研究
算法的案例教学探析
浅谈艺术专业学生计算思维能力的培养
职业教育中大学数学案例式教学模式探究