老顽固

  下载本文的PDF版本 PDF

代码的错觉

Stan Kelly-Bootle,作者

真实的、抽象的和被感知的

不,我不是在利用那些畅销书标题的“多米诺效应”来捞钱。鉴于容易上当受骗的读者带来的丰厚回报,这种诱惑是巨大的,但在体面的作家看来,这种诱惑会被文学搭便车的耻辱所抵消。因此,《卢浮宫指南》变成了《达芬奇密码傻瓜指南》,可以说是从一本封面上榨取了几头炙手可热的奶牛。同样,传统的食谱书也用诸如《达芬奇食谱——为忠实信徒准备的圣餐》之类的标题来提升销量。丹·布朗的虚构小说销量统计数据继续令人惊叹,巧妙地受到剽窃指控和随后的诉讼(丹被判无罪)的刺激。他的书的流行和普及的一个奇怪的副作用是,在谈话中听到标题被缩短,例如在微软自助餐厅听到的这段对话

“你肯定读过《代码》吧?”

“还没,但我真的必须读一读——评论褒贬不一。”

尚未达到“丹·布朗效应”的是理查德·道金斯那本亵渎神灵、高调炫耀的《上帝错觉》1引发的日益增长的反应,包括麦格拉思夫妇的反驳《道金斯错觉?》,其中巧妙地暗示了有神论者的恼怒。2 同样,我在这里的标题中使用的“错觉”可能暗示着某种利用道金斯名人的愿望,但我最不希望的就是让“老顽固”专栏被拖入公开的神学推测和争议之中。我从经验中得知,即使是对竞争的编程语言和方法论的相对优点的准神学评论,也可能导致打架斗殴,以及最可怕的回应:“取消我的订阅。”

相反,我正在形成的主题和标题是由约书亚·布洛赫、尼尔·加夫特等人提出的几个“Java谜题”引发的,这些谜题触及了与编程的世俗方面高度相关的概念——即感知和“代码幻觉”。事实上,我曾想把这个专栏命名为“想买些幻觉吗?”,为了达到最佳效果,必须由玛琳·黛德丽用她那沙哑的声音,闪烁着渔网袜来吟唱。3

将短暂的、可治愈的代码幻觉与更深层的、几乎难以解决的代码错觉进行比较是有用的。正如安布罗斯·比尔斯所说,“错觉是一个最受尊敬的家庭的父亲,这个家庭包括热情、爱慕、自我否定、信仰、希望、慈善以及许多其他善良的儿女”(《魔鬼辞典》)。自我否定似乎是主要的后代。我怀疑我们将所有与我们意见相反的意见都视为错觉,但在相反的方向上却对这种指责感到不满。相比之下,幻觉似乎更易于理性讨论。我们对胡迪尼的魔术感到好笑,并渴望了解我们是如何被愚弄的。同样,当我们坚持像理解其应有的含义那样阅读一行Java代码时,当约书亚·布洛赫粉碎我们的“代码幻觉”时,我们会感到非常欣慰和感激。我们因此成为更好的程序员,努力避免在我们自己的程序中出现同样的幻觉。

“软件是工程”和“软件不是工程”的信念超越了幻觉。它们已被贴上危险的错觉的标签,两者都被指责为被称为IT的大烂摊子。“IT有多糟糕?”那些审查世界上最大的计算机项目——一个240亿美元的预算被浪费掉,以统一英国国家医疗服务体系的医疗记录和预约系统的人问道。他们认为,每年有40,000名患者死于各种各样的、可以避免的医疗和行政错误。其中许多无疑可以通过改进的、集成的计算机系统来避免,因此政府和公众对当前延误的担忧是可以理解的。一波又一波的顾问,他们都精通最新的方法论和抽象(他们有装裱好的证书来证明这一点),敦促进行彻底的修订(最常见的是将不可能实现的宏伟期望大幅降低),甚至从头开始重新启动。4

说到银弹的迷信魔法,我也曾想利用有史以来最畅销的书籍——哈利·波特系列。唉,我的一个孙子,计算机图形师卢克·贝利,受雇于哈利·波特电影制片人。这是惯常的“可能的利益冲突声明”,这在我们公平的行业中是一种被严重忽视的习俗。我必须写信给的法律专家专栏作家帕梅拉·萨缪尔森。5

软件开发的伦理是一个永恒的话题。今天我收到了彼得·A·弗里曼在他《风险在你方》专栏(“风险是你方的责任,《通讯》》2007年6月)中的评论,声明软件开发层次结构中各个级别的专业人员都有道德上的[他强调的]责任“确保他们的结果尽可能地没有风险。”

那个反复出现的“尽可能X”,其中X代表我们生活中许多理想的谓词中的任何一个,已经成为我最新的、最令人讨厌的口头禅,超过了“适当的”和“多范式性”的“微弱优势”。“尽可能X”感觉如此良好,以至于如果我们不表示屈服,就会显得粗鲁。质疑隐含的“尽力而为”的建议会让你被认为是一个愿意满足于低于假定的最佳结果的人。大问题被搁置一边,手捧碗,很少赢得认真的施舍。

不可避免的挑战仍然是:变量X的现实可实现范围是什么?实际上,在我们专业分工、基于组件的努力的喧嚣中,参数X = 无风险的可能(更不用说可接受的)值是什么?我们可以梦想零缺陷和零容忍,但这里没有可计算的函数收敛到可预测的最小值。也没有任何方法可以量化此处或彼处提出的智能修复可能会如何平滑通往涅槃的道路。我们的行业,当然是市场营销前线,避开了“最不完美!”的口号。声称“比3.141版本更健壮”当然暗示了早期的错误已被消除,但没有说出每个人都知道的事情。正如孔子所说:“程序无bug,如狗无蚤。”然后他又用另一句格言来强调这句格言:“狗无蚤,如人无谎。”克里特岛的逻辑学家会思考孔子这个人是否值得信任。

我的英雄和资深同事大卫·洛吉·帕纳斯(论坛,《通讯》,2007年6月)在回应杰夫·克莱默的文章“抽象是计算的关键吗?”(《通讯》,2007年4月)时,引用了爱因斯坦的格言:“一切都应该尽可能简单,但不能更简单。”在利用抽象构建现实模型方面,帕纳斯总结道,“找到最简单的非谎言模型[我强调]是改进软件设计的关键。”克莱默和帕纳斯都同意抽象(值得大写!)的核心重要性,但在定义上有所不同。克莱默的抽象强调需要暂时隐藏令人分心的6个细节,否则你就会过于陷入困境而无法开始。帕纳斯更喜欢迪杰斯特拉的定义:“抽象是一个同样好地代表几个真实事物的事物。”

有用的是,将这两个相关的想法合并起来,我们仍然会遇到一些认识论上的障碍。首先,如何评估特定抽象表示的“良好性”——特别是当专家抽象者在可以安全隐藏的内容上存在分歧时,通常是激烈的争吵?回想一下关于提高牛奶产量的精彩论文:“设C是一头完全均匀的球形奶牛。”再比较一下历史上的Algol 68争吵,当时霍尔和迪杰斯特拉指责范·韦恩加登及其同伙误用抽象和复杂化形式主义。当然,计算机语言设计应该是检验关于抽象和模型有效且可证明的部署的宗师理论的关键试验台。正如帕纳斯指出的那样,迪杰斯特拉关于抽象的观点已经存在了40年,“并且是此后提出的每一种软件开发方法的基础。”这是否有点像说,“基督教是一件美妙的事情,前提是有人尝试过它?”

其次,指责不充分的抽象是谎言有点循环,并且很难在不重新忍受近几十年来关于真理相对性的后现代主义论战的情况下,不带感情地解析它。物理学家的标准模型绝不是一个不充分的谎言。出于已知的实验观察原因,那里的“真实事物”是从转瞬即逝的幽灵轨迹中推导出来的。你几乎可以说“模型创造(物化)了我们的现实”,而不是相反。我在单数日是柏拉图主义者,所以目前我相信真实的事物和思想世界都存在于那里,等待被感知和建模。

第三,在讲堂之外,阻碍我们构建“真实”软件模型的愿望的是那个古老的魔鬼——需求:易变性。我们的产品在超出我们随意称之为“灵活和可扩展系统”的混乱变化之海中沉浮。变化渗透到各个层面,当我们沿着链条向上或向下移动时,会产生不同的影响。弗里曼强调了创建组件时的责任挑战。当然,组件必须履行其约定的合同,通常依赖于子组件信守承诺。借用伯特兰·罗素的宇宙起源轶事,这就像是“一直都是乌龟”。死刑有帮助吗?嘲弄和解雇都失败了。对于那些负责全局的人来说,看到组件被正确地粘合在一起(这很难让人放心),弗里曼提出了一些可能有所帮助的高级软件分析工具。反过来,这些工具将需要最可靠的组件和可用的组件。一直都是元乌龟?此外,我们的代码(最终!)在硬件上运行,而硬件的变化众所周知是以令人恼火的不连续步骤发生的,而没有经过适当的程序。

在20世纪60年代(不多不少,正是我说的)曾经说过,英国的税收制度是故意设计来粉碎程序员的傲慢的。美国国税局(被称为内部修订服务机构)是一个邪恶的税务员阴谋集团(利未的后裔,在他作为门徒马太看到光明之前[路加福音5:27-32]),他们恶魔般地安排他们的税法代码变更的时间,以最大限度地扰乱工资单软件。该软件受到阴谋集团的仔细检查,当软件似乎已经掌握了之前的税法怪癖时,就会引入狡猾的修订。这些绝不是简单的费率或水平变化,可以通过重置全局常量轻松适应。变化旨在打击现有程序的根本原则和结构。

在与世隔绝的计算机科学讲堂内(我停顿一下,插入狡猾的“也有例外”),我们确实发现了对另一个主要障碍的认识和有益的辩论,这个障碍阻碍了针对给定X值的“尽可能X”的实现。这与自然语言(NL)的不可约约的不精确性有关,我们所有的需求规范最终都依赖于自然语言。我说这话时,对我的形式主义朋友们表示充分的尊重。(参见本专栏,“形式上称为Pi的微积分”,2006年5月)。它甚至影响到最固定的形式规范,这些规范不受税收人员的突发奇想等外部事件的困扰。范·韦恩加登上下文无关文法假装避开“容易产生歧义、受上下文限制的自然语言散文”,但Algol 68委员会和编译器编写者过去/现在被迫用自然语言进行辩论(德语或荷兰语因其占主导地位的精确性而受到青睐)。迪杰斯特拉和帕纳斯都强调了自然语言的重要性和危险性。通过努力,至少在我们母语中的粗俗歧义是可以避免的。那些编写和阅读规范的人必须保持警惕并“尽可能多地”协商!正如帕纳斯所宣扬的那样,那些编程的人绝不能被名为NetPay的变量所误导。程序是UL(非自然语言)。NetPay的语义是由底层位模式如何被操纵来定义的(参见本专栏,“通用语”,2004/2005年12月/1月)。

为我们所有交流提供动力的神秘抽象是自然语言本身。它是否符合迪杰斯特拉的“同样好地代表几个真实事物”的标准,只能令人沮丧地使用自然语言(也许还有一些手势)来辩论。

读者反馈

对我的征集可引用怪癖的请求正在得到回应。来自长期忠诚、经常受苦的读者迈克尔·D·佐恩

“我很高兴听到你现在是所有老顽固中的老顽固。

“对于胡言乱语和各种粗俗的烦恼,我一直在收到一两家公司发来的通常是不请自来的励志电子邮件,这些公司提供关于各种主题的“网络研讨会”。也许只是我个人觉得,但这个词听起来像指甲刮擦真正的石板黑板一样刺耳。不用说,我无视他们的提议。在谷歌上搜索“网络研讨会”会得到890万个结果。即使考虑到通常的重复,也太多了。其中第一个是来自一个名为Webopedia的网站的有用定义。我越来越认为法国人的想法可能是正确的:在他们的语言周围建立一道坚不可摧的盔甲。

“在讨论“Alloneword”(2007年5月/6月)时,不可能不提及《芬尼根守灵夜》中的那四个(五个?)巨大的雷声(这次我记住了撇号)。我想我会把它们放在一起,运用一点犹太神秘数字,找出麦克白是否真的是邓辛南的第十二任哈里发。”

对于这些以及几个空间限制的观察,迈克赢得了稍后命名的奖品。来自乔治·詹森,另一位经常光顾且受人尊敬的电子笔友

“你引用的迷途小数点在其他地方也迷途了。一个社区读书俱乐部去年夏天读了《鳕鱼》(意思是货到付款);后面的公制到英制的换算表有几个差十的错误。”

至于“合一”和“赎罪”,[牧师的名字被隐瞒了]几年前似乎认为“赎罪”意味着“统一”。好吧,这对你来说是荣耀。问

参考文献

1. 道金斯,R. 2006。《上帝错觉》。霍顿·米夫林出版社。请注意,我使用不太崇高的属格“道金斯的”,而不是“道金斯”。来自芝加哥的时尚指南大师允许更悦耳的属格,如耶稣的、摩西的,甚至狄更斯的;也许随着时间的推移,理查德将证明这种用法是合理的。

2. 麦格拉思,A. 和 J. 2007。《道金斯错觉?》。无神论原教旨主义和对神圣的否认。基督教知识促进会。请注意标题中的“?”,反映了麦格拉思夫妇的礼貌,许多人认为道金斯的论战中缺乏这种特质。

3. 正如在比利·怀尔德的黑色讽刺电影《外国事件》中所唱的那样,该片背景设定在二战后的柏林。玛琳在她蓝色灯光角色扮演的歌舞表演女郎中,提出以“一便士”出售她所有珍贵的幻想,我想,这才是终极幻想。

4. 对于爱咬文嚼字的文字工作者来说,这是一个引人入胜的习语。如果事情“不尽如人意”,可能不得不“从头开始”。可能不得不雇用高尔夫意义上的“从头开始”的程序员,即“没有差点或让杆”。这种将 scat 和 cratch(都表示 scratch!)的同义反复混合已经走了很长一段路。

5. 萨缪尔森教授在《通讯》中的“法律视角”专栏是最高尚、最符合法庭礼仪的智慧的持续来源。呼应莎士比亚《威尼斯商人》中的鲍西娅:“一个丹尼尔来审判了!是的,一个丹尼尔。哦,年轻而智慧的法官,我多么尊敬你啊。”(夏洛克,第四幕第一场。)当然,鲍西娅本人,伪装成法学博士巴尔萨泽,正是没有声明利益冲突的缩影——即,她有兴趣拯救那个懦夫巴萨尼奥。顺便提一句,人们可能会注意到,对“不感兴趣”和“公正”之间的混淆仍在继续蔓延,以至于词典已经放弃了斗争,并宣布这两个词完全是同义词。一位博学的法官被引述说,尽管他是被告的姐夫,但他仍然“公正”。回到我们“真实”的商业世界,当萨缪尔森教授“将自己定位为公共利益的发言人”时,例如,她将深奥的白皮书翻译成通俗易懂的语言,构成“利益”的法律形而上学已经吸引了萨缪尔森教授的注意。参见:http://www.personal.umich.edu/~dditomm/cr_final_project.html

6. 抽象、分散注意力、提取和在学究式的争论中贬损!共享拉丁语词根trahere/tractus(拖动、拉动或牵引)并非巧合。所有这些都带有将某物从某物中拉出来的概念。分心分散你的注意力;抽象消除或掩盖细节,如在非具象艺术中或在数学中,整数被认为是更抽象的实数集的特定成员;贬损,如“克莱默的观点远非新鲜”,倾向于破坏(拉开)竞争对手的声誉。

STAN KELLY-BOOTLE (http://www.feniks.com/skb/; http://www.sarcheck.com) 出生于英国利物浦,20世纪50年代在剑桥大学攻读纯数学,之后在开创性的EDSAC I上处理了计算机科学的杂质。他的许多著作包括《魔鬼的DP词典》(麦格劳-希尔,1981年)、《理解Unix》(Sybex,1994年)以及最近的电子书《计算机语言——Stan Kelly-Bootle读者》。《软件开发杂志》已将他评为首届年度Stan Kelly-Bootle Eclectech奖的获得者,以表彰他在“技术和文学方面的终身成就”。诺贝尔和图灵都没有获得如此珍贵的同名认可。在他的笔名 Stan Kelly 下,他以歌手和词曲作者的身份享受着并行职业生涯。

 

acmqueue

最初发表于 Queue 第 5 卷,第 6 期
数字图书馆中评论本文








© 保留所有权利。

© . All rights reserved.