喷气推进实验室的 Lisping (2002)

2021-08-09 11:19:32

在我看来,软件工程师的可互换组件模型的标志是 Java。不多赘述,我只想说,用Lisp编程,Java的缺点是显而易见的,用Java编程意味着一个持续不断的痛苦的生活。所以我发誓我永远不会成为 Java 程序员,这让我在 90 年代后期几乎无法参与 90% 的软件工程工作。这是可以的,因为我正在设法将一份相当成功的职业作为研究人员整合在一起。但是在Remote Agent之后我发现自己越来越沮丧,而在Google工作的机会恰好与当地的挫败感最大。我决定为 Google 工作的原因之一是他们没有使用 Java。所以当然你可以猜到我的第一个任务是什么:领导公司的首次 Java 开发,最终成为 Google AdWords。谢天谢地,我有一个初级工程师为我工作,他实际上对 Java 有所了解,而且并不介意。在古老的上下级关系传统中,他做了所有的工作,我承担了所有的功劳。 (嗯,不完全是——我确实编写了计费系统,包括一个非常巧妙的安全系统,即使在不诚实的员工面前也能保证信用卡号码的安全。但 Jeremy 写了 AdWords 版本 1 的狮子份额。)我确实尝试将 Lisp 介绍给 Google。在 JPL 有一些销售 Lisp 的经验后,我得到了我所有的鸭子,做了一个很酷的演示,向广告团队的所有其他成员展示了它,让他们都相信这是一个好主意。剩下的唯一事情就是获得工程副总裁的批准。谈话是这样的: 我:我想和你谈谈一些事情……他:让我猜一猜——你想用 Smalltalk。我:呃,不……他:Lisp?我:对。他:没办法。这就是 Lisp 在 Google 的终结。回想起来,我不相信他做出了错误的决定。软件工程师的可互换组件模型似乎在那里运行得相当好。这不是我希望参与的商业模式,至少不是在组件供应商方面。所以在谷歌工作一年后,我退出并回到喷气推进实验室。当我回到喷气推进实验室时,他们让我从事——(等待)——搜索引擎!显然他们有这个想法,因为我在谷歌工作了一年,所以我现在是一名搜索引擎专家(更别提我实际上并没有在搜索引擎上做过任何工作)。幸运的是,在 JPL 从事搜索引擎工作与在 Google 从事搜索引擎工作并不相同。当您在 Googleit 上从事搜索引擎工作时,意味着实际上是在搜索引擎上工作。当您在 JPL 从事搜索引擎工作时,这意味着购买一个搜索引擎,实际上对此了解很多。 (打电话给谷歌,下订单。)你不会想知道有多少纳税人的钱因为我帮助通过喷气推进实验室官僚机构管理采购订单而支付给我。但我离题了。 Lisp 在 JPL 的消亡是一场悲剧。该语言特别适合通常在这里完成的那种软件开发:必须在极其紧张的预算和时间表下开发的独一无二的、高度动态的应用程序。这种语言在那种环境中的功效由无与伦比的技术成就的长期记录充分证明。这种情况特别具有讽刺意味,因为放弃 Lisp 而支持 C++(现在是 Java)的论点是 JPL 应该使用“行业最佳实践”。这个论点的问题是双重的:首先,我们将最佳实践与标准实践混淆了。两者并不相同。其次,我们假设最佳(或什至标准)实践是与任务相关的不变量,即编写文字处理器的最佳方式也是编写航天器控制系统的最佳方式。不是。看着这一切发生,真是令人难以置信。我今天的工作(我现在从事软件验证和验证)是解决可以直接追溯到使用语义定义不明确的纯命令式语言(如 C 和 C++)的问题。 (Java 的情况稍微好一些,但也不是很多。)但是,当然,显而易见的解决方案——使用像 Lisp 这样具有明确定义语义的非命令式语言——不是一个选择。我什至不能说 Lisp 这个词,而不会巩固我作为一个疯狂的疯子的声誉,他认为 Lisp 是一切的答案。所以我闭嘴(主要是),眼睁睁地看着数百万税金被浪费掉。 (对于这种公然浪费资金进行救援,我会寄希望于草根的愤怒浪潮,但是,唉,就政府工作中经常发生的令人发指的浪费而言,这只是昙花一现。)