该不该造自己的轮子?

2020-06-09  

你在学习和写代码的过程中一定听过这个说法:不要重复造轮子,使用现成的类库就好。

 

一般知名的类库都是大公司开发并维护的,正确性与性能都有保证。自己再重新开发一个相同功能的类库,消耗时间、消耗精力、大概率做的还不如别人做的好。

 

我平时写文章时,也经常会遇到好的专栏与书籍,感觉已经有这么多、这么好的资料,这些就是好的轮子,没必要自己再写一个专栏了。无奈,内心总希望记录点什么,所以隐隐约约挺纠结这事。

 

一直以来都觉得,不重复创造轮子这个观点没毛病,从我的「不重复造轮子」系列总结就能看出;但作为程序员,依然对创造出属于自己的轮子有着强烈的渴望,那种成就感是无与伦比的美。

 

 

在种种纠结中,想明白了这事:有能力,必须创造自己的轮子

 

为什么这么说呢?

 

首先,不亲自去造个轮子,就没法进步

 

不自己去着手试试造个轮子,写个类库,怎么知道为什么自己写不出来?怎么知道与"优秀"相差多远?自己先来一个,哪怕第一版都搞不出来,但往往是硬着头皮做下去,渐渐会发现可以看懂优秀的作品为什么优秀,曾经的遥不可及也不再是无法达到。

 

不建议你自己去造轮子,就是觉得你能力不够,而恰恰能力就是在一次次尝试和失败中锻炼出来的。停止尝试,也就停止了进步。

 

 

其次,如果没有自己的轮子,恐怕将会无路可走

 

美国禁止华为高端芯片的采购、HashiCorp 不允许中国境内安装和部署名下的开源软件(其中包括 consul-微服务注册发现配置中心)等事件足以说明,没有自己的轮子可能被会被掐死。

 

 

我们也可以反过来思考一下,那些看起来优秀的轮子就真的是最合适吗?

 

举个简单的例子,JDK 中的 ArrayList 经常使用,再熟悉不过了吧?如果业务场景使用 ArrayList 第一次只需要存储 3 个元素,第二次需要存入 10 万个元素,那 ArrayList 默认的扩容机制还合理吗?

 

有界队列 Disruptor 为什么比 ArrayBlockingQueue 性能高?它为什么不使用数组,而是创建了自己的轮子-RingBuffer。

 

追求极致性能的数据库连接池 HiKariCP,它为什么没用 ArrayList?而是创建了自己的轮子-FastList。

 

世上就没有一样的轮子,最合适自己的,一定是出自自己的手笔,除非愿意将就。

 

ConstXiong 备案号:苏ICP备16009629号-3