1. 程式人生 > >技術人的持續學習成長之路

技術人的持續學習成長之路

近期有幾位童鞋在公眾號後臺留言,希望我指點一下如何從碼農進階為大佬。我想說的是,我不是大佬,因此無法給你建議。但是,對於學習成長提高自己這方面,我想我應該還是有一點發言權。因此,我錄製了一期騷年快享的視訊《技術人的持續學習成長之路》,本文是該視訊的文字稿,希望對你有幫助!

1、技術人成長之路是什麼樣的

理想中的樣子

大多數技術人理想中的進階路線都會像上圖一樣,從畢業之後的初級碼農、中級碼農、高階碼農 再到 技術經理 甚至CIO/CTO。不過,正如這個圓圈一樣,越往上進階圈子越小,裡面的人也就越少。我們大部分人還是在外層的三個圈子(初級、中級、高階碼農)裡邊奮鬥。

現實中的樣子

現實中呢,可能隨著年齡的增大,生活的壓力也隨之增大,時間管理的效率也隨之降低,伴隨而來的就是學習提高的慾望逐漸消滅。所以,可能身邊的人大部分都有35歲的危機焦慮,因此可能會選擇去送外賣、擺地攤之類的。

雖然大部分的時候都是程式設計師的自嘲打趣,但是現實就是這樣,本質上還是處於資訊爆炸時代的技術人們充滿了焦慮,不時發出:“我太難了”!

2、你的焦慮,企業早就在經歷

其實你的這些焦慮,大部分的企業早就開始在經歷了。近年來,不確定性和不可預測性不斷衝擊各個行業的企業,企業的高層管理者們焦慮倍增。特別是在今年的疫情之下,大部分中小企業的高官們比你還難。但是,他們越來越發現在企業前方市場和企業內部支撐之間的一個衝突,那就是市場的無序與企業的有序之間的矛盾。

因為前臺需要面對的是無序的市場變化,因此需要快速響應使用者和低成本地試錯。而後檯面對的是需要穩定有序的生產,因此建設成本高改動成本極大,而且誰也不敢輕易試錯創新。如果將企業的效率比作一個馬達,那前臺和後臺就是這個馬達上的兩個齒輪,前臺快速的轉動,但是後臺卻緩慢的轉達,這兩個齒輪的轉速比就不一致,因此無法整體提高企業的效率。

怎麼解決這個齒輪轉速不一致的問題呢?別急,我們先來看看在軟體設計領域中的解決方案。我們往往會聽到很多大佬說:“任何問題都可以通過新增一個抽象層的方式來解決,如果解決不了,那就再加一層。”

嗯,好像有那麼幾分道理!我們來看看下面這個圖,假設我們要自己實現一個ASP.NET Core迷你框架,針對HttpContext物件,如何適應匹配多個不同的Web Server(比如Kestrel/IIS等)呢?沒錯,為HttpContext和Web Server之間增加一個抽象的Feature層,不同的Web Server只需要實現這個Features介面就可以對HttpContext進行處理了。

嗯,所以近年來網際網路頭部企業開始給我們推廣企業中臺建設,所謂企業中臺就是在剛剛所說的前臺和後臺之間建了一個緩衝帶的橋樑,它提供了可複用的能力,為前臺快速響應提供可能性,就像為這兩個齒輪添加了潤滑劑一樣。

下圖就是一個典型的電商業務中臺,裡面有我們所熟知的而一些可複用的能力,比如商品中心、使用者中心、訂單中心等等,無論前臺業務線如何擴充套件,都是可以複用這些能力的。

3、打造自身能力的可複用“中臺”

通過對企業中臺的介紹,我們可以將它的抽象層思想應用到我們技術人的能力儲備中,也就是打造一個自身能力的可複用“中臺”。

從上圖可以看到,我們所具有的某個具體程式語言的使用開發經驗及原理深入瞭解知識、桌面/Web/App等不同型別的專案開發經驗、不同行業的行業經驗他們都是針對某個具體領域的,可能不是那麼的可複用(這裡的可複用是指可以平滑過渡到新的行業新的崗位)。而最上層我們所面臨的的確實不斷在變化的行業和不同的崗位,就會出現類似於剛剛提到的兩個齒輪不一致的問題,也會讓我們對未來充滿焦慮。因此,從企業中臺抽象層給我的啟發,就是持續學習,刻意練習,建設自身的“能力中臺”,而且這個“能力中臺”一定要是可複用和可遷移的。

我將這個抽象層大致分為了兩類能力:一是基礎的技術能力,作為一個技術人,技術是所有能力的前提;二是通用的領域能力,這個能力可能既包含硬能力也包含軟能力;

基礎的技術能力

對於一個技術人來說,技術肯定是安身立命的基礎。這裡我選擇了一些可複用可遷移的技術能力點,供大家參考。

(1)資料結構:基礎的資料結構與演算法是所有軟體行業從業者的必修課,雖然.NET/Java框架已經封裝好了很多,但是不瞭解資料結構和演算法,是無法寫好優秀的程式碼的。

(2)面向物件:常見的面向物件設計原則 以及 23種設計模式(建立型、結構型、行為型)也是一個技術人需要掌握的,特別是重構程式碼的嗅覺和能力關係著你是否能寫好Clean Code,這也是我在面試中重點考察初中級工程師的核心標準。如果你剛好對重構有興趣,又有寫單元測試的習慣,那就更好,這個能力真的是通用的,因為大部分的企業都需要你有這個能力。

(3)開源專案:如果你對開源專案有興趣,那麼你一定會去對有興趣的開源專案的原始碼進行閱讀,分析他們的設計和程式碼好在哪裡,用了哪些設計原則和模式,重構了哪些地方,是否可以在自己的專案裡面依樣畫葫蘆去設計去重構,這一步關係著你的進階,也是大部分企業所希望看到的開發者的樣子。當你閱讀了一些開源專案之後,或許自己也會試著去寫一些開源專案比如中介軟體之類的。閱讀開源專案原始碼,瞭解優秀設計和程式碼,參與開源專案並提issue/PR,算是所有技術人的進階之路吧。

(4)雲上技術:可能有很多童鞋會問,為啥要把雲技術提到通用的能力層,這是因為雲端計算技術歷經多年發展已成熟併成為一種潮流,它也是企業數字化轉型的重要組成部分。所謂產業的發展勢必影響個體,未來更多的應用都會執行在雲上,架構模式和思維方式也會更多地與雲契合共生!因此,越來越多的企業都會上雲,基於雲服務來設計自己的企業IT架構,將運維工作統統交給雲服務,而專注於業務邏輯。所以,瞭解和善用雲上PaaS服務、能夠進行雲端技術選型 並 運用雲原生應用架構 是新時代的技術人應該掌握的基礎技術。

最後總結,所謂通用的基礎技術能力,其實就像Docker和Kubernetes一樣,他們分別對應著容器技術 和 容器編排 領域的事實標準,基礎技術能力其實也像是一個標準,無論你深入的語言和行業是什麼,這些東西都是標準化的。

通用的領域能力

對於一個技術人來說,在技術上的廣度和深度都有所觸及之後,也需要沉澱一些可複用的領域能力。同樣,這裡我列舉了一些通用的領域能力,供你參考。

(1)業務知識:無論你承認與否,大部分的企業的核心業務只有三部分,他們是 營銷(市場)、生產 和 供應鏈。可能部分企業專注於一個或兩個,但並不影響我們對其的瞭解。只有深入地瞭解業務背景知識,才能夠在企業的數字化轉型過程中充分發揮數字化的魔力為業務賦能。當然,你可能會說不同企業的核心業務肯定都會有所不同,這就需要你瞭解這些業務的共性和差異性了,而這些共性就是你可以平滑過渡的可複用能力。此外,我還講洞察力列入其中,這是因為只有掌握了洞察力,才能在短時間內瞭解各個業務的本質,幫助你做一些決策。當然,這是一個龐大的話題,在此就不展開了。

(2)行業經驗:和業務知識一樣,雖然不同行業的行業經驗可能適應度不強,但只要你善於總結共性和差異性,就能成為你的可複用能力。

(3)團隊經驗:軟體開發設計是一項需要協作完成的工作,單打獨鬥是做不了大專案的。因此,如何在團隊裡做一個好的組員,或者說如何較好地參與協作開發是一個需要學習的過程。而當你已經較好地參與團隊的寫作之後,你就會得到一些提高以及更大的責任,比如指導初級工程師和進行一些Code Review。當然,你還會得到升為Team Leader管理一個團隊的機會。那麼,如何做一個Team Leader,如何高效地管理一個團隊,處理好與各個組員的關係,這也是一個學問,因為人是這個世界上最複雜的個體。因此,團隊經驗也是一個最通用的能力,因為有人的地方就有江湖,IT公司最不缺的就是團隊。

(4)外語能力:說起外語能力,我想大多數童鞋或許在大學期間都通過了CET-4 或 CET-6,具有了一定的基礎。但是,畢業之後,只要你沒有進入外企 或者 對英語有要求的企業,想必應該都會大部分還給書本了。不過,軟體開發也是一門需要英語的行當,內事不決問百度,外事不決查谷歌,很多時候都需要使用英語去搜索,很多開源軟體的wiki以及報錯也都是英語,乃至你去提issue寫comments或者和github上的基友聊天還是得用英語。如果你的英語不錯,你還可以和歪果仁流利地聊天,B格滿滿。所以,儘可能多鍛鍊鍛鍊你的英語吧,以後35歲或許還可以去955或者965的外企,體會work and life balance的快感。我就是從work and life balance的某外企出來的,那真是一個很nice的舒適區。

說了這麼多通用的領域能力,其實就是希望我們技術人能夠將自己的經驗和能力進行一些分類,將那些大部分行業都需要的共效能力進行一層抽象,並重點培養形成自己的中臺,幫助自己能夠在不遠的未來適應不同的變化。其實,對於技術人來說,還有一個通用的能力我沒有列出來,那就是產品思維,但是想到可能並不是太通用,因此也就沒有列出來。很多時候,做減法,比作加法難。

4、我的一點建議

對於1~3年工作經驗的童鞋:基礎不牢,地動山搖,順便養成持續學習的習慣!

這個階段的童鞋最容易浮躁,因為在這個架構師課程隨手可及的時代,往往會抓不住重點從而眉毛鬍子一把抓,最後揀了芝麻丟了西瓜。因此,應該靜下心來,不浮躁,努力夯實技術基礎。

對於3~5年工作經驗的童鞋:在深入技術的同時逐漸重視可複用可遷移能力的建設,然後想好自己未來想要走的方向,想好了,那就堅定地走!

這個階段的童鞋最容易焦慮,因為在這個生活壓力倍增而收入卻沒法匹配增長的時代,程式設計師界的前浪往往會被後浪拍在沙灘上。而一旦被拍在沙灘上之後,很多人就再也起不來了,不是因為他們起不來,而是已經失去了起來的動力。

對於5年以上工作經驗的童鞋:不好意思,我沒法給你建議!因為我2015年研究生畢業,到現在也才5年工作經驗。因此,我只給我認知和能力範圍之內的建議。

5、小結

上面零零散散說了很多,但是我最想提的一句話是:你培養的所有的能力,其終極目標都應該是 降本(Cost Saving,降低成本)+ 增效(Value Add,增強效益/效率),從而實現自身價值。

你可以將自己看做是一個企業,你所有的努力都是為了讓這個企業的效益更好,實現自身的價值,而你實現更高效益的方式就是努力使用和探索成本更低,效益更高的方式和途徑,從而讓自己一直具有較高的議價權。

說到這裡,我很喜歡劉潤老師在《五分鐘商學院》中提到的一句話,也送給各位童鞋:“每個人都是自己的CEO”!

讓我們一起持續地用心經營自己,因為認真走過的路,每一步都算數!

6、彩蛋

後續我也會單獨開一個專題來聊聊可複用可遷移的領域能力建設,暫且叫它“業務架構師之路”吧!

 

作者:周旭龍

出處:https://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。