武健
计算生活
生活能够“计算”吗?这个问题如果能够展开,会出现很多类似的困惑。例如,人的感情能计算吗?人际关系能计算吗?直觉能计算吗?人生能计算吗?……
计算:如果是指以狭义的数字的方法来运算生活中的每一件事情。以现状看,这会比较困难的。不过“计算”的含义不仅是数学概念,在字典中列出的有:①通过数学方法根据已知数求得未知数。②考虑;筹划。③暗中谋划。后两种意思更广泛一些。
面对生活、面对问题的思考与筹划是每个人都会有的。在许多简单问题面前,我们可能会占用的思维很少,挥手之间就能拿定主意;面对复杂的问题,可能需要反复斟酌,思考再思考,在深思熟虑后才能拿定主意……问题解决,需要人的思维,需要有一定的思考。
每个人在思考时,都是在尽力发掘事物背后的规律,寻求相应的行动规则和准则,提出可行的解决方法与步骤。人们会根据自己的理解、规定和认识,把握与描述事物的规律,以事物的结构、关系、程序为主要目标,得到最终的方法。面对问题时,很多人习惯从解决问题的具体方法与手段入手,首先考虑如何把问题解决了。第一位想的是方法与手段,尤其是以前不曾遇到过的新问题时,更加关心自己的解决方法。当我们在积累了若干经验后,再遇到类似的问题时,会逐步升级,关注到方法、步骤背后存在的一般性的规律和规则了。在生活中,如果我们超越了解决方法与步骤,就开始进入到熟练状态,从茫然无知的新手状态逐步过渡到轻车熟路的熟练状态。如何缩短这个过程,是人生中的大问题。
将诸多小事中的行动规则明确出来,有助于以后的活动。缩短从生手到精通的过程,这也是生活算法的作用与意义。
形式
生活算法是一种形式的行动规则。
人们发现任何复杂的算法都可以由顺序结构、分支(选择)结构和循环结构这三种基本结构组成。因此,我们构造一个算法的时候,也仅以这三种基本结构作为“建筑单元”。用这样的“建筑单元”就可以把复杂的问题变得简单化。
正因为整个算法都是由三种基本结构组成的,就像用模块构建的一样。所以结构清晰,易于正确性验证,易于纠错,这种方法就是结构化的设计方法。
1.算法的顺序结构
顺序就是按照一定的次序,一步步地解决问题。例如,每天早晨起床前后的活动是:起床→刷牙→洗脸→吃饭→上学。在顺序结构中,有些环节是可以改变前后次序的,而有些环节则必须按次序执行。例如,“刷牙”和“洗脸”两个环节是可以改变先后次序的,但是“起床”、“上学”两个环节中必然是先“起床”后“上学”,生活中是不会出现先“上学”后“起床”的。
顺序是最基本的算法形式。
2.分支结构
一部分问题在不同的条件下会有着不同的解决步骤和方法,这就是分支结构。在生活中的“选择”、“判断”都是典型的分支结构。
例如,打算明天去公园玩,但如果天气不好,那只好在家中看电视。这个过程可以表示成为下页图1。
分支是人重要的思维模式之一。
3.循环结构
由于没有达到条件而不停地重复做同一事情,这样的过程就是一种循环结构。在现实生活中,我们也经常会碰到这样的事情。例如,在跳绳测试中,会以时间为限。还没有到时间之前,需要不停地跳下去(如图2)。
在算法中,顺序结构、条件分支结构、循环结构并不彼此孤立。三种基本结构既可以并列,也可以相互包含,在循环中常常伴有条件分支和顺序结构,条件分支结构中也常常伴有循环和顺序结构。正是这三种基本结构按照不同的结构组成了不同的算法。
4.模块化的基本思路
算法经常是环环相扣的模块化的结构。模块化其实就是把一个大的问题按一定的分类方式分成若干个小问题,直到问题被分解到最简单、最单一的结构,就好像是搭积木一样。
例如,前面所说的起床后的活动,可以分为起床、刷牙、洗脸、吃饭、上学几个顺序,这样就把一个复杂的程序分解成为若干个相对简单一些的部分了。如果需要再进一步的细化,那么我们就要把这些列举出来的部分再进一步细分,如可将洗脸这一个部分再分解为下列几个动作序列:①拿毛巾;②洗毛巾;③拧干毛巾;④擦脸;⑤洗毛巾;⑥拧干毛巾;⑦放毛巾。
有了生活算法的顺序、分支、循环三种基本结构,根据从顶及底的设计思路,利用模块化的设计方法就可以分析与设计生活中的算法。这样设计出来的解决方案将会是从全局的角度来思考的、整体的解决方案。
关系
生活算法是以算法的视角来反思生活中的问题解决,它直接面对生活中的诸多大、小事宜,与程序设计中的算法既有相似也有不同。
与计算机的“程序—算法“的过程类似,生活算法强调“过程—算法”。一般需要从程序、过程中归纳、总结算法,再用算法来指导计算机程序、问题解决过程。它们共同具备算法的五个重要特征:①有穷性:都必须保证执行有限步聚之后结束。②确切性:每一步骤必须有确切的定义,不能有无法操作的二义性。③输入:有0个或多个输入。④输出:对计算机来说会有一个或多个输出,对于生活算法来说会有一个或多个结果。⑤可行性:原则上能够精确地运行。
同时,生活算法与程序设计算法也有很多不同:①呈现形式不同。计算机算法是以计算机程序、伪代码、流程图等为主要表现形式;生活算法因其面向生活,因此以自然语言、图表、流程图等为主要表现形式。②面对的范畴不同。计算机算法是面对利用计算机解决问题;生活算法面对生活,是人在生活中解决问题的。③实施对象不同。程序设计算法的主体是计算机,最终编写的程序将在计算机得以运行;生活算法的实施主体是人,生活算法所表现的方法与步骤将在生活中一步步地落实。
对于信息技术课来说,如果能从“生活算法”的角度来审视现行课程的内容。在中小学是以发现计算机的操作、使用计算机解决问题为主的,如画图软件、Word、PowerPoint等。这些计算机操作、技术应用型的课程都能以算法的思路来重新整理其教学目标。工具软件的操作、应用强调其问题解决的方法与步骤,其背后的生活算法是程序算法的具体映射。计算机课中的编程部分与软件操作部分实际上成为了一个整体关系。
从这个角度看,信息技术课程现有的内容实际上是一个有结构的整体(如图3)。
其中画图、Word、PowerPoint、Flash,甚至包括Excel等软件的操作均有过程—算法的含义,而应用软件的问题解决背后也有生活算法,也是算法思想的具体落实。其中程序设计的算法是更抽象的,而生活算法相对更具体、更情境化。endprint