Title Text:Learning arcane bullshit from the 80s can break your computer, but if you’re willing to wade through arcane bullshit from programmers in the 90s and 2000s, you can break everyone else’s computers, too.<
Origin:https://xkcd.com/1671/
https://www.explainxkcd.com/wiki/index.php/1671:_Arcane_Bullshit
https://app-xkcd-cn.appspot.com/
在修复/改进现有计算机程序时,程序员有时需要阅读,理解和改进旧代码。一段代码越老,它就越不符合现代编程实践,并且从21世纪程序员的角度来看,它更有可能成为“奥术废话”。
兰德尔似乎觉得处理“奥术废话”的意愿是“Catch 22”,可以防止80年代的奥术废话被修复。完全不愿意处理奥术废话的人缺乏学习如何编程的耐心。一个非常愿意跋涉80年代程序员的奥术废话的人很可能会“哄骗”自己捣乱内核(这本身就是神秘的废话),而不是制作有用的代码。 Cueball处于规模中间:聪明且耐心,足以使80年代的废话更糟,但不够聪明,也不足以知道如何修复它。
这部漫画可以参考编程方法的变化。由于第一批计算机程序是在40年代和50年代编写的,因此它们很容易成为“意大利面条代码”,执行流程将使用JUMP从程序的一部分跳转到另一部分,JUMP不提供状态信息。虽然这种编程方法可以非常快速地工作,但是它很难预测程序流并且可能产生不明显的相互依赖性。在BASIC语言中,JUMP被称为GOTO,新程序员的课程认为在所有但很简单的情况下使用GOTO是一个非常糟糕的主意。另一方面,老程序员认为计算GOTO是一种性感的编程方式。
为了解决这个问题,计算机科学家依靠提高抽象和封装的水平,开发结构化编程,过程编程和面向对象编程。
在结构化编程中,您可以使用指定的入口和出口点将程序分解为定义良好的代码块。使用堆栈(专用于存储信息/程序状态的存储器的一部分),可以调用一段代码,然后让该代码块将控制权返回到在完成请求之后调用它的点。
很快就决定将这些代码块标记为函数或过程,这使得知道如何调用块和编辑它们变得容易得多。使其成为焦点的语言包括Pascal,Modula和C.
结构化和程序化编程在80年代根深蒂固。大多数系统编程都是用中级或低级语言完成的,为了提高性能,控制对程序中数据结构的访问并没有太大作用。因为它们是低级别的,所以代码需要很多步骤才能做出看似简单的事情,比如在屏幕上画一个盒子,这使得没有经验的程序员很难理解正在发生的事情。
尽管OOP的概念早在20世纪50年代就已出现,但直到20世纪90年代才开始广泛实施。 OOP封装了函数内部的数据结构,因此不是直接操作变量,而是调用数据结构并告诉它做某事。这种额外的抽象级别可以使处理各种数据变得更加容易。它还可以保护程序数据免受程序其他部分的意外更改。
因为80年代的代码通常是在更低的级别上完成的,所以对于习惯于使用该语言的程序员来说,很难为它们做更多的工作。这也意味着程序员经常会将期望硬编码到他们的源代码中,例如可以一次打开的文件数量,或操作系统磁盘缓冲区的大小,而不是在程序运行时使它们可配置,甚至在它被装载了。这意味着如果您需要程序来处理更大的文件,则可能需要在查找并更改代码中假定较小文件大小的所有位置后重新编译它。
因此,很少有人愿意试图超越学习的巨大障碍。这个小组在左边。对于那些已经习惯了80年代工具和惯例的人来说,他们花费所有时间来调整和重新编译计算机内核以满足他们当前的需求,而不是实际创建新程序。
在中心是Cueball,可能代表Randall,他已经学会了足够的尝试和修复代码,但还不足以让他修复实际工作。
随着程序的老化,它们往往会失去最初项目负责人的支持而消亡,不再支持新计算机。因此,正如标题文字所说,从90年代及之后学习更多编码对于打破其他人的计算机也是必要的。这也可能是关于黑客攻击和互联网的出现及其背后的技术(TCP /IP,HTML,CSS,PHP ……)是90s /2000s的评论。 80年代的计算机通常是独立的,因此您所学的只能应用于您的计算机。要打破其他人,你需要了解网络。
标题文本可能是对开源软件中最近发现的各种安全漏洞的引用。在某些情况下,技能不足的程序员为关键基础架构提供了有缺陷的代码而很少进行审查,从而导致全球计算机安全灾难。 Randall在424中描述了其中的一些:安全漏洞(2008),1353:Heartbleed和1354:Heartbleed说明(2014)。最近的其他示例包括Shellshock和Linux内核中涉及perf和密钥环子系统的漏洞。