轮子,在程序猿世界中通常指的是代码框架或代码库,比如Java世界中的Spring,PHP世界中的Yii,前端世界中的React等等。关于轮子,在技术圈有一句名言“不要重复造轮子”:你费力实现的代码,早就有极好的解决方法贡献在开源社区。这几乎是每个程序猿入行被告知的第一条准则,它虽然提升了程序猿的专业性和开发效率,但也束缚了程序猿的技术成长。这几年面试过的很多程序猿脱离了轮子,根本写不出代码,比如有些人连最简单的冒泡排序都写不出来。所以对于轮子,我们需要辩证地对待。
轮子本质上解决的是技术问题,它是与业务无关的纯技术实现。但是在具体的业务场景中,轮子又要能嵌入业务逻辑,解决实际的业务问题。所以轮子的核心就在于它对技术与业务的边界洞察,也就是它的技术抽象程度。技术抽象程度越大,它能适用的业务场景也就越多。但是,随着抽象程度的提升,轮子的使用效率和运行效率会下降。
举个例子,假设我们现在写一个静态的首页,上面有Banner区,导航区,最新内容区和热点内容区。由于这些区域都是HardCode,所以它只适用于当前这个业务场景。为了能适应更多的业务场景,我们把这些区域都做成了可配置化。于是一个首页轮子就造出来了。但是它还只适用于包含这些功能区的首页实现,如果想让它适应其他类型的业务,比如列表页,我们就要做进一步技术抽象,扩大轮子业务边界。在此过程中,这个轮子的配置项也就越来越多,变的越来越难用。
技术抽象程度和使用效率就是轮子的内在矛盾,技术圈的各种轮子都是针对某一领域问题,在这对矛盾之间实现的一个折中解决方案。所以面对轮子,程序猿应该去了解三个问题:1. 轮子是在哪个领域做的技术抽象;2. 对该领域的抽象程度;3. 使用效率和运行效率。
对于这3个问题,一般1,3会了解的比较多,但只认识这两点最多也就是知道在什么时候会用,以及怎么用。如果只求实用,这样也就够了,但如果想要提升技术功力,就必须了解2。因为轮子的核心是对技术业务边界的洞察力和抽象设计。这是程序猿需要具备的核心能力。
最后总结下积累轮子的内涵。积累轮子并非停留在应用层面,而是要去理解轮子的技术内核,提升程序猿对技术业务边界的洞察力和抽象设计能力。当面对一个具体问题时,我们可以敏锐地从技术视角来解构问题,在积累的轮子库中快速检索出解决此问题的技术方案。并且,在没有合适轮子的时候,我们有造轮子的能力。
|