附录A 计算机的0和1

附录A 计算机的0和1

1.0 一切皆是映射

计算机领域中的所有问题,都可以通过向上一层进行抽象封装来解决.这里的封装的本质概念,其实就是”映射“。

就好比通过的电子电路中的电平进行01逻辑映射,于是有了布尔代数,数字逻辑电路系统;

对01逻辑的进一步封装抽象成CPU指令集映射,诞生了汇编语言;

通过汇编语言的向上抽象一层编译解释器,于是有了pascal,fortran,C语言;
再对核心函数api进行封装形成开发包(Development Kit), 于是有了Java,C++ 。

当然这里这么说,不是那么准确,意思是这个意思。

从面向过程到面向对象,再到设计模式,架构设计,面向服务,各种软件理论五花八门,但万变不离其宗——你要解决一个怎样的问题?你对这个世界的本质认知是怎样的?你的业务领域的逻辑问题,流程等等。

Grady Booch:我对OO编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性的方式。这个问题可以追溯到亚里士多德:您把这个世界视为过程还是对象?在OO兴起运动之前,编程以过程为中心--例如结构化设计方法。然而,系统已经到达了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统--我认为,这才是面向对象编程运动的真正胜利。


“天地和而万物生,阴阳接而变化起。” 《荀子·礼记》

由于涉及任务名字较多,特给出简要索引。为了行文简洁,本章节用代号标注人名。比如Z代号Konrad Zuse。本章节人名代号缩写:

A

Ada Lovelace, 阿达·洛芙莱斯,1815年12月10日-1852年11月27日,世界上第一个程序员。英国诗人拜伦之女,数学家。计算机程序创始人,建立了循环和子程序概念。为计算程序拟定“算法”,写作的第一份“程序设计流程图”,被珍视为“第一位给计算机写程序的人”。为了纪念阿达·奥古斯塔对现代电脑与软件工程所产生的重大影响,美国国防部将耗费巨资、历时近20年研制成功的高级程序语言命名为Ada语言,它被公认为是第四代计算机语言的主要代表。

B

Charles Babbage,查尔斯·巴贝奇(1792—1871),计算机先驱。

P

Blaise Pascal,布莱士·帕斯卡, 1623年6月19- 1662年8月19日,法国数学家、物理学家、哲学家、散文家。

16岁时发现著名的帕斯卡六边形定理:内接于一个二次曲线的六边形的三双对边的交点共线。17岁时写成《圆锥曲线论》(1640),是研究德札尔格(Girard Desargues)射影几何工作心得的论文,包括上述定理。这些工作是自希腊阿波罗尼奥斯(Apollonius of Perga)以来圆锥曲线论的最大进步。1642年他设计并制作了一台能自动进位的加减法计算装置,被称为是世界上第一台数字计算器,为以后的计算机设计提供了基本原理。他的论文手稿对莱布尼茨(Gottfried Leibniz)建立微积分学有很大启发。

L

Gottfried Wilhelm Leibniz,莱布尼茨,1646年7月1日-1716年11月14日,德国哲学家、数学家,历史上少见的通才,被誉为十七世纪的亚里士多德。在1716年《致徳雷蒙先生的信——论中国的自然神教》中讲述了自己的二进制源于《易经》的过程和途径。

T

Alan Turing, 阿兰•麦席森•图灵(Alan Mathison Turing,1912.6.23—1954.6.7),英国数学家、逻辑学家,计算机之父。

Z

Konrad Zuse,康拉德·楚泽1910年6月22日-1995年12月19日。德国工程师。他提出了计算机程序控制的基础概念,于1941年Zuse首次设计完成了使用继电器的程序控制计算机。

1.1 二进制01与易经阴阳

二进制数是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。

19世纪爱尔兰逻辑学家B对逻辑命题的思考过程转化为对符号0,1的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

二进制的发现直接导致了电子计算器和计算机的发明,并让计算机得到了迅速的普及,进入各行各业,成为人类生活和生产的重要工具。

二进制的实质是通过两个数字“0”和“1”来描述事件。在人类的生产、生活等许多领域,我们可以通过计算机来虚拟地描述现实中存在的事件,并能通过给定的条件和参数模拟事件变化的规律。二进制的计算机几乎是万能的,能将我们生活的现实世界完美复制,并且还能根据我们人类给定的条件模拟在现实世界难以实现的各种实验。

但是,不论计算机能给我们如何多变、如何完美、如何复杂的画面,其本源只是简单的“0”和“1”。“0”和“1”在计算机中通过不同的组合与再组合,模拟出一个纷繁复杂、包罗万象的虚拟世界。

附录A 计算机的0和1_第1张图片
计算机世界与现实世界

在易经中,我们前辈圣贤们都毫不怀疑地肯定阴阳是构成世界的基础,他们不断地使用阴阳进行组合和再组合来描述世界万物的变化规律——八卦。

附录A 计算机的0和1_第2张图片
八卦

这里我们来利用二进制对阴阳概念进行置换,用“阴”来表示“0”,用“阳”来表示“1”,数的二进制就等同于自然界的“阴”和“阳”,就是自然界中存在的两种对立统一的两种“能量”。

二进制的“0”和“1”通过计算机里能够创造出一个虚拟的、纷繁的世界。自然界中的阴阳形成了现实世界的万事万物。

所以自然世界的“阴”“阳”作为基础切实地造就了复杂的现实世界,计算机的“0”和“1”形象地模拟现实世界的一切现象,易学中的“卦”和“阴阳爻”抽象地揭示了自然界存在的事件和其变化规律。

所以说,编程的本质跟大自然创造万物的本质是一样的。

另外,阴阳就是在同一个属概念“对立统一(全集U)”下的两个种概念“阴(集X)和阳(集Y)”之间的一种不相容关系。阴阳的内涵互相否定,一个概念“阴集”肯定对象阴的属性,而否定“阳”的属性;另一个概念“阳集”则以否定阴概念所肯定的属性而肯定“阳”的属性;

阴阳的外延互相排斥

X∩Y=0

而又互补

X∪Y=U=1
1-Y=X

其总和等于它们最邻近的属概念(对立统一整体)的外延,即两个种概念阴阳外延的和或并

X+Y=X∪Y=U

OK,这就是我们熟知的,数理逻辑里面的所谓的bool代数了。

布尔代数起源于数学领域,是一个用于集合运算和逻辑运算的公式:〈B,∨,∧,¬ 〉。其中B为一个非空集合,∨,∧为定义在B上的两个二元运算,¬为定义在B上的一个一元运算。
通过布尔代数进行集合运算可以获取到不同集合之间的交集、并集或补集,进行逻辑运算可以对不同集合进行与、或、非。

1.2 向上抽象封装一层

一切皆是映射。

人的生命只有一次。生命太短暂,所以不要去做一些重复无聊的事情。能交给计算机做的,就尽量交给计算机去做。此乃编程的滥觞之地。

纵览整个计算机的发展史,最重要的思想非“抽象”莫属。

一层层的抽象封装了实现的细节,计算机开疆扩土,南征北战,发展到了今天蔚为壮观的互联网,云计算,大数据,机器智能的时代。

同时,也使得程序员写代码,从最初的拿着符号表在纸袋上打孔,到使用近似自然语言的高级程序设计语言来编程,以及当今各种库,api,框架,集成开发工具集,智能化的编码提示,代码生成等等技术,使得我们现在程序员,能更多的去关注问题本身以及逻辑的实现。

从只有少数技术人会用的命令行的操作系统unix、dos,到人性化的GUI图形界面操作系统,以及移动互联网时代的智能设备,计算机越来越融入到人类生活的方方面面。

正如解决数学问题通常我们会谈“思想”,诸如反证法、化繁为简等,解决计算机问题也有很多非常出色的思想。思想之所以称为思想,是因为“思想”有拓展性与引导性,可以解决一系列问题。

解决问题的复杂程度直接取决于抽象的种类及质量。过将结构、性质不同的底层实现进行封装,向上提供统一的API接口,让使用者觉得就是在使用一个统一的资源,或者让使用者觉得自己在使用一个本来底层不直接提供、“虚拟”出来的资源。

计算机中的所有问题 , 都可以通过向上抽象封装一层来解决。

比如,在OSI参考模型中,计算机之间的信息传送问题被分为7个较小而且更容易管理的问题,每个小问题都由模型中的一个层来解决。模型中的每一层都解决一个不同的问题。整个OSI/RM模型共分7层,从下往上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。如下图所示:

附录A 计算机的0和1_第3张图片
the **Open Systems Interconnection model **(**OSI model**)
附录A 计算机的0和1_第4张图片
封装
附录A 计算机的0和1_第5张图片
解封装

其中,从最底层的物理链路层层层向上封装抽象, 解决了复杂的网络通信的问题.

计算机领域内的任何问题,基本都可以通过向上封装一层来解决.
同样的,任何复杂的问题, 最终总能够回归最本质,最简单.

1.3 编程之初:从机械计算机到能接受指令的计算机

1.3.1 机械计算机简史

计算机,它的始祖应该是计算工具,这正是人类发明这种机器的初衷。英语里“Calculus”(计算)一词来源于拉丁语,既有“算法”的含义,也“石”的意思。远古的人们用石头来计算捕获的猎物,石头就是他们的计算工具。人类最早的计算工具是手指(英语单词“Digit”释义: 数字,手指,足趾)。中国古人常用“结绳”来帮助记事,“结绳”当然也可以充当计算工具。石头、手指、绳子…… 这些都是古人用过的“计算机”。

中国商周时代使用的计算工具“算筹”,是一种竹制、木制或骨制的小棍。古人在地面或盘子里反复摆弄这些小棍,通过移动来进行计算,从此出现了“运筹”这个词,运筹就是计算。

附录A 计算机的0和1_第6张图片
附录A 计算机的0和1_第7张图片

中国古代科学家祖冲之最先算出了圆周率小数点后的第6位,使用的工具正是算筹,这个结果即使用笔算也很不容易求得。

算筹在使用中,一旦遇到复杂运算常弄得繁杂混乱,让人感到不便,于是我们中国古人又发明了一种新式的计算机——算盘。

附录A 计算机的0和1_第8张图片
算盘

珠算盘最早可能萌芽于汉代,定型于南北朝。它利用进位制记数,通过拨动算珠进行运算:

上珠每珠当五,下珠每珠当一,每一档可当作一个数位。

打算盘必须记住一套口诀,口诀相当于算盘的“软件”。算盘本身还可以存储数字,使用起来的确很方便,它帮助中国古代数学家取得了不少重大的科技成果,在人类计算工具史上具有重要的地位。

15世纪以后,随着天文、航海的发展,计算工作日趋繁重,迫切需要探求新的计算方法并改进计算工具。1630年,英国数学家奥特雷德使用当时流行的对数刻度尺做乘法运算,突然萌生了一个念头:若采用两根相互滑动的对数刻度尺,不就省得用两脚规度量长度吗?他的这个设想导致了“机械化”计算尺的诞生。

附录A 计算机的0和1_第9张图片
计算尺

算尺(slide rule),或计算尺,通常指对数计算尺是一个模拟计算机,通常由三个互相锁定的有刻度的长条和一个滑动窗口(称为游标)组成。在1970年代之前使用广泛,之后被电子计算器所取代,成为过时技术。

1850年以后,对数计算尺迅速发展,成了工程师们必不可少的随身携带的“计算机”,直到20世纪五、六十年代,它仍然是代表工科大学生身份的一种标志。

凝聚着许许多多科学家和能工巧匠智慧的早期计算工具,在不同的历史阶段发挥过巨大作用,但也将随着科学发展而逐渐消亡,最终完成它们的历史使命。

附录A 计算机的0和1_第10张图片

1623 年,德国科学家契克卡德制造了人类有史以来第一台机械计算机,这台机器能够进行六位数的加减乘除运算,并能通过铃声输出答案,通过转动齿轮来进行操作。

附录A 计算机的0和1_第11张图片
帕斯卡的加法器

1642 年,法国科学家帕斯卡发明了著名的帕斯卡机械计算机,首次确立了计算机器的概念。他制造出的机械式加法机是一种系列齿轮组成的装置,外形像一个长方盒子,用钥匙旋紧发条后才能转动,利用齿轮传动原理,通过手工操作,来实现加、减运算。

帕斯卡是真正的天才,他在诸多领域内都有建树。后人在介绍他时,说他是数学家、物理学家、哲学家、流体动力学家和概率论的创始人。凡是学过物理的人都知道一个关于液体压强性质的“帕斯卡定律”,这个定律就是他的伟大发现并以他的名字命名的。他甚至还是文学家,其文笔优美的散文在法国极负盛名。可惜,长期从事艰苦的研究损害了他的健康,1662年英年早逝,死时年仅39岁。他留给了世人一句至理名言:“人好比是脆弱的芦苇,但是他又是有思想的芦苇。”

全世界“有思想的芦苇”,尤其是计算机领域的后来者,都不会忘记帕斯卡在浑沌中点燃的亮光。1971年发明的一种程序设计语言——PASCAL语言,就是为了纪念这位先驱,使帕斯卡的英名长留在电脑时代里。

帕斯卡逝世后不久,与法兰西毗邻的德国莱茵河畔,有位英俊的年轻人正挑灯夜读。黎明时分,青年人站起身,揉了一下疲乏的腰部,脸上流露出会心的微笑,一个朦胧的设想已酝酿成熟。虽然在帕斯卡发明加法器的时候,他尚未出世,但这篇由帕斯卡亲自撰写的关于加法计算机的论文,却使他似醍醐灌顶,勾起强烈的发明欲。他就是德国大数学家、被《不列颠百科全书》称为“西方文明最伟大的人物之一”的莱布尼茨(G.Leibnitz)。

莱布尼茨在1674年造出一台更完美的机械计算机。

帕斯卡的计算机经由莱布尼茨的改进之后,人们又给它装上电动机以驱动机器工作,成为名符其实的“电动计算机”,并且一直使用到本世纪20年代才退出舞台。尽管帕斯卡与莱布尼茨的发明还不是现代意义上的计算机,但它们毕竟昭示着人类计算机史里的第一抹曙光。

1.3.2 能接受指令的计算机

用一堆计算器、计数器、存储器、译码器,造出一个能接受指令的计算机器。小心翼翼的通上电,“醒来吧,孩子”,就像给他赋予生命一般,这些破铜烂铁奇迹般的苏醒过来,按照你给他的指令,完成你想要的工作,人世间没有比这样的事情更让人神往了。

B和他的分析机和Ada的算法

1822年巴贝奇花了近10年时间,构想、研制成功了第一台差分机,它能根据设计者的安排,自动完成高次多项式的整个运算过程,它的存储器是由齿轮组构成,“差分机”是程序设计思想萌芽阶段的产物。研制第二台差分机转眼又是10年,在研制过程中,他一味追求尽善尽美,对于多种部件的要求精益求精。可是这种近乎苛刻的想法与要求,超越了当时的技术水平,但却为英国机床工业的发展培训了不少工程师。巴贝奇花费了政府资助他的17000英镑和他本人的13000英镑仍然没有制成,这台差分机研制中途夭折,被送进了伦敦博物馆。
  
面对挫折和失败,巴贝奇没有气馁,他从法国用穿孔卡片操纵机械化织机上的织图装置得到启发,1833年又开始构思定名为“分析机”的新自动化计算机,其开创性在于这是历史上第一台具有运算器、存储器、控制器、输入输出器等基本部件的通用计算机,并且巴贝奇在设计中还创造性地提出了自动制定指令序列的概念,计算机借此可不需要人的帮助从而上一步运行到下一步。

1834 年,巴贝奇提出了分析机的概念,他设计的分析机共分为三个部分:堆栈,运算器,控制器。堆栈是保存数据的齿轮式寄存器。运算器是对数据进行各种运算的装置。控制器是对操作顺序进行控制,并对所要处理的数据及输出结果加以选择的装置。阿达·奥古斯塔为这台分析机的计算拟定了“算法”,写作了一份“程序设计流程图”。

为了该机的设计、研制,巴贝奇耗尽了毕生的精力。该“分析机”的设计方案是以齿轮为元件,以蒸气机为动力。他设计了30多种“分析机”的方案,并设计有2000多张详细的机器图纸和几万个零件的图纸,开创了大规模自动化计算机研究之先河。但他关于计算机的设计思想当时却没有几个人能够理解,而且又受到当时技术条件极大限制。近四十年的研制,“分析机”终未能制成。巴贝奇在生命垂危之际留言道:“任何人不惜步我的后尘,而能成功地建造一个包括了数学分析的全部执行部门的机器,……我就敢把我的声誉交给他去评价,因为只有他才能充分鉴赏我努力的实质及其成果的价值。”1871年巴贝奇遗憾地离开了人世,他留下厚厚的图纸,零散的“分析机”部件和一大堆笔记被收藏在伦敦博物馆。
  
巴贝奇知音难觅,但当时英国著名诗人拜仑的女儿爱达·拉夫拉夫斯基伯爵夫人却能理解巴贝奇的工作,由于她杰出的数学天赋在英国剑桥大学就拜巴贝奇为师,不仅深深理解巴贝奇的思想并全力协助研制“分析机”,而且在经济上也作了最大支持。可惜爱达早逝,但她在程序设计上的突出贡献,被誉为世界第一位程序员,她的名字也与现代计算机程序设计语言Ada紧紧地联系在一起。
  
巴贝奇去逝前的著名留言被后来制成自动程序控制的机电式计算机—MARK—I的研制者美国科学家霍华德·艾肯博士所引用,并将其写到MARK—I的说明书上,因为艾肯博士的研制完全是受到当时保存良好的巴贝奇科研资料启发,艾肯还认为巴贝奇的这段话简直就是对他的说的,巴贝奇设计思想不仅启发后人,而且他当时要制成“分析机”的理想,也于二十一世纪九十年代,由英国政府花巨款,在伦敦将它按原样设计制造成功并作展示,人们无不为之设计的巧妙而加以赞叹,巴贝奇无愧于自动化计算机研制的先驱。

Z和他的机器Z1-Z4

1945年,就在盟军攻陷法西斯德国的首都柏林后不久,从阿尔卑斯山区偏僻小镇欣特斯泰因传来一个惊人的消息:一个粮仓地窖里发现了德国研制的先进计算机。

两名英国情报官闻讯匆匆赶到了欣特斯泰因。在攻占该镇的法国士兵带领下,打开了粮仓地窖大门。地窖里面确实存放着一台机器。情报官凑上前仔细打量,这机器怎么看也不像是德国的“先进计算机”,充其量是某个印刷厂遗弃的排字机。两人互相对视着苦笑了一阵:“德军再傻,也不会把这么重要的设备放在交通极为不便的山区。”

过了很长时间之后,西方计算机界终于认识到,这台貌不惊人的机器,的确是当时最先进的计算机,它研制成功的时间,要比美国、英国的同类发明更早;更重大的意义还在于,它是最先采用程序控制的数字计算机。这台机器的名称是Z-4,它的发明人就是Konrad Zuse。

Z在父母的帮助下,把家中的起居室隔出一间,改造成“实验室”兼“制造厂”,孤身一人开始了漫长的研制生涯。

Z认为,计算机最重要的部分不一定是计算本身,而是过程和计算结果的传送和储存。

因此,他把研究的重点放在存储器上,设计了一种可以存储64位数的机械装置——数千片薄钢板用螺栓拧在一起的笨重部件,体积约1立方米——然后与机械运算机构连接起来。朋友们都不太懂他想干什么,只能提供有限的帮助,例如,帮他用切割设备加工了数以百计的金属片。其它的薄钢板,只好靠手锯在圆钢上一片一片锯下来。以这种简陋的条件,1938年,Z居然完成了一台可编程数字计算机Z-1。他花光了仅有的几千马克,还是无法买到更合适的零件。因此,Z-1计算机实际上是一台实验模型,虽然可以完成3×3矩阵运算过程,但始终未能投入实际使用。

Z-1计算机最大的贡献是第一次采用了二进制数,在薄钢板组装的存储器中,楚泽用一个在细孔中移动的针,指明数字“0”或“1”。这是受到L的启发,他后来发表的研究报告,副题就是“向莱布尼茨致敬”。这台机器也采用了“穿孔带”输入程序,不过不是纸带,而是35毫米电影胶片;数据则由一个数字键盘敲入,计算结果用小电灯泡显示。由于纯机械式Z-1计算机性能不理想,第二年,楚泽的朋友给了他一些电话公司废弃的继电器,楚泽用它们组装了第二台电磁式计算机Z-2, 这台机器已经可以正常工作。

1941年,第三台电磁式计算机Z-3完成,使用了2600个继电器,用穿孔纸带输入,实现了二进制数程序控制。

程序控制的想法虽然过去也有人提倡,但Z是把它付诸实施的第一人。

Z-3能达到每秒3~4次加法的运算速度,或者在3~5秒内完成一次乘法运算。1942年,在紧张研究的间隙里,他写作了世界上第一个下国际象棋的计算机程序。

Z-3正常工作了3年。1944年,美国空军对柏林实施空袭,Z的住宅连同Z-3计算机一起被炸得支离破碎。在德国法西斯即将毁灭前夕,Z于1945年又建造了一台比Z-3更先进的电磁式Z-4计算机,存储器单元也从64位扩展到1024位,继电器几乎占满了一个房间。为了使机器的效率更高,Z甚至设计了一种编程语言Plankalkuel ,这一成果使楚泽也跻身于计算机语言先驱者行列。

因害怕再次被炸,Z把Z-4搬来搬去,四处转移,最后带着它飞往德国南部,搬到了阿尔卑斯山区欣特斯泰因小镇,于是才有了前面那一幕。

希特勒战败后,Z辗转流落到瑞士一个荒凉的村庄,一度转向研究计算机软件理论,最早提出了“程序设计”的概念。1949年,楚泽把他的Z-4计算机安装在瑞士苏黎士技术学院,并且一直稳定地运行到1958年。这时,美、英计算机界才相信德国有位建筑工程师,比他们更早地研制出程序控制数字计算机的事实。目前,在慕尼黑一家博物馆里,仍然存放着一台Z-3原型机,只是它已经无法正常运作。

随后,Z创办了“Z计算机公司”,1958年研制出电子管通用计算机Z-22R,距离第一台电子管通用计算机ENIAC诞生已经过去了12年之久。

如果Z不是生活在法西斯统治下的德国,他可能早就把Z型计算机系列升级为电子计算机,世界计算机的历史将会改写。事实上,早在1938年,Z和他的朋友已经在考虑用2000个电子管和其他电子元件组装新的计算机。当他在战后听说美国宾夕法尼亚大学早已研制出电子管计算机的消息,不禁感叹地说:“我所能做的,仅仅是摇摇头而已。”读来,令人唏嘘不已。历史往往不由人决定。真实的历史,总是比人们想象中的要残酷许多。

图灵(T)和他的机器恋人克里斯托弗

1931年图灵进入剑桥大学国王学院,毕业后到美国普林斯顿大学攻读博士学位,二战爆发后回到剑桥,后曾协助军方破解德国的著名密码系统Enigma,帮助盟军取得了二战的胜利。

1936年,图灵向伦敦权威的数学杂志投了一篇论文,题为“论数字计算在决断难题中的应用”。在这篇开创性的论文中,图灵给“可计算性”下了一个严格的数学定义,并提出著名的“图灵机”(Turing Machine)的设想。

附录A 计算机的0和1_第12张图片
示意图
附录A 计算机的0和1_第13张图片
图灵机工作原理图

“图灵机”不是一种具体的机器,而是一种思想模型,可制造一种十分简单但运算能力极强的计算装置,用来计算所有能想象得到的可计算函数。

“图灵机”与“冯•诺伊曼机”齐名,被永远载入计算机的发展史中。

1950年10月,图灵又发表了另一篇题为“机器能思考吗”的论文,成为划时代之作。也正是这篇文章,为图灵赢得了“人工智能之父”的桂冠。

你能理解《模拟游戏》中Turing对克里斯托弗(电影《模仿游戏》图灵将这台机器命名为克里斯托弗)的一往情深吗?

附录A 计算机的0和1_第14张图片
图灵机:克里斯托弗

小结

《易传·系辞上传》:“易有太极,是生两仪,两仪生四象,四象生八卦。” 如今的互联网世界,其基石却是01(阴阳),不得不佩服我华夏先祖的博大精深的智慧。

最初, 人们使用物理的或逻辑的二进制机器指令来编写程序, 尝试着表达思想中的逻辑, 控制硬件计算和显示, 发现是可行的;

接着, 创造了助记符 —— 汇编语言, 比机器指令更容易记忆;

再接着, 创造了编译器、解释器和计算机高级语言, 能够以人类友好自然的方式去编写程序, 在牺牲少量性能的情况下, 获得比汇编语言更强且更容易使用的语句控制能力:条件、分支、循环, 以及更多的语言特性: 指针、结构体、联合体、枚举等, 还创造了函数, 能够将一系列指令封装成一个独立的逻辑块反复使用;

逐渐地,产生了面向过程的编程方法;

后来, 人们发现将数据和逻辑封装成对象, 更接近于现实世界, 且更容易维护大型软件, 又出现了面向对象的编程语言和编程方法学, 增加了新的语言特性: 继承、 多态、 模板、 异常错误。

为了不必重复开发常见工具和任务, 人们创造和封装了容器及算法、SDK, 垃圾回收器, 甚至是并发库;

为了让计算机语言更有力更有效率地表达各种现实逻辑, 消解软件开发中遇到的冲突, 还在语言中支持了元编程、 高阶函数, 闭包 等有用特性。

为了更高效率地开发可靠的软件和应用程序, 人们逐渐构建了代码编辑器、 IDE、 代码版本管理工具、公共库、应用框架、 可复用组件、系统规范、网络协议、 语言标准等, 针对遇到的问题提出了许多不同的思路和解决方案, 并总结提炼成特定的技术和设计模式, 还探讨和形成了不少软件开发过程, 用来保证最终发布的软件质量。 尽管编写的这些软件和工具还存在不少 BUG ,但是它们都“奇迹般地存活”, 并共同构建了今天蔚为壮观的互联网时代的电商,互联网金融,云计算,大数据,物联网,机器智能等等的“虚拟世界”。


参考资料

http://amuseum.cdstm.cn/AMuseum/xinxiguan/htm/skzljisuanji.htm

你可能感兴趣的:(附录A 计算机的0和1)