很早就想写一篇关于两种不同的做事哲学的文章,一直有些纠结标题是「两个世界,两种哲学」还是「两种哲学,两个世界」,前者在于从结果的角度出发,后者则是从原因的角度出发,以佛教的观点一看,因即是果,果即是因,其实都是一样,但其实我们从解决问题的角度来说,一般还是由果及因,找到了根本原因,才能真正的解决问题。

锤子与钉子

很多时候,我们都是拿着锤子去找钉子,尤其是工程师,看到了一个不错的方案,就会觉得:「可以用这个来解决我们现在的XXX问题」,比如,__Flutter__,__RN__,__Weex__,插件化,热修复等等。从结果来看,不可否认,这些方案能解决一部分问题,但同时,它们也会带来一系列新的问题,当然,那种 KPI 导向的项目就另当别论了,但从结果来看,这些技术也就国内比较热衷,而在硅谷,完全是另一种方式。

有同学问我:“森哥,热修复也算得上基础架构的必备技术吧?”,我很是无奈,于是反问道:“没有热修复就不能开发 APP 了么?为什么出自硅谷大厂的 APP 没有热修复也能玩得转?”,这就好比,为什么国内热衷于 __996__,市值真的是靠 996 才能做起来的么?而 FANMAG (Facebook, Amazon, Netflix, Microsoft, Apple, Google) 没有 996 市值却能排到全球 TOP?如果用这样的逻辑去思考问题,很明显,前面的问题应该有另一种答案。

老问题与新问题

很多情况下,我们只关注于原来的问题是否解决了,但其实,我们应该还要从全局去考虑,在解决原来的问题的同时,有没有引入新的问题,如果只是将一个问题从一个形式转换成了另一种形式,或者从一个地方搬到另一个地方,那等于啥问题也没有解决。

我们不解决问题,我们只是问题的搬运工

同样地,每次例会上 PO 都会说,这个指标提升了多少个百分点,那个指标提升了多少个百分点,给人的感觉就是 —— 哇,这个 PO 真牛逼啊!事实真是如此吗?这时候还是得要全盘来看,这些指标的提升是不是以牺牲其它的指标为代价的,如果只是按下了葫芦浮起了瓢,那也只是指标的搬运工。

人与规则

自古以来,厚黑学一直倍受人们的追捧,遇到问题后,只要有人,就可以搞定,由于很多事情的最终解释权在人,以至于形成一种观念 —— 做事儿靠人脉,这样一来,人就成为了整个系统的 __SPOF (Single Point of Failure)__。相反地,另一种观念是 —— 在设计系统的时候,尽可能的避免 __SPOF__,即使无法避免,但也要尽可能保证单点故障发生后可恢复,在这样的设计下,人的角色就不再那么重要了,只要规则透明,任何熟悉这个规则的人都是可以相互替换的。

与人相关的另一个话题是技术人才的招聘,一种观念是 —— 招一个技术栈更匹配的工程师,能立即上手干活儿,另一种观念是 —— 招一个能解决问题的工程师,至于是什么技术栈并不重要,重要的是解决问题的思路,于是,两种招聘观念造就了两种完全不同的面试风格,前者是面试造火箭上班拧螺丝,后者则是发现问题和解决问题,一种是经验导向,一种是思维导向,结果就是,在没有经验可参考的情况下,经验导向就失灵了,而思维导向则具有更好的普适性。

治疗与预防

问题对于系统如同疾病于人体,是等到生病了再治疗?还是在生病之前就进行预防?从目前的现状来看,我们还是以前者为主。从实践的经验来看,预防问题的成本远比处理问题的成本更低,而我们大多数情况下都会觉得,这个问题还没发生,我们为什么要投入资源在上面?而实际上却往往逃脱不了墨菲定律,所以,才有了下面的流程:

  1. 发生问题优先止损
  2. 然后再去分析问题的根本原因并解决问题
  3. 然后再去想办法避免类似的问题再次发生

而往往,我们只做到了第 2 步,至于如何避免类似的问题不再发生,我们很少去反思,以至于类似的悲剧在不停的重演。