「四年總結」一名程序猿的打怪升級之路

4279695-1fdded8b0a5a8d06
感恩有你

「四年總結」一名程序猿的打怪升級之路
不知不覺,入行已經四年時間了,寫博客也寫了四年了。在即將步入2020新的一年,寫下這一篇文章,對自己過去四年的進行一次分析和總結,既作爲自己的年終總結,也希望能對各位讀者、各位Developer的成長有些許啓發。

4279695-4028b94b9f3274d0
目錄

一、爲什麼要寫博客?(愛好由來落筆難,一詩千改始心安)

爲什麼要寫博客? 這個問題小編曾經也在問自己,每次的思索都是片段的,從來沒有認真去想過,如果非要我直接來回答,那我可能就會用兩個字來形容,愛好。

1. 那麼究竟愛好是如何形成的呢?

經過費腦的思考,終於得到了答案,答案就是,因爲怕,因爲懶。

  • 那麼究竟怕什麼呢? 怕出錯,怕犯錯,怕不知道如何來解錯;
  • 爲什麼說懶呢?懶得再次犯錯,懶得犯錯後手忙腳亂不知道如何處理。

所以每次遇到問題或者不明白的地方,凡是經過思考後得到的產物都會以筆記方式記錄下來。好記性不如爛筆頭其實說的就是這個道理。但是這個道理小編直到大學畢業才明白,所以之前小編一直都是一個戰五渣。因爲是學渣所以學歷也一直是小編最大的弱項,但是也正因爲知道自己是一個 學渣,因爲知道自己的弱項,所以纔不敢鬆懈對新知識的追求。悟已往之不諫,知來者之可追。在此再一次向閱讀到這篇文章的讀者建議一下,好記性不如爛筆頭,一定要多記筆記。每一個筆記都是一份個人財富。可能在未來的某一天對你做人做事或者解決問題提供重要靈感和線索。

2. 如何強制自己養成記筆記習慣?

習慣這個東西是很難養成的,從小父母就告訴我們要養成讀書的好習慣,可是說了那麼多年,都沒有在學習階段養成。(PS: 這句話僅對學渣生效,因爲從小就很優秀的人還是很多的)。那麼接下來小編說一下,我的理解,並提供一個解決思路:

  • a. 實用主義
  • b. 養成計劃
4279695-288ebf1194e9a1b6
image

實用主義

不知道我們有沒有注意到,大部分開發者,在讀書時期英語都不是很好,讀都可能不會讀,更不用說默寫單詞了,但是入行一段時間後,竟然都可以獨立閱讀純英文文檔,並寫出單詞。小編把這個情況稱爲實用主義效應,之前學英語學不會,主要是不知道自己學的這些單詞究竟會有什麼用處,會在哪裏用。所以就一直學不好。但是作爲開發者,我們很明白,我學習這個單詞我會在哪個地方用。
所以我們在養成記筆記習慣前先確定方向,哪一些東西需要記筆記,那些東西不用記筆記。比如我的記筆記方向就是技術類方向,管理方面和設計方面的筆記記得就很少。

養成計劃

堅持記筆記一個月。小編的習慣養成是在學習Java Web開發時候,那時候我們大學還未畢業,因爲在學校學習的Java基本都是算入門的,並沒有參加什麼實戰項目,所以學校組織參加一個培訓機構,作爲實習的考覈。學費是1.5w人民幣(這個金額差不多是我家庭1/3年的收入),爲期5個月。實際天數可能更少,覈算下來每天學費是在100+人民幣。假如每天不學習點什麼,那麼就感覺對不起家人。如何證明自己有收穫呢? 小編當時的做法就是記筆記。
於是在電腦上記錄了一個文件夾。每天的學習知識點都記錄一篇筆記。沒想到真的堅持了30天。後來這份筆記在我找工作時候立了很多功勞。也是我打下了牢實的Java基本功。小編相信任何一件事只要堅持一個月就會強制養成習慣。你認爲呢?

二、 寫博客有什麼用?(讀書破萬卷,下筆如有神)

寫博客有什麼用,寫博客給自己帶來了什麼收穫 ?

1. 二次學習,建立索引

當我們對遇到的問題或學習的知識進行記錄的時候,其實也是一個二次思考的過程。比如我們要把我們學習到的可能雜亂無章的知識點,進行歸納和總結。在歸納和總結的過程中無形的對這個知識點進行了系統的總結和歸類。並與你目前已掌握的知識點建立聯繫。這點就類似於Mysql記錄一條數據,給這個數據並添加了一個索引,當遇到類似的問題,你可能想不到怎麼解決,但是能記得你之前記錄的一個筆記,當你翻看筆記時候就找到了解決問題的辦法。這個辦法曾幫助小編解決了無數個問題。

2. 鞏固知識

有一個詞叫似懂非懂,如何判斷自己是真的掌握還是似懂非懂呢? 假如有一個知識點,我們自己理解了,那麼我們在給其他人講的時候是一定可以把對方講明白的,在面對對方的提問時候,通過對問題的回答,就可以爲對方解惑。但是假如在面對對方的提問,不能回答上來,或者說根本就講不明白,那麼其實我們自己也是不明白的。那這個時候應該怎麼做? 手機在手,世界我有 。直接百度谷歌搜索你不明的地方,對筆記進行知識點補充。

3. 主動學習,避免問題

4279695-b5435def040bb881
image

在新人剛進入到行業中,可能會遇到很多系統中的問題,比如 Spring 的各種問題。找不到 Bean 、注入失敗問題、循環依賴問題。 等等問題。肯定會手忙腳亂,影響項目進度,影響自己的工作心情,和工作節奏,可能晚上下班回家睡覺都睡不踏實。(PS: 小編在第一年就是這種情況) 這個時候如何解決呢? 如何才能讓我們快樂的編碼,充分把握項目節奏,多留出時間陪女朋友呢?

小編認爲只有一個方法。即正面問題,主動出擊,找到解決問題的根源。多閱讀常見開發框架的源碼知識,並記錄下來。這樣當你知道框架的實現原理之後就能主動的避免問題和快速的解決問題了。

提一個問題,Spring是如何解決循環依賴問題的 ?

這個問題,我問10個開發同學,可能9個都不能給我講清楚。但是如果你讀到這篇文章,小編舉一個列子你就明白了。下面圖中的文字,是我在2018年開發框架時候寫的註釋。

/**
 * 爲什麼不解決循環依賴問題?
 * 1. 循環依賴本來就是一種錯誤的編程導致的,與其在使用時候發現,不如在服務啓動就提前發現。
 * 2. 循環依賴創建的對象,就跟錯誤的遞歸調用一樣,極容易造成內存溢出,等無法自動修復的系統級異常。
 * <p>
 * 如何解決循環依賴的問題?
 * 1. 發現有循環依賴,就先實例化對象(前提1.Bean有無參構造;前提2.單例模式,不支持原型模式)
 * 2. 實例化對象(不進行屬性注入),因爲都是單例,所以到單例裏面分別獲取這兩個循環依賴的對象,進行互相注入依賴對象
 * <p>
 * 僞代碼實現
 * <pre>
 * class A{
 *     B b;
 * }
 * class B{
 *     A a;
 * }
 *
 * A a = new A();
 * B b = new B();
 * a.setB(a);
 * b.setA(b);
 *
 * </pre>
 *
 * @author liuxin
 * @version Id: SingletonBeanRegistry.java, v 0.1 2018/10/29 2:21 PM
 */

HanFramework

如果你對文字的描述還是看不明白,就看僞代碼。 Spring只是把僞代碼給實現而已,其實原理就跟僞代碼一樣很簡單。

以上的主要想說的是,多學習框架源碼,因爲框架是很龐大的,很系統化的,所以更要系統化記筆記。這樣就能快樂編程了。留出更多時間來配女朋友了。 但是學習的前期是很痛苦的,所以要先死後生,終有破繭成蝶的一天。

三、四年打怪升級路?( 道阻且長,行則將至 行而不輟,未來可期)

回顧過去的三年多時間,很多東西曆歷在目,經歷過無數個加班,也通過無數個宵。但從未後悔,也未敢抱怨。這其中大部分加班都是在上海度過的,下面回顧2016~2019。

1. 2016 - 2017 記錄問題,總結問題

小編工作的第一年。也是小編的瘋狂成長期。這一年也是SpringBoot真正開始流行的一年,於是這一年小編寫了36篇關於SpringBoot的筆記。但是這個時候的筆記偏向於實用主義,這些筆記幫我快速解決了很多問題。

4279695-5b9e0f2324bd6259
image

2. 2018 - 發現問題,避免問題

前一年總是在被動的解決問題,讓小編我加了很多的班,最終致使小編找不到女朋友,於是痛定思痛,主動去找問題,正視問題。這一年開始了對框架源碼的瘋狂學習(PS: 學習時間僅僅佔用我生活時間的很小一部分,小編並沒有很愛學習),主要是看一點記一點,先將問題記成知識點,然後再將知識點連成片,最後在將片連成面。最終形成自己關於框架的知識面(PS: 只要你對Spring形成自己的知識面,那麼就可以輕鬆獨立面對任何Java方面的框架的源碼 )。因爲天下文章一大抄,看你會抄不會抄,抄來抄去有提高,框架之間也是互相借鑑和學習的。我們也可以拿來主義,先拿來,後改造利用。形成新的輪子。現在回顧想想挺簡單,但是實際學習並不容易,但是隻要不放棄,堅持記筆記。問題就能迎刃而解。如果不是有記筆記的習慣,小編早就放棄了。現在小編不能說對Spring全部知識點都掌握,但是可以說掌握百分之六七十。最起碼遇到問題不在緊張,不在驚慌。這個時候你就可以對同事說。

穩住,不要慌,有我在。

4279695-30890ce5a6c669fd
image

3. 2019 - 瞭解問題,解決問題

在經歷了紮實的前兩年學習,基本到第三年就遇不到什麼問題,這裏不是指不會遇到問題,而是說,遇不到那種值得讓你記筆記的問題了(但是實際也會有,並不多)。因爲大部分問題,你都可以通過自己的知識體系而化解了。這個時候就開始要主動的去找問題,並提出解決方案了。這一年小編開始重複造輪子,很多人質疑過重複造輪子是浪費時間,但是小編想說的是如果從學習角度想,重複造輪子是最容易提升自己的一個重要手段,因爲在造輪子的過程中才會真正體會到框架的設計者們爲什麼會這樣去設計,這樣設計的好處在哪裏。
這一年小編在業餘時間獨自開發了三個爲解決問題而設計的開源項目。

  • a. Easy-sentinel
4279695-c27f101c84169203
image

Easy-sentinel一款專門爲SpringBoot項目設計的限流組件,利用Redis+lua從而來實現高性能和分佈式的能力。使用比較簡單。通過半嵌入式的開發即可使用分佈式註解。


  • b. Spring-turnoff

4279695-b30628304a66135d
image

Spring-turnoff Turnoff就是簡化代碼而產生的,通過類似於Hystrix的註解方法,來實現相同的功能,Turnoff主要是利用BeanPostProcessor後置處理器來完成,代碼非常簡單,只依賴Spring,無論是Dubbo分佈式還是SpringCloud分佈式,還是單體應用都可以使用。


  • c. Tomato
4279695-38d046c4f64bc112
image

Tomato專門爲SpringBoot項目設計的冪等組件,讓天下沒有難寫的防重代碼。 基於控制時間兩種防重策略 策略一: 滑動窗口策略 每次請求設置當前請求的控制時間,控制時間內請求均會被攔截。 策略二: 固定窗口策略 僅僅爲第一次請求生成一個控制時間,控制時間內相同的請求會被攔截,控制時間過期後,以此類推。


四、收穫(微雨過,小荷翻,榴花開欲然 )

1. 技能棧

業務時間不斷的獨立開發,讓小編掌握了一條龍的開發流程及中小型企業技術體系如何升級到完善,從設計前端到後端均可獨立完成。

設計主要是(PS + 作圖網站)、前端(Vue + Ant + Element UI)、後端(Java體系,Python作爲腳本,服務監控到,日誌查詢ELK)、運維(Centos運維命令,NginxWeb服務器)、域名購買認證備案到域名解析。但是這些還不夠,其實大多數開發者都可以做到這一點,其實小編主要想說的是,金無足赤人無完人,人外有人天外有天,既然選擇了開發行業,就不能停止學習,因爲新技術總是日新月異,不進則退,而作爲開發者,你的技術體系就是你的生存之道。所以學習不能停。如果有技術問題可以和小編一起留言溝通。

2. 不斷完善的個人博客網站

另外通知一下,經過一夜的開發,博客的文章目錄功能正式上線了,只爲讀者擁有更好的閱讀體驗。各位看官同學,如果對網站有要求或者建議,可以給小編私信或者網站留言。

4279695-16e1c226b65942b7
image

3. 遊戲

王者榮耀至今停留在了鑽石水平無任何進步,還好刺激戰場是幾個賽季的王牌選手。

4279695-210a176f52397be9
image

五、路在何方 ?(翻山涉水兩肩霜花)

4279695-989ae7e0d792f89d
image

路一直在腳下,但是向何方走,就取決於我們自己,小編也在問自己到底是有技術路線還是管理路線。但是目前給自己的答案是25歲之前走技術路線,25歲之後開始慢慢積累管理方面的知識。但是技術路線也不會停止,畢竟這個是小編的愛好,如果不是愛好支撐着,可能早就放棄了。回家採菊東籬下,悠然見南山了。

這個問題是所有技術人的問題,儘早計劃未雨綢繆吧。

六、總結(逝者如斯夫,不捨晝夜)

以上就是就是小編對過去四年的回憶和總結,收穫不多,但是應該還好。在2020年,小編會寫更多的系列性文章,在頭條和程序猿升級課網站(小編的個人網站),希望能夠爲各位新人或者迷茫中的同學,指點迷津,少走彎路。最後提前祝大家新年快樂,過年回家注意人身財產安全。

4279695-fd29b42672cf8368
image

感謝您的閱讀,本文由 程序猿升級課 版權所有。如若轉載,請註明出處:程序猿升級課(https://blog.springlearn.cn/

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