群发资讯网

读人机沟通法则:理解数字世界的设计与形成01机器循环运行

1. 计算1.1. 计算是一个无形的陌生宇宙,它无限广阔,同时包含无限多的细节1.2. 它是一种不遵循物理定律的原材料,

1.       计算1.1.         计算是一个无形的陌生宇宙,它无限广阔,同时包含无限多的细节1.2.         它是一种不遵循物理定律的原材料,在某种意义上为互联网提供了远超于电的力量1.3.         它是一种无处不在的媒介,由经验丰富的软件开发人员和科技行业控制,他们对计算的掌控程度甚至可能威胁国家主权1.4.         今天我们使用的计算机不仅是由电力和数学驱动的,还是由我们的每个动作和它们通过我们的使用过程实时了解到的信息驱动的2.       计算机擅长通过循环重复自己2.1.         在一件事上,计算机可以比现实世界中的任何人类、动物或机器做得更出色:重复2.2.         一台运行程序的计算机只要接通电源就可以处于循环状态并一直运行,永远不会失去能量和热情2.3.         是一种超机械机器,不会像真正的机械那样经历表面磨损,也不会受到重力的影响,因此它能够完美地运行2.3.1.           这一特性是计算机与生机勃勃、躁动不安、吱吱作响的世界的首要区别2.4.         让计算机一遍又一遍地做同样的事情,看似是我们在占它不够聪明的便宜2.5.         但作为人类,我们必须运用自己的智慧,把重复转化为代码中的一种艺术形式3.       硬件可见,软件不可见3.1.         现实世界中的机器是由电线、齿轮和软管组成的,这些还比较容易理解3.2.         数字世界中的机器是由“比特”或“0和1”组成的,这些都是我们的肉眼无法看见的3.3.         软件是可见的吗?是,也不是3.3.1.           一方面,程序代码是软件的核心,你可以阅读它,但这就像把制作蛋糕的菜谱和蛋糕本身混淆了那样3.3.2.           软件是机器内部通过程序代码运行的东西—它是蛋糕本身,不是制作蛋糕的菜谱3.3.2.1.            这个概念上的飞跃可能不容易理解3.4.         计算机代码所代表的才是真正的潜力所在3.4.1.           你在这一页上读到的文字会在你的脑中激发无形的想法,所以你经历的并不是文字本身,而是隐藏在文字背后的无形想法3.4.2.           你知道你的想象力被适当的文学能量(我希望包括本书)滋养时会变得多么强大,你的大脑也会被赋予力量去做你以前认为不可能做到的事情3.4.3.           这就是一个精心设计的计算机程序通过手指轻敲或双击被激活时发生的事情—一种替代的、无形的意识瞬间显现,就像给完全干燥的海绵注水的神奇时刻3.5.         赛博空间3.5.1.           “赛博空间”是威廉·吉布森(William Gibson)在1984年的小说《神经漫游者》(Neuromancer)中创造的一个术语3.5.2.           计算机可以在“赛博空间”中自由想象3.6.         在互联网出现之前,有一个计算机可以轻松进入的下层宇宙3.6.1.           而今,由于互联网和网络设备的普及,这个宇宙的扩张已经远远超出预测3.7.         不幸的是,机器的世界本质上是不可见的3.7.1.           一种理解机器的方法是成为一名大师级计算机程序员,但不是每个人都想这么做3.7.2.           在你对机器感到过于兴奋之前,让我们通过回顾计算机还是完全可见的人类的时期,来拥抱更多的不可见3.8.         和任何一台高效的计算机一样,人类的任何历史都会不断重复,直到它被视为事实4.       人类是最早的计算机4.1.         计算有一个共同的祖先:我们4.2.         最早的“计算机”(computer)并非指机器,而是与数字打交道的人类4.2.1.           这一定义可以追溯到1613年,英国作家理查德·布雷斯韦特(Richard Braithwaite)将“有史以来最优秀的算术专家”描述为“有史以来最准确的计算机”4.3.         不仅传统计算存在不可见的问题,人类计算也同样存在不可见的问题4.4.         与今天我们使用的计算机相比,人类计算者速度相对较慢,有时前后不一致,偶尔还会犯今天的电子计算机永远不会犯的错误4.4.1.           在电子计算机取代人类计算者之前,世界只能将就着用人类计算者4.5.         图灵机4.5.1.           源自图灵博士1936年的开创性论文《论可计算数及其在判定问题上的应用》(“On Computable Numbers, with an Application to the Entscheidungsproblem”)4.5.2.           该论文介绍了一种描述一台可行的“计算机器”的方法,包括在长纸带上进行写入和读取数字这两种基本操作,以及在这条纸带的任何地方写入或读取数字的能力4.5.3.           与许多人类计算者在纸上计算不同,图灵设想了这样一种机器,它可以在无限长的纸条上不知疲倦地计算数字4.5.3.1.            以同样的热情进行1次、365次,甚至10亿次计算,没有任何犹豫、停顿或抱怨4.5.4.           正是人类,发明了能消除某些人为错误的图灵机,让我们能够用许多奇妙的语言与机器沟通4.6.         ENIAC4.6.1.           为美国陆军建造的电子数值积分计算机(Electronic Numerical Integrator and Computer,以下简称ENIAC)成为实现图灵理论的第一批可用的计算机之一4.6.2.           制造ENIAC的重点在于硬件的打造4.6.2.1.            制造ENIAC的重点在于硬件的打造4.6.3.           被认为“次要”的计算机编程工作4.6.3.1.            由弗朗西丝·伊丽莎白·斯奈德·霍伯顿(Frances Elizabeth Snyder Holberton)、弗朗西丝·比拉斯·斯宾塞(Frances Bilas Spence)、露丝·利希特曼·泰特鲍姆(RuthLichterman Teitelbaum)、简·詹宁斯·巴蒂克(Jean Jennings Bartik)、凯瑟琳·麦克努尔蒂·莫奇利·安东内里(KathleenMcNulty Mauchly Antonelli)和马琳·韦斯科夫·梅尔策(Marlyn Wescoff Meltzer)组成的人类计算者团队完成4.6.3.2.            长期以来ENIAC的女性计算者们都没有得到认可4.6.3.3.            尽管从历史上看,我们在计算机上犯的错误大多在计算本身,但我们现在需要直面那些嵌入计算的错误的人类假设,比如历史上无数女性在计算领域扮演的角色被忽略的事实4.7.         随着计算可以在比ENIAC更强大的计算机上运行,人类计算者逐渐消失,计算行为本身让位于撰写用于在机器可以轻松读取的打孔卡上进行计算的指令4.8.         20世纪50年代末,格蕾丝·霍珀博士(Dr. Grace Hopper)发明了第一种“人类可读”的计算机语言,这让人们更容易与机器对话4.9.         戈登·摩尔(Gordon Moore)预测,计算机的计算能力大约每年会翻一番,于是所谓的“摩尔定律”(Moore's Law)诞生4.10.     人类总会犯错—无论当我们做机器的工作时,还是当我们让机器代替我们犯错时5.       递归5.1.         递归是最优雅的自我重复方式5.2.         递归带给理解它的人的感觉—一个看似简单,但带有实际转折的循环5.3.         感受递归魔力的另一种方法是通过一个名叫Unix的专属操作系统,叛逆的程序员在20世纪80年代试图完全重写它5.3.1.           GNU不是Unix(GNU's Not Unix)5.4.         实物隐喻,就是俄罗斯套娃5.4.1.           一个套娃里有一个和它一模一样但较小的套娃,以此类推5.4.2.           创下世界纪录的最复杂的一组俄罗斯套娃,也只有51个5.5.         递归不同于循环的蛮力表达,后者更像流水线上的传送带5.5.1.           有数学头脑的人可以利用递归的想法创造优雅的概念表达5.6.         递归通过一种非常简洁的方式来表达复杂的思想,这些思想在本质上可以是无限且极其矛盾的6.       循环6.1.         循环坚不可摧,除非程序员出错6.1.1.           计算机可以孜孜不倦地循环6.2.         计算过程一旦启动,就会从被激活的那一刻起以最高速度运行6.2.1.           如果遇到某个错误,它会立即停止,连同它所处的整个世界一并消失6.2.2.           计算机被迫停止的这一瞬间,是一场彻头彻尾的灾难6.3.         专业的多米诺骨牌玩家有自律的耐心来修复和重做这一切,程序员也必须以完全相同的态度行事,他们需要以同样干脆的态度轻快地说:“它需要被修复。”6.4.         错误分为三类6.4.1.           可避免的(“愚蠢的”)错误6.4.2.           较难避免的错误6.4.3.           不可避免的错误6.5.         由于软件经常崩溃,你会发现专业的软件开发者对灾难的容忍度非常高,但几乎无法容忍可以轻易避免的小错误6.5.1.           现在有各种系统和技术可以减少软件bug,但编写没有bug的软件对人类来说是不可能的6.5.2.           并非所有的bug都是致命的6.5.3.           许多类型的bug可能存在于软件中,却对软件的运行没有明显的影响6.6.         一个大型软件程序可能由成百上千人用数年时间开发6.6.1.           一颗松动的螺丝不太可能对飞机的飞行造成致命的影响,正如Excel代码中一个错误的数字设置不一定会导致它停止运行6.6.2.           如果散布各处的“良性”bug足够多,它们就会开始对彼此产生负面影响,意想不到的事情就可能会发生6.6.3.           更难发现的,是那些不会立刻导致问题,但有可能悄然无声地以难以诊断的方式带来麻烦的bug6.7.         你在计算机屏幕上看到的,只是计算机的无形世界中正在发生的一小部分事情6.7.1.           在循环和递归循环的驱动下,无数股数字信息流被或优雅或不优雅地快速处理6.7.2.           这一切都归功于人类计算者、人类硬件制造商和人类软件工程师6.8.         计算机可以深入其内部,孜孜不倦地清除我们写入的bug6.8.1.           消除所有障碍,让它们强大的循环运动永不停歇6.8.2.           计算机将永远准确无误地重复自己