计算机与编程语言简史
1 在石头上计数的时代
远古时代,人类采果狩猎为生。食物的分配需要在石头、骨头或贝壳上刻画计数,这大概是最原始的数字存储方式。后来,人类发明了结绳计数,这种计数方法甚至到了20世纪仍被在深山里生活的少数民族中使用。值得注意的是,汉字“数”的象形意,就是右边的右手在整理计算左边一根木棍的许多绳结,很形象地表示了结绳计数的过程。
如果说以肌肉能为代表的生物能让人类得以果腹,那么以火为代表的化学能则直接让人类登上了食物链的顶端。随着人口的剧增和事务的增多,计数和计算的能力越来越重要,毕竟合理的分配才能激发众人的活力,占天卜地、预测吉凶也需要算力的提升。
2 地理环境与语言文字、思维方式、计算符号
地理环境对人类语言文字乃至思维方式的发展具有重大的影响。古代大河流域较为固定的农业文明最早产生的文字几乎都是象形的表意文字,如公元前1300年左右中国黄河流域产生的甲骨文和公元前3400年左右西亚两河流域产生的楔形文字。表意文字读音和含义分离,需要更多的是人的联想能力和归纳能力,学习成本较大,最初用于占卜祭祀。不怎么流动的下层民众不需识字、靠口语即可应付日常生活。古代游牧民族和地中海沿岸的海洋民族因为移动性较强,更多采用了表音文字,如公元前1500年左右腓尼基人在埃及圣书体象形文字基础上开发了用来表音的腓尼基字母,因为字母简单易写、总数较少,便于普通民众学习,在地中海沿岸广为流传,最终演化出了希伯来字母、阿拉伯字母、希腊字母、拉丁字母等众多表音字母。由表音字母左右排列组成的表音文字简单易学,扩展性好,但是失去了象形表意的功能,需要更多的是人的逻辑能力和推理能力。
不同的地理环境造就不同的文明,不同的文明产生不同的语言符号,不同的语言符号反过来又影响了文明的发展,特别是影响文字符号使用者思维方式的发展。从某种程度上来说,表意文字加强了东方人善于归纳的思维习惯,表音文字加强了西方人善于推理的思维习惯。从公元前6世纪孔子编订的《诗经》到汉赋、唐诗、宋词、元曲,中国的文学在想象联想中展现风采。从公元前4世纪欧几里得(Euclid)发表《几何原本》一展演绎之美,到牛顿发表《自然哲学的数学原理》,再到爱因斯坦提出相对论,欧洲的自然科学在逻辑推理中绽放光芒。
计算符号也是语言文字符号的一部分,符号越简单,越能得到广泛使用和发展,相比表意文字,表音文字更容易变形出简单的计算符号来,事实上如今被广泛使用的计算符号,确实大多是由西方的数学家发明设计而来。
3 科技进步与在“齿轮”上运行的计算机
地生万物,或许地理环境才是决定生命和文明形态最底层的力量。正如《赡养上帝》中指出的那样,在不同环境的星球播撒生命的种子,漫长的岁月终会带来不同的文明。欧洲由于地形所限,始终没有形成统一的大国,自古以来战乱不断,加上一次又一次鼠疫的摧残,人力资源不足,需要更多地依靠工具的力量,科技的需求更为旺盛,科技发展进步的动力更为充足。
科技的发展离不开社会的需求,也离不开专业人才特别是旷世奇才的创新创造。1088年,被誉为“世界大学之母”的博洛尼亚大学(University of Bologna)在意大利城市博洛尼亚诞生。它起源于教会学校,最初是一种学生、老师组成的行会组织。从此,科技发展需要的专业人才、旷世奇才有了培养和发挥作用的场所。
在古罗马帝国灭亡后,古希腊、古罗马的自然科学知识被阿拉伯文明的百年翻译运动消化吸收并进一步发展,后来随着十字军东征再次传入西欧各国,并伴随着新型大学的成长加速发展,最终形成了现代西方科学。从某种意义上来说,近代以来日本和中国的发展,在很大程度上也有赖于通过类似阿拉伯百年翻译运动的形式吸收利用西方科技文明的努力。(PS:英语还是要好好学啊!)
计算机的发展始终与经济社会的发展和科技文明的发展相辅相成。在新大陆发现后,西欧国家通过奴隶贸易积累了巨大的财富,最终引发了工业革命,进一步促进了现代科技的进步,真正的机械力量时代终于到来,依靠机械进行自行计算的条件已经具备。
在机械时代以前,东汉时期的中国使用算盘进行计算,而更早的古希腊也出现过类似的工具。通过拨弄算珠,人类的计算能力有了很大进步,足以应付日常的计算工作,但人类对自动计算机器的梦想一直都在。
1642年,法国数学家布莱士·帕斯卡(Blaise Pascal )设计出了一种能靠机械自动完成加减法计算的机器。
由直而曲,量化极小。如何快速准确计算曲线的长度和曲线图形的面积一直困扰着人类,也推动着数学的发展,直到牛顿、莱布尼茨发明微积分后,此类问题才迎刃而解。微积分的发明和发展带来了自然科学的大发展,也带来了计算量的暴增,人类更加迫切需要机器来辅助计算。
1671年,发明微积分的德国数学家戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz)改进了帕斯卡计算器,发明了一种乘法器,但只能自动完成乘除法运算,不能进行微积分运算。
不管是写文字还是写数字,总要一个书写位置接着一个书写位置地写。在一个书写位置可能写出的不同数字总数就是进制的数量。或许因为人的手指总数为10个,十进制一直以来是人类最容易接受的进制,其他的进制只是在特定环境下使用。据说是受易经中卦型符号的启发,莱布尼茨发明了二进制,为进一步发展计算机指出了正确的方向。
莱布尼茨去世两百年后,1834年,43岁的英国发明家查尔斯·巴贝奇(Charles Babbage)受到提花织布机的启发,发明了一台能完成简单微积分计算的差分计算机,让人们仿佛看到了通过机械自动完成复杂运算的曙光。受到鼓舞,巴贝奇精心设计了更为复杂的分析机的方案,试图通过精密的机械齿轮运算出复杂数学方程的答案,一同出发的还有著名英国诗人拜伦的独生女——阿达·洛芙莱斯(Ada Lovelace),这位数学女王给巴贝奇的分析机事先写好了世界上的第一套算法。然而,直到巴贝奇80岁逝世,也未能造出理想的分析机,阿达的算法终究也没有用上。
巴比奇设计的差分机和分析机属于模拟计算装置,之后,热力学第二定律的发现者开尔文勋爵(Lord Kelvin,原名威廉·汤姆逊William Thomson)在1876年、迈克尔逊干涉仪的发明者阿尔伯特·亚伯拉罕·迈克尔逊(Albert Abraham Michelson)在1887年,都研制出了更精确的分析仪,也都属于模拟计算装置,尽管设计精巧,但对计算能力的提高有限。
通过设计精密机械装置,在“齿轮”上运行的模拟计算机在计算能力上似乎已走到了尽头,计算机的革命需要新的理论和新的物质材料。
4 再回在“石头”上计数的时代
这种新的理论就是图灵设计的图灵机理论和香农开创的信息论。1936年,图灵找到了一个抽象的数学模型,可以替代人们完成数学运算,被称为大名鼎鼎的图灵机。目前全世界所有的计算机,都是图灵机的变形。1938年,香农在他的硕士论文《继电器与开关电路的符号分析》中深刻指出,所有的加减乘除运算都可变成等价的布尔运算,而布尔运算可以由简单的开关逻辑电路实现,使通过电子管和晶体管制造电子计算机成为可能。
这种新的物质材料就是后来的半导体材料,被称为人类在轮子之后最重要的发明。早在1833年,法拉第就发现了一种半导体材料(硫化银),但没有发现应用的价值。1883年,爱迪生发现了二极管似的导电现象(即爱迪生效应),但没有解释出具体的原理。1904年,英国物理学家和电气工程师约翰·安布罗斯·弗莱明 (John Ambrose Fleming )解释了爱迪生效应的具体原理,并发明了世界上第一只电子二极管。1906年,美国发明家李·德·福斯特(Lee de Forest )在电子二极管基础上制成了世界上第一个三极真空管,使电子管具有了放大信号的功能,并用于马可尼刚刚开启的电报事业,为人类彻底打开了无线电世界的大门。此后的40余年,电子管器件一直在电子技术领域里占据统治地位,直到1947年12月,美国贝尔实验室的肖克利、巴丁和布拉顿发明了锗晶体管,将人类带入半导体微电子时代。
战争给人类带来苦难,但也客观推动了人类文明的进步,正如人类历史上的其他重要发明那样,现代计算机的发明也是第二次世界大战的产物。
以电报为代表的无线通讯工具,在后来的两次世界大战中发挥了重要作用,而飞机、导弹的发明,同样在两次世界大战中的作用日益凸显,并直接改变了以后人类世界战争的形态。
1903年,美国的莱特兄弟发明了飞机并成功试飞,开启了人类的飞行时代,随即在世界掀起了一股飞行热。1908年的一天,27岁的匈牙利美国籍犹太人西奥多·冯·卡门(Theodore von Kármán)亲眼目睹了法国飞行先驱亨利·法尔芒一次打破记录的飞行,从此将毕生精力投入到了航空航天气动力学研究,最终成为一代航空航天大师,并培养了日后对新中国有深远影响的三名中国弟子–钱伟长,钱学森和郭永怀。气动力学是研究飞机和导弹运动的基础,涉及的计算量巨大,迫切需要一种高效的计算机器。
1937年-1941年,美国科学家阿塔纳索夫和贝里设计了世界上第一台电子计算机,被称为阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,简称ABC计算机)。从ABC的发明开始,人类的计算开始从模拟向数字改进,而“埃尼阿克(ENIAC)”的发明则标志着计算机正式进入了数字时代。
1946 年,匈牙利裔美国籍科学家冯·诺依曼(John von Neumann,1903~1957),提出将计算机分成输入、输出、控制器、运算器和存储器,实现了图灵机的具体化方案,领导研制出了世界上第二台电子计算机“埃尼阿克(ENIAC)”,英文全称为Electronic Numerical Integrator and Calculator,意思是电子数字积分器与计算器,从它的名字可以看出,ENIAC最初是为美国军方计算炮弹和导弹的弹道用的。
由于采用巨量电子管等器件组成,ENIAC是台庞然大物,且性能不佳。在1948年以后,性能更优越、便于小型化的晶体管一经发明,便迅速取代了电子管成为了计算机的主要器件。1958年IBM公司制造出了世界上第一台使用晶体管的计算机。
由于晶体管的主要原材料是硅,可以从石头和沙子中获得,能以极低的单位成本被大规模生产,在1970年之后,计算机进入以“摩尔定律”为指引的大规模和超大规模集成电路时代,性能不断提升,价格更为亲民,应用领域从科学计算、事务管理、过程控制逐步走向家庭娱乐。如今,电脑和手机早已飞入寻常百姓家,信息时代也悄然到来。
颇具意味的是,人类似乎再次回到了在“石头”(硅半导体的来源)上计数的远古时代。
5 机器的语言与人类的语言
由于目前世界上所有的计算机底层,都是采用香农指出的半导体原件存储计算数据,所有存入计算机的数据都被转化为0和1来存储,所有复杂的计算也都被转化为0和1的布尔运算。
在计算机的孩提时代,人类只能通过二进制的机器语言与之交流。机器语言十分复杂低效,随后人类开发出了汇编语言和更高级的电脑语言,可以用人类的语言中的英语,进行符合自然语言逻辑的更高效编程,当然程序最终运行时,还是都要转化为机器语言。
1957年4月,IBM公司的约翰·巴克斯(John Warner Backus)领导的13人小组推出了世界上第一套高阶电脑语言,FORTRAN语言(Formula Translation的缩写,意为“公式翻译”)。
随后出现了多种计算机高级语言,1960年,艾伦·佩利(Alan J Perlis)和彼得·诺尔(英语:Peter Naur)等人发明了ALGOL60语言(ALGOrithmic Language 60,也被称为A语言),1963年,英国剑桥大学在ALGOL60语言基础上推出了CPL(Combined Programming Language)语言。1967年,剑桥大学的Matin Richards在CPL语言的基础上提出了Basic Combined Programming Language(BCPL),1970年,美国贝尔实验室的Ken Thompson在BCPL的基础上改进出了B语言(取自BCPL中的第一个字母),用于书写UNIX操作系统。三年后的1973年,同样是贝尔实验室的D.M.Ritchie将B语言进一步改进为C语言(取自BCPL中的第二个字母)。
1967年,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言,它是ALGOL 60的一个超集。1979年,美国贝尔实验室的Bjarne Stroustrup通过借鉴Simula67语言的面向对象设计思想(OOP,Object Oriented Programming),将C语言改进为C++语言。
1995年,Sun公司在C++的基础上推出了Java语言,后被广泛用于Web开发、桌面应用开发。
1989年,荷兰程序员吉多·范罗苏姆(Guido van Rossum)发明了Python语言,如今在大数据和人工智能领域应用广泛。
2000年,微软公司发布了C#语言,与 Java语言类似,可用于快速编写基于MICROSOFT .NET和.Core平台的应用程序,但技术生态暂不如Java良好。
时至今日,C语言、C++语言、Java语言、Python语言和C#语言仍是电脑语言界的五巨头,阿达·洛芙莱斯(被称为程序员的“祖师奶”)的开创计算机程序事业也终于开枝散叶,欣欣向荣起来。
6 未来的计算机
现代计算机的原理早已由信息论的创始人香农明确指出,而在硅半导体组成的集成电路中以电路通断来表示0和1两个布尔值,和通过量子的两个不同的量子状态来表示0和1两个布尔值并没有本质区别,但是由于一个量子的可以同时具有两个量子态,量子计算机的计算速度和存储容量远超现代普通的电子计算机。
1982年,理查德·菲利普斯·费曼(Richard Phillips Feynman,1918-1988)提出了最早的量子计算机构想。2000年之后,量子计算机的研究迎来了大发展阶段。近两年的标志性研究是,2019年9月,谷歌公司成功研制了包含53个量子比特的量子计算原型机——“悬铃木“(Sycamore)、2020年12月4日,中国科学技术大学的潘建伟团队成功构建了包含76个光子的量子计算原型机–“九章”。
使用“九章”量子计算机求解数学算法,高斯玻色取样,只需200秒,而如果使用目前世界最快的超级计算机却要用6亿年。虽然量子计算机在特定的数学求解领域已经显示了令人惊叹的算力,但是离处理通用性一般事务的目标,还有很长的路要走。
遇事不决,量子力学。或许不远的将来,真的可以创造出可以决策一切事务的超级量子计算机,正如《超新星纪元》中的超级计算机“中华量子”那样,届时的人类文明又将是怎样令人惊叹的场景呢?