谁能成为“代码勇士”(2)——《观止》

来源:互联网 发布:苹果7怎么改电信网络 编辑:程序博客网 时间:2024/04/30 09:07

 

    

 

 

图书内容:

 

 “ 微软创建Windows NT 这个计算机技术领域惊人突破背后的故事,揭示了成功创新的艰难和痛苦。集中表现了卡特勒的反复无常、激励和鞭策团队的能力,色彩鲜明地描述了这个巨大企业的人间戏剧,揭示了他们的压力、失望以及最终胜利。而胜利来自于战胜没完没了的最后期限,与对手的竞争,与不可避免又无处不在的程序缺陷的无休止的斗争——其中可能就包括致命的问题。”

 

 

 

       在下一个赛季时,卡特勒想返回比赛,但是在开赛前一天的晚上,医生告诉他,如果他上场的话,他的腿就有可能永远都不会好了。卡特勒无奈退出了比赛。


        橄榄球生涯结束后,卡特勒把所有精力都放在了学习上。他数学很棒,想过要学理科,但是最后还是决定学工科。在他19651月毕业时,有人让他到通用汽车公司做计算机编程的工作。和其他大公司一样,通用汽车公司也开始在20世纪50年代末期把它的业务记录从纸上转移到计算机里。但是卡特勒并不渴望加入通用汽车公司。他对电脑一窍不通,在他的印象里,计算机似乎很危险,甚至不吉祥。在20世纪60年代中期,许多人对计算机都有这种反乌托邦的看法。对这些咯吱咯吱咀嚼数字的机器,人们还抱着怀疑的态度,有的时候还很反感,因为他们有控制人类的倾向。计算机似乎总是要人类来服从它们的意志,强迫人们除了服从电脑的命令外做不了什么。


      这使计算机的名声很不好,也让人们对为计算机编程这样的工作没有好感。几乎没有人愿意说自己是个程序员,如果有人真的这样承认,那么人们会觉得他很奇怪。在卡特勒从奥利维特学院毕业前几年,最顶尖的程序员在荷兰,有一个物理学家在他的结婚证上注明自己是程序员。令他沮丧的是,官方人员以没有这样的工作拒绝了他的结婚申请。


      卡特勒对程序员工作持着一种非常墨守成规的看法,他很在意一份工作是否能给他带来自尊和地位。对于一个出身相对贫穷并决心依靠自己的力量攀登经济高峰、不向权势低头的年轻人来说,编程“似乎是种非常缺乏创造力并且枯燥的工作”。那些做程序员工作的人遵循着“一套固定不变的规则”,不是能规划自己蓝图的领导者。

他不想搭上软件的边,直接拒绝了通用汽车公司。相反他进了杜邦公司。他很快就适应了这个稳健繁荣的化学巨人。他留着短发和军人那样的胡须。他第一个想到的就是要挣钱;他和一个在大学里认识的女人结了婚,而且已经是一个孩子的父亲了。


      杜邦公司把卡特勒安排到一个帮客户寻找材料用途的部门工作。他接手的第一个工作是为一种新的方法建模,斯科特纸业(ScottPaper)打算用这种方法来制作泡沫保温棉,用在夹克衫和其他外套上。这个模型非常复杂,需要使用电脑来创建。于是卡特勒只好放下了所有的事情去了一所由IBM开办的学校,在那里他可以学到怎样给IBM电脑编程序。


       卡特勒在学校里呆了一周。他感觉到自己的锐气第一次受挫了。编程“是最奇怪的事情,因为你过去习惯了做一些事情,而且你觉得你做的是对的”,后来他说:“但实际上错了。你只是没有注意到它是不对的。电脑对差不多正确是没有一点宽慰和原谅的。差不多就意味着你还是错的。”


      即使对于很有经验的程序员来说,他们也会发现他们的工作是非常枯燥无趣的。当然,在那时,还没有人自己拥有电脑。通常是十几个程序员共同分享一台大型计算机。这种大型计算机的大小足以把整个房间塞满,它能够成批地把很多工作一下子处理完。在批处理任务中,程序员把指令打到穿孔卡片上,向队列中增加一个栈,然后等待结果。因为这种大型计算机很贵,所以批处理任务的日程安排是非常严格的。很多时候,要花好几个小时甚至更长的时间才知道一个程序的命运。如果失败了,单单去纠正穿孔错误就可能要花上程序员一整天的时间。


      卡特勒回到了杜邦公司决定在程序上有所成就。这个工作激起了他的兴趣,因为在程序世界里,他是那个环境的控制者。他还发现他有一种神奇的能力,可以一下子把七零八落的不同程序片段都记在脑子里。他开始渴望编程。他没有耐性排队等待杜邦公司的电脑设备,所以他在半夜工作,那时用计算机很便宜而且他能够不慌不忙地汇编和修正他的卡片。“几乎没有任何人在那儿,”他回忆说,“出错误的时候我可以再试一次,在我想用的时候就用,不想用的时候就不用。”


        相对于整夜编程来说,做泡沫保温棉并没有让卡特勒晚上睡不着。不到一年的时间,他已经被电脑的魅力深深地吸引了。在电脑上找到解决问题的最佳方法之后,他很快就对问题失去了兴趣,而疯狂地爱上了电脑。事实上,卡特勒找到了人生目标。“我真正想要的是在电脑上工作,而不是用它们来解决问题。”

于是,卡特勒开始寻找一个需要编程的新工作,他找到了杜邦公司的另一个部门,这个部门需要有人来帮助维护Univac制造的中央电脑。20世纪50年代时,Univac生产的电脑在处理数据方面是最好的,但是到了20世纪60年代后期,这个公司开始走下坡路了。杜邦公司叫卡特勒提高那些使用多年了的Univac电脑的可靠性,这意味着要调整机器的操作系统。在那之前,卡特勒甚至从来没有考虑过操作系统。不过,公司的电脑专家看起来知道的也不是很多,于是他全身心地投入研究。


        可以把计算机程序大致分为两类。应用程序,简称为“应用”(apps),是软件世界中看得到的一部分。它一类 包括被普通用户使用的程序。举例来说,应用软件可以跟踪定单或者存货,检索名字和电话号码,准备要打印的文档或者控制时事通讯的设计。


        另一方面,操作系统也是软件世界中看不到的一部分。它们是计算机的心脏,在背后跳动。表面看起来似乎所有的事情都是应用软件做的,但是事实上很多任务都是操作系统做的,比如打开文件、关闭文件、为要储存的信息建立目录、指挥计算机的输入、输出、存储和网络设备。


       在数字计算机逐步成形的年代里,也就是在第二次世界大战之后,在设计者们眼里,无论是操作系统还是应用软件都是以后再考虑的事情。和由程序组成的“软件”不同,由电子电路组成的“硬件”太难了,以至于工程师们不敢想像何时能完成它。硬件中,最重要的一类是真正将执行送给计算机的指令的电路系统,也就是处理器。第二类设备用于数据输入输出的。第三类设备用来储存信息。第四类设备允许把信息通过专门的电缆或者电话线发给另一台计算机。


       通常,只有在硬件到位后才考虑软件问题。因此,设计计算机时并不知道以后运行什么软件,程序员只能做电脑硬件允许做的事情。艾兹格·迪科斯彻(E. W. Dijkstra)是计算机编程方面的著名理论家,他曾经概括了在计算机形成时期人们对编写代码的普遍态度。他这样说:可怜的程序员是什么处境呢?说句实话,他们很难被注意到。首先,起初的计算机太大了,你根本就不能移动它们,除此之外,它们需要太多维护工作,以至于很自然地,机器是在哪里开发的,人们在哪里使用它。其次,程序员做的是(某种程度上来说)根本看不见的工作,没有什么魅力。你可以把机器展示给参观者们,那比几页代码的吸引力要大几个数量级。但最重要的是,程序员自己对所做工作的看法也很平常:他工作的意义来源于计算机这种超棒的机器的存在。因为这种机器是独一无二的,所以他知道他的编程只在本地有意义。因为机器只会使用不长一段时间,所以他知道他的编码的延续价值很少或者没有。编程工作表面上看起来很简单。只是写个请求给电脑。这种请求应该是以电脑能够明白的方式表达的。而且,这种方式只有特定的电脑能够明白。同样的请求,完全以同样的方式编写,送给有着不同设计和电路的计算机,就会变得莫名其妙。


        除了成为特定计算机的奴隶外,最早的计算机程序是很简陋的。在第二次世界大战之前,当时的计算机主要是机械的,很多时候,程序的价值和人工反转开关、重新安排线路或切换齿轮的价值差不多。在20世纪30年代,要让那个时代最强大的机械电脑——微分分析仪(Differential Analyzer)——去解决一个新的问题,准备工作就要花很多天。十年之后,要让早期的数字计算机去解决一个比较难的问题,仍然要花几天时间做设置工作。

      

       更灵活一些的机器从打孔卡片或者纸带上面读取用户的请求,不过卡片或者纸带还是手工反馈给机器的。这种初级的编程方式迫切需要改进。


      在1944年发生了突破,约翰·冯·诺依曼(John vonNeumann)是出生在匈牙利的数学家,居住在美国,他提出了存储程序的概念。这个概念与这个领域中的其他人的想法很相似,但是冯·诺依曼最清楚地看到了它的意义。使用存储程序,送给计算机执行的指令可以保存在机器自己的内存中,像对待数据一样。这将大大提高启动一个程序的速度,而且可以很容易地修改程序,或者从一个程序切换到另一个程序。

随着存储程序的概念在初生的计算机文化中的广泛传播,编程变得越来越引人注目,很快吸引了一些拥护者。不过这是很艰难的一件事。数字计算机有两种状态,开或者关,所以它只能对只包含1(开)和0(关)的二进制的消息做出响应。程序中的所有元素最终必须使用这两个数字表示出来,这样使得即使普通的数学运算也很容易变得很复杂,令人眼花缭乱。正如一个观察家所说的,在20世纪40年代后期,为计算机编程是“令人发疯一般地困难”。

    

      不久以后,程序员们找到了更简单的方法来产生二进制串。他们首先设计了特殊的打字机,可以自动输出二进制代码。后来,他们转移到更友好的“汇编”语言,用字符和符号来代表10。使用汇编写程序是一大进步,但是还需要严格遵循晦涩的计算机指令集。程序员必须深刻理解指令集才能写出高效的汇编代码。而且,不同型号的计算机使用的指令集是不同的,取决于它们的微处理器是如何设计的。这意味着一旦某种计算机废弃不用了,那么程序员费尽力气学会的这种汇编语言知识就会变得一钱不值了。

 

 

原创粉丝点击