該不該造自己的輪子?

你在學習和寫代碼的過程中一定聽過這個說法:不要重複造輪子,使用現成的類庫就好。

 

一般知名的類庫都是大公司開發並維護的,正確性與性能都有保證。自己再重新開發一個相同功能的類庫,消耗時間、消耗精力、大概率做的還不如別人做的好。

 

我平時寫文章時,也經常會遇到好的專欄與書籍,感覺已經有這麼多、這麼好的資料,這些就是好的輪子,沒必要自己再寫一個專欄了。無奈,內心總希望記錄點什麼,所以隱隱約約挺糾結這事。

 

一直以來都覺得,不重複創造輪子這個觀點沒毛病,從我的「不重複造輪子」系列總結就能看出;但作爲程序員,依然對創造出屬於自己的輪子有着強烈的渴望,那種成就感是無與倫比的美。

 

 

在種種糾結中,想明白了這事:有能力,必須創造自己的輪子

 

爲什麼這麼說呢?

 

首先,不親自去造個輪子,就沒法進步

 

不自己去着手試試造個輪子,寫個類庫,怎麼知道爲什麼自己寫不出來?怎麼知道與"優秀"相差多遠?自己先來一個,哪怕第一版都搞不出來,但往往是硬着頭皮做下去,漸漸會發現可以看懂優秀的作品爲什麼優秀,曾經的遙不可及也不再是無法達到。

 

不建議你自己去造輪子,就是覺得你能力不夠,而恰恰能力就是在一次次嘗試和失敗中鍛煉出來的。停止嘗試,也就停止了進步。

 

 

其次,如果沒有自己的輪子,恐怕將會無路可走

 

美國禁止華爲高端芯片的採購、HashiCorp 不允許中國境內安裝和部署名下的開源軟件(其中包括 consul-微服務註冊發現配置中心)等事件足以說明,沒有自己的輪子可能被會被掐死。

 

 

我們也可以反過來思考一下,那些看起來優秀的輪子就真的是最合適嗎?

 

舉個簡單的例子,JDK 中的 ArrayList 經常使用,再熟悉不過了吧?如果業務場景使用 ArrayList 第一次只需要存儲 3 個元素,第二次需要存入 10 萬個元素,那 ArrayList 默認的擴容機制還合理嗎?

 

有界隊列 Disruptor 爲什麼比 ArrayBlockingQueue 性能高?它爲什麼不使用數組,而是創建了自己的輪子-RingBuffer。

 

追求極致性能的數據庫連接池 HiKariCP,它爲什麼沒用 ArrayList?而是創建了自己的輪子-FastList。

 

世上就沒有一樣的輪子,最合適自己的,一定是出自自己的手筆,除非願意將就。

 

 


【Java面試題與答案】整理推薦

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章