切斯特顿栅栏原则:不要轻易改变你不理解的系统

669 阅读4分钟

u=1690704930,3812603105&fm=253&fmt=auto&app=120&f=JPEG.jpg 我们的生活中充满了各种各样的系统,比如法律、规则、习俗、传统等。有些系统看起来没有用处,甚至是过时的,让我们想要改变它们或者废除它们。但是,在我们做出这样的决定之前,我们是否真的了解这些系统存在的原因和功能呢?我们是否考虑过改变它们可能带来的后果呢?

切斯特顿栅栏原则

切斯特顿栅栏原则是一个启发式原则,它是由英国同名作家提出的一个观点。它告诫我们,在改变任何系统之前,我们应该先了解它存在的原因和功能,否则我们可能会造成更大的问题。

切斯特顿用一个栅栏作为比喻,他说:“如果一道栅栏或一扇门横跨在一条路上,更激进的人会高兴地走上前去说:‘我看不出这有什么用处,让我们把它清除掉吧。’而更聪明的人会这样回应:‘如果你看不出它有什么用处,我不会让你清除掉它,走开吧,去想想看,当你能回来告诉我你看出它有什么用处时,我可能会允许你摧毁它。’”

在实际开发中的应用

程序员坊间流传着一个公理——“代码能跑就不要动”,事实上在绝大多数的开发情况下该公理也确实成立,如果自作聪明地修改了自己不完全理解的代码可能会造成整个系统的宕机。

或许老的代码实现地很差,逻辑也复杂难懂,就好像那道不知道为什么存在于道路上的栅栏。这个时候你会怎么做?是将原有的挡路的栅栏敲个稀烂为你新开发的代码让路,还是沿着栅栏走,去理解栅栏的含义,然后再决定是否拆除这个栅栏还是干脆绕路前往目的地?

上面的问题解答了我们开发当中遇到那些或许不完美的老代码时会去采取的3种方式:

  1. 优先新功能实现而直接修改相关老代码;
  2. 理解老代码作用以及涉及的范围,进一步去优化老代码并实现新功能;
  3. 在不涉及老代码改动的前提下实现新功能

那么其实结果也很明显了,1是绝对不可取的方式,它或许能够大幅度地加速开发进程,但后续有可能会导致的一系列问题会让整个项目停滞不前、南辕北辙。就像你因为要驾车从农场去市场卖羊毛而将部分栅栏拆除,傍晚回家时才发现农场一片狼藉,因为栅栏的缺口狼群早已将你辛辛苦苦养的羊吃的一干二净,明显就是得不偿失。

因此一般我们会仔细观察这个栅栏,或给这个栅栏装上木门,或放弃马车减少装载量直接越过栅栏来达成目的。

从中学到了什么

  • 先理解再开发,磨刀不误砍柴工,在理解了老代码的基础上进行项目的开发往往能事半功倍,后续代码造成的影响也能够降到最小,即便后续出了问题也能很快地定位到源头;
  • 做事不能莽撞,需要充分理解自己行为可能会导致的后果再权衡利弊做出选择,如果只是做事不经过思考可能会导致看不到隐藏的问题而南辕北辙。
  • 学习也需要打好基础理解原理,虽然我们站在巨人的肩膀上看到了更多,获取新知识也更方便,但理解了前人知识推导发展的过程、基础实现的原理同样作用于我们对新知识的吸收,而这些知识在工作中解决问题时或许会有更大的发挥空间。