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