透过分支结构看计算思维的培养

(整期优先)网络出版时间:2022-12-18
/ 2

透过分支结构看计算思维的培养

曾志勇

泉州市第九中学 362000

自2017年高中新课标发布以来,全国信息技术教师都在积极地学习领悟课标精神——特别是学科大概念和学科的核心素养。信息技术学科的发展速度之快,引起了学科教学中的教学内容和课程教材的快速更新迭代,且不说大学中计算机相关专业的课程更新速度,就连中小学的课程内容每隔十年左右都要做一次巨大的改革。从早期计算机软硬件的基本操作和基本技能,到现在对计算机科学学科知识构建的重视,足以看到学科本位、知识本位的重要性。

一、编程的学科地位

在全球的人工智能发展浪潮中,学科大概念中的数据与算法又显得特别地重要,具体又落实到课程实施中学生计算思维的培养。计算思维是让学生能够利用计算机科学的思维方式来解决具体问题,落到实处往往是通过计算机编程来解决问题,所以编程在各个版本的教材中所占的篇幅都较大。虽然计算思维不等同于编程,但是编程解决问题是计算思维的一种很好的实现方法。特别是当问题的数据规模达到一定级别时,编程的优势更能体现的淋漓尽致,也更能让学生体验到编程的优势。所以在编程教学实践中,除了做语法教学时项目和例子可以简单点以外,教师要特别注意实际教学项目中的数据规模大小的问题,才好更好地体现编程的优势、计算思维的优势。

二、语法结构与语意逻辑

目前,从各个版本的教材来看,PYTHON依然是各教材所采用的主力编程语言。当然PYTHON编程语言对于初学者、入门者是有学习优势,虽然语法上较为灵活多变,但具有强大的第三方库,可以让初学者在较有限的编程水平下,可以通过第三方库实现较为复杂的项目。

从这两年的教学实践中,我们发现高中生已经具有相当好的逻辑思维能力。教材中编程项目的语意逻辑还是比较简单的,所涉及的算法也较为简单,大部分高中学生都能较容易地理解。 很大一部分学生,在编程实践中,更容易被编程语法结构难倒。在编程入门学习中,对于大部分的高中生,相对于编程逻辑的理解更要注重编程语法的学习。所以代码编程中,上机实践、编程调试显得特别重要,有了一定量的上机实践,学生就能够理解掌握基础的编程语言语法结构,为以后解决实际问题打好坚实的基础。

三、IPO分析法

在编程前期的语法教学中,一般教学所用到的例子和项目都较为简单,所以带领学生使用IPO分析法来解决问题是一种简单合适的方法。所谓的IPO,即输入(input)、处理(process)、输出(output)。在通过编程方式解决问题的时候,引导学生理清程序的输入,输出及处理过程,相当于解数学题的已知、求、解。因为IPO模式是从学生多年的数学解题过程迁移过来,所以学生可以很容易地接受这种方式。例如:项目求一元二次方程aX2+bX+c=0的解。

1、输入(input):输入三个整数分别存入变量a,b,c中,作为一元二次方程的三个系数,其实a≠0。

2、输出(output):输出是否有解,有解则输出根。

3、处理(process):编程问题的解决过程是最重要的一个环节。这个项目的解决过程大致分为三步走,首先判断该方程有无解,即先计算b2-4*a*c的值,再判断该值是正数、零还是负数,从而确定无解、两个相同的根或两个不同的根;然后通过if分支语句来决定整个程序的走向,如果是无解就直接输出,如果有解则分别计算两个根的值再进行输出。

4、编程实施难点:有了以上三个步骤,我们对解决问题的思路已经非常清晰了。但是在编程实施的过程中还是会遇到形形色色的问题和难题。在本项目中有两个地方是学生容易出现错误的难点,一是判断语句中条件表达式书写b**2-4*a*c>=0或b**2-4*a*c<0(其中**表示幂次运算);二是求根公式的表达,如何在程序中表达求根公式,也就是程序中的算术表达式的书写:x1=(-b+math.sqrt(b**2-4*a*c))/(2*a),x2=(-b-math.sqrt(b**2-4*a*c))/(2*a),因为math是python的标准库,不需要额外安装,但也需要导入库:import math,当然也可以引导学生将求根公式写为:x1=(-b+ (b**2-4*a*c)**0.5)/(2*a),x2=(-b- (b**2-4*a*c)**0.5)/(2*a),直接用幂次计算而不需要导入库。

四、问题抽象与算法设计

通过上述例子,我们看到IPO分析法的优势:可以让学生很快明确已知求解,即输入(input)、处理(process)、输出(output),整个过程清晰明了。但问题的前提是一元二次方程求解,不管是问题还是求解过程,都是老师和学生们都非常熟悉的数学问题。但我们常常遇到要解决的项目是现实问题,而不是现成的数学问题,那么使用编程来解决现实问题和数学问题会有什么不同吗?如果是数学问题,我们可以很容易得出已知、求、解,并转化为输入、处理、输出;但如果是现实生活的问题,则不然,需要对问题进行抽象,建立数学模型,使其结构化、数据化,转化为数学问题后再进一步用计算机科学进行问题求解,最后用编程来实现问题的求解。因此,解决问题的第一个关键点是问题的抽象。

完成数学建模、问题抽象后,当我们开始用IPO分析法来解决问题时,我们会发现如果是简单问题IPO还是很适用的;但如果遇到的是相对复杂的项目,输入(input)和输出(output)因为相对简单就显得不那么重要了,整个项目的难点在于如何处理(process)这个步骤,这时更侧重于处理过程中的算法逻辑设计。这时引导学生使用软件工程学的思维模式来解决问题就会更为适用。第一步需求分析,对现实问题进行抽象、建模;第二步算法设计,利用计算机科学的理念设计解决的方法和步骤;第三步编程程序,选择合适的语言按照已经设计好的算法进行电脑程序的实现;最后调试运行,检测程序的正确性、完整性、高效性甚至是优雅性。这样的方法能够更加有效、科学地培养学生利用计算思维解决现实问题。

五、数学之上的编程

人类文明自始自终跟数学有着千丝万缕的关系,自农业文明开始,数学就起着计数、测量、赋税、日历、时辰等作用;到了中世纪的大航海时代,数学开始跟天文、地理结合,实现了远距离安全航海;18世纪以后,数学又作为基础的工具,推动着物理学的发展,世界进入了工业社会;现代信息社会的发展中,由于数据规模和问题的复杂度,已经远远超过人类的计算能力范畴,因此必须用计算机科学的理论和思维方式来解决数学问题,而实现的手段往往要用到计算机编程。当然数学之美是将现实问题抽象化、数学化,用的是数学语言;而编程之美是解决将建模抽象后的数学问题,用的是计算机编程语言。数学是一种解决问题的工具,编程是一种解决问题的实施。针对复杂问题、大规模数据问题、人工无法解决的问题时,最重要的是解决问题的思维方式——计算思维,一种利用计算机科学的理论和方法来解决问题。