你在学习和写代码的过程中一定听过这个说法:不要重复造轮子,使用现成的类库就好。
一般知名的类库都是大公司开发并维护的,正确性与性能都有保证。自己再重新开发一个相同功能的类库,消耗时间、消耗精力、大概率做的还不如别人做的好。
我平时写文章时,也经常会遇到好的专栏与书籍,感觉已经有这么多、这么好的资料,这些就是好的轮子,没必要自己再写一个专栏了。无奈,内心总希望记录点什么,所以隐隐约约挺纠结这事。
一直以来都觉得,不重复创造轮子这个观点没毛病,从我的「不重复造轮子」系列总结就能看出;但作为程序员,依然对创造出属于自己的轮子有着强烈的渴望,那种成就感是无与伦比的美。
在种种纠结中,想明白了这事:有能力,必须创造自己的轮子。
为什么这么说呢?
首先,不亲自去造个轮子,就没法进步。
不自己去着手试试造个轮子,写个类库,怎么知道为什么自己写不出来?怎么知道与"优秀"相差多远?自己先来一个,哪怕第一版都搞不出来,但往往是硬着头皮做下去,渐渐会发现可以看懂优秀的作品为什么优秀,曾经的遥不可及也不再是无法达到。
不建议你自己去造轮子,就是觉得你能力不够,而恰恰能力就是在一次次尝试和失败中锻炼出来的。停止尝试,也就停止了进步。
其次,如果没有自己的轮子,恐怕将会无路可走!
美国禁止华为高端芯片的采购、HashiCorp 不允许中国境内安装和部署名下的开源软件(其中包括 consul-微服务注册发现配置中心)等事件足以说明,没有自己的轮子可能被会被掐死。
我们也可以反过来思考一下,那些看起来优秀的轮子就真的是最合适吗?
举个简单的例子,JDK 中的 ArrayList 经常使用,再熟悉不过了吧?如果业务场景使用 ArrayList 第一次只需要存储 3 个元素,第二次需要存入 10 万个元素,那 ArrayList 默认的扩容机制还合理吗?
有界队列 Disruptor 为什么比 ArrayBlockingQueue 性能高?它为什么不使用数组,而是创建了自己的轮子-RingBuffer。
追求极致性能的数据库连接池 HiKariCP,它为什么没用 ArrayList?而是创建了自己的轮子-FastList。
世上就没有一样的轮子,最合适自己的,一定是出自自己的手笔,除非愿意将就。
ConstXiong 备案号:苏ICP备16009629号-3