计算思维古已有之,而且无所不在。从古代的算筹、算盘,到近代的加法器、计算器,现代的电子计算机,直到当下风靡全球的物联网和云计算,计算思维的内容不断拓展。然而,在计算机发明之前的相当长时期内,计算思维研究缓慢,主要因为缺乏像计算机这样的快速计算工具。直到2006年,周以真教授对计算思维进行了清晰、系统的阐述,这一概念才得到人们的极大关注。
2006年3月,美国卡内基·梅隆大学周以真教授在美国计算机权威期刊(Communications of the ACM)上发表了题为“Computational Thinking”的论文,将计算思维定义为:计算思维是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。从定义可知,计算思维的目的是求解问题、设计系统和理解人类行为,使用的方法是计算机科学的方法。下面通过两个实例说明什么是计算思维。
围棋一直被视为顶级的人类智力游戏。在人看来,围棋是棋道,是文化。但是在计算机看来,围棋是一道数学题。那么哪一种看法对呢?当然是后者。人之所以把它称为棋道和文化,说得不客气一点,是人太“笨”,根本算不清楚这道题。
围棋棋盘横竖各有19条线,共有361个落子点,每个落子点都有三种可能性,黑棋、白棋和空格,因此有3361种可能性,大约是10172。这个数到底有多大,你可能没有感觉。我们可以告诉你,宇宙中的原子总数是1080,即使穷尽整个宇宙的物质也不能存下围棋的所有可能性。2016年,谷歌的围棋程序AlphaGo战胜围棋世界冠军李世石,是人工智能发展史上重要的里程碑,代表人工智能已经能在诸如围棋这样高度复杂的项目中发挥出超过人类的作用。而AlphaGo取胜的关键是AlphaGo团队开创性地设计出将高级搜索树与深度神经网络结合在一起的围棋算法。
【例1.2】用大数据分析大众情绪。
了解民意,即了解大众对政治事件和政策的看法,对政府来说,具有十分重要的意义。过去,这些事情都是由民调公司向民众发放问卷进行调查。但是,使用调查问卷的方法有诸多问题,第一,能够收集的样本数有限,不一定具有代表性,以至于调查结果未必可靠;第二,调查者的主观性导致问卷设计不合理,诱导被调查者按问卷设计者的意愿回答问题;第三,即便是匿名调查,出于面子或道德约束的考虑,被调查者可能会选择普遍被认为是正确的结果而非其真实的想法;第四,如果选择的样本多,实施成本很高。
那么,数据科学家是怎样通过对互联网上的数据,特别是社交网络的数据分析大众情绪的呢?简单地讲,这是一个自动分类的问题,即把人的情绪分为若干类,然后把网络数据根据内容确定为其中的一类或者几类。具体实现的方法大致有两种:有监督的机器学习和无监督的机器学习。
1.计算思维的本质
计算思维活动的基本方式是:先对社会/自然现象进行正确的抽象,表达成可以计算的对象,构造对这种对象进行计算的算法和系统,来实现对社会/自然的计算,进而通过这种计算发现社会/自然的演化规律。计算思维的本质是抽象(Abstraction)和自动化(Automation)。
抽象是认识复杂现象过程中使用的思维工具,即从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。抽象是数学的一个最基本特征,无论是数学概念,还是数学方法都是抽象的。数学抽象方法是数学研究中的一种基本方法。数学抽象的最大特点是抛开现实事物的物理、化学和生物学等特性,仅保留其量的关系和空间的形式。而计算思维中的抽象却不仅仅如此,与数学和物理科学相比,计算思维中的抽象显得更为丰富,也更为复杂。计算思维中的抽象过程包括:选择正确的抽象方法,同时处理多个层面的抽象,以及定义不同抽样层面之间的关系。此外,计算思维的抽象化不仅表现为研究对象的形式化表示,还隐含着这种表示应具备有限性、程序性和机械性,即计算思维表达结论的方式必须是一种有限的形式,而且语义必须是确定的,在理解上不会出现因人而异、因环境而异的歧义性;同时又必须是一种机械的方式,可以通过机械的步骤来实现。
自动化是将抽象、抽象层以及它们之间的关系机械化。机械化的可行性是由精确和严格的符号、模型所保证的。自动化意味着可以用一些形式的“计算机”去解释抽象化。最显而易见的一种类型的“计算机”就是“机器”,换言之,一种具备数据处理、存储和传递的物理设备。但它还可以是人或人机结合体。当我们把这种“机器”当作是人和计算机的结合体时,我们可以进一步探究当人拥有计算机时的那种合为一体的数据处理能力。例如,人类在语法分析和图像阐释方面更胜于计算机;但计算机在执行特定类型的指令方面要比人类快得多,处理的数据量也要比人类能够处理的大得多。
计算思维中的抽象与自动化可在多个层面予以体现,简单而言,可划分为以下三个层面。
机器层面——协议(抽象)与编码器/解码器/转换器等(自动化),解决机器与机器之间的交互问题,“协议”是机器之间交互约定的表达,而编解码器等则是这种表达即协议的自动实现、自动执行。
人—机层面——语言(抽象)与编码器/解码器/转换器等(自动化),解决人与机器之间的交互问题,“语言”是人与机器之间交互约定的表达,而编译器/执行器等则是该种语言的自动解释和自动执行。
业务层面——模型(抽象)与执行引擎/执行系统(自动化),解决业务系统与计算系统之间的交互问题。
最能完美阐释“计算思维的本质是抽象和自动化”的实例是二进制。计算机的内部计算都是以二进制为基础来实现的,任何信息都可以被表达成0和1。“0和1”的思维体现了“语义符号化→符号计算化→计算0(和)1化→0(和)1自动化→分层构造化→构造集成化”的思维,体现了软件与硬件之间最基本的连接纽带,体现了如何将“社会/自然”问题转变为“计算问题”,再将“计算问题”转变成“自动计算问题”的基本思维模式。所以说“二进制”是最基本的抽象与自动化机制,是最重要的一种计算思维。
2.计算思维的特征(www.xing528.com)
①计算思维是概念化思维,不是程序化思维。计算机科学并不仅仅是计算机编程。像计算机科学家那样去思维,意味着远不止能用计算机编程,还要求能够在抽象的多个层次上思维。
②计算思维是根本的技能,不是刻板的技能。根本技能是每一个人为了在现代社会中发挥才能所必须掌握的。刻板技能意味着机械地重复。计算思维不是简单、机械地重复;然而,具有讽刺意味的是,当计算机像人类一样思考之后,思维可就真的变成机械的了。
③计算思维属于人的思维方式,不是计算机的思维方式。计算思维是人类求解问题的一条途径,但绝非要使人类像计算机那样思考。计算机枯燥且沉闷,人类聪颖且富有想象力。计算机之所以能求解问题,是因为人将计算思维的思想赋予了计算机。例如,递归、迭代等算法都是在计算机发明之前早已提出,人类将这些思想赋予计算机后,计算机才能计算。计算思维的过程可以由人执行,也可以由计算机执行,只不过人的计算速度远不及计算机。
④计算思维是数学思维和工程思维的互补与融合。计算机科学在本质上源自数学思维,因为像所有的科学一样,其形式化基础是构建在数学之上的。计算机科学又从本质上源自工程思维,因为人们建造的是能够与实际世界互动的系统,基本计算设备的限制迫使计算机科学家必须进行工程性思考,不能只是纯数学性思考。构建虚拟世界的自由使我们能够设计超越物理世界的各种系统。
⑤计算思维是思想,不是人造物。计算思维不是以物理形式呈现并时刻触及我们生活的软硬件等人造物,而是设计和制造软硬件中包含的思想,是计算这一概念用于求解问题、管理日常生活,以及与他人交流和互动的思想。
3.计算思维的基本方法
从方法论的角度来说,计算思维的核心是计算思维方法。总的来说,计算思维方法有两大类:一类是来自数学和工程的方法,如来自数学的黎曼积分、迭代、递归,来自工程思维的大系统设计与评估的方法;另一类是计算机科学独有的方法,如操作系统中处理死锁的方法。
计算思维并不是一种新的发明,而是早已存在的思维活动,是每一个人都具有的一种技能。在日常生活中,计算思维的案例无所不在。例如,学生早晨去学校时,把当天需要的东西放进背包,这就是预置和缓存;某人弄丢钱包后,沿走过的路寻找,这就是回溯;为什么停电时电话仍然可用?这就是失败的无关性和设计的冗余性。
计算思维方法很多,下面是周以真教授具体阐述的七大类方法。
①约简、嵌入、转化和仿真等方法,把一个看似困难的问题重新阐释成一个我们知道问题怎样解决的思维方法。
②递归方法,也是一种并行方法,既能把代码译成数据又能把数据译成代码的方法、多维分析推广的类型检查方法。
③抽象和分解的方法,用来控制庞杂的任务或进行巨大复杂系统设计;基于关注点分离的方法,即将复杂问题做合理的分解,再分别仔细研究问题的不同侧面,最后综合各方面的结果,合成整体的解决方案。
④选择合适的方式去陈述一个问题,或对一个问题的相关方面建模,使其易于处理的思维方法。
⑤按照预防、保护及通过冗余、容错、纠错的方式,并从最坏情况进行系统恢复的一种思维方法。
⑥利用启发式推理寻求解答,也即在不确定情况下的规划、学习和调度的思维方法。
⑦利用海量数据来加快计算,在时间和空间之间、在处理能力和存储容量之间进行折中的思维方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。