打字猴:1.705557671e+09
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
1705557710 当20世纪50年代末,IBM的约翰·巴克斯和他的团队开发FORTRAN语言,也就是“公式翻译”语言的时候,他们希望让程序员用这种语言来运算复杂的数学公式。编译程序必须将FORTRAN语言命令翻译成按顺序排列的儿童语言一般的机器编码,以便简单的计算机逻辑电路能够执行。编译程序不但需要将合理的命令翻译成儿童语言,还需要拒绝翻译不合理的或意义不明确的命令。如果你让它编译“狗这条!带散步”这样的命令,它必须要喊“犯规”,简而言之,编译程序要理解语法。
1705557711
1705557712 语法就是合理的句子要满足的一整套规则。成年人不用思考就能本能地认识到语法,但计算机必须按照规则来。巴克斯开发出一种数学形式,用来表述、分析语法,有助于完成语言翻译任务。这种形式在那些简单的编程语法上,也就是在不如自然表达的语法复杂和微妙的编程语法上很好用。巴克斯的这种形式被称为“巴克斯标准格式”(BNF),为创造语法上相一致的计算机语言提供了一种方法,可与诺阿姆·乔姆斯基发现的“生成语法”相提并论。利用“巴克斯标准格式”,我学会了如何设计短小的语法上相一致的计算机语言。
1705557713
1705557714 BNF可帮助你界定你的计算机语言的语法。它能让你设计出一种编程语言,对你的语言做句法分析并只接受那些语法上正确的句子。但到此为止,任务只完成了一半。任务的另一半就是完成编译程序的余下部分,将语法正确的句子翻译成儿童语言。这是一种极其乏味和困难的任务,对于人们赖以研究数学或控制航天器的程序而言,翻译上的一个小错误都是潜在致命的。
1705557715
1705557716 UNIX操作系统对于程序员而言具有令人激动的开放环境。它含有两个我见过的最美好的工具程序:分别被称为“lex”和“yacc”,它们让我毫不费力地创建编译程序。lex是“词汇分析器”的缩写,yacc代表“目前为止又一个编译程序的编译程序”(Yet Another Compiler-Compiler)。像很多UNIX工具程序一样,人们用短小、可爱的首字母缩写形式来命名“yacc”。你可以利用lex来创建子程序,识别你语言中的所有单词;可以利用yacc来创建另一个子程序,识别并分析合理的句子,然后执行你认为合适的命令。lex和yacc都是“非过程性”程序,你不需要写下词汇分析和句法分析的所有细节。相反,你只需要告诉它们你希望识别怎样的语法,它们就会编写出程序来完成这项任务,所利用的算法规则可以回溯到计算机先驱艾伦·图灵和史蒂芬·克林使用过的匹配模式。有lex和yacc作为帮手,我学会了创建我自己的计算机语言。
1705557717
1705557718 费曼图出现之前,只有像施温格和费曼这样的天才人物才能计算出量子力学的各种可行性,费曼图出现后,平凡的物理学家都可以不费脑子地进行计算。与此类似,这些句法分析工具允许普通程序员毫不费力地设计出计算机语言,而此前这样的工作需要付出极大的努力才能完成。
1705557719
1705557720 我过去总是将计算机应用等同于数值计算。现在,当接触到计算过程中的语言方面后,我非常遗憾以前没有认识到。我幻想着能够逃离商务分析系统中心的工作,而成为10号区域内一名真正研究计算机的科学家。我还曾尝试着调换部门,但我既没有相关证书又无工作背景,这几乎是不可能的。
[ 上一页 ]  [ :1.705557671e+09 ]  [ 下一页 ]