1.2.3 日常生活中的计算思维

人们在日常生活中的很多做法其实都和计算思维不谋而合,也可以说计算思维从生活中吸收了很多有用的思想和方法。我们来看一些例子。 算法过程:菜谱可以说是算法(或程序)的典型代表,它将一道菜的烹饪方法一步一步地罗列出来,即使不是专业厨师,照着菜谱的步骤也能做出可口的菜肴。这里,菜谱的每一 步骤必须足够简单、可行。例如:“将土豆切成块状”、“将 1 两油入锅加热”等都是可行的步 骤,而“使菜肴具有神秘香味”则不是可行的。

模块化:很多菜谱都有“勾芡”这个步骤,与其说这是一个基本步骤,不如说是一个模 块,因为勾芡本身代表着一个操作序列——取一些淀粉,加点水,搅拌均匀,在适当时候倒 入菜中。由于这个操作序列经常使用,为了避免重复,也为了使菜谱结构清晰、易读,所以 用“勾芡”这个术语简明地表示。这个例子同时也反映了在不同层次上进行抽象的思想。

查找:如果要在英汉词典中查一个英文单词,相信读者不会从第一页开始一页页地翻看, 而是会根据字典是有序排列的事实,快速地定位单词词条。又如,如果现在老师说请将本书 翻到第 8 章,读者会怎么做呢?是的,书前的目录可以帮助我们直接找到第 8 章所在的页码。 这正是计算机中广泛使用的索引技术。

回溯:人们在路上遗失了东西之后,会沿原路边往回走边寻找。或者在一个岔路口,人 们会选择一条路走下去,如果最后发现此路不通就会原路返回,到岔路口选择另一条路。这种回溯法对于系统地搜索问题空间是非常重要的。 缓冲:假如将学生用的教科书视为数据,上课视为对数据的处理,那么学生的书包就可以视为缓冲存储。学生随身携带所有的教科书是不可能的,因此每天只能把当天要用的教科 书放入书包,第二天再换入新的教科书。

并发。厨师在烧菜时,如果一个菜需要在锅中煮一段时间,厨师一定会利用这段时间去 做点别的事情(比如将另一个菜洗净切好),而绝不会无所事事。在此期间如果锅里的菜需要 加盐加佐料,厨师可以放下手头的活儿去处理锅里的菜。就这样,虽然只有一个厨师,但他 可以同时做几个菜。

类似的例子还有很多,在此就不一一列举了。要强调的一点是,读者在学习用计算机解 决问题的时候,如果经常想想生活中遇到类似问题时的做法,一定会对找出问题解法有所帮 助。