打字猴:1.705557679e+09
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号区域内一名真正研究计算机的科学家。我还曾尝试着调换部门,但我既没有相关证书又无工作背景,这几乎是不可能的。
1705557721
1705557722 尽管如此,我在贝尔实验室5年的大部分时间里,都在从事设计编译程序的工作。我花了好几年的时间设计并运行了一种我称之为“HEQS”的语言,也就是“分级方程式计算器”(Hierarchical Equation Solver)。这是一种关于方程式的语言,为那些知道如何列出方程式,但又缺少足够的数学知识或时间来解方程的商务人士而设计的。这一名字体现了UNIX操作系统工具程序所必备的短小、可爱,但它还是“邪咒”(hex)的音近义异词,简明地反映了我暗地里对在5号楼那段生活的病态看法。
1705557723
1705557724 与lex或yacc相似,HEQS是非过程语言,使用者可以说出他们想要做的事情(如“求解这些方程”)而不需要明确列出完成任务的过程(相反,FORTRAN语言和C语言都是过程语言,需要程序员极其痛苦地列出如何执行任务的详细细节)。在HEQS的最终版本中,你可以让它求解上千个代数方程(线性、非线性或二者都有),它也会告诉你因为在你输入方程式时所犯的哪些错误使得求解进行不下去。HEQS还为分析一组方程式提供了工具,使用者可以检验输入和输出之间的关系,从而弄清楚一个变量值的改变通过怎样的链条影响到另外一个变量值。从本质上说,HEQS使AT&T中的商务使用者把时间花在阐明他们的业务活动或是会计模型的关系上,而不必担心怎样去进行计算。
1705557725
1705557726 6年后,当个人计算机被广泛使用后,像Visicalc和Lotus这样的电子制表软件为完成相同的工作任务提供了工具。而在那之前,AT&T总部的各种商务人士都是利用HEQS来进行模型计算的,我们中心的很多程序员也将HEQS用在所开发的应用程序中,作为一种计算方程式的工具。在《AT&T技术杂志》(AT&T Technical Journal)的一期中,我对HEQS进行了介绍,很高兴借此涉足研究领域中。[4]
1705557727
1705557728 我通过研究lex和yacc来设计HEQS编程语言和它的编译程序,独立完成了HEQS的开发工作。当使用者输入想要求解的方程式后,我所开发的程序就会将这些方程式进行分组,重新分成更小的、可以同时计算的方程组,从而使得一组方程式计算出的结果可以作为进行下一组计算所需要的输入值。受到我在贝尔实验室上过的计算机科学课程的启发,我意识到我可以将一组方程式里的每一个变量都用一个定向坐标图里的点来表示,这样一来,重排方程式就相当于在坐标图里把图形分解成有着紧密关系的分向量。我天真地以为在做真正的数学研究,并以此为荣。
[ 上一页 ]  [ :1.705557679e+09 ]  [ 下一页 ]