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