下载本文的 PDF 版本 PDF

软件彩蛋万岁!

它们与软件一样古老。

Benoit Baudry, Tim Toady, Martin Monperrus

 

Long Live Software Easter Eggs!

这是一个动荡的时期。反叛的开发者们从持续部署服务器发动袭击,赢得了他们的第一次胜利。在战斗中,反叛间谍设法在 https://pro.sony 的 HTML 代码中推送了一个史诗级的提交。在邪恶特工的追捕下,反叛者们藏身于提交、按钮、工具提示、API、HTTP 标头和配置界面中。

 

软件彩蛋与软件一样古老。软件开发者已经在所有编程语言、所有平台中植入了它们,从史前操作系统到最前卫的网络浏览器。然而,生产主义和可预测性的黑暗势力一直在与软件彩蛋作斗争。

胜败交替。

我们是来自斯德哥尔摩场景的反叛者。在我们的战场上,我们目睹了鲸鱼从天而降,但上次看到激光进度条还是互联网时间尺度上的远古时代。41

我们是作家,我们的武器是文字,我们的前线位于互联网上。通过这篇文章,我们点燃了全球彩蛋之火。我们为我们已知的和匿名的行会朋友们提供弹药,他们为创造、维护或存档软件彩蛋而战。同志们:我们永远不会有太多的“作为玩笑或奖励而包含的意外或未记录的功能”。0

但要小心,这场战斗是史诗般的,也是危险的。H.P. 洛夫克拉夫特在 Rust 编译器的战壕中被枪杀。

Internet Explorer 和 Chrome 之间有什么区别?一只恐龙。

 

软件彩蛋的必然性

从早期的街机游戏8到最新的全球多人游戏,彩蛋从编程之初就已存在。它们被设计在各处,以供开发者、用户和汽车驾驶员享用。它们的共同点是,它们通常不具有生产力,并且与它们所植入的软件产品的核心功能无关。

苹果创始人史蒂夫·沃兹尼亚克和史蒂夫·乔布斯认为,彩蛋“[是]对细节和人性的关注的标志。”2 当开始关注彩蛋时,这意味着一项工作已经完成并得到了完善。当提到人性时,沃兹尼亚克和乔布斯指的是情感,这是将人类与机器人区分开来的特征。通过制作彩蛋,工程师们创造了情感引擎。当用户发现彩蛋时,他们充满了惊喜和敬畏,他们欢笑,他们的积极情绪随之震荡。

彩蛋由用户接收,但由开发者设计。乔纳森·维内尔及其同事声称,当程序员制作彩蛋时,他们从根本上感到愉悦,这给“程序员带来了一些情感宣泄的满足感。”5 事实上,乔布斯在被驱逐后回到苹果公司时,出于这个原因,重新恢复了彩蛋。2

然而,软件彩蛋具有颠覆性的一面。一个有据可查的事实是,雅达利最早的彩蛋之一的创建是为了绕过质量保证和测试。3 这部分解释了为什么有些人认为应该避免彩蛋,并且“无聊是好的。”9 不制作彩蛋证明了对权力和秩序的忠诚(我们将在本文后面反驳这一点)。

颠覆会带来回报。今天的大型科技公司诞生于 60 年代的反主流文化。彩蛋也是如此。它们是模棱两可的:虽然它们本质上必须是非生产性的,但彩蛋却有助于资产负债表。一家公司拥有彩蛋传统有助于招聘和留住有才华的工程师。对于用户而言,彩蛋会产生对软件产品的情感依恋,这是长期经济忠诚度的根源。

彩蛋既能为创造它们的工程师带来快乐,也能为接收它们的用户带来快乐。它们是不可避免的,因为它们证明我们既不是赛博格也不是机器人。它们具有经济价值,例如创造产品依恋和招聘最优秀的人才。这就是为什么,从软件诞生至今,彩蛋行会一直保持强大,开发者社区从未放弃它们。

穿越(未)知彩蛋之旅

软件彩蛋的世界是开放式的。有些已经成名,例如 Chrome 浏览器中的 T-Rex 小恐龙游戏。另一些仍有待发现,隐藏在软件堆栈深处,由一位富有灵感和爱开玩笑的软件工程师播种。本文的目的不是列出所有彩蛋。热情的读者可以查阅彩蛋档案馆1以了解更多信息。相反,我们做出了艰难的编辑决定,策划了九个软件彩蛋:三个众所周知但引人注目的彩蛋,三个罕见的彩蛋,以及三个你可能从未听说过的彩蛋。

 

摇滚明星级彩蛋

有一些彩蛋是我们都知道和喜爱的——并且钦佩它们所能提供的。以下是其中最好的三个。

9. 如果您是特斯拉 Model X 的幸运车主,那么您有幸让它随着专门创作的音乐表演三分钟的舞蹈。4 特斯拉是少数几家在其产品中植入的彩蛋拥有维基百科页面的公司之一。15 这要归功于埃隆·马斯克对彩蛋的真爱。作为执行经理,他可以配备整个团队来完美地设计它们,并且可以要求人力资源部门招聘作曲家和灯光设计师。马斯克运用他的权力和精力,使彩蛋达到他的最高个人标准。致敬!

8. 众所周知,谷歌会使用所谓的 Doodles 来调整其首页以适应特殊事件。但鲜为人知的是,对于某些请求,结果页面的行为方式非常引人注目。例如,在查询“do a barrel roll”(在 2022 年 2 月撰写本文时仍然有效)后,您可以欣赏谷歌的表演。一个开发者社区深受这些创意表演的启发,他们在 https://elgoog.im/ 提供了 Google 彩蛋的长期存档。谷歌的高层管理人员长期以来一直支持软件彩蛋,这既是为了工程师的快乐,也是为了 Google 用户的快乐。Google 彩蛋万岁!

7. 电子游戏是软件彩蛋的故乡。从《星际飞船 1》8中的“Hi Ron!”到《战地 2042》中最新的恶作剧,游戏开发者和玩家一直在推动彩蛋的边界。《战地 V》18中坠落的鲸鱼彩蛋就是一个引人注目的例子。DICE 的软件开发者设计了一个功能,其唯一目的是用对道格拉斯·亚当斯的《银河系漫游指南》的致敬来让他们的客户感到愉悦。像 AAA 游戏行业中的所有人一样,DICE 的管理层非常重视软件彩蛋的开发。他们确保彩蛋的顺利计划、开发和测试,以最大限度地取悦玩家,并与竞争对手保持同步。

 

向我们错过的软件彩蛋致敬

一些令人惊叹的软件彩蛋为了性能、可靠性或缺乏对乐趣的认真考虑而消失了。我们向其中的两个致敬。

6. 从 2013 年 7 月开始,Rust 编程语言的运行时系统地在其核心库中包含了一段 H. P. 洛夫克拉夫特的引言。然而,在就严肃语言中诗歌和臃肿的各自重要性进行了一些热烈的讨论之后,性能爱好者在 2015 年 1 月将这段引言从项目中删除。

5. Linux 中的 man 命令至关重要,Linux 维护者以不同的方式非常关心它。coreutils 的维护者 Colin Watson 认为“软件不必始终 100% 严肃”。这促使 Watson 在 man 中引入了一个迪斯科软件彩蛋。在 00:30(精确地!)调用 man 将触发 'fprintf (stderr, "gimme gimme gimme\n")',以致敬 ABBA 1979 年的热门歌曲。Jaroslav Kucera 也关心 man 命令。对他来说,关心意味着确保该命令的实现在每次调用该工具时都严格相同。不幸的是,这两种关心的概念相互矛盾,因为彩蛋引入了一些难以预测和难以测试的行为。为了提高测试程序的可预测性,该彩蛋于 2017 年 11 月 22 日被拔掉。20

 

活生生的低保真软件彩蛋

你不需要成为一家大型科技公司或帝国游戏引擎中的程序员才能编写彩蛋。任何拥有控制台的人都可以编写它们,以 ASCII 形式呈现。

3. Apt 是一个 Linux 程序,用于从 Debian/Ubuntu 软件包管理器安装软件包。虽然 $ apt install sl 按预期工作,但 $ apt moo 接近于牛排证明。21 Aptitude 是下一代 apt 版本,$ aptitude moo 严格来说更好:它提供了关于没有彩蛋的保证。

2. 当您在命令中列出文件并误输入 sl 时,您会得到一个 ASCII 渲染的动画(图 1)。甚至有一些标志可以更改动画。但是,'sl –help' 不会给出标志列表;它们隐藏在源代码中。17 误输入 ls 并执行 sl 既令人惊讶又令人满意,这与彩蛋的核心定义相呼应。

1. 最后,https://pro.sony/ 是关于索尼专业音视频设备的超级严肃的官方网站。在浏览器中渲染,它是 Web 字体、CSS 渐变和强大动画的烟花。在控制台中使用 curl -L https://pro.sony/ 渲染,它是大量精简和交织在一起的 HTML 和 JavaScript。然而,最后你会得到一件独特的 ASCII 艺术品。此外,标头中还有第二个彩蛋。

 

Long Live Software Easter Eggs!

 

软件彩蛋的软件工程

软件彩蛋是软件功能。因此,它们需要以最高的专业精神进行计划、设计和执行。否则,彩蛋可能会在植入的应用程序中引入严重的警告,包括安全性9或性能10方面。软件工程杂耍的所有行为都适用于执行彩蛋。

将彩蛋集成到软件应用程序中需要仔细准备,并且从产品负责人、经理到开发人员的每个人都必须同意其必要性。12 必须讨论彩蛋的目的。必须设计需求。团队必须尽早决定版权是否会明确指出彩蛋功能的作者。彩蛋的内容是另一个需要讨论的重要主题,这通常是开发人员与 UX(用户体验)和图形设计师合作的地方。14 最终,KPI(关键绩效指标)是所有利益相关者都认为它很有趣。

软件彩蛋被称为软件开发的最后前沿。11 当然,除了你不可能拥有最后的前沿之外,所以工程师们会重复使用它们。事实上,软件彩蛋是在最先进的代码仓库6上开发的,并打包在软件包管理器中分发的库中。存在一系列可重用库,以支持大多数编程语言中彩蛋的健全开发。16 例如,重用库来支持 Konami 代码非常方便。

磁盘上的彩蛋不好玩。软件彩蛋只有在执行时才有意义。然而,它们应该很少执行,因为它们本质上是隐藏的。功能标志是在运行时设计软件彩蛋的正确方法。7 功能标志与 A/B 测试相结合,使工程师能够衡量彩蛋产生的惊喜和参与度。将彩蛋置于功能标志之后,工程师不仅可以在适当的时候打开彩蛋——例如,与营销活动对齐——还可以在笑话不再有趣时将其关闭。

但是,请注意功能标志;它们可能会导致产品中不良的功能交互。42

总而言之,以下是工程软件彩蛋的 101 条要点

001 - 与你的老板讨论软件彩蛋。

010 - 在星期五开发软件彩蛋。

011 - 放松。软件彩蛋会自然而然地来到你身边。

100- 考虑使用第三方库来简化软件彩蛋的开发。

101 - 执行。

 

结论

软件彩蛋的原力精神在时空中强大,而生产力和安全性的帝国影响一直在挑战这种古老的数字魔法实践。通过来源可靠和经过验证的信息,我们确信软件开发人员将继续编写代码、构建库,并在数字星系的各个角落传播软件彩蛋的“魔力”。我们带着新的希望策划和重新混合了彩蛋,以向所有行会成员发出信号。

软件彩蛋万岁!

 

参考文献

0. 彩蛋。《简明牛津英语词典》。

1. Wolf, D., Wolf, A. 1997. 彩蛋档案馆: https://eeggs.com/.

2. Diaz, J. 2012. 彩蛋又回到了 OS X 中——而且这个非常棒。Gizmodo; https://gizmodo.com/the-easter-eggs-are-back-in-os-x-and-this-one-is-insane-5929286.

3. Machkovech, S. 2015. 雅达利开发者剖析 Yars' Revenge、Adventure 和雅达利的困境。Ars Technica; https://arstechnica.com/gaming/2015/03/atari-devs-dissect-yars-revenge-adventure-ataris-woes/.

4. Pogue, D. 2019. “彩蛋”的秘密历史。《纽约时报》; https://www.nytimes.com/2019/08/08/technology/easter-eggs-tesla-google.html.

5. Weinel, J., Griffiths, D., Cunningham, S. 2014. 彩蛋:音乐媒介中的隐藏音轨和信息。国际计算机音乐会议论文集; http://gala.gre.ac.uk/id/eprint/34093/7/34093_WEINEL_Easter%20Eggs.pdf.

6. Reilly, L. 2021. GitHub 中的六个秘密彩蛋。DEV Community; https://dev.to/github/six-secret-easter-eggs-in-github-2j17.

7. Limoncelli, T.A. 2018. 愚人节恶作剧的卓越运营。《 通讯》 61(3), 54-57; https://cacm.acm.org/magazines/2018/3/225471-operational-excellence-in-april-fools-pranks/fulltext.

8. Machkovech, S. 2017. 在历经艰辛的旅程后,街机世界的第一个彩蛋被发现。Ars Technica; https://arstechnica.com/gaming/2017/03/the-arcade-worlds-first-easter-egg-discovered-after-fraught-journey/.

9. Stenberg, D. 2021. curl 中没有彩蛋。个人博客; https://daniel.haxx.se/blog/2021/12/06/no-easter-eggs-in-curl/.

10. Rust. 2014. “hello world” 包含洛夫克拉夫特语录 #13871。GitHub; https://github.com/rust-lang/rust/issues/13871.

11. Pratchett, T. 1990. 《Moving Pictures》。由 Victor Gollancz / Corgi 出版; https://www.goodreads.com/quotes/514838-this-is-space-it-s-sometimes-called-the-final-frontier-except.

12. Venditti, S. 2018. 技术中彩蛋的力量。UX Collective; https://uxdesign.cc/the-power-of-easter-eggs-in-tech-4491bb87bcdf.

14. Saldner, E., Linde, O. 2020. 如何为汽车品牌设计彩蛋以提升用户体验。查尔姆斯理工大学硕士论文; https://odr.chalmers.se/bitstream/20.500.12380/301052/1/How%20to%20Design%20Easter%20Eggs%20for%20a%20Car%20Brand%20to%20Enhance%20User%20Experience%20-%20Emma%20Saldner%20%20Ottilia%20Linde.pdf.

15. 维基百科。类别:彩蛋(媒体): https://en.wikipedia.org/wiki/Category:Easter_egg_(media).

16. GitHub 贡献者。2022. 彩蛋; https://github.com/topics/easter-egg.

17. Toyoda, M. 1992. sl 的源代码: https://github.com/mtoyoda/sl.

18. 战地 V。爆炸鲸鱼彩蛋。2018. Bigg Easter Eggs YouTube 频道; https://www.youtube.com/watch?v=JZPzT2AIR0o&t=101s.

19. brwn. 2015. Brainfuck 中的《绿鸡蛋和火腿》; https://gist.github.com/cbrwn/10449729.

20. Silver, A. 2017. man 中的 'Gimme Gimme Gimme' 彩蛋在 00:30 破坏了自动化测试。《The Register》; https://www.theregister.com/2017/11/22/gimme_gimme_gimme_in_linux_breaks_automated_tests/.

21. Crowcroft, J., Haddadi, H., Gervais, A., Henderson, T. 2021. 牛排证明: https://arxiv.org/abs/2112.06498.

41. Nield, D. 2015. 这是如何在 Spotify 中获得光剑进度条的方法。techradar; https://www.techradar.com/news/audio/here-s-how-to-get-a-lightsaber-progress-bar-in-spotify-1311566.

42. YouTube. 2022. 神秘的 Skype 功能交互。在斯德哥尔摩的白天观察到; https://www.youtube.com/watch?v=dQw4w9WgXcQ.

 

Benoit Baudry 是 KTH 皇家理工学院软件技术教授。他的研究是关于软件多样性,他的个人主页包含三个软件彩蛋。 https://softwarediversity.eu/.

Tim Toady 是一位居住在爱沙尼亚梅里塞的程序员分析师。他的研究兴趣包括油漆飞溅和彩蛋。 https://scholar.google.se/citations?hl=sv&user=D0yV_McAAAAJ.

Martin Monperrus 是 KTH 皇家理工学院教授。他教授软件开发、科学研究和彩蛋方面的卓越运营。 https://www.monperrus.net/martin/.

版权 © 2022 由所有者/作者持有。出版权已授权给 。

acmqueue

最初发表于 Queue 杂志第 20 卷,第 2 期
数字图书馆中评论本文





更多相关文章

Catherine Hayes, David Malone - 质疑评估非加密哈希函数的标准
虽然加密和非加密哈希函数无处不在,但在它们的设计方式上似乎存在差距。出于各种安全需求,存在许多加密哈希的标准,但在非加密方面,存在一定程度的传统,尽管哈希函数历史悠久,但尚未得到充分探索。虽然针对真实世界数据集的均匀分布非常有意义,但当面对具有特定模式的数据集时,这可能是一个挑战。


Nicole Forsgren, Eirini Kalliamvakou, Abi Noda, Michaela Greiler, Brian Houck, Margaret-Anne Storey - DevEx 在行动
DevEx(开发者体验)在许多软件组织中越来越受到关注,因为领导者寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付。直观地看,技术领导者普遍认为,良好的开发者体验能够实现更有效的软件交付和开发者幸福感。然而,在许多组织中,旨在改进 DevEx 的拟议倡议和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。


João Varajão, António Trigo, Miguel Almeida - 低代码开发生产力
本文旨在通过展示使用基于代码、低代码和极端低代码技术进行的实验室实验结果,以研究生产力差异,从而提供关于该主题的新见解。低代码技术已清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了有力的论据。本文报告了程序和协议、结果、局限性和未来研究的机会。


Ivar Jacobson, Alistair Cockburn - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,其中新的工具、技术和技巧不断被开发以服务于商业和社会,但它也很健忘。在它匆忙追求快速前进的过程中,它容易受到时尚的突发奇想的影响,并且可能会忘记或忽略针对它面临的一些永恒问题的成熟解决方案。用例,最早于 1986 年引入并在后来普及,就是这些成熟解决方案之一。





© 保留所有权利。

© . All rights reserved.