分享一个故事:第一行代码

你理应知道的计算机往事(篇一)
Elena Botella

第一行代码

第一行代码是什么?这有点取决于,你到底如何定义代码。
现在,让我们说代码是一组给机器的指令。给机器下达指令是我们大多数人一直在做的事情。到目前为止, 今天早上,甚至在我打开我的笔记本电脑之前,我就翻开了一个电灯开关,打开和关闭我的浴室灯,按下一个杠杆,指示我的马桶冲水,并按下一个按钮,告诉我的咖啡研磨机研磨一些咖啡豆。每一个单独的按钮或开关都发出一个指令,“开"或"关”,“做"或"不做”,或者我们可以说,“1 或"0”,这些机器都知道如何做一件事:发光,冲水,或磨 咖啡豆。当你有一台机器准备好听从不仅仅是一条指令,而是 非常长的指令集,将些 "开 "或 “关”、"1 "或 “0”、"做"或 "不做
“以实际上无限的、看似神奇的组合方式组合起来时, 代码就发生了。重要的是,代码和单纯的语言之间的区别在于,在相同的输入下,代码应该总是产生相同的输 出。当我运行几行代码时,即使是在与我写的那台电脑不同的电脑上,它们也应该总是产生相同的结果。根据这一定义,第一个代码可能是由Ba-sile
Bouchon在1725年编写的,比发电机的发明早了一个多世纪。巴西尔-布琼是一位法国织工,在那个时代,修补过的丝绸是奢 侈品和时尚的高峰。在Bouchon之前,仅仅是重新配置一台织机就需要花费数周的艰苦和繁琐的劳动(在织机的绳索上打结)。
正如历史学家AbbotPaysonUsher在1929年所写的那样,这种"工作很重,时间很长,这个最可怜的丝工阶层出现了严重 的身体不适 “3。Bouchon的解决方案?第一张打孔卡,或者更具体地说,是一张很长的纸,通过在纸上打洞来"编码”。这张长纸被放在一排针的下面,由织工逐渐解开。打孔纸上的孔(或没有孔)告诉织布机哪些针要缩 回,哪些针不要缩回,这又改变了织物的设计。在实践中,Bouchon的织机并没有很好地工作,它从未被广泛使用。但即使在当时,其他织工也能看到这个 想法是有希望的。仅仅过了几年,其他人就开始进行改进,特别是用更坚固、更通用的打孔卡取代了连续的穿孔纸卷。几年后,有人设计了一种织机,不需要人站在一旁切换打孔卡,而是用机械方式进行。布琼在他自己的时代并不出名,但另一个人约瑟夫- 玛丽-提卡德(Joseph MarieJacquard)在19世纪初因改进了布琼的设计,将其与其他创新结合起来,创造了后来被称为"提花织机"的东西而变得富有和出名。4 拿破仑- 波拿巴皇帝对提卡德印象深刻,在亲自拜访他之后,他给提卡德每年发放退休金,并为法国制造的每台提花织机提供奖金。提花成为一个家喻户晓的名字,但当英国学者罗伯特-威利斯牧师写道:“提花的优点不是 一个发明家的优点,而是一个有经验的工人的优点,他把前人在同一领域的机器的最好部分结合起来,第一次成功地获得了一个足够实用的安排,可以普遍使用”,特别把使用穿孔纸为织机编程的功劳归于布琼。
巴西尔-布琼的织机,由穿孔纸带控制,是打孔卡的早期前身。从布琼的第一行代码到提花织机,再到控制你的电脑和智能手机的代码,这条线索清晰而直接。阿达-洛夫莱斯和查尔斯-巴贝奇在1837年描绘了第一台计算机的蓝图(他们称之为"分析引擎”),他们参考了提花织机来解释计算机将如何工作,查尔斯-巴贝奇甚至拥有一幅提花织机上编码的丝绸肖像画7。巴贝奇和洛夫莱斯的机器的完整工作模型从未被制造出来–它的大小和重量大致相当于一个火车头,并由自己的蒸汽机提供动力–但现代工程师认为,分析引擎本来是相当强大的,尽管它很笨重,非常缓慢,而且没有多少存储容量。
查尔斯-巴贝奇的分析引擎可以完成任何20世纪50年代的计算机所能完成的同样一套基本任务。在那篇论文中,图灵解释了使计算机成为计算机的原因:有能力进行绝对的任何计算。只要你的机器能做到 这一点,它甚至不需要像巴贝奇和洛夫莱斯的机械发明那样使用电力。机器确实需要有三样东西:一个"存储器 "或内存来跟踪数据,一个 "执行单元"来进行操作,以及一个 "控制"或指令集-- 换句话说,代码。图灵指出,内存中的数据和代码都可以被描述为一组数字(0和1),就像布琼的穿孔纸卷的 双数。(在同一篇文章中,图灵定义了后来被称为"图灵测试 "或 “模仿游戏"的概念,即你可以通过看它是否能欺骗别人相信它是人类来测试人工智能计算机的质量)。我在这篇文章的开头说过,如果你接受我的定义,那么 巴西尔-布琼写了第一行代码:代码是一组指令,给一个能够接受 长指令集的机器,产生一个一致的输出。但是,包括图灵 在内的一些人可能会说,这个定义是不充分的,或者,正 如现代计算机科学家所说,布琼的机器和代码不是"图灵完整的”。为什么呢?好吧,织布机并不是一台计算机,在这个意义上,织布机或打卡机不能计算任何东西。在1950年的论文中,阿兰-图灵用"通用机器"一词来描述任何具有与洛夫莱斯和巴贝奇的发明相同能力的机器:能够计算任何有可能计算的东西。"图灵写道:"具有这种特性的机器的存在,有一个重要的后果,即除了考虑速度之外,没有必要设计各种新的机器来做各种计算过程。
换句话说,由于Bouchon的织布机没有计算任何东西, 它不是一台计算机,所以他的第一个穿孔纸带并不是真正的代码。计算机科学家们现在用 “图灵完全"一词来表示描述符合图灵通用机器标准的计算机和编程语言:今天几乎所有的计算机和编程语言都符合条件。
如果你写过代码,也许是在计算机科学课上,也许是在 工作中,可能并不总是觉得你在计算数字,特别是如果你只是写了一个程序来打印"你好,世界”。"但在这一切之下,即使是那一行简单的代码,如果在计算机上执行,也确实涉及到了计算。你的 电脑或智能手机所做的一切都可以归结为一组数学问题: 甚至显示图形也是一个计算问题。也许,如果你是一个游戏玩家,你已经为你的电脑买了一块显卡(也叫GPU),这样你的游戏就会渲染得更快–GPU和CPU的区别只是每种芯片可以更快执行的计算类型。GPU最擅长处理复杂的数学问题,有很多步骤可以同时 进行,因为这些是用于渲染图形的数学问题类型,而CPU 最擅长处理复杂的数学问题,其步骤需要按顺序进行。根据编程语言的 "图灵完备性"定义,Bouchon的打卡机并不是代码。根据这个定义,甚 至HTML也不是代码,因为你可以用HTML来设计网站, 但不能用来做大多数计算。布琼(Basile Bouchon)可能发明了使用 "二进制"向机器发出长的指令集,但他并没有意识到这项发明的 全部革命潜力。1889年,德国移民赫尔曼-霍勒里斯在哥伦比亚大学写了他的博士论文,解释了如何 使用打卡机来更快地计算数据。他的系统被美国人口普查局用来完成1890年的人口普查,将所需的计算时间至少缩短了6年。霍勒里斯创立的公司,即制表机公司,后来甚至被称为IBM。10 学者们对霍勒里斯直接借鉴提花织机的程度存在争议,但IBM方面确实对提花织机的启发给予了部分赞誉。霍利斯的设计。
就像你可以说布琼的机器指令太简单,不能被视为代码一样,你也可以说第一行代码是在布琼之前写的。在 他出生之前,还有其他人对机器进行了 “编程 “或"编码”,尤其是制作音乐。八世纪生活在巴格达的BanuMusa兄弟开发了一种由水车驱动的"自动长笛演奏者”,据信这是第一种能够演奏预先编程 的旋律的乐器,也可能是一般意义上的第一种可编程机 器。布琼本人也有音乐背景:他的父亲是一名风琴制造 者。布琼从小就接触到乐器的制造,这可能不是巧合,但织布机、乐器和早期计算机之间的联系甚至更深。

​ 正如IBM的赫尔曼-霍勒里斯从织工那里获得灵感一样,他也可能从霍勒里 斯时代的美国家庭中普遍存在的弹奏钢琴那里学到了东西。这些弹奏钢琴使用带孔的纸卷来演奏旋律,这与布 琼的织布机上用带孔的纸来决定图案的方式并无不同。 在20世纪20年代初的高峰期,玩家钢琴能够在没有人类控制的情况下自动演奏曲子,其数量比普通钢琴多出近50%。作为纸孔的代码在本书中值得特别一提,因为打卡机作为一种代表数据和用于操作数据的代码的方式是多么重要。二进制,或用0和1表示数据,仍然是所有代码和 所有计算的基本构件:当计算机变成电子时,这些0和1 反映了电信号的存在或不存在。
事实证明,打卡是代表任何数字、任何诗歌、任何歌 曲、任何计算机程序所需要的一切:实际上是任何东西。

下面附上英文版

The First Line of Code
Elena Botella

What was the first line of code? It depends, a bit, on how exactly you define code.
For now, let’s say code is a set of instructions that are given to a machine. Giving instructions to machines is something most of us do all the time. So far this morning, even before I opened my laptop, I flipped a light switch to turn on and off my bath- room lights, pushed a lever to instruct my toilet to flush, and pressed a button to tell my coffee grinder to grind some coffee beans. Each of these individual buttons or switches delivered a single instruction, “on” or “off,” “do” or “do not,” or, shall we say, “1” or “0,” to machines that each knew how to do exactly one thing: emit light, flush water, or grind coffee beans.
Code happens when you have a machine that’s ready to listen to not just one instruction, but very long sets of instructions, combining those “on” or “offs,” “1s” or “0s,” “dos” or “do nots” in practically infinite, seemingly magical combinations. And importantly, the difference between code and mere language is that code should always produce the same output given the same input. When I run lines of code, even on a different com- puter than the one I wrote them on, they should always produce the same result.
By this definition, the first code may have been written by Ba- sile Bouchon in 1725, more than a century before the invention of the electrical generator.
Basile Bouchon was a French weaver, at a time when pat- terned silks were the height of luxury and of fashion. Before Bouchon, it took several weeks of painstaking and tedious labor (tying knots in the loom strings) just to reconfigure a loom to
the selected pattern.2 As historian Abbot Payson Usher wrote in 1929, this “work was heavy, the hours long, and serious physical disorders were developed by this most wretched class of silk workers.”3
Bouchon’s solution? The first punch card, or, more spe- cifically, a very long sheet of paper that would be “coded” by punching holes in the paper. This long sheet of paper was placed underneath a row of needles and gradually unspooled by the weaver. The holes (or lack of holes) in the perforated paper told the loom which needles to retract and which not to retract, which in turn changed the design of the fabric.
In practice, Bouchon’s loom didn’t work very well, and it was never widely used. But even at the time, other weavers could see that the idea held promise. It only took a few years for other people to start making improvements, notably by replacing the continuous roll of perforated paper with sturdier, more versatile punch cards. A few years after that, someone designed a loom that eliminated the need for a human to stand by to switch the punch cards, doing so mechanically instead.
Bouchon wasn’t famous in his own era, but another man, Joseph Marie Jacquard, became rich and famous in the early 1800s for improving upon Bouchon’s design, combining it with other innovations to create what became known as the “Jacquard Loom.”4 Emperor Napoleon Bonaparte was so impressed with Jacquard that, after personally visiting him, he awarded Jac- quard an annual pension and a bonus for every Jacquard Loom manufactured in France.5 Jacquard became a household name, but Bouchon was reintroduced to history books when British academic Reverend Robert Willis wrote that “the merit of Jac- quard is not . . . that of an inventor, but of an experienced work- man, who by combining together the best parts of the machines of his predecessors in the same line, succeeds for the first time in obtaining an arrangement sufficiently practical to be gener- ally employed,” giving the credit specifically to Bouchon for the use of perforated paper to program the loom.6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值