程序員到底要不要重復造輪子?

分享一波:程序員賺外快-必看的巔峰干貨

關于這個話題,現在這里闡述立場:就公司工作而言,不建議重復造輪子。就個人技術而言,強烈建議造輪子!

程序員圈子里流行這么一句話:“不要重復造輪子”。它的原文是:“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荷包
在這里插入圖片描述
一個能讓你學習技術和賺錢方法的公眾號,持續更新

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/537013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537013.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537013.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1582年日歷怎么了_【知乎周邊】知乎2020年日歷開箱+測評

感謝 劉看山 劉看山福利社 知一聲 這邊知乎朋友贈送的禮物,這邊拿到了新的一年2020年知乎的日歷。隨日歷還贈送了一年的鹽選會員體驗卡,這個福利很特別哈。打開盒子,里面是厚厚的但是卻不是很大的一個正方體。側面寫有“有問題的日歷”日歷內…

Redis集群一致性Hash效果的代碼演示

在微服務領域,使用Redis做緩存可并不是一件容易的事情。 像新浪、推特這樣的應用,許許多多的熱點數據全都存放在Redis這一層,打到DB層的請求并不多,可以說非常依賴緩存了。如果緩存掛掉,流量全部穿透到DB層&#xff0c…

多線程-題

1、進程和線程之間有什么不同? 一個進程是一個獨立(self contained)的運行環境,它可以被看作一個程序或者一個應用。而線程是在進程中執行的一個任務。java運行環境是一個包含了不同的類和程序的單一進程。線程可以被稱為輕量級進…

JDK8那些驚為天人的新特性

分享一波:程序員賺外快-必看的巔峰干貨 介紹 隨著java的發展,越來越多的企業開始使用 java8 版本。Java8 是自 java5之后最重要的版本,這個版本包含語言、編譯器、庫、工具、JVM等方面的十多個新特性。本次課程將著重學習其中的一些重點特性。 Jdk8新…

mount 安卓system只讀_Android如何讓system分區可讀寫(MTK安卓6.0)-阿里云開發者社區...

Android 系統默認情況下,system 分區是只讀 mount 的,因為無法進行往里寫數據的,可以用 adb 命令 adb remount 重新 mount 一下。也可以通過在板子上,輸入以下命令重新mount一下system分區命令使其可讀可寫。# mount -o remount /…

【數據結構和算法05】 紅-黑樹(轉發)

2019獨角獸企業重金招聘Python工程師標準>>> 【數據結構和算法05】 紅-黑樹(看完包懂~) 置頂 2016年04月13日 15:50:25 eson_15 閱讀數:52681 標簽: java數據結構算法紅黑樹 更多 個人分類: ● 結構算法---…

數據結構與算法——二叉樹、堆、優先隊列

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 七、樹 7.1 樹 7.1.1 樹的定義 樹是我們計算機中非常重要的一種數據結構,同時使用樹這種數據結構,可以描述現實生活…

android組建之間通信_Android組件化(三)組件之間的通信

介紹在組件化開發的時候,組件之間是相互獨立的沒有依賴關系,我們不能在使用顯示調用來跳轉頁面了,因為我們組件化的目的之一就是解決模塊間的強依賴問題,假如現在要從A業務組件跳轉到業務B組件,并且要攜帶參數跳轉&…

繼牛津大學后,加大伯克利分校等多家美國高校終止與華為合作

文/AI財經社 唐煜編/嵇國華據 Nature News 報道,在美國相關部門的壓力之下,加州大學伯克利分校(UC Berkeley)近日宣布不再與華為簽署新的研究合作;德州大學奧斯丁分校也正在審查自身與華為的關系…

為什么varchar字段長度最好是2的n次方-1

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 計算機是二進制計算的,1 bytes 8 bit ,一個字節最多可以代表的數據長度是2的8次方 11111111 在計算機中也就是-128到127。 而var…

運籌學狀態轉移方程例子_強化學習第4期:H-J-B方程

在上一篇文章中,我們介紹了一種最簡單的MDP——s與a都是有限的MDP的求解方法。其中,我們用到了動態規劃的思想,并且推出了“策略迭代”、“值迭代”這樣的方法。今天,我們要來講更加一般的最優控制問題——t、a與s都是連續的問題。…

Python之celery的簡介與使用

celery的簡介 celery是一個基于分布式消息傳輸的異步任務隊列,它專注于實時處理,同時也支持任務調度。它的執行單元為任務(task),利用多線程,如Eventlet,gevent等,它們能被并發地執行…

不使用比較運算符如何比較兩個數的大小

分享一波:程序員賺外快-必看的巔峰干貨 前言 今天在水群的過程中看到有位群員談論到這個話題,是他找工作過程中某家公司的面試題(到底是哪家公司才會出這種沒營養的題目刁難別人),有點興趣,就開始寫了。 開搞 想了一…

java占位符填充_Java使用freemark生成word

1、制作模板先用office word做一個模板word文檔,${usrName}、${nowDate}占位符 可以使用 office 或者 wps 先創建一個模板表格 (替換$部分可以在 模板格式改變之后 在替換xml 格式改了后有些原本的字符會分開)2、用office word將模板word另存…

Java中如何使用非阻塞異步編程——CompletableFuture

分享一波:程序員賺外快-必看的巔峰干貨 對于Node開發者來說,非阻塞異步編程是他們引以為傲的地方。而在JDK8中,也引入了非阻塞異步編程的概念。所謂非阻塞異步編程,就是一種不需要等待返回結果的多線程的回調方法的封裝。使用非阻塞異步編程…

城市運行一網統管_【宣傳活動】持續開展城市運行“一網統管”建設宣傳活動...

為進一步推進本鎮城市運行“一網統管”建設工作,提高城市治理能力和治理水平,提升社會各界的知曉度和參與度,激發職能部門人員、黨員、群眾參與“一網統管”工作的熱情。9月10日,鎮網格中心于福泉居委會議室開展“推進城市運行‘一…

Java如何只使用位運算實現加減乘除

分享一波:程序員賺外快-必看的巔峰干貨 前言 接前面一篇博客,這又是某個公司的奇葩面試題(都說了到底是哪家公司才會出這種沒營養的面試題)。不過吐槽歸吐槽,這個題目還是有點學問的,比前面那個 不使用比較運算符如何…

Netweaver里某個software component和C4C的版本

有同事問如何通過代碼的方式獲得Netweaver里某個Software component的版本信息,以及Cloud for Customer(C4C)的版本信息。 Netweaver 點了Detail按鈕后: 這些版本信息存在表CVERS里: C4C C4C的版本號在Help->About …

pmc訂單表格_復工了,讀一則“如何提升訂單準交率和生產效率”的真實故事

故事發生在中國南方小鎮上一個做辦公家具的公司……家具公司創建于1995年,是一家集研發、生產、銷售、服務為一體的現代辦公家具、酒店家具制造企業。主要產品有實木班臺系列、會議臺系列、職員桌系列、屏風系列、沙發系列、辦公座椅、酒店家具系列。在省外還有兩個…

GET和POST請求到底有什么區別?

分享一波:程序員賺外快-必看的巔峰干貨 看到這個標題,想必大部分人都已經想關掉這篇博客了。先別急,你真的知道這兩個的區別嗎? 做過WEB開發的朋友可能很熟悉,看到這個問題能立馬脫口而出二者的區別。 GET在瀏覽器回退時是無害的…