CODE AS ARTIFACT, CODE AS ORGANISM

“One of my hypothesis [sic] is that species of technology, unlike species in biology, do not go extinct. When I really look at supposed extinct species of technology, I find they still survive in some fashion. A close examination of by-gone technologies shows that somewhere on the planet someone is still producing it.”

—KEVIN KELLY, “Immortal Technologies”183

"我的一个假设[原文如此]是,技术的物种,与生物学的物种不同,不会灭绝。当我真正审视所谓已灭绝的技术物种时,我发现它们仍然以某种方式生存。对已经消失的技术的仔细检查表明,在地球的某个地方,有人仍在生产它。

—KEVIN KELLY, “不朽的技术”183

To the untrained eye, writing software appears to be all about the new and shiny, free from the earthly troubles of working with atoms rather than imaginary bits. In practice, software ages quietly, in the shadows, and stubbornly refuses to die.

在未经训练的人看来,编写软件似乎都是新的和闪亮的,摆脱了与原子而不是想象中的比特一起工作的世俗烦恼。实际上,软件在阴影中悄悄地老化,并顽固地拒绝死亡。

There are two observations to make about software here, which will help illuminate the problem. Firstly, software, once written, is never really finished. It might be feature-complete, but, in order to continue running, software almost always requires some sort of ongoing maintenance. At minimum, that might mean keeping dependencies up-to-date, but it might also mean things like upgrading infrastructure to meet demand, fixing bugs, or updating documentation.

这里有两个关于软件的观察,这将有助于阐明问题。首先,软件一旦写好,就不会真正完成。它可能是功能完整的,但是,为了继续运行,软件几乎总是需要某种持续的维护。最起码,这可能意味着保持最新的依赖关系,但也可能意味着升级基础设施以满足需求,修复错误,或更新文档。

So-called “greenfield” projects—those where a developer gets to write software from scratch—are coveted for a reason. Most of the work that software developers do is not writing new code, but rather tending to the code that someone else has written. Nathan Ensmenger, a professor of informatics and computing at Indiana University, suggests that “most computer programmers begin their careers doing software maintenance, and many never do anything but.”184

所谓的 "绿地 "项目--那些开发人员可以从头开始编写软件的项目--之所以受到青睐是有原因的。软件开发人员所做的大部分工作不是编写新的代码,而是对别人编写的代码进行处理。印第安纳大学信息学和计算学教授内森-恩斯曼格(Nathan Ensmenger)认为,"大多数计算机程序员开始他们的职业生涯时,都是在做软件维护工作,而且许多人从来没有做过其他事情。"184

Fergus Henderson, a software engineer at Google, states that “most software at Google gets rewritten every few years.”185 Software changes over time as its environment—the other technology around it—changes. Henderson also points out that regularly rewriting software is inherently beneficial. It helps cut away unnecessary complexity that has accumulated over time, as well as transfer knowledge and a sense of ownership to newer team members.

谷歌的软件工程师Fergus Henderson说,"谷歌的大多数软件每隔几年就会被重写一次。"185 软件随着时间的推移会发生变化,因为它的环境--它周围的其他技术也会发生变化。亨德森还指出,定期重写软件本身是有益的。它有助于削减长期积累的不必要的复杂性,以及将知识和主人翁意识转移给新的团队成员。

The cost of maintenance, coupled with a lack of intrinsic motivation to maintain, is why large open source projects tend to become modular as they grow. Rails’ core developers, for example, incorporated many of the extensions written by the community into the main project until Rails 3, when they switched to a modularized approach. It had become too expensive to maintain other developers’ code under one project, and the maintainers risked sacrificing speed and customizability if they didn’t split it up.186 Rails merged with a competing framework, Merb, which was known for its modular approach, to help the project scale and meet contributor demand.187

维护的成本,再加上缺乏维护的内在动力,这就是为什么大型开源项目在成长过程中倾向于模块化。例如,Rails的核心开发人员将社区编写的许多扩展程序纳入主项目,直到Rails 3,他们才转而采用模块化方法。在一个项目下维护其他开发者的代码已经变得太昂贵了,如果不将其拆分,维护者就有可能牺牲速度和可定制性。186 Rails与一个竞争性框架Merb合并,后者以模块化方法著称,以帮助项目扩展并满足贡献者的需求。

A second observation is that once software finds a set of users, it’s hard for it to ever really disappear. Someone out there is probably going to use that code for a very long time.

第二个看法是,一旦软件找到了一组用户,它就很难真正消失。有人可能会在很长一段时间内使用这些代码。

Some of the oldest code ever written is still running in production today. Fortran, which was first developed in 1957 at IBM, is still widely used in aerospace, weather forecasting, and other computational industries. COBOL, another programming language, was first released in 1959. Network Time Protocol, used to synchronize time between computer systems, was initially developed in the early 1980s.

一些有史以来最古老的代码至今仍在生产中运行。Fortran,1957年首次在IBM开发,至今仍广泛用于航空航天、天气预报和其他计算行业。COBOL,另一种编程语言,于1959年首次发布。网络时间协议,用于计算机系统之间的时间同步,最初开发于20世纪80年代初。