2. 算法 (图灵机到底是个啥 ?)

                                                                                     《目录》

 


嘿,本篇博客翻译的是《Computation Thinking》第二章 --- 计算方法 。

计算方法,简称为 “算法”,下文将使用简称。

如果直接写英文的句子,就是我看不懂的;第二章有几句话,我的确没懂。

最后一段,是原文的提炼总结。因为直白翻译表达不出对 “图灵机” 的理解,要是觉得【译者补充】会打断思路可以直接跳过,但内容就很少很少了。

第一章主要是聊 “计算机系”;第二章主要是讲 “图灵机”。

 


事情是这样的

          当彼得10岁的时候,他的数学老师告诉他,TA 能读心术。

          “ 您是怎么做到的 ? ” ,彼得问。

          老师说:“来,我展示给你看。想一个数字。乘以 2,加 8,除以 2,减去这个数。现在把注意力集中在答案上。我知到。答案是 4。”

          彼得非常吃惊,一直要老师教他怎么做。

          “ 好吧 ”,老师说,“ 数学技巧而已。假设 X 是你的数字,计算表达式 (2X+8)/2-X=4,其实这时你想的初始数字被减去了,答案总是方程右边的 4”。

译者补充:

          小时候,我也玩过类似的计算。

          把出生的月份和日期这两个数字相加,得到一个数 ,如 6 + 17 = 23;

          把这个数乘以 18 ,如 23 * 18 = 414;

          把所得结果的各个数字相加 ,如 4 + 1 + 4 = 9;

          最后得到的数字一定是 9 (如果不是 9 就再次重复将所得结果各个位数相加,即可得到 9),因为,如果一个数能被 9 整除,ta 的各位数字相加之和就一定能被 9 整除。

  

          其实,这就是一个算法。算法化就是标准化和流程化。

          KFC 大家知道吧,里面的薯条?、炸鸡?,等等食物,正常人只要经过简单的培训,都能做出来。KFC 其实有自己的研发中心,TA始终在测试不同的口味和营养搭配,但是因为 TA 会算法化,只要定型一个,就可以推广到所有。

          算法化就是标准化和流程化,也是整个机械化大生产的内涵,这个小节都是为了凸显这点。

 

          这扯淡的读心术......   

            许多类似的算法,已经流传了很多年。

            最早的算法之一是,在公元前 300 年左右从希腊数学家欧几里得教给许多学生的。             

            他给出了一种求两个数的最大公约数(GCD)的算法。

            欧几里得发现了一个规律:两个数的 GCD 除以 ta 们的差,再不断的用较大的数替换 ta 们的差,直到两者相等为止。

            如,GCD(48,18) = GCD(30,18) = GCD(12,18) = GCD(12,6) =GCD(6,6)

             GCD(48, 18) = 6。

             译者补充:

size_t GCD( size_t a , size_t b )
{
	size_t gcd; 
	while( a != b )    // a = b 时,就是最大公约数
	{
		gcd = a > b ? (a -= b) : (b -= a);
		// a、b 谁大减谁
	}
	return gcd;
}

           书中举的的确是相减的算法,而不是 欧几里得相除法(中文叫 辗转相除)。

           这个,怎么举的例子不是欧几里得相除法,而是相减,我其实是懵懂的;相减就比枚举高效一些(枚举是每次减一,而相减法是每次减当前最小的数)。

// 欧几里得相除法
// 定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
size_t Euclidean( size_t a , size_t b )
{
	size_t mod = a % b;
	while( mod )
	{
		a = b;
		b = mod;
		mod = a % b;
	}
	return b;
}

          相除要比相减快很多。

         现在, 扩展的欧几里得算法也被加到了 RSA 等加密算法里面,具体参见百度百科:《扩展的欧几里得算法》。

 

         最早的算法还有,希腊的埃托尼亚筛法,一个用来寻找所有质数的算法。

         原理就是:划掉所有 2 的倍数,接着是所有 3 的倍数,而后是 5 的倍数,以此类推,具体参见博客:《数论》。

 

         希腊人也对于计算图形的面积感兴趣。

         他们这样做的方法是用简单的方格或三角形来平铺形状,而后依次减小形状的尺寸,直到原始形状几乎完全被 ta 们填满。

         这种方法首先记录在公元前 400-350 年,是两千年后现代微积分的前身。    

         许多数学家构造了许多收敛速度快且容易操作的计算公式。

         Math books are filled with tables of series; mathematicians used them to replace long series with closed forms.

         如, \frac{\pi}{4}=1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-... ,ta 给出了一种计算 \pi 值的方法,当包含更多的项时,会具有更高的精度。

         1680年,牛顿和莱布尼兹提出的微积分,完善了通过无限级数的计算逼近物体和曲线的思想。

译者补充:我初次接触 “极限” 这个概念,来自一个题目:1 = 0.999\cdots,可以:先看《集合论》后观 《学什么数学》;还有一个很好的例子是刘徽的割圆术 。

         The idea was to represent geometric forms and continuous curse with very small components that interacted locally-for example, fill the form with small boxes or model the curve as a series of tiny segments bound to their immediate neighbors with attractive forces.

         Then find a larger quantity such as area or length by adding the components.

         When the size of the components was allowed to approach zero, the expressions from these infinite sums would be exact.

         The rule of local interaction was represented as a derivative and the summation as an integral.

         Motivated by calculus, mathermaticians evaluated functions by dividing time and space into small increments enumerated as a "grid" and interatively calculated the value of a function at each grid point.

         这种方法对物理学来说是一个福音,其中许多物理现象的数学模型表示为在有限网格上可计算的微分方程。

         Another famous mathematical method was the Gaussian elimination for solving systems of linear equations.

         高斯在1 9 世纪 80 年代中期使用了这种方法,尽管中国数学家在公元前 179 年就知道。

         在计算机图形中使用这种算法来实时渲染三维对象,效果很好呢。

         呐,这些例子是前辈留给我们的,这些算法很丰富也很实用。

         通过对这些算法的研究,我们可以得出结论,许多算法是相当复杂的。

         这些算法是作为一组步骤,最初,这些步骤是由数学家完成的,但只要有足够的改进,任何人遵循步骤来完成。

         一个重要但微妙的点是,算法的步骤必须是明确的。步骤越明确,普通人(非数学家)就越容易上手。

译者补充:

         第一次接触编程,书的开篇就介绍了算法的介绍、特征、要素,不过太抽象了当时我没看懂,今天我翻译到这才明白,学习知识最好是跟着历史学一遍,跳过了很多东西就不会重视那些基本的概念,因此我们学习知识时,最好追根溯源......

         比如,现在问您:“链表、二叉树、图,这些数据结构是如何产生” ,产生的内容不会没有意义,如果您知道了 TA 是如何出现的,您就知道这知识该如何运用了,而不是只是知道这个东西。

[起源]

        线性表这种抽象的数据结构并非起源于科学计算本身,而是计算机早期的应用——办公自动化。

        在商业上,报表是一种最常见的数据组织形式,而在管理上,最多见的则是人员或者物资的记录等等。TA 们都可以被抽象为线性的数据,然后按照 1、2、3、4、5 的顺序排列出来,因此,很有必要设计一种抽象的数据结构概括所有这些顺序排列和储存的数据,TA 就是线性表。

        而线性表本身是一个抽象的概念,在计算机中则是通过很多种具体的方法实现的。

        最开始的就是数组,ta 是一串被编号且固定了大小的单元,方便查找,可一旦需要插入一条新的数据则需要修改太多的内容。因此为了弥补这一个不足,科学家发明了链表的线性数据结构,放弃了编号,只需要将每一个被排列的数据分别指向其前后即可,这样的话,插入一个数据就很容易了,但因为没有编号,所以加大了查找的时间量;后来又发明了哈希表,增删改查都比数组快,不过空间占比大而且哈希表存储数据只能一个一个存储,而不是向数组一次可以顺序存储很多项。

     

      发明二叉树是为了让计算机更好的判断真假、比较大小、排序、挑选最大值这一类操作。

      首先,二叉树都有一个根,这个根在顶端;其次,从根开始有且只有两个分叉,并且二叉树的树叉还可以在分叉。只发明二叉树是因为数学上可以证明 俩 个分支和 N 个分支是等价的。

      二叉树排序的作用。其核心在于按顺序占据根部,而后层层的比较分左右,来确定最终的位置,排出数据的相对大小就是一个排序的过程。

      变异的二叉树,也是为了让二叉树适应不同的环境。

      如哈夫曼树,主要是对应于哈夫曼编码,即信息论里的最短编码。这样可以保证平均的访问时间最短。当然,哈夫曼编码的条件是必须事先知道每个码出现的频率。

      如红黑树,主要是为了防止二叉树一个枝子太长,另一个太短。比如一边50层,另一边三层,这样效率就不高了。使用红黑树,可以保证各个枝子的长度基本相等。当然,代价是需要不断维持平衡。

   

       图的发明,是为了解决 “哥尼斯堡七桥”。具体参见博客:《爬虫导论》。

 

       显然,这些抽象的数据结构,都是从具体的生活环境中根据数据的特点抽丝剥茧后,总结出来的,应用在具体的场景可能是最优的数据存储、管理方式了。

 

        从 1650 年开始,一些数学家开始寻找机器来执行基本的操作方法。

        因为有些方法太复杂,不容易记住;有些方法需要多次迭代,很难让粗心的人毫无差错地完成这些方法,而机器会更快,也不出错。

        为了制造机器,数学学者和发明家们必须设计出一些方法,比如定位轮子和齿轮,用物理量来表示数字。

        他们还必须为逻辑步骤 (如条件跳转或循环),另外设计。

        今天,数据和逻辑步骤的表示是计算机思维的重要核心元素。

        在本章的其余部分,我们将更深入地描述这些方面。

译者补充:科学家发现所有程序可以化为三种结构构成:顺序结构、分支结构和循环结构。而顺序结构和分支结构中的每段代码只运行一次;循环结构中的代码的运行时间要看循环的次数,具体参见博客:《渐进记号》。

         

 


消除直觉的探索

      在数学史上发展起来的算法是为了帮助 工程师、商人和科学家计算数字。

      古代商人发明了数字系统、会计系统和算盘等工具来辅助他们的业务。

      古代工程师发明了建造战争武器和民用的建筑的方法。

      所有人都寻求处理涉及大量数字的计算的可靠方法,好让他们的人工制品能预期交货并无误。

      因为涉及的数字实在太大,这些工作都需要有专家来处理。

      The experts developed rules-of-thumb, heuristics, leared hunches, and other intuitions that enabled them to solve problems that the uninitiated could not sovle at all.

       现代术语 “直觉” 指的是,专家根据类似的情况的广泛经验迅速阐明解决方案的行动。

       “直觉” 是专业知识的体现,是新发现的推动者。

        但,这似乎是自相矛盾,数学和逻辑的许多工作不都是为了从日常计算和逻辑推理中消除直觉吗 ??

        常规的计算任务要求尽可能简单和 “机械化”,以便始终产生准确的结果,而不管由谁进行计算。

        纵观历史,数学家们一直在寻求将专业知识逐步地融入到人们几乎没有受过任何训练就能遵循的程序中。

        从日常工作中消除直觉并不意味着淘汰专家,而是让大量非专家掌握他们的专业知识。

        现在的符号信息表示、符号处理、明确计算步骤、基本算法、计算同步和系统错误检查等现代思想,都是几百年来的继承。

        通过展示计算的机械化是许多算法发展过程中的一个关键特征,这些技术思想早在现代计算机之前就已经成为许多其 ta 思维的重要组成部分。

         计算机思维的许多特点和实践支持许多领域的算法设计,而不仅仅是当今的计算机科学。

译者补充:

          应用于个人生活中。

          比如递归,人的精力有限,因此要从自己想干什么从后往前推自己应该学什么、做什么,不要随波逐流乱学一通。

          比如分治,对于一个大问题,要有拆解的想法。如果您去旅游的话,可以分成 办签证、买机票、订酒店、准备食宿、景点的选择、天气、装备(如照相机)。

          当然,在现实生活里遇到问题,找到问题与算法相同点,也就可以类比到具体的算法里;看看这个算法采用的计算机思维是什么,反推自己的问题;比如快速排序是最快的排序算法之一,您可以根据快速排序的原理来快速挑人吗 ?

         


数值的表示方法

          计算机思维,依赖于以数字或其他符号呈现在世界上的事物的过程。

          表示的是一种符号在一个商定的框架中的排列,每一个表示都代表着某种东西。

          我们经常使用数字来表示数量,如人口普查数据、商业会计分类账或工程测量,但数字并不是唯一的代表性。

          科学家和工程师用方程来代表现象,例如,行星运动的微分方程。

          TA 们还表示为带有机械人工制品的物体,如建筑物模型、风洞模型或行星模型、方程,这些模型支撑着测量、实验和结果的可重现性。

          在计算机时代,非数字符号的表示已经变得无处不在,是通过计算机可以处理的数据表示形式,如,Java程序语言、图像的位图或音乐的声带。

           一些怀疑主义不相信这些算法,觉得数值的计算太容易在计算的参数和变量的精度上产生微小的误差。

           的确,今天的计算机也有同样的问题,如在 C/C++ 语言中数据类型的精度可能只有 32 位(int) 或者 64 位......

译者补充:

         首先计算机资源有限,如 32 位的无符号整数的最大值是 42 亿,在程序设计中除非是超大型程序,存储的数据极多,不然不会发生溢出;在运算大量数据时,我们往往会使用高精度计算和存储避免溢出;还有发明数据结构,就是为了能根据数据的特点,高效管理数据。

          比如能快速构造出三角形、金字塔等造型;如果您学过画画,应该知道好的作品。在画前都会有一个构图,如《梅杜莎之筏》,而不是直接画。

       上图是已经画好的《梅杜莎之筏》,其实再画之前作者在心中已经勾勒出了基本的几何图形:

        写一个程序,就相当于是作一幅画。因此,也有两种方法。

        一种是直接就用一行行代码去实现功能,这是低水平的做法,有些时候看上去做得快,实际上 bug 会很多,需要回头修补。

        另一种就是理解需求之后,抽象出具体的基本几何形状这样的基础块,然后用算法将这些模块进行组合,写出符合需求的程序。
        这些基本模块也像绘画和雕塑中作为轮廓的几何图形一样,需要根据画面需求平滑过渡,而不是照搬照抄。这些程序中基本的几何图形,就是计算机的数据结构。

        如果说一幅画是点的有机组合,几何图形反映出点之间常用具体的关系,那么在计算机科学中,数据就等同于点,数据结构就是数据中常用的具体关系。

 

 

 


推理规则

           推理规则围绕明确的步骤设计计算,但仍不足以使人相信计算是没有错误的。

           这些步骤必须串在一起,以遵循计划。

           在计算的任何阶段,计划必须毫不含糊地告诉我们下一步是什么。

           下一步应该是一个练习逻辑。

           长期以来,数学和哲学的分支一直关注逻辑。

           我们能提供一种方法来发展长的推理链来解决问题并验证给定的推理链是有效的吗 ?

           作为计算中的同行,逻辑学家寻求将推理正规化和自动化的方法。

           16 世纪的 笛卡尔 和 莱布尼茨 等哲学家寻求一种语言,这种语言可以完全形式化。

           他们的目的是建立一种标准的方式来表达概念和推理规则,以确定陈述的真实性或真实性。

           根据他们的观点,这样的一种思维模式 “将终结所有领域的分歧,因为每一场争论都可以通过纯粹的逻辑来解决。朝着这个梦想的进展是缓慢的。在19世纪取得了突破。乔治·布尔 被这些精心设计的数学符号所吸引。” 

译者补充: 

         前辈们对计算的钻研可不仅仅是算法,哪怕是没有计算机的时代,那些哲学家就已看得很远了。

         17 世纪尚未发生工业革命,但是启蒙运动已经开始了,牛顿的理论,让 “理性” 在知识分子中萌芽与绽放。

         就在这时,笛卡尔 和 莱布尼茨 就有一个设想。

                :“既然计算可以变成流程化、算法化的操作,那能不能把人的推理,也给机械化呢 ?” ??

         只要哲学家讨论同一个问题,基本就没有一个标准的答案,真的是谁说的都有道理,可参见博客:《大航海时代的海贼王》。

         像万物起源、偏见、谬误、真善美... ,因此 笛卡尔 和 莱布尼茨 觉得让人去推理,是非常靠不住的。

         人会有各种主观的判断、有很多情绪化的东西。 

         那如果我们能把一切理论的推理都给标准化、流程化、机械化,不管是谁来操作,只要能严格遵守规则,就一定能推出客观的、正确的判断,这岂不就解决了一切争论吗?这不就是通往真理之路吗?

         这种不带任何感情、价值观的计算,正是计算机思维的第一原则:把人的情感和主观判断排除在计算过程之外。

         当然,计算机不能完成的事情也有很多,比如之前说的图灵停机问题;数学上还有一个 “哥德尔不完备性定理”,也证明了 笛卡尔 和 莱布尼茨 的那个梦想,在数学上是不可能实现的,对 “哥德尔不完备性定理” 感兴趣可以参见博客,《集合论》。

         不过,人类也因此在 自动化 方面取得了很多很多的进展。

         后世的学者发明了像 “布尔代数”、“谓词逻辑” 这些理论的准备,信息论祖师爷 香农 发明了用电路实现通用逻辑运算的方法 ,现在我们有了运算速度无法想象的快的计算机……

         今天真的有很多理论推导,可以交给计算机去做,计算机甚至也能证明数学定理。

         想具体了解的话,参见博客: 《布尔代数》,不过还没更新完。

         

 


机械化计算

       这一章,都是为 图灵 大神准备的。为了能表述清楚,并不打算翻译原文。

       图灵 的故事被拍成了电影,《模仿游戏》。

        请问,信息时代最大的科技成就是什么 ??

               :当然是 computer ,生活在现代的我们基本离不开 computer 了。

         而 “图灵” 作为 Father of Computer,就和 “神” 一样,图灵从理论上证明了计算机是可以实现的,以及在二战时破解德军的机器加密快速结束战争,挽救了很多平民百姓,加密解密可参见博客:《密码学》。

 

         无数的书籍都讨论过人的思维、人的意识,或者人是如何思考的等话题,但这些讨论大都是定义模糊的泛泛而谈。图灵有一种强烈的愿望,把人的思维用逻辑和数学过程描述出来。

          大脑有 860 亿个神经元,每个神经元都和周围几万到十几万的神经元有连接,仅仅是描绘这个静态的物理连接情况,对当前的我们都几乎是不可能做到的。

          图灵是如何能做到用逻辑和数学描绘出来脑的动态过程呢 ??

          图灵的方法不是要大而全,而是只选取脑的一部分特征用科学模型描述。比如说在一个计算过程中,中间会出现很多数字,那么这些数字都可以视为单一的状态,这些状态都是各自独立的,而且对于一个生物大脑来说,同时存在于脑中的状态数量是有限的,所以图灵就把正在运算的大脑,当做一种数量有限、且状态间互相离散的机器。

          图灵不是还原一个完整的生物大脑,而只在乎某一部分可以用逻辑和数学准确描绘的大脑,看看用逻辑和数学搭建起来的这个思维机器能不能做运算,能不能学东西,能不能自行找到任意两个事物间的关联等……

 

          22 岁的图灵写出了《论可计算数及其在判定问题上的应用》,人们之后就简称这篇文章为《可计算数》,TA 从数学上定义了著名了“图灵机”。

          图灵机的基本思想:

  •           使用机器代替人脑的数学运算
  •           任何复杂的计算都可以分解为有限个的基本运算

          复杂的计算就是指那些非常复杂的算法,如语音视频的编解码。

          不过,图灵机很长时间以来一直只存在于论文中,只是一个抽象的可以实施自动计算的思维模型,而 TA 的实体 15 年之后才出现。

          所谓图灵机,简单说就是把现实问题转换成 0、1、0、1 这样的数学符号,能够进行逻辑运算以求解的系统,自然界大量问题都是可以进行这样的转化的,因此我们的计算机不光能做数学运算,还能帮我们解决很多现实问题。

 

图灵机的组成

 

  1. 在一排无限长的纸带(图中的TAPE),上面划着格子,格子只有两种样式,一种是里面打了孔的(二进制的 0),一种是没打孔的(1);这些格子和计算机的内存一样都有编号,从 0,1,2,... ∞,因为纸带是无限长的,编号是计算机科学中最重要的思想之一,不再复述了;纸带主要是为了存储数据。
  2. 现在有一个小小的窗口(图中的HEAD),可以顺着纸带来回的挪动,不但可以查看格子打没打孔,还可以改变打孔与没打孔的状态;主要功能是读写数据。
  3. 一个状态寄存器。作用是保存图灵机当前的所处状态,图灵机的所有可能状态是有限的。
  4. 及一套工作规则(图中的TABLE),能根据当前机器所处的状态以及当前窗口(HEAD)所指的格子里的打没打孔来确定窗口的下一步动作,并改变状态寄存器的值,令机器进入一个新的状态。

 

 

那在这几种操作下,怎么让这套设施实现一些具体的运算呢 ??

比如计算 2 + 3 ,小窗口应该怎么挪动呢 ??

或者我们已经约定了只有这几种操作的情况下,还能进行多么复杂的计算呢 ??

这个就是图灵机的想法,坚持追踪计算机的每一位、每一个状态的变化;图灵机(数学模型)具体的物理实现就交给了物理学家了......

 

      人工智能、机器学习,乃至量子计算机都没有突破计算机的基础,也就是图灵机的思路;量子计算机比传统计算机的差异在我的认知中主要是在密码学;一个是加密解密,另一个就是随机数;传统计算机很难在规定时间破解 RSA 加密算法、以及只能产生伪随机数,而量子计算机虽然也是基于图灵机,但的确可以产生真随机数,使用量子计算机破解 RSA 加密算法,量子计算机、RSA加密、量子加密可参见博客:《密码学》。

      但量子计算机的硬件目前很难配备好,因此,光学计算机、DNA 计算机会先问世。

  •      量子计算机基本上不是样机就是测试芯片,还有很长的路要走;
  •      神经网络计算机已能完美模仿人类联想思维的技能,缺陷就在于,非常“迅速”,直奔结论,因而常常不准确。
  •      光子计算机是对现有计算机的补充,相对于量子计算机来说,可能会更快实现实用化;
  •      DNA 生物计算机也有望极大降低大规模运算的成本,特别是大规模储存的成本。 

 

      至于图灵是如何想到图灵机的,我能从思维上解析一次。

      一般人想问题的方式是先做一两个能解决简单问题的计算机,而后越做越复杂。实际上直到图灵之前,计算机的发展就是沿袭这个思路进行的,这如同我们小时候学习数数,都是从 1,2,3,4 ,... ,100,10000,100000,... ;而图灵呢,直接看到了尽头 "无穷" 这个数,前面的一种思维在计算机里叫:“递推”;后一种叫:“递归”。

      而图灵想问题的方式恰恰和常人相反(“递归”)。在上个世纪30年代中期,图灵在思考三个问题。

 

  • 第一个问题,世界上是否所有数学问题都有明确的答案?
  • 第二个问题,如果有明确的答案,是否可以通过有限步骤的计算得到答案?
  • 第三个问题才是,对于那些有可能在有限步骤计算出来的数学问题,能否有一种假想的机械,让 TA 不断运动,最后当机器停下来的时候,那个数学问题就解决了?

        
      具体到计算机这件事,图灵首先考虑的是“数学问题是否都有明确的答案”。因为这个问题不解决,就辛辛苦苦去解题,最后可能发现无解,一切努力都是在浪费时间。

      存在答案或者说能找到答案不等于能够在有限步骤之内解决这个问题,因此图灵考虑的第二件事就是划定一个范围,把计算机能解决的问题的范围又缩小了。

      当然,这个范围划定以后,就要设计一种有效的,通用的办法,保证按照这个办法做事,最终能够找到答案。

      第三个问题,就是图灵一生关注的。

      而图灵设计的这种方法,是一个数学模型,后人称呼 ta 为图灵机,图灵机的本质是可计算理论。

      图灵机划定了一条今天所有计算机(包括运行人工智能程序的)所能解决问题的理论极限,这就如同热力学第二定律为热机的效率划定了极限一样。

      今天所有的计算机,包括全世界正在设计的新的计算机,从解决问题的能力来讲,都没有超出图灵机的范畴。

      到此为止,图灵其实为今天的计算机和很长时间以后的未来计算机所能解决的问题划了一条不可超越的边界。

      图灵机提出至今已经 80 年了,全世界的 IT 行业依然没有超出 TA;以后也很难有别的代替,就像小麦和水稻一样,从很早之前人类选了类似的狗尾巴草的食物(就是现在的小麦),作为主粮而没有选别的淀粉食物;从此,人类的主粮也没有再变了,图灵机也是如此。

      

      第二章结语:人类并不是先有了计算机才有的计算机思维,而是早就有了计算机思维,在那儿等着计算机的出现。                 

        

       
            

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值