观察
我们团队有一位高级工程师,能够调试他从未接触过的系统。他对代码库没有特殊的了解。他有一套方法:首先理解应该发生什么,然后找出正在发生的事情与应该发生的事情的分歧点,然后寻找最简单可能的解释。
他从不从代码开始。他总是从问题开始。
原则
工具是最后一样东西,而非第一样。
工程是应用思考。思考在应用之前。当我们颠倒这个顺序——当我们从工具开始,然后回溯到问题——我们对没有被清楚理解的问题产生了技术上精密的解决方案。
一个定义明确的问题几乎会自己选择解决方案。一个定义不明确的问题会选择工程师最熟悉的任何工具。
应用
在打开编辑器、终端或设计工具之前,写一句话:我正在解决什么问题?
不是"我需要重构这个模块"。这个模块造成了什么问题?不是"我需要添加缓存"。什么东西慢,为什么速度在这里是必要的?
在行动之前精确陈述问题的纪律——是工程中被低估最多的技能。
它也可以转移到每一个其他领域。每一个决定都是一个工程问题:清晰地陈述它,理解约束,然后选择最简单的适合的工具。
先思考。后工具。永远如此。