1705557660
但在1980年的AT&T,整个公司都在用C语言,C语言是一种既优美又实用的计算机语言,10年前由丹尼斯·里奇(Dennis Ritchie)在默里山发明出来。他原本是将C语言设计成一种高级工具,用来编写UNIX操作系统的可移动式版本的。UNIX操作系统是也是由肯·汤姆森(Ken Thompson)和里奇在默里山发明的[2]。现在,从电话机交换系统到语言处理软件等几乎所有东西都是利用C语言在UNIX系统写出来的,都有着不可思议的样式。最终,甚至通常只对小数点后有几位数感兴趣的物理学家也开始放弃难看实用的FORTRAN语言,转而选择有着诗歌风格的C语言。编程当时正处于革命的最后阶段,而我才刚刚开始学习。
1705557661
1705557662
编程革命的信条要求程序语言必须是人们能够理解的信息文本。而在此之前,情况并非如此,因为计算机程序要储存在昂贵且有限的计算机内存中,程序员一般只关心将程序写得尽可能简短、精炼。程序员以编写简要、凝练、隐晦甚至令人费解的程序为荣。只要计算机运行得够快,设想能够得到执行就可以了,形式不重要,内容才是王道。因此,计算机程序非常容易出错,而且不容易让人理解、修改——不言自明的是,程序只是为了计算机而写,使得计算机可以机械地执行命令。因为编写非常困难,一个计算机程序通常能够占用相当长的时间,在存续期间内,程序的维护、修改、升级成本都非常高昂。这也是计算机千禧年问题(Y2K)为什么令人担忧的一系列背景。
1705557663
1705557664
当编写程序时,你在做些什么呢?你尝试着利用一种语言描述一个想象的世界,并要尽可能准确地说清楚它的细节。你尝试着在一台机器上创造这个世界,而这台机器只能理解和执行简单的命令。你只能通过准确的指令实现这一切,通常需要长达几十万行的指令。你的指令序列将由毫无理解能力、做事机械的计算机毫无歧义地予以执行;同时,你的指令序列还要能被自己和其他程序员阅读、理解、记忆和修改。就如同是个力图解决形式与内容之间的张力一样,编程必须解决内容的可理解性与形式的简洁性之间的矛盾关系。为此,你所使用的语言就至关重要了。
1705557665
1705557666
在贝尔实验室,人们将编写代码本身视为需要工具的任务。他们鼓励程序员将每一个他们负责处理的具体程序都视为一类更通用的应用程序的一个实例,并由此利用计算机来设计出这类应用程序。也就是说,他们设计程序来编写部分或是全部程序。贝尔实验室的UNIX团队出于热爱而非责任开发出一整套编辑和分析工具,用来帮助人们撰写、检查和修改程序。在汤姆森和里奇的UNIX编程环境中,计算机不仅仅是执行程序的自动装置,还是更重要的、用来创造程序的一种工具。计算机不仅仅是锤子,还是一座熔炉,用来设计出下一代的锤子。
1705557667
1705557668
贝尔实验室的技术人员不但是在生产程序,他们还考虑程序需要完成的很多子模块任务(如阅读输入指令、解方程、设计输出格式等)。然后,他们写出短小、专用的编程语言,这些编程语言能够用来生成更大程序中的不同子模块任务。最后,他们用这些小的语言设计出整个程序本身。他们总是能从任务中归纳出工具来。
1705557669
1705557670
因为AT&T是一个政府管制的企业,禁止通过与IBM和Digital等公司竞争来销售软件以获取利润,贝尔实验室就将这些工具免费发布给各个大学。这种扩散传播产生了整整一代程序员,他们认为编程不只是一项例行工作,相反,它是一种以计算机为媒介的文学创作上的努力。程序看上去的清晰表达、优美文字、良好结构与程序的高效运行同等重要。
1705557671
1705557672
柯尼汉和普罗格在20世纪70年代写了一本著名的、影响广泛的书,叫作《编程风格的元素》(The Elements of Programming Style)。这一书名是向斯特伦克和怀特那本如何写好文章的经典论著《风格元素》(The Elements of Style)致敬。这些成果正式把编写程序和编码开发看作一门艺术的潮流中的一部分。
1705557673
1705557674
当我进入商业分析系统中心时,这种文化已经广为流传了。所有新进雇员都要学习UNIX操作系统及其Bourne指令解释的脚本语言,还需要学习用来编程的C语言、用于统计分析的S语言以及线性格式的文本编译程序“ed”。我现在还记得在比尔·乔伊的图像文本编译程序“vi”刚发布不久,学习使用它时的那种兴奋之情。值得称赞的是,中心组织了一系列相当于大师级的计算机科学课程,几乎全部由来自于纽约哥伦比亚大学的教授讲授。我从约翰·肯德那里学会了软件设计和运算法则,约翰是一位举止温和、低调克制的视图软件专家;我们从戴维·肖那里学会了数据库理论,他后来创立了投资公司D.E.肖公司和第一个免费电子邮件服务提供商Juno。在D.E.肖公司里,戴维聘用了杰夫·贝索斯,后者后来离开后创立了亚马逊网站。
1705557675
1705557676
戴维当时已经是一位行事随心所欲的企业家了。他运营着一家软件公司,同时在斯坦福大学研究着计算机科学。当我遇见他时,他仍然保持着一种不修边幅的学者风度,与其在商场上的自信完全不相匹配。他是现在无处不在的资本家学者的早期典型。他的后裤袋中装着一个小小的、跟他体型很相配的皮质日记本,里面记着他的各种时间安排。这种日记本是宾夕法尼亚州生产的,很有美国中层管理者的感觉,带着用线圈穿起来、以月为单位的插页,上面留有空白可以列出约会和待办事项。这种本子看起来完全是一派毫无学者气息的公事公办的样子,仿佛是后来很快就开始流行的欧洲Filofaxes牌记事本以及10年后的美国产商务通的早期版本。
1705557677
1705557678
显然,戴维是一个很有想法的人。那时他就开始计划设计一种被他称为“NonVon”的计算机,这种计算机有很多小型处理器和存储器组成。这一设想是对带有一个大型中央处理器的标准计算机的颠覆,标准计算机的设计自从约翰·冯·诺依曼和20世纪40年代的电子数字积分计算机开始就已被广为接受了。戴维的自信激起了恐惧与嫉妒。约翰·肯德曾半开玩笑似得对我抱怨说,在竞争哥伦比亚大学有终身教职的他和其他副教授们,都在努力争取十分有限的政府资助来做研究的时候,戴维总是在谈论着那些规模宏大得多的、野心勃勃的计划,实现NonVon的计划最终将需要几十到上百名人员。约翰认为,与戴维那宏大的愿景和近乎吹牛的、不假思索的自信比起来,他和他同事在获得终身教职方面已经没有什么机会了。
1705557679
1705557680
对于戴维恢宏的“世界观”,约翰的看法是对的,但对于戴维追求卓越所走过的准确路径,约翰的看法可能是错误的。此后不久,戴维就离开了哥伦比亚大学,前往摩根士丹利传说中的南捷罗·塔泰格利亚团队工作,从事配对交易[3]。当这种努力最终结束的时候,戴维创立了D.E.肖投资公司。他的新公司将自身视为科技与金融交叉领域的专家,制造用来寻找交易机会的高速计算机系统,并呵护这种系统建造者的名声。1966年的《财富》杂志称其为“今日华尔街上最具诱惑力、最神秘的一股力量”。我认识华尔街的一些招聘经理,只要是从D.E.肖公司出来的任何人,他们都愿意给面试机会,目的就是想了解这家公司不为人知的操作内情。1977年,我受邀介绍戴维作为一次会议午宴的演讲嘉宾,我介绍到“……你可以将D.E.肖投资公司视为蝙蝠的巢穴,而将戴维看作蝙蝠侠,他注视着世界,自己却隐身于黑幕之后。”但建造一台无风险的赚钱机器,特别是很大规模的机器,并不那么容易。世界上并没有那么多不承担风险就好赚的利润。最终的结果是,为了让更大规模的资金获得同等水平的收益,就需要采用风险更大的策略。1998年,与美国银行合作的D.E.肖投资公司,据称由于采用了同搞垮长期资本管理公司、令许多其他对冲基金或投资银行损失惨重的相同的投资策略,损失了将近10亿美元。
1705557681
1705557682
与此同时,1981年的时候,我参加了贝尔实验室提供的计算机科学课程,学会了编程的实用技术。我特别着迷于语言设计和编码撰写,花了大部分时间来创造特别的计算机语言,以便于使用者解决特定问题。
1705557683
1705557684
在高级语言中,像Java、C语言甚至是传统的、已被摒弃的FORTRAN语言,利用它们,你可以轻松写出简短精密的命令,指挥计算机完成复杂的操作。你编程的方式可以非常接近于一个受过教育的人思考和谈论数学的方式。但是计算机的中央处理器却像是极简单的大脑,实际上只能执行逻辑和数学运算,是一个“低能的天才”(idiot savant),被设计为只能“理解”并对简单的儿童语言做出反应。这就像你想告诉一个只掌握了简单儿童语言的小孩(但却对超长的命令串有着非常好的记忆力),去牵着狗散步。你不能只说:“带着狗去散步!”这种说法集中了世界上过多的知识;相反地,你必须将这种高级的、不够具体的指令翻译成一系列非常初级的、按顺序排列起来的一系列动作,每个动作都要用儿童语言描述出来。你必须这样说:
1705557685
1705557686
牵狗来;
1705557687
1705557688
找到拴狗链;
1705557689
1705557690
把拴狗链系在狗脖子上;
1705557691
1705557692
握紧拴狗链;
1705557693
1705557694
打开前门;
1705557695
1705557696
跟着狗走5分钟;
1705557697
1705557698
如果狗离开人行道,就用拴狗链将它拉回来;
1705557699
1705557700
……
1705557701
1705557702
回到前门;
1705557703
1705557704
进门;
1705557705
1705557706
给狗松开拴狗链。
1705557707
1705557708
如果你想设计一种高级语言,让它的使用者发出如“遛狗”这样的高级命令,你必须提供一个编译程序,将这一命令翻译成中央处理器能够执行的简单语言。很显然,翻译过程中的一个错误,或仅仅是某处还不够明确,狗和小孩就永远也回不来了!
1705557709
[
上一页 ]
[ :1.70555766e+09 ]
[
下一页 ]