第1章 计算思维概述
1.1 为什么教育界越来越强调计算思维
计算机及各种计算设备(特别是智能手机、平板电脑)正逐渐成为一种日常生活必需品,随时随地可见,人们利用其进行工作、学习和娱乐等。在这个时代,如果使用计算设备仍然存在障碍,将给人们带来极大的不便。然而计算设备多样、软件多样,这将带来更多的学习负担,掌握计算思维可以帮助人们快速进行学习迁移,缩短学习时间。计算机已经同数学、语文一样重要,因此计算思维需要上升到与数学思维、语文思维等思维一样的高度上来。计算思维和信息素养将成为21世纪合格公民应具备的基本素养,利用其将克服信息技术给人们带来的各种工作和生活障碍。
从技术职业的视角看,软件开发和应用是分离的。软件开发中,用户需求和使用情境在设计时已经规划好,然后由软件开发人员实现系统的所有功能。使用时,用户可能发现这些软件不能满足所有工作需要,而如果加入新功能,就要让开发人员修改软件,不仅增加开发费用,而且仍然无法解决使用时难以预见的问题。因此,让用户拥有计算思维,并能自行开发从而增加自己想要的功能,作为原有软件的补充是不错的想法。同时,信息技术不断与各领域融合,需要同时掌握本专业知识和计算思维的行业越来越多,这样不仅能让原来的软件需求提出者独立解决一些不需要大规模开发的、能用计算机技术提高工作效率的问题;在大规模开发中,他们也能够清晰描述软件需求,从而避免不断迭代开发造成的资源浪费。计算思维已经成为现代工作者应具备的基本技能,有必要成为人类思考的一种新习惯。
2000年以后,美国的大学生对计算机基础课程的兴趣逐渐下降,出现如中途放弃课程或通过抄袭及作弊来完成课程的教育危机。2005年6月,美国总统信息技术咨询委员会(President’s Information Technology Advisory Committee,PITAC)向美国总统提交了《计算科学:确保美国竞争力》(Computational Science: Ensuring America’s Competitiveness)报告。报告强调,21世纪科学上最重要的以及经济上最有前途的前沿问题都有可能通过熟练掌握先进的计算技术和运用计算科学得到解决,计算本身也是一门学科,它可以促进其他学科的发展。计算思维一经提出,美国的教育专家看到了解决这两者矛盾的希望。近年来,美国各大高校都在修订其本科生的“计算机科学”课程计划,美国麻省理工学院、斯坦福大学和卡内基?梅隆大学等著名高校纷纷设置了面向全校的“计算思维”通识课程。
同时,美国中小学原有的以培养信息素养为目的的“信息与通信技术”(Information and Communication Technology,ICT)课程是在计算设备仅能在实验室和部分工作场所或富裕家庭才能见到,且个人电脑、智能手机、平板电脑尚未普及的情况下开设的,希望学生尽快了解计算机,并能在未来的工作中高效地利用计算机。但在当前环境下,个人电脑、智能手机、平板电脑等计算设备已经融入日常生活,成为每个家庭的必需品。孩子一出生就接触这些计算设备,在这种大的信息环境的浸染下,他们从小就对这些设备有探索、操作的能力,到上学时早已成为熟练的操作者。随着计算设备的普及,过于重视操作的中小学“信息与通信技术”课程已经不适合当前的教育,培养什么样的计算机科学素养成为一个值得思考的问题。因此,中小学“计算机科学”课程的改革势在必行。虽然这些孩子已经学会操作,但对于其操作背后的原理和本质缺少理解,有必要对其操作的原理进行更准确的学习和思考,从而提高其思维层次,培养批判性的信息消费观念,预知自己的操作和输入将产生什么样的计算结果。周以真认为,计算思维是21世纪合格公民应具备的基本素养,于是在全球掀起了以计算思维为培养目标的一场教育变革,科学教育、STEM/ STEAM教育、创客教育都试图融入计算思维,计算思维得到了空前的认同和发展。
1.2 什么是计算思维
2006年3月,美国卡内基?梅隆大学计算机科学系主任周以真(Jeannette M. Wing)教授在Communications of the ACM的观点专栏中提出了“计算思维”(Computational Thinking,CT)这一概念,并声称它是像计算机科学家一样思考的简称。周以真进一步认为:“计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。”这展示了计算思维的学科特性。
周以真还认为,计算思维代表着一种普遍适用的态度和技能,不仅仅是计算机科学家,每一个人都应学会并运用它。由于以上定义过于抽象,周以真为了更清楚地解释计算思维的定义,从计算学科的视角列举了一些计算思维实例。
从算法的视角,计算思维中包含递归思维,也涉及并行处理。当处理数据时,需要将数据以编码的形式表示;而当解释时,需要将编码译成数据。对于函数调用,既要知道其威力又要了解其代价;评价程序时,不仅要根据其准确性和效率,还要有美学考量;系统设计时,不仅要考虑可靠性和可管理性,还要考虑简洁和优雅。
从软件设计的视角,计算思维采用抽象和分解来处理庞杂的任务或者设计巨大复杂的系统。以关注点的分离、高内聚、低耦合为原则是系统或任务分解的关键,模块成为结构分解的实质性表示。这使得对一个问题的相关方面进行建模变得易于处理,这也使得我们在不必理解每一个细节的情况下就能够安全地使用、调整、改进一个大型复杂系统。为实现软件模块重用,但又不知道模块未来使用者是谁而进行的模块化设计,可以将它看作为可预见的未来应用而进行的预取和缓存。
从数据库管理系统的视角,通过预防、保护以及冗余、容错、纠错等方式恢复数据,避免损失;通过并行来加快运算速度,通过加锁来实现数据同步;通过各种约束减少用户录入错误;解决多种数据更改业务同时到达时如何协调资源竞争问题,这些都属于计算思维。
从人工智能的视角,可以利用启发式推理来求解问题;可以在解空间中通过不断搜索来寻求答案;可以利用海量数据来进行机器学习,这需要在时间和空间、算力和数据量之间权衡,这些也都属于计算思维。
同时,周以真认为如下日常生活事例中也包含计算思维:当学生早上去学校时,把当天需要的东西放进书包,这对应计算机科学中的预置和缓存;在超市付账时,选择排哪个队的算法就是多服务器系统的性能模型;停电时,你的电话仍然可用,体现了失败的无关性和设计的冗余性。
但这种举例式的计算思维定义方式是无法令人信服的,枚举将造成计算思维内容的无限性,绝大多数的计算机科学背后的思想都能容纳进去,这与计算思维提出的目标略有不符。从那以后,学术界、教育界、工业界发起了关于计算思维的本质及其教育价值的国际辩论。
2009年,美国国家研究委员会(National Research Council,NRC)组织了“计算思维的范畴和本质研讨会”。研讨会结果表明,计算思维的基本定义在业界尚未达成共识,参会者就计算思维的范畴和本质表达了不同的观点。
2010年,为了进一步推动讨论,简?库尼(Jan Cuny)、拉里?斯奈德(Larry Snyder)和周以真提出了一个比周以真最初描述的计算思维更加浓缩而且相对受到共同认可的定义:“计算思维是一种思维过程,它涉及问题的构思及其解决方案的提出,并使解决方案以一种可以由信息处理代理有效执行的形式表示出来。”这个定义有以下两个方面对于义务教育尤其重要。
(1)计算思维是一个独立于技术的思维过程。
(2)计算思维包含多种类型的问题解决能力,利用它能够设计可由计算机、人类或两者结合执行的解决方案。
但这个定义过于抽象,可能导致人们无法知道要教授什么、要学习什么。而周以真给出的另一个简单的、非正式的定义是“计算思维是像计算机科学家一样思考的简称”,这个定义更清晰地勾画了计算思维所要包含的内容,即培养一个公民成为能够像计算机科学家一样思考所需要的最少教育内容和教育过程。
周以真的这个定义后来成为计算思维的讨论基点。尽管如此,文献中还出现了许多其他定义。其中被引用最多的是英国皇家学会在2012年提出的定义:“计算思维是我们认识周围世界的计算、应用计算机科学的工具和技术来理解和推理自然和人工的系统和过程的过程。”该定义强调计算不完全由人类构建,也存在于自然界中(如在DNA中),同时强调了计算的工具作用、计算思维同计算机科学的关系,以及计算思维同信息世界的关系,明确自然世界中的计算思维仅包含计算机科学在其中作为工具与技术的这一部分。
中华人民共和国教育部制定的《普通高中信息技术课程标准》(2017版)将计算思维定义为,个体运用计算机科学领域的思想方法,在形成问题解决方案的过程中产生的一系列思维活动。具体内涵包含三个方面:①在信息活动中,能够采用计算机科学领域的思想方法界定问题、抽象特征、建立结构模型、合理组织数据;②通过判断、分析与综合各种信息资源,运用合理的算法形成解决问题的方案;③总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。具体表现为解决问题过程中的形式化、模型化、自动化、系统化。
综上所述,从广义上来看,计算思维可以看作计算机科学普及内容的高度概括和教育目标,是对计算机科学应用原理的高度凝练。计算思维以问题解决为目标,进行相关技术教育和实践,使大众也掌握这些技术。从狭义上来看,计算思维是从计算机科学专业教育内容中萃取出适合非计算机专业学生、K12学生的计算机科学教学内容,使他们适应21世纪的学习、工作和生活。那么,哪些概念、哪些技术能用来学习计算思维呢?其中又有哪些概念和技术适合在K12阶段学习呢?作为21世纪核心的计算思维,其范畴和具体的教材内容应带有时代色彩。
从实际可操作角度来看,周以真2006年提出的初始定义虽然受到很多批评,但其对课程形成具有指导意义。从目前来看,与其最初定义相关的课程有“程序设计语言”“数据结构”“算法分析与设计”“数据库管理系统”“软件工程”“人机交互”“人工智能”“数据挖掘”“机器学习”“模式识别”“信息检索”等课程,如果要为K12和非计算机专业学生开设“计算思维”课程,应讲述这些课程中最基本、可应用的思想方法和实践。
1.3 计算思维的特征
2006年,周以真在Communications of the ACM的观点专栏中介绍了计算思维,给出了计算思维的定义。当时抽象形式的计算思维定义很难被其他科学家和大众所理解,于是她列举了计算思维应具有的特征。
(1)概念化,而非程序化。
像计算机科学家那样去思考并不意味着只是对计算机进行编程,多数情况下是独立于计算机程序进行思考和设计方案,更多的是使用设计概念,而不是程序,只有在需要将解决方案用程序进行表达时,才从具体程序的视角进行思考。因此,计算思维要求能在抽象的多个层次上思考,是概念而不是程序化。计算机科学包含计算机编程,但不等同于计算机编程。
(2)是根本的,而非刻板的技能。
根本技能是在现代社会中,每一个人为发挥职能所必须掌握的、能灵活应用的技能;而刻板技能只能实现机械式重复。目前计算机不具有思维能力,随着人工智能的发展,当计算机像人类一样思考之后,思维也可以机械化,但这不是短期内人工智能可实现的目标。
(3)是人的,而非计算机的思维方式。
计算思维是人类求解问题的一种方法,是由人设计解决方案并映射到计算机上执行,这明显是人的思维方式。当人操作计算机时,更多的是考虑计算机的规则,按计算机提供的规则方式进行思维,并解决问题。而此时,人如果像计算机那样思考,人的思维就会受到限制。计算机枯燥且沉闷,人聪颖且富有想象力,只有计算思维是人的思维时才能用自己的智慧去解决那些在计算时代之前不敢尝试的问题。因此,计算思维是人的,而非计算机的思维方式。
展开