陈凯
假设某节课的内容,是通过循环结构语句(或者流程图)来求得自然数数列若干项的和,那么在这节课中,到底哪些地方能落实计算思维的培养目标?虽然说教学内容中可能涉及抽象——如果将生活场景中的事件转化为数据和符号的表达看成是一种抽象的话,涉及借助循环结构实现重用,涉及逻辑严谨的执行、分析和调试过程……但毫无疑问这些都与计算思维有着关系。然而,常能见到一线教师在关于计算思维培养的分析案例中,以“因为使学生能够通过抽象/重用/逻辑分析来解决……的问题,从而有效培养了学生的计算思维”这样的句式得出结论,笔者感觉其论据是不充分的,甚至在以上句式的“能够通过”后加上那些公认为与计算思维密切相关的方法名词,如“迭代”“递归”“模块化”等,以这种形式表达观点的可靠性仍然值得怀疑。一方面,相关性和因果性本来就应避免相互混淆;另一方面,计算思维作为一种高阶思维具有系统思维整体性的特点。在利用计算思维解决问题的过程中,往往需要综合“用逻辑思维精准描述计算过程,用算法思维有效构造计算过程,用网络思维有效组合计算过程”[1],可见计算思维是在设计和使用某计算模型来解决具体问题的过程中,综合了具有多种特征的思维方式而整体涌现出来的,这样就难以用还原论的方法,认为只要在教学活动中体现了逻辑思維、算法思维、网络思维等,即是实现了计算思维的培养。当使用整体性思维解决问题时,“人们通过对要素的重组,改变对象系统的结构和层次关系,实现认识的突破……体现创造系统的自组织能力”[2],以此观点对照循环结构的教学内容,可以想见,对象系统结构和层次的再组织,不是仅仅借助修改一下初始值、循环条件、计数器的步长值等就能实现的。假设整个循环结构是预设的,如果学生能做的只是针对不同情境套用这个结构,那么无论是否在此过程中使用到有所谓抽象/重用/逻辑分析等特征的方法步骤,都只是应用了已有的结构,而没有实现认识的突破。
周以真认为“计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动”。在这极为著名且被广泛引用的观点中,缺失的是思维的动机,即何以要用计算机科学的基础概念进行问题求解、系统设计等一系列的活动?相对而言,Robert Tinker提出:“计算思维的核心是将大的问题分解成很多小的问题直到小的问题能够自动化解决的思维过程。”[3]这一论述中的思维动机就十分明显,而周以真于2011年所补充的“形式化表达问题和解决方案,使之成为能够被信息处理代理有效执行的思维过程”[4],可以视作是实现自动化解决问题的具体途径。关于怎样将问题分解成能被自动化解决的小问题,并且,怎样用形式化的方法来有效执行自动化,由此可以展开许多方面的讨论,一个较容易操作的路径是“解构—模式识别—抽象与重构—算法实现”。如前文所说,为了培养计算思维,需要对要素进行重组,改变对象系统的结构和层次关系。对于数列求和的教学来说,一种策略是将数列求和的任务置放于更大的任务场景中,另一种策略是对数列求和的任务本身进行解构。本文选取后一种策略实施教学设计,是因为它更能体现计算机科学的基本思想方法。
● 解构:从流程图到安置物的空间
用变量值列表来跟踪流程图或程序中不同时刻变量值变化的情况,是算法教学中常见的方法,在分析数列求和的流程图或程序代码时,计数器变量和累加器变量的值的变化至关重要,让学生理解已有算法流程和变量变化之间的关系,是理所当然的。但为了体现计算思维的培养,可以考虑采用解构的方法,将变量值的变化从当前流程图和程序代码中剥离出来。
解构,是对已有结构的反叛和消解,作为哲学思想的解构主义的兴起,“对秩序、结构以及现有的语言体系产生了怀疑和否定……将斗争的矛头指向结构主义所推崇的整体、结构、次序、层次和权威”。[5]虽然本文不打算深入讨论解构主义的问题,但不妨将程序设计语言的结构也视为一种权威,大胆对其进行消解的尝试,甚至可将程序中的变量名本身和数字作为预设权威加以消解,或者,至少对变量加上括号使之成为(变量)而引发学习者对概念名词含义的怀疑。然后就只剩下了纯粹的代表数的物,这样就实现了符号的消解,虽然在操作过程中,为了交流上的方便,仍然要用某种符号如星号来代表这种“用以代表数的”物,然而,物与物在空间和时间上的关系,是不能被消解的部分,最初的时候,存在着用表格来代表的空间。空间和空间中的物,对应变量和变量值,具有同构的关系,如表1所示。如果说用变量的设定和变量值的变化,是对现实事件变化状态的抽象后的结构系统,则空间的设定和空间中物的变化,就是将原有结构系统拆解后的留存,为后续的重构提供了可能性。
● 模式识别:空间中物的变化模式与计算的对应
每个空间结构的拥有者,对空间结构的使用具有自由的决定权,可以将某物搬运到某空间,可以将某物复制到某空间,或者直接让某空间的物消失(虚拟数字空间的一个重要特点是,它具有超乎物理现实的时空特性),空间的拥有者的另一项能力是,可以为自己的行为设定重用的规则,不妨假设某种“魔法”能实现反复进行某一系列的操作。假设在第2个时间周期内,所做的操作是将初始时刻中一号空间的物复制到三号空间,然后再将二号空间的物复制到三号空间,那么第2个时间周期结束时,三号空间将有两个物。接下来实施魔法重复这一系列的操作,在第3个时间周期结束时,三号空间就将得到4个物,以此类推。这样实际上就实现了差值为2的等差数列项的计算。
假设三个空间中的物以这样的规律发生变化,在时间周期内,二号空间中的物会复制并添加到三号空间中,而一号空间中的物会复制并添加到二号空间中,如表2所示。
从表2可以看出,三号空间中的物的数量,就对应着1、2到5数列的和。在这里没有流程图,没有程序代码,有的是可安置物的空间以及严格按步骤进行的复制和搬运的规则,可以轻易识别出其中的变化模式。当然,即便这个方法可以顺利求得数列和,但就好像歌德的叙事诗《魔法师的弟子》那样,一旦让扫帚开始取水,就难以停下来,所以这里暂且通过限定次数的方法来避免无休止的重复。限于篇幅,关于如何设计某个可以自动停止的规则系统的问题留待以后讨论。
通过特定规则的物的复制和搬运,使得这个空间结构能够实现特定的计算过程,显然,结合不同的空间结构和规则,就能实现不同目的的计算。有兴趣的读者可以试着用类似的方法得到1、4、9、16等完全平方数。
● 抽象与重构:将数据作为计算的一部分
通过物的复制和搬运,使得这个空间结构能够实现特定的计算过程。接下去的问题就指向了计算自动化的可行性问题,重新构建计算装置的路径当然可以指向程序设计,但肯定不仅仅指向程序设计。为了计算思维的培养,在引入程序算法之前,首先要做的,是要更自由地进行抽象和重构的尝试,这样才能彰显出此前解构的意义。下面试举一例。
假设存在某个符号串,小括号、中括号和大括号分别对应三个存储物的空间:
(*)[*]{}
考虑存在一个机器人,它要做的就是自动通过物的复制和搬运来实现数列和的运算,但在机器人看来,并不存在什么存储空间,它看到的其实就是不同的符号。它所要做的,就是先匹配所有中括号后跟星号的符号串,并将这个符号串复制并插入到大括号后,接着匹配大括号紧跟中括号的符号串,将其替换为大括号;然后匹配所有小括号后跟星号的符号串,并将这个符号串复制并插入到中括号后,接着匹配中括号紧跟小括号的符号串,将其替换为中括号。整个过程如图1所示。
这些符号将此前的空间和空间中的物再次抽象化为符号,并通过设定模式匹配规则的方法,构造出一个可以自动实现复制和搬运的系统。可以看出,三种不同的括号符号是这个机器人得以正确复制和搬运这些物的关键。如果将星号符号看成数据,那么这些括号符号就是另一种作用的数据,是专门为划分出数据空间结构的数据,为机器人得以实施自动化工作提供了重要辨识标志。可以將这些数据称为元数据。
关于特定符号作为执行计算的数据,而不仅仅是被计算的数据这个问题,还有更多值得探讨的地方。例如,机器人如何知晓诸如“匹配所有中括号后跟星号的符号串,并将这个符号串复制并插入到大括号后”这样的规则要求,假如说机器人执行动作的规则行为是被固化在机器中的,那么这个机器人也就只能实现求自然数数列和的工作了。但若规则本身也是一串被编码的符号,那么机器人可实施的工作种类就会多很多。
● 算法实现:回到求自然数数列和的程序算法
经由上述“解构—模式识别—抽象与重构”的过程,再重新回到若干项自然数数列和的程序算法,便可对应上述“复制—搬运”过程实现相应的算法,其中用变量t代表时刻,用变量a1、a2、a3来代表三个可存储数据的空间,完整的代码如图2所示。可以看出其中a1总是不发生变化,因此可以将代码简化,图3所示。继而发现,变量t和a2的变化完全是一致的,所以可以进一步将代码简化,如下页图4所示。
除了变量名不同以外,这和程序算法中求自然数数列和的经典的程序代码是一样的。但到达此代码实现的路径却漫长很多,其原因,是为了让学生体验到在自动计算的任务实现的过程中,既要考虑到人的需求,同时也要从机器运作的可能性、可行性和效率方面来考虑构建一个自动计算模型的问题。这是一种“认知思维主体客体化”[6]的方法,希望能打破学生在利用程序算法解决问题的过程中,围绕某特定计算模型所形成的过于单一的思维模式。
参考文献:
[1]张菡.简析计算思维中的思维方式及思维本质[J].科学与财富,2020(01).
[2]王玉琳,王诤诤.创造性思维的系统分析[J].系统辩证学学报,2002(03):13-16.
[3]NRC. Report of a Workshop on the Pedagogical Aspects of Computational Thinking[C].Washington,D.C.: National academies press, 2011.
[4]J M Wing.Research Notebook:Computational Thinking-What and Why?The Link Magazine.Carnegie Mellon University,Pittsburgh[DB/OL].https://www.cs.cmu.edu/link/research-notebook-computational-thinking-what-and-why.2021-06-12.
[5]葛卉.浅论解构主义与结构主义的关系[J].时代文学,2008(15):170-171.
[6]王荣良.计算思维教育中的信息处理行为主体分析[J].中国信息技术教育,2021(09):37-39.