刚刚学会使用锤子(某种新技术)的时候,热情会促使你拿着它到处寻找钉子。这时候你眼中的一颗螺丝,都像是个可以用锤子敲的钉子。但是,螺丝明明只需要用螺丝刀来拧就行了呀 :)

我们都知道,开发者需要持续不断的学习才能保证技能在业界不被淘汰。而许多热衷技术的同学(尤其是新同学)又有旺盛的学习热情,在每次启动项目的时候都会尝试选用最新的技术栈,以此证明自己技术水平的进步。但这时,许多选型的思维方式并不太符合直觉,这种思维模型是这样的:

  1. 学会使用了大 V 推荐的锤子(新工具),想要找钉子(理想场景)
  2. 看见一颗螺丝(实际场景),认为它可以用锤子砸(套用工具)
  3. 使用锤子砸螺丝,并宣称自己拧的是火箭里的螺丝,锤子比手拧的效率更高(其实螺丝刀更方便)

然而,正常技术演进的思维模型则更接近这样:

  1. 这里有一颗螺丝(实际场景),目前我们只能手拧(痛点)
  2. 针对螺丝有螺口和螺纹的性质(定位问题),找到螺丝刀(技术选型)
  3. 使用螺丝刀拧螺丝(落地技术)

为了应用新技术而在项目中找落地场景,这样的事情在现实世界其实十分常见。这时的理由包括但不限于:

  • X 的代码更优雅(如何定义优雅?)
  • X 更好用(如何量化?)
  • X 很火,有某开过 Live 的大 V 背书(……)

在技术评审的时候,这样的理由是很容易被挑战的。原因很简单:每一个选型的决策都是成本和收益并存的。从决策的角度看,需要权衡的是:

  • 成本:除了熟悉新技术、摸索最佳实践的成本外,另一个常常被忽视的成本是技术债的偿还成本:如何复用基于旧方案维护的代码,如何向前兼容老项目等。如果涉及重构,那么重构的时间成本显然也应当计入。
  • 收益:如何量化性能、开发效率等指标上的提升?

经过了这样的思维过程后定位的钉子,当然应该用锤子来敲了 :)