喉返神经与迭代开发

Posted by kinlin on May 5, 2019

前言

喉返神经是生物学上的概念,而迭代开发则是一个软件上的概念,看上去就是两个时间的东西,怎么会想到在写这个呢?

但是从一个看了不少专业外书籍的程序猿的视角,这两个概念有些内在的关联,甚至我觉得程序员在迭代开发的时候能从喉返神经的例子中获得一些启示。

喉返神经

我们生而为人,总会为人体各种精密的构造而叹服,总会发问:倘若没有神/上帝的安排,怎么能出现这么精巧的设计呢? 一定存在一个总设计师

在最初的时候绘制了一张完美的蓝图,然后人类就按照蓝图被组装出来。

但是喉返神经的发现,让人们开始怀疑,为什么这条神经的走向如此奇特? 如果真的存在这个总设计师,那么为什么这种看上去是一个明显错误的

地方还存在,而且不仅仅是人类,还在许多动物身上同样存在。

如下图:

houfan

支配喉部运动的神经,竟然不是直接从大脑走向喉部,而是先从心脏处绕了个大湾再回到咽喉。

如长颈鹿这种拥有长脖子的动物,喉返神经也是如此走向。实在是痛苦。

houfan_changjinglu

如维基百科所述:喉返神经被视为脊椎动物演化上一个十分著名的历史遗迹

对软件迭代开发的启示

从喉返神经这个例子我们可以看到,即便是人体,在进化过程中也会存在各种错误,但是生存是第一要务,如果还能用,不是生死攸关,后面还会有机会慢慢

修改。但是一旦走向死胡同,那个对应的分支可能就会逐步在历史中消亡了。

在软件开发中,似乎也有类似的观念。当前的伟大软件都是从一个非常简陋的版本开始的,然后逐步迭代开发,一代代的试错,一代代的优化,最终

长成了一棵参天大树,以致没有一个人能看清全貌。

倘若一个工程师,在学完Hello World!之后,你告诉他这样继续下去就能造出linux,造出git,造出windows。我想这几乎是难以想象的,但半个世纪的软件

行业进化至今,确确实实就达到了这个效果。那么迭代开发最重要的是什么呢?如果参考进化论的话?

  • 首先,得有一个能跑起来的实例。不管它有多简陋

如单细胞动物的出现,虽然它很简单,但却是一种生命体,后续的一切都是基于它的进化历程。能work就是最重要的。

  • 小步快跑

每次改进一点点,即便再微小,持续长时间也能成为一个新的物种。想想看,人类的进化历程,从没有一个完备的图纸,却在20年一个代际间逐步进化,

可能每一代所获得的优点很小,说不定有些还是看上去不那么有用的发色、肤色等等,但累积了几十代几百代几千代之后,无论从身体还是思想,都与

当初的智人完全不同。

  • 无惧犯错

在小步快跑的基础上,犯错并不可怕,及时改正。进化过程中都会出现各种意外,有些好的就被保留,而不好的就摒弃,在人类的基因库

中,类似的未表达的基因成千上万,但是并非无用。很可能它们曾经帮助人类抵御一些目前不可知的危险。而一些错误也可能被保留。犯错是必然的,

不需要畏惧。

  • 重要的是总体工作效率

即便人体这么精密的仪器,也存在喉返神经这种不合理之处,那么很多显得很丑陋的历史遗留代码存在于各种项目中就不足为奇了。

但是只要系统的功能,性能,可靠性在稳步提升,我们应该允许它们的存在,然后通过适当的重构将它们逐步替换

比如linus的那次发怒就导致了dts的出现并改进了linux这一块的实现方式。

而在不明确模块作用的前提下,盲目替换,或许会带来更大的灾难。

参考

  1. https://zh.wikipedia.org/zh/%E5%96%89%E8%BF%94%E7%A5%9E%E7%B6%93
  2. https://www.guokr.com/article/38500/
  3. «盲眼钟表匠»
  4. 大教堂与集市: 似乎类似的观点在这本书也能找到