豪门叛妻顾盼琼依txt:微软操作系统最核心开发故事 第1章 代码勇士(2) - 天地之大,任我游! - CSDN博...

来源:百度文库 编辑:九乡新闻网 时间:2024/07/24 15:01:12
  微软操作系统最核心开发故事 第1章 代码勇士(2) 收藏
From: 腾讯科技   -------------------------------------------------------------------------------- 
在数字计算机逐步成形的年代里,也就是在第二次世界大战之后,在设计者们眼里,无论是操作系统还是应用软件都是以后再考虑的事情。和由程序组成的“软件”不同,由电子电路组成的“硬件”太难了,以至于工程师们不敢想像何时能完成它。硬件中,最重要的一类是真正将执行送给计算机的指令的电路系统,也就是处理器。第二类设备用于数据输入输出的。第三类设备用来储存信息。第四类设备允许把信息通过专门的电缆或者电话线发给另一台计算机。
通常,只有在硬件到位后才考虑软件问题。因此,设计计算机时并不知道以后运行什么软件,程序员只能做电脑硬件允许做的事情。艾兹格·迪科斯彻(E. W. Dijkstra)是计算机编程方面的著名理论家,他曾经概括了在计算机形成时期人们对编写代码的普遍态度。他这样说:可怜的程序员是什么处境呢?说句实话,他们很难被注意到。首先,起初的计算机太大了,你根本就不能移动它们,除此之外,它们需要太多维护工作,以至于很自然地,机器是在哪里开发的,人们在哪里使用它。其次,程序员做的是(某种程度上来说)根本看不见的工作,没有什么魅力。你可以把机器展示给参观者们,那比几页代码的吸引力要大几个数量级。但最重要的是,程序员自己对所做工作的看法也很平常:他工作的意义来源于计算机这种超棒的机器的存在。因为这种机器是独一无二的,所以他知道他的编程只在本地有意义。因为机器只会使用不长一段时间,所以他知道他的编码的延续价值很少或者没有。编程工作表面上看起来很简单。只是写个请求给电脑。这种请求应该是以电脑能够明白的方式表达的。而且,这种方式只有特定的电脑能够明白。同样的请求,完全以同样的方式编写,送给有着不同设计和电路的计算机,就会变得莫名其妙。
除了成为特定计算机的奴隶外,最早的计算机程序是很简陋的。在第二次世界大战之前,当时的计算机主要是机械的,很多时候,程序的价值和人工反转开关、重新安排线路或切换齿轮的价值差不多。在20世纪30年代,要让那个时代最强大的机械电脑——微分分析仪(Differential Analyzer)——去解决一个新的问题,准备工作就要花很多天。十年之后,要让早期的数字计算机去解决一个比较难的问题,仍然要花几天时间做设置工作。
更灵活一些的机器从打孔卡片或者纸带上面读取用户的请求,不过卡片或者纸带还是手工反馈给机器的。这种初级的编程方式迫切需要改进。
在1944年发生了突破,约翰·冯·诺依曼(John von Neumann)是出生在匈牙利的数学家,居住在美国,他提出了存储程序的概念。这个概念与这个领域中的其他人的想法很相似,但是冯·诺依曼最清楚地看到了它的意义。使用存储程序,送给计算机执行的指令可以保存在机器自己的内存中,像对待数据一样。这将大大提高启动一个程序的速度,而且可以很容易地修改程序,或者从一个程序切换到另一个程序。
随着存储程序的概念在初生的计算机文化中的广泛传播,编程变得越来越引人注目,很快吸引了一些拥护者。不过这是很艰难的一件事。数字计算机有两种状态,开或者关,所以它只能对只包含1(开)和0(关)的二进制的消息做出响应。程序中的所有元素最终必须使用这两个数字表示出来,这样使得即使普通的数学运算也很容易变得很复杂,令人眼花缭乱。正如一个观察家所说的,在20世纪40年代后期,为计算机编程是“令人发疯一般地困难”。
不久以后,程序员们找到了更简单的方法来产生二进制串。他们首先设计了特殊的打字机,可以自动输出二进制代码。后来,他们转移到更友好的“汇编”语言,用字符和符号来代表1和0。使用汇编写程序是一大进步,但是还需要严格遵循晦涩的计算机指令集。程序员必须深刻理解指令集才能写出高效的汇编代码。而且,不同型号的计算机使用的指令集是不同的,取决于它们的微处理器是如何设计的。这意味着一旦某种计算机废弃不用了,那么程序员费尽力气学会的这种汇编语言知识就会变得一钱不值了。
到20世纪50年代,严重依赖计算机的各种机构开始意识到了软件是令人头痛的事,而且是代价很高的,其中最主要的机构就是美国军方的三大分支。站在计算机领域前沿的程序员们开始寻找方法,以便可以更简单地编写出高效的程序。在1951年,格蕾丝·莫里·赫伯(Grace Murray Hopper),美国海军军械储备局的一名数学家,构思出了一种名为编译器的程序,它可以把程序员的指令翻译成二进制串,也就是最终控制计算机的机器语言。从理论上来说,编译器正是可以把程序员从硬件的限制和使大脑麻木的二进制代码中解放出来的东西。
赫伯的成果催生了无数人的努力,来降低编写代码的难度。或许,最主要的当属IBM开发的称为公式翻译器(Formula Translation)的编译器,也就是Fortran。它包含了三十二条指令,诸如PUNCH(打孔)、READ DRUM(读取磁鼓)和IF DIVIDE CHECK(除法检查),它们来源于计算机硬件需要的二进制术语。截止到20世纪50年代后期,Fortran产生了巨大的影响。“现在,任何人只要具有好的逻辑思维和愿望就可以学习计算机编程”。一个计算机历史学家曾经这样写道:“你不再必须是熟悉计算机内部原理和汇编语言的专家。使用Fortran的简单命令,你可以让计算机听从你的吩咐,而且编译器会自动地把你的指令翻译为高效的机器代码。”
尽管Fortran让程序员使用同一套指令来为任意数量的计算机编程,但是要在不同的机器上运行Fortran程序,经常还需要修改。而且,Fortran是针对科学计算和工程问题的。于是针对其他目标的其他语言出现了,比如面向商业的通用语言(Common Business睴riented Language, Cobol)。没过多久,便有很多种语言可供程序员选择了。而且,很多时候他们的职业路线就是由他们所选择和学习的最好的编程语言所决定的。
赫伯深信克服因为计算机语言激增而导致的困难将成为未来最大的技术挑战之一。“对我来说,编程不仅是一种重要的实践技术,”她在1961发表的一次讲演中说,“它还需要在基础知识方面做巨大的投入。”有些出乎意料的是,她担心最大的前进障碍会来自程序员自己。就像转变到一种新的宗教信仰一样,他们经常表现出思想保守,掩盖了他们的狂热。“程序员是非常古怪的一个群体,”她观察发现。
他们成长得非常迅速,在很短时间内就变得很专业,而且很快就感染上了一定程度的抵制改变的毛病。有一个程序员,我听说他差点和客户吵起来,因为他不想修改他的系统,他几次走进我的办公室说:“我们一直是使用这种方法来做事的。”正是因为这个原因,现在我在我的办公室里挂了一个逆时针方向走动的钟。
在20世纪60年代初期,IBM尝试在软件领域掀起一场革命,能让同一个程序在任意数量的计算机上运行。IBM计划开发一系列机器,这些机器覆盖了大多数市场,它们是由一个操作系统控制的。这个耗资五亿美元开发的System/360产品线取得了巨大的成功。但是它的产生过程是很痛苦的,主要是因为创建软件的难度和成本被大大低估了。第一台360硬件是在1964年问世的,直到五年后它的所有软件才能够很好地运行。到那时,IBM在编写软件方面所花的钱已经差不多与设计硬件一样多。这使IBM公司的经理们非常吃惊,也非常生动地显示出了“影响计算机科技进步的最大障碍”和管理大型软件项目的问题。
在杜邦公司,戴夫·卡特勒发现自己陷入了驯化计算机这项重大任务的第一线。操作系统的不断标准化大大提高了计算机的实用性。但是编写应用软件的主要压力还是落在了计算机购买者自己的身上。这产生了一种没有想到的效应,那就是使很多大公司成为孕育程序员的基地。杜邦让卡特勒创建一个程序来分析实验室里的实验数据。这个工作很需要技巧,因为需要两台计算机一前一后一起工作。一台接收数据,将数据放入到一个文件然后发送到第二台机器,第二台机器分析数据并把结果发送给研究人员。
人们希望这个程序是所谓的“实时”系统,它能使计算机接收到信息后立即做出回应,而不是几个小时或者几天后才给出结果。第一个实时系统是在风轮计算机上创建出来的,供空军和海军跟踪敌人的飞行器,并指导美国的攻击机命中目标。
实时程序是非常有价值的一种创新。对于像杜邦这样努力寻找新材料及其用途的公司来说,快速响应的帮助比延迟响应要大很多很多。杜邦想让卡特勒的程序运行在从数字设备公司(DEC)购买的小型计算机上。DEC是十年前由风轮计算机的一个工程师创立的,DEC是小型计算机领域升起的一颗新星,它大胆打破传统。在过去,计算机设计者们提倡可以让许多工作共享运算能力的大型主机。小型计算机的价格经常低于十万美元,这第一次让人们可能分配一台计算机专门做单一的工作,比如跟踪零件的轨迹,实验数据或者机器工具的操作。
尽管有用,但是像DEC的PDP这样的小型机通常只配备很少的软件。购买者不得不自己设计他们需要的软件。在接下来的几年中,卡特勒编写出了实时程序和其他一些PDP软件,成为一位为DEC计算机设计代码的专家。
但是,卡特勒开始厌倦杜邦了。他想要到一家计算机公司工作,于是他选择了DEC。因为钻了IBM产品线的一个空子,DEC不仅成长得非常迅速,而且摒弃了传统的商业模式。它没有征购土地建设办公场地,而是把波斯顿(Boston)郊外的一个废弃工厂改造为员工的办公室,这家工厂位于马萨诸塞州(Massachusetts)的梅那特(Maynard)。DEC也没有坚持IBM青睐的从上到下的管理方式,相反,DEC允许工程师实践他们自己的想法,即使冒着重复别人的风险。
卡特勒很渴望为DEC的计算机编写软件——他如此渴望,以至于和DEC销售人员的一次偶遇促使了他到这家公司去参加工作面试。随着硬件的不断发展,DEC很需要编写代码的强人。卡特勒刚好满足了这一需要。于是在1971年,卡特勒接受了DEC的工作,搬到了马萨诸塞州,这一年他二十九岁。
卡特勒很快就博得了DEC的青睐。没过多久,他就成为这家公司的软件之星,并让他去带领一个开发代码的团队。他完完全全被工作所吸引了。那时,他的第一次婚姻已经破裂了,第二次正朝着浅滩行驶。正像他自己所承认的,他根本不是会照顾家的男人。当他终于和第二个妻子散伙后,他发誓再也不会结婚。“结婚是一个错误,你只能犯两次错,”他说。
卡特勒是一流的程序员。他全身心地投入,沉迷其中,争强好斗。他有非常坚强的意志和信心。他投入非常大的精力来注意细节。而且,他在设计和编写代码时不断地追求更好。“大多数人学会如何把一件事做得很漂亮以后,便一生一直做这个,”一个同事观察发现:“他不是卡特勒。卡特勒会从自己的成功中学习。下一次,他会做得更好。所以每次,他都上升到一个新的高度。”这一点是很令人吃惊的,因为在科技方面取得成功的很多人也没有这样的特质。而且,他非常地投入——除了分配到他手中的软件任务外,他对其他任何脑力劳动都没有热情——这是很有好处的:“对可能干扰他的任何人和事,他不仅置之不理,而且还会对其进行攻击和诋毁。”
卡特勒骂人的功夫也炉火纯青。反复无常而且脾气倔犟,他可能根本不顾及脸面,大喊大叫,根本不顾及最起码的礼貌。他发脾气时,嘴里动不动就冒出一连串污言秽语。每次新的爆发都把他的形象又磨砺一番。陌生人是最受不了的。有一次,一位女工程师在放满打印机的房间里第一次遇到卡特勒,卡特勒正在那里往外抠卡在打印机里的碎纸。这位女工程师以期待的眼神看了卡特勒一眼,这时正好卡特勒也抬眼看见了她。于是,卡特勒咆哮起来了:“你就是那个把打印机搞垮的混蛋吗?”
尽管他的态度没有给任何人留下好印象,卡特勒还是赢得了称赞,因为他在为DEC的DPD11计算机构建实时操作系统的工作中起到了关键作用。他出色地完成了一项非常讲究技巧的任务,可以把程序缩减得更小。这是至关紧要的,因为程序越小,它便运行得越快,消耗的内存也越少。卡特勒用了一种很简单的方式来表达他希望代码更紧凑的愿望,在他的办公桌上放了一个橡皮戳,上面刻着:“大小就是目标”(Size Is The Goal)。当他觉得程序员要增加的功能会大大增加内存需求时,他就会使用这个戳盖在驳回备忘录上。这个戳让程序员们对增加代码更加谨慎,同时也提供了一个笑料。很快,很多男员工的房间里都出现了一句刺眼的短语:“大腿就是目标”(Thighs Is The Goal)。
对于他的同事来说,卡特勒是一位英雄,一个不能用平常规则来评判的超人。“他让你感觉你是他的一位同伴,一起成就伟大的同伴,而且你再也不会有更好的和更值得信赖的同盟,”一个同事这样说。卡特勒希望所有人都表现得很完美。为了传达紧急的消息,他会把大家召集到一起。他喜欢奚落他的伙计们,但是为了改善他们的代码质量,他会不遗余力。有时,他甚至捡起被扔到垃圾桶里的代码,用红笔纠正了上面的错误后还给代码的作者。
卡特勒不仅很严厉和冷酷无情,他还要求他的团队要绝对诚实。“如果你对他花言巧语放烟雾弹,或者你试图欺骗他,那么他会对你残忍无情,”一个同事说,“他不会只是让你自杀,他会攻击,而且他不会忘记。”
他也很吝啬表扬别人。罗杰·海恩(Roger Heinen)是卡特勒很喜欢的一名程序员,他经常渴望他的导师可以对他说句好话。“当你做过头和犯错误时,他会立刻批评你,”海恩说。在经历了这样的一次打击后,海恩想知道卡特勒是不是还很看重他。因为太害怕而不敢问,他把手伸进办公桌里,取出一张字条,那是卡特勒一段时间以前写给他的。纸条写得很简单:“罗杰,你真的把工作做得很好。谢谢,戴夫。”
一个强有力的贵人让卡特勒有可能在DEC红了起来。在早期,卡特勒对待编码的认真态度和积极主动的领导风格吸引了戈登·贝尔(Gordon Bell)的注意,戈登·贝尔是DEC的最高工程官员,也是大多数重要计算机产品的设计者。贝尔是很少见的既有技术天赋,又有策划才能的人,他在1960年加入DEC,当时他二十六岁,刚从MIT毕业。在接下来的十五年中,他“领导、论证、思考并建立了很多计算机策略,这些策略把DEC变成IBM的最强大的挑战者”。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jack100200/archive/2009/09/08/4533208.aspx
微软操作系统最核心开发故事 第1章 代码勇士(2) - 天地之大,任我游! - CSDN博... 微软操作系统最核心开发故事 第1章 代码勇士(1) - 天地之大,任我游! - CSDN博... 微软操作系统最核心开发故事 第1章 代码勇士(3) - 天地之大,任我游! - CSDN博... 微软操作系统最核心开发故事第2章:代码之王 - CNET科技资讯网 微软操作系统最核心开发故事第4章:死胡同 微软操作系统最核心开发故事第3章:部落 - CNET科技资讯网 微软操作系统最核心开发故事第3章:部落 - CNET科技资讯网 从头开始编写操作系统(2) 第1章:介绍 - xiaoxiaoyaya的专栏 - CSDN... ]微软等数据结构+算法面试100题全部出炉 - 结构之法 算法之道 - CSDN博... 微软(美国)产品开发组的团队角色 - CSDN软件研发频道 十大开发代码原则 十大开发代码原则 诺基亚自爆与微软交易蕴藏10大风险 - CSDN.NET - CSDN资讯 微软展示Windows 8操作系统 系统十大特性曝光(图) 微软展示Windows 8操作系统 系统十大特性曝光(图) 我的股票操作系统1 天地之合-2 珍藏版、微软等数据结构+算法面试100题全部出炉 - 结构之法 算法之道 - CSDN博客 横空出世,席卷Csdn [评微软等公司数据结构+算法面试100题] - 结构之法 算法之道... 互联网巨亏,微软怎么办? - CSDN.NET - CSDN资讯 微软的再度崛起 - CSDN.NET - CSDN资讯 Linux基金会:Linux已经战胜微软 - CSDN.NET - CSDN资讯 微软历代手机操作系统一览-华军资讯 微软Windows7操作系统提速技巧总结