11.4.7 经验法则

1.简单性原则

简单就是美。系统开发过程中,如果某个方案很复杂,一般是实践者没有想清楚。OceanBase开发过程中,我们会要求开发人员用一两句话描述清楚设计方案,如果不能做到,说明还需要梳理其中的关键点。

2.精力投入原则

开发资源总是有限的,不可能把所有的事情都做得很完美。以性能优化为例,我们需要把更多的时间花在优化在整体时间中占比例较大或者频繁调用的函数上。另外,在系统设计时,如果某个事件出现概率高,我们应该选择复杂但更加完美的方案;如果某个事件出现概率低,我们可以选择不完美但更加简单的方案。

3.先稳定再优化

系统整体性能的关键在于架构,架构上的问题需要在设计阶段解决,实现细节的问题可以留到优化阶段。开发人员常犯的错误就是在系统还没有稳定的时候就做性能优化,最后引入额外的Bug导致系统很难稳定下来。实践表明:把一个高效但有Bug的系统做稳定的难度远远高于把一个稳定但效率不高的系统做高效。当然,前提是系统的整体架构没有重大问题。

4.想清楚,再动手

无论是设计还是编码,都要求“想清楚,再动手”。对于数据结构或者算法类代码,如果有大致的思路但是无法确定细节,可以尝试写出伪代码,通过伪代码把细节梳理清楚。开发人员常犯的一个错误就是先写出一个半成品,然后再修复Bug。然而,如果发现Bug太多或者整体思路出现问题,已经写完的代码将成为“食之无味,弃之可惜”的鸡肋,只能无奈返工。