題記
作為技術(shù)人茶宵,到年底都會進(jìn)行一次自我反思或者總結(jié)危纫,回過頭來看看這一年自己成長了多少。筆者也不例外,同樣打算從 2017 年開始記錄自己的年終總結(jié)种蝶。雖然這種總結(jié)的文章不算純技術(shù)文章契耿,但是為了避免記流水賬,所以想盡腦汁想以一種新穎的方式展現(xiàn)在讀者面前螃征。于是打算用一個(gè)大家比較關(guān)心的問題來貫穿全文搪桂。不出意外,以后每年的形式都會如此盯滚。一年一個(gè)宏觀的問題踢械。文章中的經(jīng)歷保證都是筆者百分之百親生經(jīng)歷的,有成功的案例也有失敗的案例魄藕,當(dāng)然讀者自身的情況也會與筆者不同内列,各位讀者可以根據(jù)自身的情況來取長補(bǔ)短。文章中的一些觀點(diǎn)僅代表筆者個(gè)人的一些看法泼疑,如有不妥德绿,歡迎提出來一起討論和批判。
筆者在網(wǎng)上的中文筆名是“一縷殤流化隱半邊冰霜”退渗,常常被人簡稱為“冰霜”移稳、“霜菜”、“霜”会油。這一年一篇的年度文章既然這么特別个粱,那么就給這個(gè)系列文章取一個(gè)特別的名字吧。在中國的文化中翻翩,四個(gè)字的成語讀起來能更加有內(nèi)涵都许,成語里面也必須帶“霜”字和光陰意思,通過大量的搜尋以后嫂冻,就定下了這個(gè)系列的標(biāo)題的名字 —— 星霜荏苒胶征。
【解釋】星霜:星辰運(yùn)轉(zhuǎn)一年一次循環(huán),每年秋季始降霜桨仿,因以批歲月睛低。指歲月漸漸流逝。
【出處】唐·溫庭筠《寄崔先生》:“星霜荏苒無音信服傍,煙水微茫變姓名钱雷。”
好了吹零,本系列的文章該說明的地方都說明完了绩社,以后每年就不做此說明了窗价。正文正式開始辉巡。
技術(shù)更迭是有加速度的
從 2010 年開始,被定義為移動互聯(lián)網(wǎng)的元年钞支,移動開發(fā)也是從這一年開始逐漸開始火爆的。筆者也是從畢業(yè)之后加入這個(gè)浪潮的操刀。據(jù)說移動開發(fā)火爆之時(shí)伸辟,理發(fā)師通過幾個(gè)月培訓(xùn)以后也可以拿到月薪1,2W的薪水馍刮,可見那個(gè)時(shí)候?qū)σ苿尤瞬诺酿嚳食潭取5堑搅?2014 年底開始窃蹋,移動開發(fā)的入職要求回歸理性卡啰,要求逐漸提高,到現(xiàn)在基本大公司社招也不再招高級以下的移動開發(fā)了警没。面試當(dāng)然也比之前幾年難度提高了不少匈辱。BAT 的面試可能會考察前沿技術(shù),熱修復(fù)和跨平臺杀迹,底層技術(shù)亡脸,LLVM + Clang ,基礎(chǔ)技術(shù)树酪,WebKit 和 JSCore 浅碾。身邊一部分 iOS 開發(fā)也逐漸開發(fā)轉(zhuǎn)寫 JavaScript 了。國內(nèi) iOS 開發(fā)者也可能會覺得大前端時(shí)代的到來续语,對自己技術(shù)的沖擊垂谢。(當(dāng)然國外的 iOS 開發(fā)者對這些并不感冒,國外的玩法還是原生開發(fā)疮茄。)繼續(xù)回到國內(nèi)的行情滥朱,當(dāng)大前端的一些東西逐漸吞噬 iOS 開發(fā)者的開發(fā)領(lǐng)域的時(shí)候,也許還沒有等大家熟悉或者精通前端各種框架的時(shí)候力试,這時(shí) AI 又出現(xiàn)在大家視野中了徙邻。機(jī)器學(xué)習(xí),深度學(xué)習(xí)一大堆的概念如潮水般涌來畸裳。
2012 年底到 2013 年初缰犁,有大批創(chuàng)業(yè)公司如雨后春筍般的出生。到了 2014 年底躯畴,也有大批的公司沒有活過那年的冬天民鼓。到了今年 2017 年,依舊有大批的創(chuàng)業(yè)公司出生又倒下蓬抄,如各個(gè)單車公司丰嘉。在資本的市場里就是如此的殘酷。
周圍的一些同事也有出現(xiàn)焦慮的嚷缭,說實(shí)話饮亏,我也焦慮過耍贾。風(fēng)口技術(shù)恨不得一年一變。年初的區(qū)塊鏈和三大前端框架可能還沒有玩轉(zhuǎn)路幸,年底立即就被 AI 又碾壓一波荐开。一位前端大神這樣和我解釋到,“技術(shù)就需要時(shí)刻的跟著简肴,前端如果幾個(gè)月不跟新技術(shù)晃听,看到新技術(shù)可能會陌生。如果守著老技術(shù)幾年不變砰识,呵呵能扒,可能再了解新技術(shù)的時(shí)候,前端框架已經(jīng)換了新天地了辫狼〕醢撸”也許這個(gè)回答帶有一些夸張成分,但是從側(cè)面也能看出前端這幾年的發(fā)展速度之快膨处。
大家也可以回想一下近幾年技術(shù)的更迭见秤,也許也能感受到,技術(shù)更迭是有加速度的真椿。
焦慮的起源鹃答?
我還是以 iOS 開發(fā)者來舉例。常常會在 iOS 開發(fā)者群里出現(xiàn)的 3 個(gè)圖突硝。
一個(gè)是 iOS 開發(fā)沒人要了和 iOS 開發(fā)又有人要了挣跋。這 2 幅圖常常被作為一個(gè)梗出現(xiàn)在各個(gè)討論群中。原因?yàn)楹文唬恳驗(yàn)?iOS 開發(fā)的一部分需求被前端開發(fā)者承擔(dān)了避咆。國內(nèi)很多小公司招聘要求上也直接寫的要求會 JS 、RN修噪、Weex 等技術(shù)查库。直接導(dǎo)致不會 JS 的 iOS 開發(fā)就沒人要了。每每蘋果對跨平臺或者熱修復(fù)進(jìn)行“封殺”或者任何舉措的時(shí)候黄琼,原生開發(fā)都會刷一波 iOS 又有人要了的表情樊销。前端也許同樣會有焦慮,焦慮也許來自于對三大框架的掌握程度脏款,如果只精通一個(gè)框架围苫,找工作遇到了精通三大框架的人也會心虛。
這也是焦慮來源之一撤师,不會某些知識點(diǎn)會導(dǎo)致找不到工作或者找不到好工作剂府。
另外一個(gè)焦慮可能就來自于“倒灌”吧?
每年風(fēng)口技術(shù)變化極快剃盾。比如今年 AI 技術(shù)之火爆腺占,直接導(dǎo)致的情況是應(yīng)屆畢業(yè)生拿到 AI 的 offer 以后淤袜,薪水直接無情的秒殺工作2-3年的人。工作2-3年的人就算一直跟這些新技術(shù)衰伯,也會感覺到壓力铡羡。所以也就有了上面的第二張圖,求你別學(xué)了意鲸,我們跟不上烦周。
畢竟很少有人能保證每天有大塊的時(shí)間都在學(xué)習(xí)新技術(shù),除去完成公司的工作以外怎顾,加上可能的加班時(shí)間论矾,人回家也會疲勞,也需要休息杆勇。每天都有大塊的時(shí)間用來學(xué)習(xí)新技術(shù)的時(shí)間也就不是很多。
人與人學(xué)習(xí)的速度和掌握的程度也都不同饱亿,經(jīng)過相互比較以后蚜退,就會發(fā)現(xiàn)自己比別人學(xué)的慢學(xué)的少,如果這樣強(qiáng)行比較彪笼,確實(shí)也會產(chǎn)生自己不如別人的焦慮感钻注。
如何高效學(xué)習(xí)?
面對技術(shù)的更迭之快配猫,我們應(yīng)該如何高效的學(xué)習(xí)保持競爭力不被淘汰呢幅恋?這塊筆者經(jīng)歷了近 10 個(gè)多月的成長以后,對這個(gè)問題有一定的發(fā)言權(quán)了泵肄。請聽我把我的這一年的經(jīng)歷和心得體會慢慢道來捆交。
我先從心理上談起,最后談到我的學(xué)習(xí)方法腐巢。按照這個(gè)思路來品追,希望能讓讀者能有所收益。
1. 正確看待焦慮和迷茫
程序員一旦焦慮或者迷茫以后冯丙,就會對成就感的獲得大大降低肉瓦。長久這樣就會導(dǎo)致動力不足。但是現(xiàn)實(shí)產(chǎn)生焦慮的原因經(jīng)過前面的分析胃惜,也是客觀存在的泞莉。那我們應(yīng)該如何面對呢?
我是這樣面對的船殉。
在技術(shù)的更迭變化過程中鲫趁,如果一味的跟新技術(shù),那你是否想過利虫,追隨新技術(shù)的到底是為了什么饮寞?是為了跳槽或者轉(zhuǎn)崗孝扛?還是為了提高薪資實(shí)現(xiàn)人生理想和自我價(jià)值?這兩個(gè)理由都是正確的幽崩,需要注意的一點(diǎn)就是不要盲目追隨新技術(shù)苦始。一味地盲目追隨只會導(dǎo)致最終淪為技術(shù)的奴隸。我們需要做技術(shù)的主人慌申,更加從容的面對技術(shù)的變更陌选。
如何選擇?如果在不轉(zhuǎn)崗的情況下蹄溉,在沒有目標(biāo)的情況下咨油,去學(xué)習(xí)一些本職工作中可能用不到的知識,可能就有點(diǎn)“盲目”柒爵。這些知識學(xué)習(xí)的過程中也許不夠高效役电。不高效的學(xué)習(xí)又遇到了別人高速的成長,一比較棉胀,新的焦慮又會產(chǎn)生法瑟。這里我有切身的體會。
以下是我本人的失敗的案例唁奢,與君分享霎挟。
在今年7月份的時(shí)候,我買了一本 Haskell 的書麻掸,打算研究研究這個(gè)函數(shù)式編程的鼻祖酥夭。也是接觸了 FP 以后,對 Haskell 產(chǎn)生的濃厚的興趣脊奋。我選擇點(diǎn) Haskell 技能點(diǎn)完全就是為了興趣熬北。工作中也基本不用(可以說是完全不用)。轉(zhuǎn)崗也是完全不可能的诚隙,如果去拉鉤等招聘網(wǎng)站上面搜“ Haskell 開發(fā)工程師”蒜埋,心里會涼涼,國內(nèi)一個(gè)對應(yīng)的崗位都沒有最楷。(國外是有一些整份,但是也非常少)。我買的是下面這本書:
<p align='center'>
<img src='http://upload-images.jianshu.io/upload_images/1194012-0fa888fdfe7c1286.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240'>
</p>
電子書我看了這本
<p align='center'>
<img src='http://upload-images.jianshu.io/upload_images/1194012-81130cb8b1f1c88c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240'>
</p>
書上寫的打不倒的空氣人籽孙,學(xué)不會的 Haskell烈评。我學(xué)習(xí) Haskell 進(jìn)度很慢,因?yàn)榇_實(shí)實(shí)踐的機(jī)會太少了犯建〗补冢看完書確實(shí)對 FP 的理解上了一層,但是用它來開發(fā)的機(jī)會就很少适瓦。Haskell 是一門很好的語言竿开,但是我學(xué)習(xí)它的曲線確實(shí)太痛苦了谱仪。中間走了很多彎路。(彎路否彩,錯(cuò)誤的路線就不分享了)后來組長和我說了一些話疯攒,他認(rèn)為不經(jīng)過大量實(shí)踐的學(xué)習(xí)是低效的。事實(shí)證明我學(xué)習(xí) Haskell 確實(shí)是低效了列荔。我沒有大量的實(shí)踐敬尺。學(xué)是學(xué)了,只不過進(jìn)步速度非常慢贴浙。收獲也有砂吞,但是挫敗感也不少。打不倒的空氣人崎溃,我沒有被打倒蜻直,明年有空再繼續(xù)學(xué)。
學(xué)習(xí)永遠(yuǎn)沒有錯(cuò)袁串,錯(cuò)的是選擇了低效耗時(shí)耗精力的前進(jìn)方向概而。
這里筆者的建議還是優(yōu)先學(xué)習(xí)公司項(xiàng)目里面用到的知識,深挖技術(shù)痛點(diǎn)般婆。有多余的時(shí)間再去橫向了解其他的。和 T 型人才一樣朵逝,先專一門蔚袍,再擴(kuò)寬廣度。先廣度沒有深度就會導(dǎo)致你連工作都找不到配名。
再說說迷茫啤咽,迷茫的來源有二個(gè),一是看不到自己對公司的價(jià)值渠脉,二是看不到自己未來發(fā)展的路宇整。
先說迷茫的來源一,看不到自身的價(jià)值芋膘。很多人每天在公司寫業(yè)務(wù)鳞青,俗稱“搬磚”,每天都搬为朋,感覺一點(diǎn)長進(jìn)都沒有臂拓。回過頭來看框架部門的人或者自己部門的研究員习寸,每天都在研究或者做一些框架或者工具胶惰。當(dāng)有大量的人使用的時(shí)候,就會很有成就感霞溪。并且認(rèn)為業(yè)務(wù)沒啥技術(shù)含量孵滞,業(yè)務(wù)里面的邏輯和流程在換了一家公司以后就沒有任何優(yōu)勢了中捆。這種想法其實(shí)是不對的,是錯(cuò)誤的片面的坊饶。如何正確的認(rèn)識和改變這種想法在下一節(jié)里面會更加詳細(xì)的討論泄伪。
再談?wù)劽悦5膩碓炊床坏轿磥淼穆吩诤畏接锥_@個(gè)迷茫我覺得來自于對自身的定位不明確臂容。一位老師和我說過,畢業(yè)后的頭5年根蟹,你可以去選擇各種開發(fā)脓杉,前端后端或者移動端,可以隨便選简逮。這是為了什么呢球散?就是為了找到自己感興趣的和自己的長處并且打算一輩子一直做下去的方向。如果你還看不到自己未來發(fā)展的路散庶,那么可以考慮把眼界放的更廣一點(diǎn)蕉堰,去找尋自己真正感興趣的方向。所謂真正感興趣的悲龟,是指如同熬夜打游戲一樣毫不困倦屋讶,如果某個(gè)方向你能做到不是公司強(qiáng)迫你加班,自己寫代碼寫到深夜或者通宵也毫不厭倦须教,那么這一定是你感興趣的皿渗。方向一旦確定就不會迷茫,朝著目標(biāo)狂奔吧轻腺。
2. 業(yè)務(wù)和架構(gòu)如何選擇乐疆?
程序員里面也許會存著這樣的鄙視鏈,寫架構(gòu)的鄙視寫業(yè)務(wù)的贬养。這種鄙視是有失偏頗的挤土。
首先,絕大多數(shù)的公司的收入來源是來自于公司的業(yè)務(wù)误算。除去一些極少數(shù)的公司仰美。寫業(yè)務(wù)的同學(xué)不必覺得業(yè)務(wù)沒有存在價(jià)值,你們應(yīng)該明白儿礼,你們寫的業(yè)務(wù)是替公司賺錢的筒占。
當(dāng)然,能在公司里面寫內(nèi)部框架或者工具的同學(xué)蜘犁,技術(shù)一定積累到一定深度了翰苫。框架和工具沒有平白無故的產(chǎn)生,它們的誕生都是解決問題或者痛點(diǎn)的奏窑。要么解決開發(fā)中的痛點(diǎn)导披,要么為了提高開發(fā)效率。試問如果沒有對開發(fā)有一定的了解和認(rèn)識埃唯,如何去深刻的理解和感受這些痛點(diǎn)撩匕?不理解它們,也做不出能解決問題的框架或者有用或者好用的工具墨叛。
我認(rèn)為能寫框架或者工具的止毕,一定在技術(shù)上有一定積累,并且能理解和看清開發(fā)中或者業(yè)務(wù)中的一些痛點(diǎn)漠趁。于是乎開發(fā)出了解決這些問題的東西扁凛。
至少目前國內(nèi)的大多數(shù)公司都是無法缺少寫業(yè)務(wù)的。小公司為了生存可以缺少寫框架和工具的闯传,但是不能缺少寫業(yè)務(wù)的谨朝。大公司更加是需要寫業(yè)務(wù)的。目前國內(nèi)好像還不存在不寫業(yè)務(wù)的公司甥绿。如果純寫框架或者工具給其他公司使用字币,以此賺錢,那么這些也就成為了這個(gè)公司的業(yè)務(wù)共缕。
再談?wù)剬軜?gòu)師或者更高級的職稱的理解洗出。
在我們的 BU 里面專門有一個(gè)架構(gòu)組,里面的人全是 P7 架構(gòu)師以上級別图谷。他們的工作內(nèi)容是什么呢翩活?就是提供能解決當(dāng)前開發(fā)痛點(diǎn)方案的人。我與他們交流過蜓萄,他們雖然對業(yè)務(wù)沒有理解到每行代碼逐字逐句的代碼行隅茎,但是對公司整個(gè)業(yè)務(wù)流程澄峰,數(shù)據(jù)流轉(zhuǎn)嫉沽,有一個(gè)整體的認(rèn)識。他們對業(yè)務(wù)的認(rèn)識更加深刻俏竞,比我們只負(fù)責(zé)單一業(yè)務(wù)理解層次更廣绸硕。他們在此基礎(chǔ)上還能解決開發(fā)中的難點(diǎn)和痛點(diǎn),對 BU 部門的業(yè)務(wù)發(fā)展還能提供自己的思考魂毁。架構(gòu)師們還具有自主發(fā)現(xiàn)業(yè)務(wù)價(jià)值的能力玻佩。
也許大家會認(rèn)為架構(gòu)師不寫代碼,但是他們需要出解決方案席楚。解決方案一定程度上比寫代碼還要難咬崔。解決方案的靈感來源于什么?來源于對公司業(yè)務(wù)的深刻理解和技術(shù)的深厚積累。缺少對業(yè)務(wù)的理解垮斯,提出的方案可能就是不完全適合這個(gè)公司的郎仆。缺少對技術(shù)的深厚積累,提出的方案性能可能就不是最好的兜蠕。
我覺得大家不要藐視寫業(yè)務(wù)這一環(huán)扰肌。如果你在公司是寫業(yè)務(wù)的程序員,請不要放棄自己熊杨。公司把一個(gè)業(yè)務(wù)交給你曙旭,你是否能按時(shí)高效的交付是你當(dāng)前需要考慮的問題。當(dāng)你對當(dāng)前業(yè)務(wù)玩的很溜了晶府,對這塊有深刻理解了桂躏。可以再去考慮理解去理解你所在的產(chǎn)品線郊霎,這一條業(yè)務(wù)線的流程沼头。在理解流程的同時(shí)去考慮當(dāng)前公司的架構(gòu)設(shè)計(jì)為何如此設(shè)計(jì)?有什么優(yōu)點(diǎn)有什么缺點(diǎn)书劝?哪些能改哪些不能改进倍,哪些是歷史遺留問題造成的?
只有這樣日積月累的積累购对,當(dāng)你積累了大量業(yè)務(wù)經(jīng)驗(yàn)猾昆,以及大量業(yè)務(wù)場景下優(yōu)秀合理的架構(gòu)設(shè)計(jì)以后,你就能向著架構(gòu)師的方向前進(jìn)了骡苞。
我堅(jiān)信一點(diǎn)垂蜗,公司花錢雇一個(gè)架構(gòu)師來工作,工作的職責(zé)一定是替公司設(shè)計(jì)并完成架構(gòu)方面的一些事情解幽。俗話也說贴见,沒有最好的架構(gòu)只有最適合的架構(gòu)。架構(gòu)師的價(jià)值就在于此躲株,在深刻了解公司業(yè)務(wù)需求以后片部,針對公司的業(yè)務(wù),量身定制一套最好最適合的架構(gòu)霜定。
在公司里面档悠,我的工位旁邊坐了一位 P8 高級算法專家,在我不知道他的職稱之前望浩,我觀察到他平時(shí)的工作內(nèi)容就是把各種算法落地辖所,切實(shí)的解決公司里面的痛點(diǎn)和開發(fā)難點(diǎn)。每每有產(chǎn)品或者開發(fā)來問他某個(gè)邏輯時(shí)磨德,他都能了如指掌缘回。我一度以為問的邏輯都是他參與開發(fā)的。直到之后我知道他的職稱以后,更加感受到算法專家的價(jià)值所在酥宴。
在非學(xué)術(shù)工業(yè)生產(chǎn)中揩环,算法專家的價(jià)值在于利用各種算法來解決公司中各種業(yè)務(wù)痛點(diǎn)。我看到他就用了各種圖論算法加上機(jī)器學(xué)習(xí)解決實(shí)際生產(chǎn)中智能調(diào)度的問題幅虑。對他所負(fù)責(zé)的業(yè)務(wù)了解之深刻丰滑。(當(dāng)然,在學(xué)術(shù)研究中倒庵,算法專家的價(jià)值應(yīng)該是在于創(chuàng)造或者改進(jìn)算法效率吧)
在 iOS 領(lǐng)域褒墨,大家也都認(rèn)識迪哥,迪哥就是架構(gòu)師擎宝,和迪哥交流之后郁妈,迪哥的日常工作內(nèi)容是對部門人員的組織,對技術(shù)選型的決策绍申,對業(yè)務(wù)的組織噩咪,對架構(gòu)的方案,所以我認(rèn)為架構(gòu)師的工作是以解決業(yè)務(wù)問題极阅,推動業(yè)務(wù)增長為基礎(chǔ)胃碾,在此之上改善公司的架構(gòu),使之能對外提供更加優(yōu)秀的性能筋搏,并具有對人仆百、技術(shù)、業(yè)務(wù)的組織統(tǒng)籌能力奔脐。
一個(gè)好的產(chǎn)品俄周,一定是能完美解決用戶痛點(diǎn)的。如何理解和發(fā)現(xiàn)業(yè)務(wù)的價(jià)值也是一種能力髓迎。至少這種能力是架構(gòu)師必備的能力峦朗。我目前也在業(yè)務(wù)中修煉,在深刻理解公司的業(yè)務(wù)的同時(shí)排龄,也在考慮如何設(shè)計(jì)架構(gòu)波势,為何要這樣設(shè)計(jì),有沒有更好的設(shè)計(jì)涣雕?我不能說我以后一定會成為架構(gòu)師艰亮,但是至少我認(rèn)為我在朝著架構(gòu)師的方向努力著闭翩。
3. 技術(shù)分工的不同和統(tǒng)一
筆者今年前端和后端都有涉及挣郭。前端算是離用戶最近的一端。而且現(xiàn)在處于大前端時(shí)代疗韵,大家可能會發(fā)現(xiàn)前端能干的活越來越多了兑障,往前,可以涉及到客戶端,往后可以涉及到 Nginx流译。前端工程師的技術(shù)棧也變得非常廣闊逞怨。后端工程師反而會顯得沒有前端那么忙碌了。
前端的數(shù)據(jù)來源來自后端福澡,前端更加偏重 UI叠赦,交互,設(shè)計(jì)革砸。后端更加偏重接口性能除秀,數(shù)據(jù)的正確性。但是隨著云基礎(chǔ)設(shè)施的逐漸完善算利,后端的基礎(chǔ)設(shè)施都挪到云上了册踩,這部分的配置和管理都變得異常的輕松,這一切都交給云了效拭。
現(xiàn)在前端框架和瀏覽器發(fā)展的突飛猛進(jìn)暂吉,業(yè)務(wù)上一部分邏輯都直接在前端做掉了,即使現(xiàn)在前后端分離缎患,前端在公司中承擔(dān)了越來越多的角色了慕的。有這樣一個(gè)笑話:大前端工程師對后端工程師說,你們后端不就是一個(gè)寫接口的嘛挤渔,吐吐字符串业稼。后端工程師對大前端的工程師說,你們前端不就是搭搭頁面嘛蚂蕴,前端就是一段漂亮的字符串低散。雖然他們說的都不準(zhǔn)確,但是也從側(cè)面抽象了他們工作的內(nèi)容骡楼。
所以前端和后端分工不同熔号,但是他們還是合作的關(guān)系,缺一不可鸟整。
在 Airbnb 女博士朱赟的小密圈里看到一個(gè)問答
提問:作為一個(gè)后端開發(fā)引镊,想請教安姐,如何去提高自己的駕馭復(fù)雜業(yè)務(wù)邏輯的能力篮条、設(shè)計(jì)能力和抽象能力弟头?如果接手一個(gè)穩(wěn)定性不夠好的系統(tǒng),如何收斂復(fù)雜度涉茧,逐步提高穩(wěn)定性伴栓?
朱赟老師非常干練和漂亮的給出了這個(gè)答案:
駕馭首先要做到通曉雨饺。了解所有業(yè)務(wù)邏輯的來龍去脈,知道一些典型系統(tǒng)設(shè)計(jì)方案以及其針對的問題惑淳,還有優(yōu)劣比較。接觸過一些實(shí)際的系統(tǒng)移斩。在此之上,才有可能把合適的設(shè)計(jì)套用到當(dāng)前的業(yè)務(wù)邏輯上绢馍,把現(xiàn)有的業(yè)務(wù)邏輯抽象成一個(gè)已經(jīng)存在(部分)解決方案叹哭,或更經(jīng)典的方式风罩。
接手一個(gè)穩(wěn)定性不好的系統(tǒng)舵稠,如果沒有足夠的時(shí)間從頭設(shè)計(jì)哺徊、完全重構(gòu)。那么至少要知道影響穩(wěn)定性的幾個(gè)關(guān)鍵要素盈滴,然后根據(jù)重要性轿钠、緊急性和解決問題需要的資源(時(shí)間疗垛、技能集、人等)進(jìn)行優(yōu)先級排序背镇,逐個(gè)擊破瞒斩。對于所有的改善型動作涮总,確保有適合的評測和監(jiān)控,這樣能夠知道不同的措施效果到底是怎么樣的旺矾。
結(jié)合之前我們討論的架構(gòu)和業(yè)務(wù)的關(guān)系夺克,同樣也是統(tǒng)一的铺纽。不管是前端還是后端狡门,不管是業(yè)務(wù)還是架構(gòu),這些分工的最終目標(biāo)都是同一個(gè):讓技術(shù)推動業(yè)務(wù)增長凤跑,實(shí)現(xiàn)公司盈利翻倍仔引。寫框架或者工具的同學(xué)寫出更好的框架和工具提高開發(fā)效率咖耘,寫業(yè)務(wù)的同學(xué)利用技術(shù)讓業(yè)務(wù)穩(wěn)定性和邏輯更加穩(wěn)定可靠儿倒。最終的目的都是為了推動公司的業(yè)務(wù)增長呜笑。我認(rèn)為看到了這一點(diǎn)叫胁,就能認(rèn)清自己在公司里的價(jià)值曹抬。在找到自我價(jià)值和實(shí)現(xiàn)公司價(jià)值的時(shí)候,就不太容易迷茫堰酿,成就感的獲得會更加容易触创。
4. 高效的學(xué)習(xí)方法
講到此哼绑,我就用我今年一年的經(jīng)歷來談?wù)勎艺J(rèn)為高效的學(xué)習(xí)方法是怎么樣的。順帶也總結(jié)一下今年一年我的工作內(nèi)容和收獲蛀恩。大概為了3個(gè)階段双谆。
第一階段顽馋,iOS 階段
我是今年2月份寸谜,年后來到這里的程帕。來到公司以后交給我第一個(gè)的任務(wù)就是解決項(xiàng)目中和內(nèi)存泄露相關(guān)的問題地啰。因?yàn)轫?xiàng)目里面都是用的 RAC 亏吝,這塊組里的同學(xué)對它里面原理理解不夠深刻蔚鸥,很容易寫出內(nèi)存泄露的代碼止喷。我來了以后就把組里的所有和內(nèi)存泄露相關(guān)的問題都找出來。之后組里又開始了組件化的工作乾巧,于是我又開始了研究并實(shí)現(xiàn)適合組內(nèi)使用的路由方案沟于。
后來公司內(nèi)部在推跨平臺方案——Weex旷太。我也很榮幸的被指派了研究這塊內(nèi)容供璧。從閱讀源碼中睡毒,我也學(xué)到了很多很多。到這里就到今年5月份了违寞。
第二階段,前端階段
6月份以后棕洋,組里接了一個(gè)新活掰盘,我也主動申請了去寫這個(gè)活的前端頁面愧捕。由于在了解了 Weex 以后次绘,順?biāo)浦鄣木瓦x擇了 Vue 這個(gè)框架邮偎。于是開始寫 Vue 相關(guān)的項(xiàng)目了禾进。
在短短2個(gè)多月的項(xiàng)目迭代中廉涕,我學(xué)到了很多東西狐蜕。公司內(nèi)部的各種腳手架用法馏鹤,前端開發(fā)流程湃累,前端頁面埋點(diǎn),前端發(fā)布流程勃黍,前端的項(xiàng)目持續(xù)集成晕讲,頁面性能監(jiān)控 APM 瓢省,前端工程化勤婚,組件化... 這些在 iOS 中同樣都是存在的馒胆,但是我就用了幾個(gè)迭代就都接觸了祝迂。同期的相比其他同學(xué)開始說學(xué)習(xí)前端型雳,我的進(jìn)度是比較“神速”的四啰,至少我在整套都學(xué)習(xí)完成以后,他還在摸索 JS 過程中欧瘪。
雖然我現(xiàn)在前端的資歷還很淺佛掖,但是當(dāng)個(gè) P4 寫寫基本的業(yè)務(wù)迭代還是可以勝任的芥被。我也深深的知道拴魄,前端的內(nèi)容非常多匹中,僅僅幾個(gè)月只是一個(gè)皮毛中的皮毛顶捷。但是至少讓我體驗(yàn)了一把前端開發(fā)中的日常服赎。
我認(rèn)為我前端這塊學(xué)習(xí)是高效的重虑。為何高效嚎尤?因?yàn)槲沂窃趯?shí)踐中學(xué)習(xí)的芋齿。利用公司真實(shí)的項(xiàng)目鍛煉自己戚揭,真的學(xué)習(xí)特別高效卖毁。每天項(xiàng)目中遇到的問題亥啦,上下班在地鐵上都會很有目的的在網(wǎng)上查詢解決辦法翔脱。學(xué)習(xí)目的非常明確届吁。我比每天看語法的不實(shí)踐的同學(xué)進(jìn)步要快很多疚沐。
關(guān)于前端入門亮蛔,我可以提供一下我的路線。
首先當(dāng)然是了解 JavaScript 和 Css锉矢。入門方法還是看書沽损。我看了一下這些書:
《JavaScript 權(quán)威指南(第6版)》
《JavaScript 高級程序設(shè)計(jì)(第3版)》
《JavaScript DOM 編程藝術(shù)第二版》
《ES6標(biāo)準(zhǔn)入門(第二版)》
《Effective JavaScript 編寫高質(zhì)量 JavaScript 代碼的 68 個(gè)有效方法》
《Speaking JavaScript》
《你不知道的 JavaScript 上卷》
《你不知道的 JavaScript 中卷》
之后就是大量的實(shí)戰(zhàn)項(xiàng)目訓(xùn)練了绵估。參與公司業(yè)務(wù)迭代的“蹂躪”国裳,很快能學(xué)會很多東西缝左。幾個(gè)迭代下來就能玩通整個(gè)流程渺杉。
當(dāng)然我為了加強(qiáng)訓(xùn)練的搶斷是越,自己在 Github 上也練習(xí)倚评。當(dāng)時(shí)對 Electron 框架也非常感興趣天梧,就寫了這個(gè)開源項(xiàng)目Vue 全家桶 + Electron 開發(fā)的一個(gè)跨三端的應(yīng)用呢岗。
除此之外在公司內(nèi)部還認(rèn)了3個(gè)師父敷燎,把我前端技術(shù)帶著飛硬贯。一個(gè)是知乎前端大V饭豹,@敖天羽拄衰,這個(gè)妹子的 title 非常多翘悉,餓了么前端吉祥物妖混,天哥抬旺,天尊……數(shù)不清开财,她一畢業(yè)就在前端的架構(gòu)組工作责鳍,能力非常強(qiáng)薇搁。再次我也感謝一下她對我這種入門級小白的問題耐心的解答。在成長的路上解答了很多問題屎鳍。(這里也可以安利一波妹子在知乎上開了 Live 逮壁,對前端前進(jìn)路線迷茫的同學(xué)可以去聽聽窥淆,一定能解答你的一些疑惑)
另外一個(gè)師父是和我同一天入職的朋朋忧饭,他也是前端開發(fā)词裤,技術(shù)非常強(qiáng)。我和他關(guān)系也非常好吼砂。平時(shí)有前端的問題也會問他逆航。
最后一個(gè)師父是我大學(xué)同寢室的,前端也很厲害渔肩,不懂的問題也會向他請教因俐。
在此也感謝上面3個(gè)師父的答疑解惑,把前端未入門的小白 carry fly 了周偎。
小結(jié)一下這段前端學(xué)習(xí)女揭,大量的項(xiàng)目實(shí)踐 + 主動有目的的看書學(xué)習(xí) + 有大神指點(diǎn) = 高效的學(xué)習(xí)栏饮。
第三階段吧兔,Go 階段
7月份跟著組長一起轉(zhuǎn)寫后端業(yè)務(wù)了。短短幾個(gè)月袍嬉,成長也非常迅速境蔼。Go 的基本用法都很了解了。我的 Go 的學(xué)習(xí)成長路線也總結(jié)記錄了伺通,感興趣的同學(xué)可以看這篇文章《Go 初學(xué)者的成長之路》箍土,這里就不再贅述了。
轉(zhuǎn)寫后端業(yè)務(wù)以后罐监,語言關(guān)不是多大問題吴藻,感覺比較頭疼的就是后端的整個(gè)生態(tài)體系。東西多的如潮水般將我淹沒弓柱。
我們組負(fù)責(zé)的業(yè)務(wù)都和地理位置有關(guān)沟堡。所以我把空間搜索這塊進(jìn)行了深刻的研究。所有的研究成果也寫成了文章放在了這里《空間搜索文章集合》矢空。
參與的項(xiàng)目迭代至今航罗,所有的后端開發(fā)流程,Thrift RPC 框架 nex屁药,Docker粥血,k8s,ELK日志酿箭,Redis复亏,Huskar SOA 配置,GoProxy 配置缭嫡,ETrace 監(jiān)控缔御,MaxQ 延遲消息隊(duì)列,Eless 發(fā)布械巡,Workflow 工作流刹淌,PostgreSQL 使用饶氏,Google S2……這些基本使用都掌握了。眼看著自己開發(fā)的服務(wù) QPS 逐漸成長有勾,心里就比較有成就感疹启。這個(gè)項(xiàng)目就像自己的孩子一樣,疼愛有佳蔼卡。
除了自己看書學(xué)習(xí)以外喊崖,項(xiàng)目中遇到各種技術(shù)問題也都是組長和組員替我答疑。也是帶我飛的節(jié)奏雇逞。如果自己學(xué)習(xí)荤懂,自己摸索,要想掌握上面的這么多東西塘砸,不知道要多久才能弄懂节仿。
小結(jié)一下這段后端學(xué)習(xí),同樣也是掉蔬,大量的項(xiàng)目實(shí)踐 + 主動有目的的看書學(xué)習(xí) + 有大神指點(diǎn) = 高效的學(xué)習(xí)廊宪。
以上的這些經(jīng)歷就是比較成功的經(jīng)歷,相比 Haskell 的學(xué)習(xí)女轿,明顯進(jìn)步“神速”箭启,在解決公司項(xiàng)目痛點(diǎn)的同時(shí),也快速學(xué)習(xí)提高了大量的知識蛉迹「倒眩回想起組長之前說的,在公司的項(xiàng)目里面去實(shí)踐是成長最快的北救。我也利用了一年的時(shí)間驗(yàn)證了這句話真實(shí)性荐操。
5. 總結(jié)
程序員如何在技術(shù)浪潮的更迭中保持較高的成長速度 ?我的答案就是在公司的項(xiàng)目里面去實(shí)踐是成長最快的扭倾。首先業(yè)務(wù)的迭代排期會讓你的學(xué)習(xí)不拖拉淀零,在排期中必須要完成指定的任務(wù),這對學(xué)習(xí)進(jìn)度有了非常好的保證膛壹。其次,實(shí)際項(xiàng)目中的實(shí)踐能讓你對語言的熟練程度唉堪,語言的生態(tài)環(huán)境模聋,開發(fā)過程,查找 bug 流程唠亚,監(jiān)控各個(gè)方面都有實(shí)踐經(jīng)驗(yàn)链方。而且實(shí)際項(xiàng)目中還能讓你遇到各式各樣的坑,坑踩多了就成長了灶搜。正確的學(xué)習(xí)方式也應(yīng)該是將學(xué)習(xí)與具體業(yè)務(wù)場景結(jié)合起來祟蚀,幫助公司利用自己掌握的技術(shù)開展業(yè)務(wù)服務(wù)而創(chuàng)造價(jià)值工窍。如此看來,這樣的成長一定是最快的前酿。
有一位計(jì)算機(jī)的大神建議程序員每年成長的速度至少是一年多學(xué)習(xí)一門陌生的語言患雏。從今年的結(jié)果來看,我是完成了罢维。
程序員在從業(yè)幾年以后淹仑,視野不應(yīng)該僅僅局限在自己的開發(fā)語言中》畏酰可以超脫開發(fā)語言匀借,放開視野,從更高層次去想想問題平窘。當(dāng)然筆者以上的這些思考在水平更高的人看來也許水平一般吓肋。水平更高的人也一定是這樣一步步的走過來,直到最后能指點(diǎn)江山瑰艘,他們的想法能對整個(gè)行業(yè)產(chǎn)生影響蓬坡。以上就是我今年一年技術(shù)以外的一些認(rèn)知。全部都來自我自己親身實(shí)踐的“寶貴經(jīng)驗(yàn)”磅叛。希望讀者看到這里能有一些收獲屑咳。
當(dāng)然每個(gè)人成長的方式都會有所不同,我只是提供了一種我經(jīng)過實(shí)踐驗(yàn)證了以后發(fā)現(xiàn)可行的方法弊琴,如果讀者自身就有更好的方法兆龙,歡迎讀者也分享出自己更好的方法,這篇文章就當(dāng)是看我的年終總結(jié)敲董。如果讀者自身也對成長缺少一些方法紫皇,那可以考慮試試這篇文章里面提高的方法,共勉腋寨。
6. 未來
組里業(yè)務(wù)上又開始用 Python 了聪铺。這門在今年火透半邊天的語言,明年我也好好學(xué)學(xué)萄窜。除此之外再把 Go 再精進(jìn)精進(jìn)铃剔。
最后
一年前有一個(gè) P9 的阿里大佬問過我這樣一個(gè)比較哲學(xué)的問題:“你作為程序員已經(jīng)開發(fā)了這么多年,你是如何看待軟件開發(fā)的查刻?”键兜,當(dāng)時(shí)我回答說,“你想問前端開發(fā)還是 iOS 開發(fā)穗泵?”普气,答曰:“你能不局限在開發(fā)語言之中么?從宏觀的角度來談?wù)勀銓﹂_發(fā)的定義佃延,流程這些方面自己的見解”现诀。當(dāng)時(shí)我一下子回答不上來夷磕,并不是說不出來,而是覺得這個(gè)問題太寬泛了仔沿,不好回答坐桩。直到現(xiàn)在接觸了不同語言,不同職位的開發(fā)任務(wù)以后于未,我就對這個(gè)問題有了自己的答案了撕攒。問這種問題,從答案的深淺也許就能看出一個(gè)人的水平深淺了烘浦。如果對軟件開發(fā)沒有幾年的磨煉抖坪,沒有足夠?qū)挼闹R面和深度,這種問題答出來的答案一答出來肯定是比較淺顯的闷叉。這就好比你已經(jīng)精通了高數(shù)以后擦俐,考一個(gè)小學(xué)生解一元一次方程。不管他如何解這個(gè)方程握侧,用什么方式蚯瞧,你一眼也能看出來他的水平。同理品擎,上面的問題也是一個(gè)站在高處的大神埋合,不管你回答什么答案,在他的資歷看來萄传,你的答案的深淺就能大概看出你的資歷有幾斤幾兩甚颂。
不知道讀者看到這里是否心里已經(jīng)有比較完美的答案了呢?這個(gè)問題筆者打算留到明年秀菱,作為 2018 年【星霜荏苒】的話題振诬。
最后的最后,說一點(diǎn)最近的體會衍菱。有一本神書赶么,《Clean Code》,中文翻譯是代碼整潔之道脊串。這本書筆者最近有意無意的又拿出來翻了翻辫呻。再讀第二遍,第三遍或者甚至第四遍的時(shí)候洪规,每次閱讀的體驗(yàn)都不同印屁。讀第一遍可能由于自己資歷不夠,能和書作者產(chǎn)生共鳴的地方并不多斩例。更多的是在閱讀書中的文字和代碼,體會作者的意圖从橘。當(dāng)然這也是最基本的念赶。但是我最近發(fā)現(xiàn)讀第二遍或者第三遍的時(shí)候础钠,和書作者能產(chǎn)生更多的共鳴了,共鳴就來自于平時(shí)自己的開發(fā)過程中叉谜,書中的舉出了一些例子就是自己親身經(jīng)歷的旗吁,或來自于重構(gòu)一個(gè)功能,或來自于絞盡腦汁的設(shè)計(jì)一個(gè)架構(gòu)停局,或來自于某個(gè)特殊需求很钓,種種親身經(jīng)歷都會重新浮現(xiàn)在腦海中。一部分書中的內(nèi)容我覺得我已經(jīng)內(nèi)化為自己的東西了董栽。當(dāng)然還有一個(gè)部分沒有共鳴码倦。
一遍遍的讀一本書,在程序員成長的各種階段都會有不同體會锭碳。開始會覺得書好厚袁稽,內(nèi)容很枯燥,但是直到你經(jīng)歷了很多以后擒抛,會發(fā)現(xiàn)這本書其實(shí)很薄推汽,回過頭來看這本書就像自己的不同階段的回憶錄,里面的很多內(nèi)容你都親生經(jīng)歷過了歧沪。這也許就是自身水平的成長之路歹撒。這也算是自身成長最直接的物質(zhì)體現(xiàn)。
好了诊胞,2017 年的【星霜荏苒】就到這里了暖夭。如有任何異議或者想討論的地方,歡迎和我交流厢钧。
2017年12月30日鳞尔,于悉尼 Sydney
Reference:
Vue 全家桶 + Electron 開發(fā)的一個(gè)跨三端的應(yīng)用
Go 初學(xué)者的成長之路
空間搜索文章合集
GitHub Repo:Halfrost-Field
Follow: halfrost · GitHub