很多时候我们无法掌握一项技术,最根本的原因是因为我们不知道该技术要解决的是什么问题。这看起来有点不可思议,但却普遍存在。不信你试着回答一下几个问题:
- DOS操作系统解决了什么问题?用它有什么好处?Windows操作系统比DOS操作系统好在哪里?
- 为什么要有CSS这种东西?用最简单的HTML不是更简单吗?还能少学一个东西。
- GO语言为什么会出现,它解决的是什么问题?
你当然可以用搜索引擎去找答案,但是如果没有切身体会,自然举不出实例。不由得想起我学数学的经历。因为不知道高等数学有什么用,老师大部分只知道照本宣科,我又不想死记硬背公式,所以学得很差。最重要的原因就是因为不知道数学要解决的是什么问题。
要了解一项技术,我觉得有以下一些问题需要回答:
要解决的问题是什么?(What)为什么会出现这些问题?(Why)
能给出一些问题的例子吗?它是如何解决的?或者说最重要的内容是什么?(How)
能给出一些利用该技术的例子吗?如何评估这项技术的效果?什么情况下这些技术无用?使用这项技术需要付出什么成本?如何降低使用成本?
以我最近工作相关的内容为例,我需要回答:
- 为什么要统一编码风格?
- 为什么要做Code Review?
- 为什么要TDD(测试驱动开发)?
- 为什么要敏捷开发?
- 为什么要重构?