編程人生:畢業到邁入工作的第五年,發生了這些變化
每年,在這個時候,充滿了悲歡離合,也總能看到各種活蹦亂跳的小鮮肉。我們畢業了,我們開始賺錢了,我們踏上了一條不歸路……。結束一段旅程,開始填新的坑,或者挖一個坑。我總習慣性的會做一些“反省”、總結的文章,它可以幫助我重新回到 “正軌” 上,指出到下一階段我所需要的內容。
引子
之前寫《演進:在工作的前三年里快速成長(練習篇)》是因為三年是一個重要的門檻,而五年將是另外一個重要的門檻。一個最簡單的區分方式,就是看看各個招聘網站的相關要求:1-3年、3-5年、5-10年。當然就國內的情況下而言,很少有 10年+ 的開發崗位。
- 1~3 年,我們已經成了一個入門級的搬磚工人,變成了一個熟悉的搬磚工人。我們開始承擔一些重要的開發角色,如主力開發,但是多數時候還是個人開發者。
- 3~5 年,我們開始尋求技術之外的突破,并且精力有限不再單打獨斗。前三年的經驗,讓我們有能力區分自己未來適合什么路線:技術、技術管理還是純管理。但是不論怎樣,我們在提升自己技術的同時,還需要指導、帶領組織內他人的成長。
- 5~10 年,我們開始站在更高的層面考慮問題。我們的系統在整個大系統的架構,整個系統架構的未來,行業發展的趨勢、架構的演進,blabla。我們開始去證明、追求自我的價值。
- 10年+,未來太遠,我編不下去~。
(PS:對于中小公司來說,可能就不是這樣了)
這一切的大前提是,我們不是五年里,重復了一年的經驗。
就這么的,五年變成了一個重要的分界線,不管我們怎么看,他就是在那里,不多也不少。踏入下一個門檻之前,我想的分享一下之前四年的一些體會。它還可以在未來,幫我看看,我的路線是不是清晰、正確的。
Works
工作上狀態的主要變化是:項目上學的東西越來越少,需要越來越多的貢獻。即變成了 輸出 >> 輸入 的狀態,從短期來看,這是一件好事——我需要不斷的去補充新的知識。大抵也是技術的另外一個瓶頸區,好在有 DSL 和 DDD 相關的知識可以探索。
可當我在培養別人的時候,我總會在想著長遠一點的,這些人如果一直和工作倒是不錯的。
工作:從得到什么,到創造什么
畢業進入一家公司,我們看重的是能從得到什么。比如獲得一個 BAT 程序中的頭銜,賺取更高的收入,贏得從大牛學習的機會。總之,我們渴望快速的打怪升級。
故事最開始的時候,我們在新手村附近打怪,升級很快。一段時間后,打這些怪,會讓我們覺得無聊,便去尋找更大的挑戰,獲得更多的經驗。又一段時間后,我們又需要成長了……。
如果能那么順利的成長,那便也是極好的。可惜并不可能,一家公司的資源和人力都是有限的。公司內部的矛盾也多數源于此:爭奪有限的資源。同樣的,對于個人成長也是如此,我們需要成長的資源。而不同公司的制度是不同的:
- 要么,我們獲得多大的資源,我們就可以證明我們有多大的能耐。
- 要么,我們證明我們有多大的能耐,我們就能獲得多少的資源。
多數情況下,獲得的基礎是多付出,多付出才是多獲得的前提。可不是多付出就一定能多獲得收入,而是在有用的地方付出。
這么幾年下來,對于此的看法發生了一些變化,從應該得到了什么,到我創造了什么價值,我才能得到什么。
這一點可以在不同公司的級別看出一些端倪,如我司的:
- Junior Consultant,能把活干好
- Senior Consultant,能帶別人干活
- Lead Consultant,到能找活干
- xxx Consultant,我們得有這個坑
那么,按照這樣的組織架構,下下一個階段,應該就是嘗試去創造項目機會。這些意味著:引入技術趨勢、提升客戶影響力、提升組織的能力……。
未來大抵也是如此吧。
工作多年之后,當我們開始去尋找自我價值的時候,我們就想去取得一點成就;當我們想要有所成就的時候,我們得去做更多的事;做更有價值的事,我們就能獲得更多的收入和經驗。
技能:從提升編程技能,到提升可遷移技能
畢業的時候,我覺得編程就是一項可以賴以生存的能力。可當實際上,它只是一門手藝。每當我們在討論編程能力的時候,我們討論的能力基本上是和編程無關的。
- 我們討論程序設計的時候,討論的是:抽象思維、歸納能力、設計能力……。
- 我們討論解決 bug 的時候,討論的是:如何找尋問題、分析問題,然后解決問題、歸納問題。
- ……
編程只是我們完成上述步驟的技能而已。
綜上所述,編程是一個專業知識技能,具有很強的不可遷移性。而在我們日常的工作中,我們還需要一些額外的技能:做 PPT、做技術分享、溝通、時間/精力管理等等。用一個專業的歸納,對能力進行分類就是:
- 專業知識技能。
- 可遷移技能。可在不同行業中使用的技能。
- 自我管理技能。即自我認知和自我約束、調整等能力。
就當前而言,專業知識技能是我們的主要發展目標,也是我們的談資。但是隨著時間的推移,我們需要不斷的提升其它能力。
對于當前的我而言,主要的是可遷移技能。作為一個短板,它的短期提升空間更大。
業務:從厭惡業務代碼,到進一步抽象業務
剛畢業的時候,對于每天寫業務代碼可謂是厭惡。寫起來即繁瑣,又不會有成就感。在這個時候,最有技術感覺的便是,在啟動一個新項目的時候,從零一步步搭建工程。畢竟在多數的公司里,項目上遇到技術挑戰,那是是可遇不可求的。
可時間一長,搭建工程這種事情,做起來也覺得無聊了。反而,相對于從頭起一個項目,重構、演進一個項目更具有挑戰性一些。
而工作時間一久,發現其實最難的部分不是技術,而是將技術抽象到業務中,解決繁瑣的業務問題。如果不能跳過問題,那就去解決這個問題。
在最近的幾個項目里,我嘗試了一些 DSL,也從中看到了一些改進的空間。以這種方式來解決問題,往往要比一個純技術的問題要復雜。多數時候吧,我們遇到的技術問題,都是別人遇到過的。我們所做的便是從他們的場景里,轉移到我們的場景中。
這大概或許就是我下一個階段的目標。
Personal
工作,不是我技術的主要知識來源,而是應用場景。技術提升,多數時候還是依靠于平時的研究。而研究也需要一些明確的 roadmap,套用 @justjavac 的一句話就是:
- “精通 one,學習 another,關注 next ”
技術學習:學習新技術,而不是新框架
剛畢業的時候,我陷入了一個誤區,那就是什么熱鬧就學習什么。但是,人的精力是有限的,特別是上了 “年紀” 之后,要處理的事情多了。反而,要集中起精力,倒沒有那么容易。但是,一旦集中起精力,但會保持一段時間。
在進行技術選型的時候,我們很容易陷入 HDD(熱鬧驅動編程)的影響。貿然地決定使用一個新的框架,于是:
- 在工作上,我已經偏向于使用已有的框架,不再從零嘗試新的可能性。
- 在業余時,我則偏向于不使用已有的框架,從零嘗試更多的新可能性。
這種變化的主要來源是,在工作中使用新的框架,會占用額外的業余時間。這一點相當的有趣,特別是當我們熟悉了使用 Angular、React、React Native 之后,我們又要去嘗試新的相似的框架,這種學習無異于浪費時間。
我們已經在某一個技術棧花費了一定的時間,積累了大量經驗。而在前端這個領域,就當前而言,使用 Angular、React 或者 Vue 來說,總體的區別并不大。但是,我們去得學習一個新的語法,模板,語言,適應一些新的設計特性——在其它框架看來,可能是缺陷。而應該拿這些時間去研究更底層的技術,或者去創建一些自己的框架。
由此帶來的變化是,我將這些時間投資到一些新的技術領域里去。如今年我設定的兩個領域是Serverless和前端微服務化,這兩個領域更多的是技術思想,而不是框架。
當我在思考前后端的未來時,發現了 Serverless 是一種與微服務極其類似的架構,但是它從某種程度解決了微服務的 DevOps 復雜度的問題。而前端微服務,則要去解決前端應用臃腫的問題。
技術投資,是存活下去的最基本要求。典型的如 Google、Facebook 這樣的技術公司,會不斷投入資源在研發上,他們會去創建趨勢。
深入技術:持續造輪子
作為一個非學院派,我一直是以實踐為主導來學習,而不是學習理論來開頭。
與看代碼相比,直接寫相似的輪子,是我最有效的學習方式。在造輪子的過程中,邊深入不同的領域,也深入了不同相似框架的代碼閱讀中。
剛畢業時,造了前端框架 Lettuce 以學習前端 MVC 框架。最近則是:
- 學習微前端時的微前端框架 Mooa
- 學習 WebComponents 框架時,造了 Oan
總之,造輪子依舊是我深入學習的方式。
雖然,我不是學院派,但是我習慣性的會寫博客來總結學到的知識。
沉淀技術:從技術文章到小電子書
在我工作之前,我已經有一個維護多年的 blog,上面記錄著大量的經驗,學習相關的筆記。從 2012 至今天,2018.07.08,6 年的時間里已經有 691 篇文章,大部分是與技術相關。
到了今天,***的變化是,我會以合集的形式來不斷深入相關的主題。文章和筆記有一個問題就是不夠系統,而電子書和紙質書籍則不一樣,他們更加的系統。這一點可以看我在 GitHub 上的一系列電子書,它們大抵就是***的證明。
從年初整理去年 Serverles 相關的文章,并按照書籍的形式補充了前言等部分的《Serverless 應用開發指南》。到最近的微前端相關的文章,都被放進 https://github.com/phodal/microfrontends 項目里,并取名為《微前端的那些事兒》。然后,我在不斷的補充相關的文章,以便其它同行可以了解相關的內容。
在不斷加深、沉淀我知識的同時,也可以幫助更多的人了解相關的知識。
結論
最近的幾個月里,我沉浸在游戲世界里:塞爾達、超級馬里奧……。大抵是,可以視為向下一個 “迭代” 沖刺之前做的休息。
游戲是一種輸入即有回報,并且有明確的 Roadmap,即使是自由世界游戲。如 MineCraft 也是有一條明確的主線,我們就需要去挖坑,我們需要箱子來存儲東西,我們就需要去蓋房子……。
現實也如此,劃定出一條 roadmap,然后一步步往下走。
只是生活沒有那么簡單,每個人的環境是不同的,價值觀不同,決定了其所需要的 roadmap 也是不同的。