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