APP下载

“L—O—A—C范式”助力思维教学

2018-05-02马建军张利波

中小学信息技术教育 2018年2期
关键词:范式编程计算机

马建军 张利波

循环结构是程序设计的重要组成部分,也是程序设计的重点和难点。重点在于循环结构能使程序变得简洁明了,编程思想更具结构化;难点在于初学者很难厘清循环结构,无法总结循环结构的一般范式。

华师大王荣良教授提出,“从计算思维教育的角度出发,其关键在于能对需要解决的问题进行抽象,形成计算机能够理解的形式化表达,并且让计算机自动地去计算。”本质上,循环结构是顺序结构,它让顺序结构变得简洁明晰,是一种形式化表达,便于人的思维呈现和表达。这种形式化的表达,将人的思维过程与计算机执行过程有机联结起来。一方面,形式化表达是为了让计算机更好地服务于人类,用简约方式告诉计算机,让计算机明确知道做什么;另一方面,形式化的表达普遍要求具有高度精确的要素,比如循环体和循环条件,对于初学编程的学生来说,精确的形式化表达具有一定的难度。

如何让学生准确理解循环思想,写出言简意赅、准确到位的循环结构?如果实现循环结构的建模,学生有范式可以参照,那么结构化循环结构更易实施了。

终于,经过实践探究,我们提出“L-O-A-C” 范式,即List-Observe-Analyze- Conclude,将循环结构由内向外打破,实现循环从具体到一般的思维过程,将循环问题进行抽象并建立可操作范式。

思维断想

以打印下图为例,我们依次剖析其中可以展现的思维。

第一,当我们打印这类图案时,几乎极少有人会采用纯手工方式实现。学生亦如此,他们总是努力想着如何让计算机帮助实现。这就说明首先是人的需求,计算机只不过是一个实现的工具而已,或者说是计算机为我们服务。因此,最后通过编程的方式实现了,是计算机完成的,但归根结底还是人的思维起着主导作用。这说明计算思维并不是机器的思维,本质上是人的思维。

第二,此题中的图案打印,初看只是星号的打印。一般我们首先会关注每行星号的个数,这是人的思维方式以及图像优先决定的。然后,我们发现除了考虑每行星号个数,还需要考虑位置。这说明人的思维方式是以点带面,逐渐考虑完善。那么位置怎样实现呢?这时,我们又发现了隐形的信息,即星号前面的空格逐渐浮出水面。这种由此及彼、跳跃式或链接式的方式也是人的思维所特有的。

第三,此题图案实现方法不止一种,比如可以采用一维数组方式实现,即“3空1星(换行)、2空3星(换行)、1空5星(换行)……”;也可以采用二维数组实现,即依据行列方阵实现。同时,我们看到行列方阵实现方法也不唯一,可以使用空格等“硬方式”,也可以使用场宽等“软方式”。因此,当我们面对具体问题进行分析时,首先要告诉学生“问题的解决方法不止一种”,最后落实到其中一种,往往经历了比较、筛选、综合考量。因此,人的思维具有发散性,可以对同一问题展开多角度、多层面的分析,同时人的思维又具有收敛性,针对实际需要,优选其中较合适的方法。比如本题中一维数组方式显得迂回,二维数组方式直观清晰,因此优选二维数组。

第四,在面向图形输出等涉及二维数据的处理过程,“L-O-A-C”范式充分显示其优势。一般的,人们在解决问题时总是希望將问题变得一般化、可操作化和可结构化。一般化表现在学生可以根据范式要点,一步一步地实现循环语句的编写,让学生感觉编程本来就是一件普通的事情,树立人人可编程的理念;可操作化表现在只要依据范式的过程都可以编写成功,强调操作中的时序问题,即每一步做到位方可进行下一步,步步成功才能最后成功,这说明编程本来就不是一蹴而就、一步登天的事情,需要一步一步踏实地走下去。而这种一般化、可操作化的实施,是计算机实现自动计算的前提。自动化是计算思维的主要内容之一。可结构化表现在对该问题的编程实现不是作为最终目标,而是通过此问题的分析研究进一步归纳总结,实现由此及彼的类推,从而实现解决一个问题到解决另一个问题,或者解决一批问题,本质上,这是一种抽象与建模的过程,从具体到一般的建模。

L-O-A-C基本使用方法

List:依次罗列循环中的每个步骤及相应操作

一般的,每行采用“空格+星号”的组合输出,其中星号的位置由空格的数量决定,此处只需统计“*”的数量即可。涉及行列输出,我们构建一张如表1的二维表。

Observe:观察这些行列参数与输出字符个数、位置的相关性

我们将原始表进行微处理:选取每一行字符的起点数据、终点数据,罗列如表2。

Analyze:分析每项操作参数与动作的内在联系

即在①②③④处填写关于i的一般通式。此为二重循环中内循环的关键信息,只要决定了内循环中的初值与终值,那么打印的图案也就明确了。

Conclude:总结写出操作参数与动作的一般关系式

一般关系式即循环体。经过如上分析,不难填写初值和终值,如表3。

“L-O-A-C”方法采用列表手段进行程序的前期分析,显露学生思考痕迹,提高学生前期编程分析的有效性;这说明计算思维往往基于数理思维,此题中写出i的关系式,初中学生易于实现,因此本节课的探究并没有喧宾夺主将程序设计课变成数学课。同时这种方式将循环体由内向外打破,形成自然、规范的循环编程方法,促进学生分析思考的可靠性。这说明程序设计本身就是一件严谨的事情,任何关键信息的填写都需有理有据,单纯地依靠经验主义编程往往很难走远。

“L-O-A-C”的意义

1.打破经验式编程壁垒

“L-O-A-C”重点运用列表,采用逐个离析的方式,清晰地推导出数据之间的关系。这种方法虽有繁琐,但对于初学者很适用,效果良好。随着学习的深入,面对复杂题目,学生运用示例方法进行分析问题、解决问题,显得更加得心应手,娴熟自信。

2.促进结构化编程分析

很多时候,大家都喜欢用经验的方式写循环,往往形成一种“循环体合成”的思维模式,即关注循环体结果,而非循环体产生的来龙去脉。这种通常的学习模式,反映在很多人身上。因此,不少学生在写循环语句时,并不是通过具体分析来推导出的。这种学习方式,在遇到排序等稍微复杂的编程时会凸现弊端:程序段初看好像对的,一旦调试,数据走向与预料的不同。因此,编程过程,前期的分析比后期的调试更为重要。重视前期结构化分析,也是良好的编程习惯之一。

3.形成严谨型编程思维

程序设计目的在于提供一种抽象方法来解决现实中的问题。编程的难点在于用判断逻辑抽象出一般方法。一般循环编程的例子,我们看到的都是一个个具体化的动作,编程的过程就是将具体转换成一般,或者将具体化的内容映射到一般化的表达。运用“L-O-A-C”,我们在编程分析时,每个关键参数做到有理有据,有利于形成严谨的编程思维。

4.联结自动化计算思维

计算思维的本质是抽象和自动化。编程中重要的思想是复用,循环结构是学生最早接触到的复用。当然还有函数、模版库、类库,再到更上层的公共组件等,都体现复用的思想。复用与自动化是相辅相成、相伴而生的。自动化体现在计算机可以自动化地进行大量运算和处理,从抽象中去发现和发觉一种可自动化的循环,这正是程序的强项。任何人都应该有这种自动化的计算思维。

作者单位:浙江慈溪市教育局教研室 浙江慈溪实验中学

猜你喜欢

范式编程计算机
以写促读:构建群文阅读教学范式
范式空白:《莫失莫忘》的否定之维
计算机操作系统
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
孙惠芬乡土写作批评的六个范式
纺织机上诞生的编程
基于计算机自然语言处理的机器翻译技术应用与简介
管窥西方“诗辩”发展史的四次范式转换