计算机系统解密:从理解计算机到编写高效代码
上QQ阅读APP看书,第一时间看更新

前言

我天生就是爱钻研的人。我父亲说,在荡秋千之前,我总会想象有一个开关打开秋千,荡完秋千之后又会关上它。机器仿佛跟我说了它的内部原理。我像C-3PO一样懂得“水分蒸发器的二进制语言”。我很幸运能成长在那个没有显微镜就能审视大多数事物的工作原理的年代。

现在回想起来,我在美国新泽西州的童年非常离奇而有趣。小时候,我对每个东西都要修一修补一补,这事让妈妈很头痛。爸爸妈妈给了我很多工具包,但是当我把它们合在一起做一些书上没有的项目时,他们就会感到不安。枕头防盗报警器的出现使这事达到了高潮,它抓住了“牙仙子”的行动——没有经济条件下的一种选择,但这个选择还是挺令人满足的。我收集坏了的电视机和一些被丢掉的家电,把这些东西拆了,了解它们是怎么运行的,再用那些零件做出些别的东西。我最喜欢的玩具之一是我爸爸1929年的建造模型。那个年代的太空计划让我对科技产生了浓厚的兴趣。我至今还记得有一天晚上和爸爸站在我们家的前院里,看着Echo 1飞过头顶的场景。

大多数孩子都有一个送报纸的兼职,而我是做修电视机和收音机的兼职。我的父亲在IBM公司工作,有时我也会和他一起去上班,他单位里的大型计算机让年幼的我非常震撼。八岁那年,他带我去大西洋城的电子展,我记得当时我玩的是一台IBM 1620。我还记得我对泰克(Tektronix)展台上的设备很着迷。可能是受此影响,我后来选择进入该公司工作。一年后,我去了纽约的世界博览会,被贝尔系统的展品所震惊。后来一个偶然的机会,我得以与其中一位设计师一起工作。

我接受了很令人惊奇的公立学校教育,当然这样的教育在美国已经不存在了。我和同学在五年级的时候可以随意传看装水银的壶。上六年级时我炸毁了化学实验室,但并没有受到关禁闭的处罚,反而从这些经历中学到了很多知识。(现在我还记得制作三碘化氮的配方。)我记得我八年级的科学老师带着我们离开学校,去纽约市看电影《2001:太空漫游》,因为他认为这很重要。他做这件事的时候并没有征求学生父母的允许,如今这么做很有可能丢掉工作,或者受到更严重的处罚。我们在高中化学课上做火药,在物理课上到足球场互相射火箭玩,在生物课上划破自己的手指做血型测试。这与如今的情况很不一样,如今一点点危险都会让老师们焦虑不安。实验室里湿漉漉的地板都能让他们担心,觉得有点儿水就要发出警告。美国政府官员对科学不屑一顾,区分不出科学行为和恐怖主义行为。

学习以外,父母给我报名参加了我喜欢的童子军,以及我讨厌的少年棒球联合会。童子军教会了我很多关于物质世界的知识,从骑马到安全地玩火到户外生存。而少年棒球联合会只会让我觉得我不喜欢团体运动。

在那个年代,业余无线电是很重要的,因无线电设备经常需要修理。我自告奋勇加入当地民防应急广播通信集团,只是为了能捣鼓捣鼓设备。该集团有一个原始的无线电电传打字系统,我重新设计了这个系统,最后将其用于其他市政设施。电传打字机是我很喜欢的三维立体装置。

上高中的时候,一个朋友给我介绍了一个探索者童子军的岗位,需要每周一晚上在默里山附近的贝尔实验室值班。我加入了,然后就开始接触计算机,当时的计算机有房子那么大。我被迷住了。没过多久,我就早早地离开了学校,搭车去实验室,说服别人让我进去工作。我参与了一连串令人惊叹的暑期工作,与不可思议的人一起工作,这改变了我的生活。我把头伸到别人的实验室里东张西望,好奇实验室里的仪器设备,顺便询问他们在做什么,就这样我学到了不少知识。虽然我打算学习电气工程,但是硬件项目是不可能在一个夏天完成的,最后我给他们写了软件。

我觉得对我的童子军指导者们最好的纪念方式是,一旦我有能力做到,就跟随他们的脚步,努力帮助新一代年轻技术员走上他们的道路。事实证明这很困难,因为美国研究的鼎盛时期已经过去,而是更加注重增加股东价值;产品本身的价值不及产品带来的利润重要,这使得很难证明研究的价值。公司出于责任的考虑,很少再让孩子们在场地上乱跑了。我原本以为自己会作为童子军一直工作,但因为童子军采用了一系列我不支持的政策而作罢。相反,我是志愿在当地的学校工作。

我开始写这本书是为了补充我志愿教的一门课。当时互联网还没有像今天这样发达。我住在一个相当贫穷的农业社区,考虑到学生们无法负担补充材料的开销,这本书的初稿试图包含所有的内容。但事实证明这是一个不可能完成的任务。

现在从网上可以找到很多不同的编程语言和概念的资料,而且大多数人在家里、学校或图书馆就可以上网。我重写了这些材料,希望读者可以更容易地在网上找到更多的信息。所以,如果有什么不清楚的地方,或者你想知道更多的信息,就去查一下。

最近我认识的一些学生说,他们对编程教育的方式感到失望。虽然他们可以在网上找到信息,但也一直在问可以在哪里找到他们需要的一切。这本书就是为了提供那些资源而写的。

我很幸运,能与计算机一起成长。很难想象如果我在没有背景知识的情况下,跳到今天这个成熟的计算领域会是什么样子。写这本书时,最具挑战性的部分是考虑要从多大程度上追溯过去的例子,以及多大程度上选择现代技术的元素来讨论。我最终选择了一种复古的方式,这样人们可以从更古老、更简单、更容易理解的技术中学习到大部分必要的东西。较新、较复杂的技术是用与旧技术相同的构件构造成的,了解这些构件可以使人们更容易理解新技术。

如今,时代不同了。小工具更难拆开、维修和更改。公司正在滥用法律,如数字千年版权法(DMCA),阻止人们修复自己的装备。幸运的是,这在一些地方促进了“修理权”法律的诞生。作为美国人,我们从政府那里得到形形色色的信息:一方面,我们被鼓励从事STEM职业;另一方面,我们看到科学被诋毁,STEM工作被外包。如果这种环境在半个世纪前就存在的话,不知道美国是否还会成为科技强国。

不过,也有亮点。创客空间如雨后春笋般涌现。孩子们可以建造东西,并且乐在其中。电子零件从来没有这么便宜过,只要你不想要带线的。将我小时候的所有计算机组合在一起也没有现在的智能手机处理功能强大。计算机的价格比人们想象的要便宜,像Raspberry Pi和Arduino这样的小型计算机,价格比一个比萨还便宜。

计算机的功能如此强大,我们很容易只热衷于高级功能。就像玩乐高一样,我最早的乐高套装中几乎只有长方形的积木,但我的想象力很丰富,可以搭建出任何我想要的东西。如今,你可以买到《星球大战》乐高套装,搭建预制的尤达,但是要发明新的角色就难多了。花哨的部件阻碍了想象力的发挥。

1939年的经典电影《绿野仙踪》里有一个很好的场景,在那一幕里,魔法师暴露了,发出了“别注意幕后的那个人”的呐喊。本书就是写给那些不想听这些,只想知道幕后的东西的人的。我希望这本书可以让那些实现高级功能的基本构件清晰明了。这本书是为那些想象力并不止步于高级功能的人准备的,也是为那些希望创建新的高级功能的人准备的。如果你有兴趣成为魔法师,而不仅仅是一个魔法物品的持有者,那么这本书就是为你准备的。