分享一波:程序員賺外快-必看的巔峰干貨
關于這個話題,現在這里闡述立場:就公司工作而言,不建議重復造輪子。就個人技術而言,強烈建議造輪子!
程序員圈子里流行這么一句話:“不要重復造輪子”。它的原文是:“Stop Trying to Reinvent the Wheel”,意思是“不要重復發明輪子”。
首先我們要搞清楚兩個概念 —— 造輪子和發明輪子。輪子是在距今6800年前被發明出來,在此之前我們的祖先可能已經就在嘗試對輪子的創造。從三角形、四邊形、五邊形等等,一直到最后的圓形輪子,每種輪子都不一樣,這叫做發明輪子。
而當輪子的形狀確定后,再發明其它形狀的輪子就沒有意義了,改進輪子才是重點,于是就有了石輪、木輪、空心木輪、氣輪的轉變。而現在,氣輪也有多種款式,適用于不同的場景,這叫做造輪子。
可以看出,發明輪子已經變得毫無意義,但是造輪子依然是人們所關注的焦點。
jdbc操作數據庫過于繁瑣,所以有了hibernate。hibernate過于笨重,因此有了輕量級的mybatis。mybatis 手寫sql比較麻煩,因此衍生出了通用Mapper、mybatisplus等框架,struts2浪費資源,所以有了單例的SpringMVC。。。這就是重復造輪子的過程,了解現有輪子的原理和利弊,加以改進,這并不是一個無意義的過程。
造輪子是一種學習方式,造輪子前需要對現有的輪子理解透徹,我相信mybatisplus的作者一定熟讀了mybatis的源碼,這樣才能把自己的輪子造的好,這是自我能力提高的表現,同時可以增加自己的知名度。有的人工作了五六年依然只會crud,有的人已經靠造輪子成了大V。有的人依然沉溺于舊技術而排斥新技術,有的人已經靠造輪子寫了書。有的人在小公司使用SSM寫完了一生的項目,有的人靠造輪子已經被大公司挖走。。
造輪子是學習技術的極好途徑,當你要造一個輪子時,必定要去閱讀類似的源碼。初步可能寸步難行,而當你攻破了一個、兩個、三個關卡之后不知不覺的就理解了他的架構方式,你會發現高手之所以是高手,代碼可讀性真的高。有些的代碼讀起來很享受,而有些人的代碼讀起來讓人想死。而當你理解了框架源碼后,自己的技術也就有了質的飛躍。
在閱讀了源碼之后,不知不覺中你的架構水平、代碼規范、設計思想已經不知不覺的養成了,而不去嘗試造輪子的話比如下面兩個問題就可能有人答不上來。
接口和抽象類的使用場景是什么?
jdk8為接口提供了default關鍵字,接口方法也能擁有具體實現,那么接口是否可以替代抽象類?
而一個熟讀了源碼并嘗試造輪子的人是不會有這種疑問的。
此外,對于社招而言,需要外練筋骨皮、內練一口氣。造輪子就是外練的過程。通過自己去閱讀輪子、造輪子,將心得分享到各個博客、論壇,或者是將自己造的輪子開源到github,以此來增加自己在行業里的名氣。諸如科大訊飛之類卡學歷的公司不少,所謂學歷就是指學校的名氣,學校的名氣間接地反映了你個人的實力,而你個人的名氣事實上遠遠比學校名氣要有用。當你個人在行業內有了一定的知名度,什么學歷不夠、工作年限短、項目經驗少都不再會影響到你,就等著獵頭挖你吧。如果在面試的時候面試官也知道你,那絕對是必過的。
分布式事務這塊,三種(也可以說是四種)模式已經定型,txlcn、seata、ShardingSophia等分布式事務框架層出不窮;分庫分表這塊也有mycat和sharding jdbc兩大陣營;而至于像ruoyi、jeecg等敏捷開發框架亦或是gitea、gogs這樣的git倉庫那就是群魔亂舞。這是典型的重復造輪子的過程,而這些技術也并沒有因為有了前者而導致后者熱度上不去,因為它們各有所長。我相信這些輪子的作者小日子過得一定不錯。
造輪子就像學習一樣需要有個過程,不要想著自己寫個框架就指定火(這樣的人我見過,真的,寫了個mybatisplugs就大罵mybatisplus各種缺點,結果自己的框架存在嚴重的sql注入問題,甚至被我爆出了數據庫賬號密碼。。)。我們總看到誰誰誰多么厲害,但是人家背后付出的努力是你看不到的。
那么如何造輪子呢?
首先,看源碼。想要擁有造輪子的能力至少你得熟悉別人的輪子,源碼的閱讀是不可缺少的。源碼并不是那么的高高在上,可以先從HashMap、HashTable、ConcurrentHashMap、Vector、ArrayList等集合框架的源碼入手,讀懂了之后嘗試著手寫,這些東西事實上讀懂一個其他的都是分分鐘的事情。像Hashmap實現原理這個問題可以說90%以上的公司都會問,而如果只靠背的話很容易就忘了,自己確實閱讀過源碼并且手動實現過那就可以記住一輩子。
接著,封裝工具類。所謂框架只是個概念,比如早期的JQuery和Bootstrap就稱為框架,而現在只能稱之為庫。而前段中庫和框架的關系就類似于java中工具類和框架的關系。封裝工具類就是造輪子的基礎,或者說封裝工具類就是在造輪子。在對源碼熟悉并且代碼規范和思想有所了解之后,就可以自己去封裝工具類了,這里推薦兩個工具類:StringUtils和ReflectionUtils,當然后者在網上可能搜不到,因為這是我自己造的輪子。前者是對lang3的StringUTils進行增強,如trim方法不能去除特殊字符的空白符,StringUtils沒有提供脫敏方法,沒有中文錢數轉英文方法等等,這就是這個輪子的缺陷,那么就需要去完善它。而后者就是常用的反射框架,通過對此的封裝,能加深對反射的理解,而反射則是一切框架的基礎。
工具類封裝的多了,漸漸地就開始由小到大,那么你就可以開始閱讀框架源碼了,這里建議從mybatis開始,這是最貼近我們的一套框架,通過閱讀mybatis框架的源碼,加深對其的理解,為其寫中文注釋等等。最后通過mybatis的插件機制自己寫一個分頁插件。這是重復造輪子的過程,但是它并不是沒有意義。通過一個分頁插件,就能加深對MappedStatement、Executor、ResultSetHandler等等等的理解,這對后期自己完全手寫mybatis是極有幫助的。
最后需要提到的是,上面的那些過程一定不要忘記發博客。上面僅僅是通過重復造輪子去提高自己的技術水平,而發博客、開源到github則是提高自己的名氣。事實上寫博客也是將自己的知識點向外輸出的過程,只有向外輸出了,才能記得更深刻,這也不失為一種學習方法。
最后需要說的是,重復造輪子并不是不可取,相反我非常建議多造造輪子,這是對自己技術的磨練,也是更深層次的學習。
*************************************優雅的分割線 **********************************
分享一波:程序員賺外快-必看的巔峰干貨
如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程
請關注微信公眾號:HB荷包
一個能讓你學習技術和賺錢方法的公眾號,持續更新