云栖专辑| 阿里毕玄:程序员的成长路线
2018年12月20日,云棲社區(qū)3周歲生日。阿里巴巴常說“晴天修屋頂”,所以我們特別策劃了這個(gè)專輯——分享給開發(fā)者們20個(gè)阿里故事,50本書籍。第一位是林昊(畢玄)。
在這篇《程序員的成長(zhǎng)路線》里,阿里基礎(chǔ)設(shè)施負(fù)責(zé)人畢玄結(jié)合自己的經(jīng)歷跟大家講述了他在各個(gè)角色上成長(zhǎng)的感受。在他的職業(yè)經(jīng)歷中,在成長(zhǎng)方面經(jīng)歷了技術(shù)能力的成長(zhǎng)、架構(gòu)能力的成長(zhǎng),以及現(xiàn)在作為一個(gè)在修煉中的技術(shù) Leader 的成長(zhǎng)。其中技術(shù)能力和架構(gòu)能力的成長(zhǎng)是所有程序員都很需要的,值得所有正為職業(yè)發(fā)展而迷茫的技術(shù)同學(xué)細(xì)細(xì)品味。
技術(shù)能力成長(zhǎng)
我大學(xué)讀的是生物系,缺少了專業(yè)的訓(xùn)練,這個(gè)使得我在技術(shù)能力上其實(shí)欠缺的更多。回頭想想,在工作的前5年,更多的都是在拓寬技術(shù)面,剛畢業(yè)的時(shí)候只會(huì) ASP,工作前兩年學(xué)會(huì)了 VB、Delphi這些神器,到工作的第三、四年比較專注的做了工作流領(lǐng)域。
技術(shù)能力的成長(zhǎng)主要還是在 2007 年加入阿里以后,在加入阿里前,我是一個(gè)連日均訪問量 1萬(wàn) PV 都沒見過的人,到了阿里后,做的第一件事竟然就是寫 HSF,并且在客服的 CRM 系統(tǒng)上線,訪問量大概是每天上百萬(wàn)的服務(wù)調(diào)用,無(wú)知者無(wú)畏,當(dāng)時(shí)也就那么上線了,更神奇的是竟然沒出現(xiàn)什么問題,于是繼續(xù)把HSF上線到當(dāng)時(shí)的交易中心,當(dāng)時(shí)交易中心每天的服務(wù)調(diào)用量大概是億級(jí),結(jié)果上線當(dāng)天就回滾了,而且還不知道到底是什么原因,這次的回滾是對(duì)我觸動(dòng)最大的一次(當(dāng)然,觸動(dòng)大也有可能是后面要是解決不了,就該從淘寶滾蛋了)。
回滾后開始仔細(xì)查問題,最后發(fā)現(xiàn)是當(dāng)時(shí) HSF 所使用的 jboss-remoting 默認(rèn)的超時(shí)參數(shù) 60s 的問題,自從這個(gè)問題后,才明白要支撐好到了一定量級(jí)的系統(tǒng),最重要的是對(duì)整個(gè)技術(shù)棧的精通,否則出問題都不知道該怎么解決或臨時(shí)查,于是才開始仔細(xì)學(xué)習(xí) Java 的 BIO/NIO,Mina,反射,并發(fā)編程等,盡管這些東西很多在加入阿里前也看過一些書、資料學(xué)過,但到了這個(gè)時(shí)候才發(fā)現(xiàn)自己其實(shí)不怎么懂,那段時(shí)間密集的開始更細(xì)致的看書,翻看用到的 Mina、甚至是 Java 的各種 API 背后的源碼,是自己的 Java 技能提升最快的一段時(shí)間,在回滾的兩個(gè)月后,基于 Mina 完全重寫了 HSF,再次上線終于一切順利。
在那之后,隨著 HSF 應(yīng)用的場(chǎng)景越來(lái)越多,以及加上后來(lái)自己在淘寶消防隊(duì)查比較多的問題,Java 方面的技能也得到了不少成長(zhǎng),而同時(shí)也發(fā)現(xiàn)了很多的 Java 問題還得對(duì) JVM、操作系統(tǒng)層面有一定掌握才行,尤其是 JVM,于是當(dāng)時(shí)和還在阿里的撒迦經(jīng)常一起周末跑到公司來(lái)結(jié)對(duì)看 JVM 代碼,:)。在撒迦的幫助下對(duì) JVM 的掌握終于也越來(lái)越好,那段時(shí)光會(huì)讓自己明白很多東西只有看了代碼,并且有相應(yīng)的使用機(jī)會(huì)才能真正的掌握。
在 HSF 之后,去做 HBase,學(xué)習(xí)了很多在存儲(chǔ)方面的技能,這也是我之前完全不懂的領(lǐng)域,在HBase之后,開始做第一代容器產(chǎn)品 T4(寓意是第四代淘寶技術(shù)),進(jìn)入徹底不懂的領(lǐng)域,虛擬化、Cgroup 等等都是那個(gè)時(shí)候才開始學(xué)習(xí),但因?yàn)闆]詳細(xì)研究過代碼,并自己去做改造,其實(shí)到今天也就是點(diǎn)皮毛而已。
對(duì)于程序員而言,技術(shù)能力的成長(zhǎng)顯然是最重要的(程序員行當(dāng)里最贊的一句就是:Talk is cheap, show me the code!),我自己其實(shí)很多都屬于被逼的成長(zhǎng),當(dāng)然這樣通常反而也是最快的,很多同學(xué)會(huì)覺得自己沒碰到這樣的機(jī)會(huì),所以成長(zhǎng)就比較慢,我會(huì)非常建議的是可以嘗試自己去創(chuàng)造一些場(chǎng)景(當(dāng)然,如果本來(lái)就是工作需要就更好了),來(lái)學(xué)相應(yīng)的技術(shù)能力(例如學(xué) Java 的通訊框架,可以嘗試自己基于 BIO/NIO 寫一個(gè),然后對(duì)比 Mina/Netty 這些成熟的,看看為什么寫的不太一樣,又例如學(xué) Java 的內(nèi)存管理,可以嘗試自己寫程序去控制 GC 的行為,例如先來(lái)一次 ygc,再來(lái)兩次 fgc,再來(lái) 5 次 ygc,再來(lái)一次 fgc之類的,學(xué)的時(shí)候除了一些入門的書外,我非常建議去翻看源碼,最后你會(huì)發(fā)現(xiàn)所有的書都不如源碼),這樣才能真正的理解和學(xué)會(huì),否則其實(shí)很容易忘。
架構(gòu)能力成長(zhǎng)
說起架構(gòu),在我剛工作的第三年負(fù)責(zé)工作流系統(tǒng)的時(shí)候也做過,但直到后來(lái)在阿里做 T4、異地多活,我才有了真正更強(qiáng)烈的感受,對(duì)架構(gòu)師也有更深的一些理解。架構(gòu)呢,我現(xiàn)在的理解基本是一個(gè)結(jié)構(gòu)圖,當(dāng)然有不同視角的結(jié)構(gòu),但這個(gè)圖里的部分呢是多個(gè)團(tuán)隊(duì)來(lái)做的,甚至是跨多個(gè)專業(yè)的團(tuán)隊(duì)。
在做 T4 的時(shí)候,由于 T4 涉及到了標(biāo)準(zhǔn)的一個(gè) Java WebConsole,一堆的運(yùn)維體系,容器技術(shù)等,這是一個(gè)至少要跨三個(gè)團(tuán)隊(duì)的結(jié)構(gòu),無(wú)論是從研發(fā)視角還是部署視角都是如此,因此作為 T4 的架構(gòu)師,怎么設(shè)計(jì)好整個(gè)的結(jié)構(gòu),各自的邊界、接口是我當(dāng)時(shí)最大的感受,讓跨專業(yè)的多個(gè)團(tuán)隊(duì)能更好的協(xié)作,在這個(gè)階段中最重要的要考慮的是怎么根據(jù)整個(gè)項(xiàng)目的優(yōu)先級(jí)來(lái)調(diào)整每個(gè)部分,以及作為一個(gè)不是全懂的架構(gòu)師怎么更好的確保結(jié)果,我自己的感受是 T4 讓我學(xué)會(huì)了從一個(gè)只做自己專業(yè)系統(tǒng)的架構(gòu)師成長(zhǎng)為了能做跨專業(yè)的系統(tǒng)的架構(gòu)師。
在做異地多活的時(shí)候,感受就更加強(qiáng)烈,因?yàn)檫@個(gè)跨的專業(yè)數(shù)、整個(gè)參與的人數(shù)完全是上升到了一個(gè)非常大的程度,各個(gè)專業(yè)、系統(tǒng)的人都需要看整個(gè)架構(gòu)才能知道自己應(yīng)該做什么,扮演的角色,在做異地多活整個(gè)項(xiàng)目過程中,作為總的架構(gòu)師,我自己感覺的是最重要的職責(zé)是怎么控制項(xiàng)目的風(fēng)險(xiǎn),或者說作為架構(gòu)師,你覺得一個(gè)項(xiàng)目中最重要的要掌控住的是,并且從架構(gòu)上怎么設(shè)計(jì)這個(gè)部分,這也是后來(lái)我在問很多架構(gòu)師時(shí)最喜歡問的問題,一份架構(gòu)文檔不是說按照模板寫就可以(很多的架構(gòu)設(shè)計(jì)文檔都是千篇一律,通常看到的都是什么都考慮,但從架構(gòu)設(shè)計(jì)上并沒體現(xiàn)這些考慮的地方是怎么做的),而是要根據(jù)實(shí)際的項(xiàng)目/產(chǎn)品情況來(lái)突出重點(diǎn),確保最重要的幾個(gè)問題是從架構(gòu)設(shè)計(jì)上就去掌控的,尤其是跨多個(gè)專業(yè)團(tuán)隊(duì)的大型項(xiàng)目,這種項(xiàng)目準(zhǔn)確的說是大架構(gòu)師帶著一堆的專業(yè)領(lǐng)域的架構(gòu)師來(lái)做的,例如異地多活項(xiàng)目從架構(gòu)設(shè)計(jì)上來(lái)說除了正常的結(jié)構(gòu)、邊界以外,最重要的是數(shù)據(jù)正確性的設(shè)計(jì),我自己最強(qiáng)的感受就是異地多活才讓我明白了一個(gè)大型系統(tǒng)的架構(gòu)師是怎么樣的。
所以就我自己的感受而言,架構(gòu)師對(duì)知識(shí)的寬要求非常廣,并且要能非常好的進(jìn)行抽象,來(lái)做結(jié)構(gòu)、邊界的設(shè)計(jì),分析出當(dāng)前階段系統(tǒng)的重點(diǎn),并從架構(gòu)層面做好設(shè)計(jì)來(lái)確保重點(diǎn)的實(shí)現(xiàn),這個(gè)相對(duì)技術(shù)能力的成長(zhǎng)而言我覺得更需要機(jī)會(huì),但同樣在機(jī)會(huì)前需要有足夠的積累(例如寫一個(gè)系統(tǒng)的時(shí)候,是不是主動(dòng)的去了解過上下游的系統(tǒng)設(shè)計(jì),是不是了解過具體的部署結(jié)構(gòu),對(duì)相應(yīng)的知識(shí)點(diǎn)有沒有簡(jiǎn)單的了解等,我自己在做 T4 前,LVS、機(jī)房/網(wǎng)絡(luò)結(jié)構(gòu)等完全搞不懂是怎么回事)。
技術(shù)Leader修煉
技術(shù) Leader 我比較傾向于有前面兩步積累的同學(xué),技術(shù) Leader 非常重要的一點(diǎn)是對(duì)技術(shù)趨勢(shì)的感知和判斷能力,這其實(shí)是個(gè)非常綜合的能力,一到兩個(gè)領(lǐng)域的技術(shù)深度,大的架構(gòu)能力,對(duì)技術(shù)歷程的理解、技術(shù)發(fā)展的思考能力,作為技術(shù) Leader 是很需要的,然后是其他的一些作為 Leader 方面的比較綜合的一些能力(例如組織搭建、建設(shè)方面的能力等,不過這些能力呢通常對(duì)技術(shù)的人來(lái)說確實(shí)會(huì)欠缺的更多一些),這個(gè)我自己還在修煉和學(xué)習(xí)中,就不講太多了。
總結(jié)
總結(jié)來(lái)說呢,我認(rèn)為程序員可發(fā)展的路線還是很多的,上面寫的這三條其實(shí)都是可發(fā)展的路線,沒有孰優(yōu)孰劣,誰(shuí)高一等之類的,興趣、個(gè)人優(yōu)勢(shì)仍然是最重要的。
作為《OSGi原理與最佳實(shí)踐》和《分布式Java應(yīng)用:基礎(chǔ)與實(shí)踐》的作者,畢玄推薦了他的書單給到我們:
《硅谷之謎》
《智能時(shí)代:大數(shù)據(jù)與智能革命重新定義未來(lái)》
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的云栖专辑| 阿里毕玄:程序员的成长路线的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里工程师养了只“二哈”,专治讨厌的骚扰
- 下一篇: 世界冠军之路:菜鸟车辆路径规划求解引擎研