Categories
程式開發

程序員為什麼熱衷於造輪子,升職加薪嗎?


作者:小傅哥

博客:https://bugstack.cn” – 原創系列專題文章

沉澱、分享、成長,讓自己和他人都能有所收穫! 😄

一、前言

哪個架構師沒造過輪子?

你想過這樣一件事嗎? 是先具備能力在安排職位,還是先安排職位在學習? 🤬什麼? 走後門,你出去!

就像我們上學考試、跆拳道考段、晉升答辯一樣,都是先具備了可勝任上一階段的能力,才給予相應的職位。 所以,架構師造輪子從做程序員時候就開始了,只不過到了架構師階段可以造出更好的輪子。

鑑於實際業務開發的緊急程度,不會允許你造輪子。 但造輪子,幾乎是每個程序員突破技術瓶頸的最佳方式。 千萬不要因為一句,不要重複造輪子的藉口,給自己一個不學習的理由!

二、我造過的輪子

我可能是癡迷於造輪子!

了解小傅哥的粉絲可能都知道,我的第一份工作是寫了兩年的C#,但為了不放下我寫好的Java,在工作之餘就用Java 語言把我能接觸到到的項目,都用Java 寫了一遍,包括;串口打碼機服務、中繼器對接、PLC數據採集等等。

等到正式進入互聯網後,像是為我打開了新的大門,這能接觸到的知識太niao性了,盤它! 來,看我造過的輪子。

1. RPC 通信組件

文章:手寫RPC框架第三章《RPC中間件》“源碼:https://github.com/fuzhengwei/itstack-demo-rpc“難度:⭐⭐⭐15年初進互聯網,驚訝的發現原來兩個工程之間還可以使用RPC通信,以前公司使用的還是http或者webservice,所以這部分知識給我帶來了很大的衝擊。為了能更明白的了解它,找到了一些git中的源碼,像Dubbo、gRPC,進行學習。學著學著,就開始動手自己實現一次,實踐的過程學到了大量的知識,包括;結合Spring開發中間件、自定義配置、主定義註解、切面攔截、Netty通信、編解碼器、流量整形等等。這些知識也為我後續開發其他中間件,打下了一個很好的基礎。

2. 編寫JVM虛擬機

文章:用Java實現一個JVM虛擬機“源碼:https://github.com/fuzhengwei/itstack-demo-jvm“難度:⭐⭐⭐⭐⭐這是一個用不上的輪子,同時這麼幹可能有點虎🤔,整整寫了一個月,寫了幾十萬行代碼,才能運行幾個簡單的HelloWorld。但,因為我不想听別人吹著一些理論詞忽悠了我的編碼生涯,也不想看幾本不能實操落地的書就感覺學會了。所以,我才願意投入大量的時間進行實踐,雖然我不能完整的編出一個可以用到生產使用的JVM,但我通過這樣的學習,了解了JVM的基本功能;搜索和解析class、字節碼指令集、運行時數據區、虛擬機棧、棧針、局部變量表、操作數棧、寄存器等,是如何一步步把Java代碼跑起來的。

3. 基於SpringBoot的分佈式任務中間件

程序員為什麼熱衷於造輪子,升職加薪嗎? 1

文章:[开发基于SpringBoot的分布式任务中间件DcsSchedule](https://bugstack.cn/itstack-ark-middleware/2019/12/08/%E5%BC%80%E5%8F%91%E5%9F%BA%E4%BA%8ESpringBoot%E7%9A% 84%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E4%B8%AD%E9%97%B4%E4%BB%B6DcsSchedule( %E4%B8%BA%E5%BC%80%E6%BA%90%E8%B4%A1%E7%8C%AE%E5%8A%9B%E9%87%8F).html)源碼:https://github.com/fuzhengwei/schedule-spring-boot-starter“難度:⭐⭐⭐這是一個什麼輪子呢?簡單來說它這功能類似xxl-job,組件要解決的問題是把定時任務,可以分配到不同的機器上去執行,同時它是以zookeeper 作為註冊中心擴展為分佈式任務調度系統。接入方式接單易用,統一控制啟停、宕機災備等。並且能自動檢測;部署數量、任務總量、成功次數、失敗次數、執行耗時等信息。

4. 服務治理中間件

文章:[服务治理中间件之统一白名单验证](https://bugstack.cn/itstack-ark-middleware/2019/12/02/Spring-Boot-%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%BC%80% E5%8F%91(%E4%B8%80)-%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86%E4%B8%AD%E9%97%B4 %E4%BB%B6%E4%B9%8B%E7%BB%9F%E4%B8%80%E7%99%BD%E5%90%8D%E5%8D%95%E9%AA%8C%E8 %AF%81.html)源碼:https://github.com/fuzhengwei/door-spring-boot-starter“難度:⭐⭐⭐服務治理是什麼?其實服務治理包括的內容也比較多,例如;從部署層面、管理層面、應用層面、網關層面等等,而這裡的服務治理說到的是應用層面,簡單來說,例如你有很多個服務系統,每個服務的對外層都需要白名單,那怎麼辦呢?不太可能每一個系統都重複的開發類似的功能,這樣也很難管理。所以我們希望把業務系統中,非業務邏輯的通用性核心功能抽離出來,開發成統一的業務組件,來幫助服務解耦,讓業務系統更關心業務流程開發。那麼這就是服務治理其中的一個作用。

5. Netty仿桌面版微信

程序員為什麼熱衷於造輪子,升職加薪嗎? 2

文章:Netty+JavaFx實戰:仿桌面版微信聊天“源碼:https://github.com/fuzhengwei/NaiveChat“難度:⭐⭐⭐⭐本項目是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技術棧和偏向於DDD領域驅動設計方式,搭建的仿桌面版微信實現通信核心功能。

6. 還有很多造過的輪子

數據庫分庫分錶路由中間件Redis緩存讀寫引擎中間件ES + Ibatis結合使用中間件全鏈路業務流程監控

除了,這些造的輪子還有很多,其他的不一一列舉了。 當然我不只造輪子,還造各種小工具,甚至還包括js寫的散列路由計算器。 總之,我可能在造輪子的路上越走越遠,是因為過於痴迷🧐!

三、造輪子升職加薪嗎?

造輪子本身不一定升職加薪,如果你第一次造,也許會被扣薪。

如果是運用到業務系統中的造輪子,不同於CRUD,往往需要了解Spring 或者SpringBoot 部分源碼,以及動態代理和反射等知識。 並且在設計實現上也要考慮的非常全面,否則出了事故就不只是一個系統,而是所有使用你這個輪子的系統都需要隨著你升級改造上線。 所以,造輪子不一定升職加薪!

但,造輪子可以讓個人的技術棧得到很全面的成長,也許還能讓你在某個階段突破現有的技術瓶頸。 因為造輪子你需要學習以往別人的輪子、組件的源碼、拓展的技術棧以及更加全面的思考🤔。

最後是你造的輪子要能經受起驗證,也要能適應業務需求進行拓展,並且這可能還是一份除了你日常業務系統開發外的其他工作。 是否能經受起這份考驗,也就決定了你能收穫多少知識。 而這份別人沒掌握的知識才是你升值加薪的籌碼! 也是你能留下的本事和走出去的能力!

四、有人反對你造輪子?

不要重複造輪子、不要重複造輪子、不要重複造輪子

很多時候你是否聽到這句話,而把自己內心的小火苗澆滅。 其實這句話從某些時候來說不一定是錯的,因為一個項目的開發到上線,需要對時間成本、項目質量、可靠度進行評估,誰也不敢貿然使用一個沒有驗證過的新功能,也不敢讓你拿著練手。

當然,有時候我們造的輪子不一定是重複的,可能是創新的。 但這個輪子的階段,不應該是新項目啟動時候開始,最起碼應該是你在這之前就寫過,已經驗證過,已經投入生產過,才敢讓你造了用。 對於當前這次開發,如果非常緊急,那麼最好的是求穩,並在這個項目裡吸收更多的經驗。 並總結如果是用了你的輪子,那麼這個輪子能支持多久,還需要擴展嗎,會不會有問題。

這一切的學習、總結、應用,最終都是可以為你技術棧成長鋪路的。 不要因別人反對就放棄,也不要倔強的就非要怎樣,而且游刃有餘的成長和學習。 有準備的人,總是會在必要的時候給力😎!

五、總結

沒有一句話能評論造輪子的錯和對,即使是已經有了的輪子,那麼你以學習為目的呢? 你以可以拿出更優的方案為導向呢? 所以,想造就造吧,只不過千萬要驗證在使用! 造輪子能我們學到很多業務系統開發以外的知識,這些知識能拓展你的技術棧,掃描掉一些技術盲區,為你以後的晉升答辯或跳槽面試鋪好夠到更高薪資的墊腳石。 想造輪子要學會讀源碼、學會技術遷移、學習數據結構、學習算法、學習設計模式,一定是先提陞技術視野了,才能讓自己有造輪子的想法,而不是硬造。

六、系列推薦

Mybatis接口沒有實現類為什麼可以執行增刪改查Spring定時任務Quartz執行全過程源碼解讀基於jdbc實現一個Demo版的Mybatis咋嘞? 你的IDEA過期了吧! 加個Jar包就破解了,為什麼?