基本信息
内容简介
作译者
薛佟佟 成长在汉风唐韵浸染的古城西安,受教于金陵旧迹积淀之南航学府。性诚而好动,自谦而喜文。长期专注于C/C++开发,在密码学及网络安全方面亦有建树。目前的研究兴趣主要集中在无线传感器网络下的分布式安全协议方面。曾参与包括国防预研、十一五预研等在内的多项重点科研课题,并在国内外核心期刊及重要国际会议上发表论文多篇。
Charles Petzold 是Windows编程界的一位大师,当今世界顶级技术作家。1994年5月,Petzold作为仅有的七个人之一(并且是唯一的作家)被《视窗杂志》和Microsoft公司联合授予Windows Pioneer奖,以表彰他对Microsoft Windows所做出的贡献。
Petzold从1984年开始编写个人计算机程序,从1985年开始编写Microsoft Windows程序。1986年他在Microsoft Systems Journal的12月号上发表了第一篇关于Windows程序设计的论文。
从1986年到1995年,Petzold为PC Magazine撰写专栏文章,向读者介绍Windows和OS/2程序设计等方面的知识。直到今天他依然保持着Windows GDI程序设计首席技术作家的地位。其大作Programming Windows(Windows程序设计)是尽人皆知的Windows编程经典,曾深深地影响过一代程序员,该书目前已出至第5版。
目录
1 至亲密友 / 1
编码是什么?在本书中,这个词的意思是指一种用来在机器和人之间传递信息的方式。换句话说,编码就是交流。对任何能听见我们的声音并理解我们所说的语言的人来说,我们发出的声音所形成的词语就是一种编码。用手电筒能代替声音来与朋友交谈吗?当然值得一试。
2 编码与组合 / 7
莫尔斯码也被称做二进制码,因为这种编码的组成元素只有两个——“点”和“划”。不过,点、划的组合却可以表示你想要的任意数目的码字。这其中的规律是什么?本章我们就来探讨一番。
3 布莱叶盲文与二进制码 / 13
布莱叶盲文是为了便于盲人阅读而发明的一种编码。在这一章中我们将解析布莱叶盲文,来看看它是如何工作的。我们并不是要真的学习布莱叶盲文,而且也无须刻意记住关于它的什么内容。我们仅仅希望从中归纳出编码的一些性质。
4 手电筒的剖析 / 21
为了理解电在计算机中的工作原理,我们先得仔细钻研一番电学,不过不要担心,只需要一部分基础知识就够了。在本章,我们将以手电筒为教学道具,引导你走入神秘的电学世界。
5 绕过拐角的通信 / 32
在第1章,我们曾经讲过用手电筒与朋友进行交谈的方法,但是这样的方式是有局限性的,你的交流对象必须住在街对过,而且你们卧室的窗口正好相对。但是,现实不会总是如此。当手电筒的光无法到达朋友的卧室时,怎样与他们进行无声的交流呢?电路或许可以助你一臂之力。
6 电报机与继电器 / 40
全球性即时通信对于我们来说已经司空见惯,你要是生活在19世纪早期,可没这么方便。你当然可以进行即时通信或者远距离通信,但是不能同时做到这两点。即时通信受声音传播距离的限制,或者受视野的限制。使用信件倒是可以进行更远距离的通信,但是寄信耗费的时间太多,并且需要借助于交通工具。为了解决这个问题,电报应运而生,而伴随着电报诞生的继电器更是具有重要意义的伟大发明。
7 我们的十个数字 / 47
人们很容易理解,语言只不过是一种编码。比如英文中的“cat”(猫)在其他语言中可以写做gato、chat、Katze、KOIIIK或kátta。然而,数字似乎并不是那么容易随文化的不同而改变。不论我们说什么语言,或使用什么样的发音,在这个星球上的所有人都用以下方式来书写数字:0,1,2,3,4,5,6,7,8,9。你了解这十个数字么?
8 十的替代品 / 55
对人类而言,10是一个非常重要的数字。它是我们大多数人拥有的手指或脚趾的数目。我们人类已经适应了以10为基数的数字系统。但是只能使用十进制来计数吗?如果人类像卡通人物那样每只手只有4根手指会怎样?
9 二进制数 / 71
二进制是最简单的数字系统,其中只包含两个数字:0和1。二进制中的1位(bit)称为1比特,我们可以用它来表达简单的信息:是或不是;亮或灭;打开或关闭,等等。而事实上只要信息能转换成两种或多种可能性的选择,就都可以用比特来表示。这种例子在日常生活中随处可见,比如照相机胶卷的胶片速度,各种商品包装上的条形码。
10 逻辑与开关 / 90
译者序
作为Windows编程界的一位传奇人物,Charles Petzold早在1994年就作为仅有的七人之一(并且是唯一的作家)被《视窗杂志》和Microsoft公司授予Windows Pioneer奖。而作为一名世界顶级的技术作家,他的大作Programming Windows则是尽人皆知的Win32 API编程经典,是学习Windows编程的必读之作。令我们欣喜的是,除了Windows程序设计方面的著作,Petzold还撰写了这部讲述计算机工作原理的书籍,而且同样堪称经典。
本书的翻译过程漫长而又愉快,书中的精彩内容不断给我们以惊喜。Petzold采用的叙述方式奇特却又如此自然,他首先从历史的角度审视了计算机技术的发展脉络,继而自底向上地将计算机体系结构方面的知识娓娓道来。在Petzold的笔触下,导线、灯泡以及触发器等简单部件,通过精妙的组装,竟然构建出了一台电子计算机,令我们在翻译的过程中不禁有动手一试的冲动,但总是又被他精彩的笔触所吸引而欲罢不能。Petzold在这本技术书籍里旁征博引,从美国当红的影评人到百年之前的布莱叶盲文,从史密斯·索尼亚的滑尺到冯·诺依曼的构想,从石破天惊的论文《思维之际》到图形化革命,看似信手拈来,然则处处别出心裁。
这些被有机结合起来的零星知识,仿佛又把我带回了大学的课堂。所涉及的问题包括计算机体系结构、汇编语言及数字电子技术等等。那些已经久远而又模糊的知识骤然间变得异常清晰而且格外生动。这些知识原本只会出现在高校的计算机专业课堂里,令人惊奇的是,尽管遍布于世界各地的本书读者往往有着各不相同的专业背景,而这却丝毫不影响本书内容所带给他们的震撼!
所谓经典,就是历尽岁月的洗涤,依然毫不褪色,然其光彩却历久弥新。我想本书被奉为经典之作当之无愧。
为了能够将该书的精彩原原本本地呈现给广大中国读者,并在保证质量的前提下力争让该书早日与广大读者见面,本书的译者始终秉持着谨慎严肃的态度,对许多词句都推敲再三,力求精益求精。在此期间,我们得到了许多师长和友人的支持与帮助,感激之情溢于言表。特别是南京航空航天大学丁秋林教授,他对我们的翻译工作给予了极大的支持,并欣然为本书提笔作序,在此我们对丁教授表示诚挚的谢意。
参与本书翻译工作的人员还有初甲林、刘悦、高新、高阳、邓明强和赵德志。此外赵学健、欧阳键两位博士也参与了部分章节的审校工作,在此也向他们一并表示感谢。
在本书即将付梓之际,除了激动喜悦之外,译者又多了一份惶恐,尽管我们几经校对,并在翻译过程中始终以谨慎求实的态度对一些技术细节和翻译方式反复讨论,力求表意准确。然而限于时间仓促,纰漏和欠缺之处在所难免,言语之中有失偏颇之处,还望读者不吝赐教和批评。联系信箱:beckham@vip.163.com。
薛佟佟
2009年秋于南京
序言
我想Charles Petzold就是这样一位智者。作为Windows编程界开创者之一和世界顶级的技术专家,他在Windows编程方面著述丰富,在基础计算机理论书籍方面也取得了卓尔不凡的成就。他善用丰富的想象和清晰的笔墨将看似繁杂的理论描述得生动、简单,使读者不会感到枯燥和生硬。尤其这本畅销多年、经久不衰的《编码——隐匿在计算机软硬件背后的语言》(Code:The Hidden Language of Computer Hardware and Software)更是化腐朽为神奇,改晦涩为通俗之杰作。即使读者不是计算机专业的人士,在Petzold笔墨的引导之下,也能够轻松阅读该书。书中使用像电线、电灯泡、触发器等这些非常常见的零件,拼拼接接,最后令人惊异地建造了一台电子计算机。读者在阅读过程中,循序渐进地学习有关计算机系统基础和构造的知识,作者的奇思妙想和妙趣横生的讲述方式不得不令人赞叹。
透过现象进而探索本质可以发现新事物;将复杂的事物简单化,可以发现解决问题的新方法。作者将那些看似复杂的理论转换成我们熟悉的诸多景象,使读者不由自主地跟随他的思路打造这台只有电线、电灯泡和触发器组构成的庞大的计算机系统。
我阅读了本书的译稿,并非常欣喜地将其推荐给每一位读者,我相信读者都能获益良多。本书的译者做了一件非常有意义的事情,将一部优秀的作品介绍给读者。他们严谨的工作将本书诠释得非常出色,使之在不丧失原作风采的基础上更贴合中国读者的习惯。
最后,我还是想将《道德经》上的两句话来送给各位读者——“为学日益,为道日损,损之又损,以至于无为,无为而无不为”。衷心希望各位读者有朝一日都能够在学问上到达无为而治的境界。
丁秋林
2009.10.28
丁秋林教授,博士生导师,南京航空航天大学信息科学与技术学院和机电工程学院资深教授。英国皇家航空学会高级会员、英国剑桥世界名人录传记人物(IBC Cambridge the 28th Edition)、美国世界名人录传记人物(Who’s Who in the World the 16th Edition)、国际高级制造技术杂志编辑部成员(Springer)。
在真正开始撰写这本书之前,纷繁的思绪在我的脑海中已经萦绕了近十年之久。但从着手写作,一直到出版,我不断反复地问着自己一个问题:这本书是讲什么的?
关于这个问题我总是找不到合适的答案。我想说:“这本书将带领大家通过一段信息技术革命的旅程重新感触现代计算机技术。”语毕,我内心纠结,这个回答真的将这本书的内容完整诠释出来了吗?
最后我不得不承认:“这本书其实是讲述计算机如何工作的。”
我之所以有些底气不足,那是因为我已经猜到了某些读者的反应:“嗨,这种书我早就读过了。”但我会立刻告诉他:“不,这种书你并没有读过。”对于这点,我坚信不疑。因为这本书并不是讲“计算机——如何——工作”。书中并没有用一张又一张描述磁盘的插图,用各种箭头解释数据是如何被输送到计算机的,书里面也没有装载着一节又一节“0,1数据”的“火车”图片。明喻与暗喻是文学描述中精妙的辅助手段,但它们常常掩盖了科学技术的真正光芒。
我还听过另一个说法:“人们不愿意了解计算机如何工作。”对于这句话我毫无保留地赞同,因为就我个人来说,也是在不经意之间才体会到理解事物如何运作这一过程是多么有趣。但是这并不意味着我对世上一切事物的运作机制都感兴趣,都有所了解,因此我绝对不会在任何场合向大家解释我房间里冰箱的工作原理。
然而与此同时,经常有人向我问起一些涉及计算机内部运行机理的问题。一个常见的例子就是:“‘存储器(storage)’与‘内存(memory)’有何区别?”
对于计算机用户而言,这个问题要是搞不清楚,的确“寸步难行”,可以看到,市场上考察个人计算机的存储性能,最主要的就是这两个概念。即便对于最初级的计算机用户来说,他们也一定需要了解到底多少“兆字节”或多少“吉字节”的存储器才能应对运行在其上的程序。如果进一步去思考,这些初级用户或许更加想了解计算机中的“文件”是什么概念,甚至连带这些文件如何从存储器加载进内存,又如何从内存存储到存储器,他们也非常期望学习这些知识。
像这类“存储器-内存”问题的解答大都使用类比法:“内存就好比你的办公桌,而存储器就好比你的文件柜。”就问题本身而言,它的确给出了满意的回答。但我对此答案并不满意,主要原因在于这个答案将计算机的体系结构与办公室的结构等同起来,但是内存与存储器的区别其实是在逻辑层面上的,它体现着计算机体系结构的实际需求与存储器客观性能之间的矛盾,简单地说就是我们找不到一种同时具备这两种存储器所有优点的存储媒介,这些优点就包括存储速度块、存储容量大、非易失性等等。今天的计算机都采用“冯·诺依曼体系结构”——五十年来它一直是计算机体系结构的主导,而内存与存储器的区分也正是由于这种体系结构的不足所导致的。
还有一些计算机用户问我这样一个问题:“为什么Macintosh环境下的程序不能在Windows下运行?”我想立刻回答这个问题,但在我刚刚张开嘴的时候就立刻意识到,这个问题涉及太多的技术细节,要想彻底搞清楚,那提问的这位朋友也一定非准备和我来一次“茶话会”不可。
我希望这本书能够成为大家理解这些问题的“助手”,这种理解我希望不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。我同时也非常希望大家能够理解:计算机是二十世纪技术领域的“登峰造极之作”,它是一种值得欣赏、具有“美”学文化底蕴的人类伟大成果,这种“美”不需要明喻与暗喻的额外修饰。
计算机拥有与生俱来的层次化体系结构,这种结构的底层是晶体管,其顶层则是计算机显示器上所呈现的信息。自底向上分析该结构的每一层——这也是本书的编写结构——其实这一切并没有人们想象中那么难。当然,现代计算机的内部结构不断推陈出新,但其本质上仍然是一些常见且简捷的操作集合。
尽管今天的计算机比起25年前,以及50年前的都复杂许多,但它们在本质上是完全一致的。学习技术发展史的重要意义正在于此:追溯的历史越久远,技术的脉络就变得越清晰。因此,我们需要做的就是确定某些关键的历史阶段,在这些阶段,技术最天然、最本质的一面将清晰可见。