先问你个问题。 如果你刚入职一家公司,领导把你拉到一边,神神秘秘地说:"小X啊,咱们有个核心项目,跑了38亿年了,从来没出过宕机事故,现在交给你维护。" 你是不是觉得撞大运了?38亿年不宕机,这系统得多牛逼? 然后领导补了一句:"哦对了,这个项目没有文档,没有测试环境,从来没人重构过,之前负责的程序员都老死了,你看一下代码吧。" 你打开代码仓库一看, 我去。 整个代码库30亿行,其中90%的代码是注释掉的废弃版本,还有一大段是不知道谁复制进来的别的项目的片段。你想找个函数说明,搜出来一堆带// TODO: deprecated的标记,但没人敢删。 更离谱的是,你发现某个核心模块的架构是反的,但是改不了,因为一改整个系统就崩。 你瘫在椅子上,问领导:"这谁写的?" 领导说:"没人写。这项目是自己长出来的。" 这个项目,就是人类基因组。 说白了,你第一次翻开人类基因组图谱的时候,任何一个有三年以上经验的程序员都会产生一种强烈的既视感:这不就是我上周刚接手的那个祖传项目吗? 你先别急着反驳。 咱们慢慢说。 你第一天上班,想先熟悉一下代码结构。你随机点开一个基因,嗅觉受体基因。 看了半天,你发现一个离谱的事:这堆基因里,差不多一半是坏的。 就是那种,函数名还在,注释也还在,但是里面的逻辑早就因为几个随机的字符替换废掉了,调用一下直接返回错误。 但问题是,这些坏函数就这么留在代码库里,每次编译的时候还要被一起打包,每次细胞分裂的时候还要被完整复制一遍,占空间不说,还浪费CPU。 你数了数,人类基因组里大概有两万个这样的假基因。两万个。 你是不是想说:那删了啊? 别着急。 你刚想删,旁边一个老员工凑过来,拍了拍你的肩膀:"小伙子,别乱删。上次有人删了一个看起来没用的假基因,结果那个基因不知道怎么跟另一个功能搭上了,整个系统直接出问题了。" 这还不是最离谱的。 你继续翻代码,发现整个基因组里,有大概10%的内容是同一段重复序列,叫Alu片段,足足有一百多万份拷贝。 就像你在一个项目里,同一个注释块复制了一百多万遍,散落在代码库的各个角落。没人知道它为什么在那儿,也没人敢动它。 更离谱的是,你还发现有大概8%的代码,明显不是"原生"的,它们是古代病毒感染的时候,把自己的DNA插到人类基因组里的。 就像你打开一个祖传项目,发现里面有8%的代码是十年前一次黑客攻击留下的后门,没人清理,就这么一直留着,每次编译都带上。 你看到这儿,已经开始怀疑人生了。 这时候你又发现了一个更扯的事:一个正常的基因,转录出来之后,里面有一大段是没用的,要手动剪掉才能用。 这段没用的部分,叫内含子。 啥意思呢? 就是你写了一个函数,这个函数90%的代码都是注释,真正能干活的外显子只占10%。 每次调用这个函数之前,系统要先花一大堆CPU,把那些注释一段一段剪掉,然后才能运行真正的逻辑。有的基因更夸张,99%都是要剪掉的废话,真正有用的就一丢丢。 你算了一下,如果把这些内含子都删了,转录效率至少能提高十倍。 你又想删。 老员工又凑过来了:"小伙子,内含子不能删。你不知道吗?内含子有个功能叫可变剪接,就是同一段基因,可以通过不同的剪接方式,产出不同的蛋白质。你删了内含子,一个基因就只能干一件事了,那得少多少功能?" 你愣了一下:"那...那为什么不能一开始就写清楚?一个基因对应一个功能,多清爽。" 老员工翻了个白眼:"你以为是写Hello World呢?" 好吧。你忍了。 你继续往下翻,翻到眼睛这个模块的时候,你彻底坐不住了。 你发现视网膜的感光细胞,是朝后的。 什么意思? 就是光线照进眼睛,要先穿过一层血管,再穿过一层神经纤维,然后才能到达感光细胞。感光细胞本身是朝着后脑勺的,背对着光源。 更扯的是,所有的神经纤维要从视网膜前面汇聚到一起,然后穿出眼球连到大脑。这个穿出的地方,没有感光细胞,就是我们的盲点。 你当场就拍桌子了:"这谁设计的?把感光细胞反过来装?这不是脑子有坑吗?" 老员工慢悠悠地说:"这是五亿年前定的架构。那时候我们还是鱼。" "五亿年前...那改过来不就行了?" "改不了。"老员工摇摇头,"你想想,要把视网膜翻过来,是不是得先让感光细胞在中间过渡一下?就是那种半朝后半朝前的状态?" "对啊。" "问题是,半朝后半朝前的鱼,视力是不是比朝后的还差?" 你想了想:"...好像是。" "那不就结了?五亿年前那条想把视网膜翻过来的鱼,因为中间状态视力太差,被吃掉了。这条路就断了。后面所有的脊椎动物,就只能在这个错误的架构上继续优化。你现在想翻?你翻一个试试?中间状态直接失明,活不到下一代。" 你沉默了。 这时候你想起之前看过一个竞品的代码,章鱼的眼睛。人家的视网膜就是正着装的,感光细胞直接对着光源,没有盲点。 你问老员工:"章鱼跟我们不是一起演化的吗?为什么人

about image