專訪酷殼陳皓:有關(guān)帶隊(duì)、溝通、成長(zhǎng)與變化
原創(chuàng)【51CTO專訪】剛剛在深圳結(jié)束的ArchSummit大會(huì)上,近千名工程師們以“架構(gòu)師”之名聚集在一起,討論著有關(guān)架構(gòu)師的種種。程序員的世界就好像一個(gè)武林,人們來(lái)自不同的師承,不同的派別,而無(wú)師自通、跨門派的修行者也不在少數(shù)。而當(dāng)你去一一接觸他們,了解他們的時(shí)候,會(huì)發(fā)現(xiàn)每個(gè)人都有自己獨(dú)特的故事。
看過(guò)酷殼這個(gè)網(wǎng)站的朋友們應(yīng)該對(duì)我們今天故事的主角不陌生。他在酷殼上這樣介紹自己:
“我不是高手,我也不是牛人,我只是在跟隨著我的興趣和喜好去學(xué)習(xí)一些技術(shù)。”
陳皓(@左耳朵耗子),14年軟件開(kāi)發(fā)相關(guān)工作經(jīng)驗(yàn),8年以上項(xiàng)目和團(tuán)隊(duì)管理經(jīng)驗(yàn),6年的軟件行業(yè)咨詢經(jīng)驗(yàn)。擅長(zhǎng)底層技術(shù)架構(gòu),團(tuán)隊(duì)建設(shè),軟件工程,軟件研發(fā)咨詢,以及全球軟件團(tuán)隊(duì)協(xié)作管理。對(duì)高性能,高可用性,分布式,高并發(fā),以及大規(guī)模數(shù)據(jù)處理系統(tǒng)有一些經(jīng)驗(yàn)和心得。喜歡關(guān)注底層技術(shù)平臺(tái)和互聯(lián)網(wǎng)行業(yè)應(yīng)用。技術(shù)擅長(zhǎng)C/C++ / Java和Unix / Linux / Windows?,F(xiàn)于Amazon中國(guó)任研發(fā)經(jīng)理,負(fù)責(zé)電子商務(wù)全球化業(yè)務(wù)(全球開(kāi)店)的研發(fā)。
上面的簡(jiǎn)介是他自己寫的。當(dāng)然,陳皓不會(huì)在個(gè)人簡(jiǎn)介中提到自己每天晚上從10點(diǎn)閱讀到12點(diǎn),再更新酷殼到凌晨2點(diǎn)這種事情,而這些細(xì)節(jié),對(duì)于學(xué)習(xí)中的人們而言其實(shí)很關(guān)鍵。
51CTO開(kāi)發(fā)頻道最近在籌備一個(gè)有關(guān)架構(gòu)師成長(zhǎng)的專題,一方面這是很多對(duì)自己職業(yè)成長(zhǎng)方向不確定的開(kāi)發(fā)者們都很關(guān)注的話題,另一方面也是為了我們?cè)?0月底的云計(jì)算架構(gòu)師峰會(huì)做鋪墊(陳皓也是我們會(huì)議上的分享嘉賓之一)。因此,我們會(huì)去接觸很多架構(gòu)師,去了解他們的經(jīng)驗(yàn),以及對(duì)架構(gòu)師的看法。
不過(guò),我覺(jué)得更重要的是去了解一種思路,一種觀察、學(xué)習(xí)的方法,而這些都隱藏在他們的故事當(dāng)中——
那些有關(guān)成長(zhǎng)的故事。
以下是51CTO本次對(duì)陳皓的采訪內(nèi)容實(shí)錄。
51CTO:您的個(gè)人簡(jiǎn)介我想就不用說(shuō)了,先談?wù)勀F(xiàn)在的職責(zé)吧。
陳皓:要說(shuō)介紹的話,就說(shuō)我是酷殼的董事會(huì)主席、CEO、COO、前端工程師、開(kāi)發(fā)人員、美工、主編這些(笑)。
我現(xiàn)在在亞馬遜,這邊主要的職責(zé),第一個(gè)就是帶著團(tuán)隊(duì)做軟件開(kāi)發(fā)項(xiàng)目,另外一個(gè)是制定團(tuán)隊(duì)的計(jì)劃,來(lái)年的計(jì)劃。然后還負(fù)責(zé)一些招聘工作?;旧暇瓦@幾大塊。
51CTO:這邊團(tuán)隊(duì)主要是一個(gè)支持類的,還是一個(gè)產(chǎn)品類的?
陳皓:就是一個(gè)研發(fā),帶著大家去做技術(shù)選型、技術(shù)架構(gòu)設(shè)計(jì),等等這些東西。
很多技術(shù)經(jīng)理更多的是做計(jì)劃、管人,但是我不一樣,我喜歡技術(shù),所以我更偏的做技術(shù)一些。
我在亞馬遜做第三方商戶全球開(kāi)店的項(xiàng)目,目前在做的業(yè)務(wù)是demand forecasting,亞馬遜內(nèi)部的庫(kù)存需求預(yù)測(cè),就是下個(gè)月我要賣多少東西,做機(jī)器學(xué)習(xí)。團(tuán)隊(duì)里面全都是SDE(軟件開(kāi)發(fā)工程師)。也不分什么工。我們都是每個(gè)人負(fù)責(zé)一個(gè)功能,然后從頭做到尾。從需求分析,設(shè)計(jì),編碼,測(cè)試,到運(yùn)維,全部做。
51CTO:那最初產(chǎn)品定義是您來(lái)制定?
陳皓:產(chǎn)品定義我們有一個(gè)product manager,或是Technical Project Manager,用戶的需求會(huì)到他們這里匯總,然后他們會(huì)和研發(fā)團(tuán)隊(duì)討論需求應(yīng)該怎么實(shí)現(xiàn),優(yōu)先級(jí)是什么,怎么簡(jiǎn)化需求,等等。對(duì)于庫(kù)存預(yù)測(cè)系統(tǒng),公司內(nèi)的采購(gòu)經(jīng)理就是我們的客戶,這個(gè)東西怎么操作會(huì)比較好,預(yù)測(cè)的準(zhǔn)不準(zhǔn),他可以進(jìn)行哪些調(diào)整,等等。對(duì)于第三方商戶的全球開(kāi)店業(yè)務(wù),由Product Manager 去調(diào)查第三方商戶的需求和現(xiàn)有的運(yùn)營(yíng)情況,然后給研發(fā)團(tuán)隊(duì)提需求。
有時(shí)候技術(shù)團(tuán)隊(duì)也要去見(jiàn)客戶,但主要是內(nèi)部的客戶,去問(wèn)他一些東西,怎么做,做成這樣行不行。
51CTO:團(tuán)隊(duì)人員搭配是怎樣的?
陳皓:團(tuán)隊(duì)里面基本上是這樣:有一個(gè)人非常懂底層,C/C++出身的,對(duì)操作系統(tǒng)的底層非常熟,喜歡看代碼專研底層;還有一個(gè)人是J2EE、Java出身,對(duì)Java的架構(gòu)和各種框架如Spring,Struts這些都很熟;還有一個(gè)人對(duì)面向?qū)ο蠛蛙浖O(shè)計(jì)這些比較熟悉。還有人對(duì)軟件的前端設(shè)計(jì)比較熟,做過(guò)Web Portal的設(shè)計(jì);還有人對(duì)機(jī)器學(xué)習(xí)的算法和方法非常熟;還有一個(gè)人也傾向于底層,但是稍微傾向于網(wǎng)絡(luò)這邊。這些人,每個(gè)人都有一塊自己非常強(qiáng)的東西,所以他們合作起來(lái)也會(huì)很舒服,因?yàn)樗麄兛梢詮膭e人身上學(xué)東西,而且自己也能領(lǐng)著別人去做點(diǎn)東西。每個(gè)人都有自己的領(lǐng)導(dǎo)力,每個(gè)人都有自己的成長(zhǎng)空間。我覺(jué)得這是讓團(tuán)隊(duì)比較和諧的原因。
另外,我只是一個(gè)支持性的角色,團(tuán)隊(duì)主導(dǎo)一切,我只是在旁邊支持他們。
51CTO:他們?cè)敢馊W(xué)習(xí)自己不了解的領(lǐng)域。
陳皓:對(duì)。沒(méi)有英雄。也沒(méi)有閑人。每個(gè)人都有自己的長(zhǎng)處,在這個(gè)長(zhǎng)處上他可以領(lǐng)著別人做事情,同時(shí)也能從別人身上學(xué)到自己比較薄弱的東西。
51CTO:那運(yùn)維和研發(fā)沒(méi)有明顯的劃分了?
陳皓:沒(méi)有,都要做。亞馬遜就是這樣的,SDE,Software Developer Engineer,被戲稱為Someone Do Everything,就是這個(gè)意思。
51CTO:那研發(fā)和產(chǎn)品之間呢?
陳皓:對(duì)于電子商務(wù)這邊,研發(fā)和產(chǎn)品之間還是有明顯的界限。因?yàn)閬嗰R遜有線下業(yè)務(wù),有些業(yè)務(wù)上的東西,技術(shù)人員基本不懂。比如一些法律,關(guān)稅,物流這些東西,商業(yè)上怎么賣會(huì)更賺錢,各種玩法,這些東西技術(shù)人員并不懂。所以有很明顯的劃分。有時(shí)候,產(chǎn)品經(jīng)理看到一些機(jī)會(huì),會(huì)讓我們來(lái)幫他做一個(gè)小工具上線試驗(yàn)一下,等等。當(dāng)然,產(chǎn)品經(jīng)理給我們講為什么他要這么做,原因是什么。
51CTO:那跟他們是怎樣做溝通的?
陳皓:一般就是研發(fā)經(jīng)理跟他們溝通,也就是和是項(xiàng)目經(jīng)理或產(chǎn)品經(jīng)理溝通。不過(guò)我們溝通的時(shí)候跟別的地方不一樣,不是說(shuō)產(chǎn)品讓我們做什么我們就做什么。我必須要讓產(chǎn)品告訴我,你做這個(gè)能掙多少錢,為什么要做這個(gè)東西,做這個(gè)的利益是什么,有什么好處。你說(shuō)不清楚,我們就不做。
我們團(tuán)隊(duì)做計(jì)劃的時(shí)候會(huì)有兩欄,每個(gè)任務(wù)都會(huì)有兩欄。一欄由產(chǎn)品經(jīng)理填,就是商業(yè)影響力有多大。比如我們用T恤的尺寸:T-shirt size estimation,來(lái)標(biāo)注這個(gè)東西做出來(lái)的影響力。他需要標(biāo)出來(lái)是small,medium,large,還是extra large,還是XXL。然后我這邊就會(huì)標(biāo)注我這邊需要花多大的力氣去做這件事情,我的efforts要花多少,也是標(biāo)注成T恤的尺寸。然后就要看,哦,這個(gè)東西的影響力是XXL,但是我技術(shù)投入是small,一個(gè)月之內(nèi)就能完成,那就做唄。那么這個(gè)東西馬上就得做。如果說(shuō)這個(gè)東西業(yè)務(wù)影響力是medium,但是我的efforts是XXL,那我們可能就不做了。得不償失,做它干嘛。所以這就是跟他們的溝通。
另外,亞馬遜內(nèi)部很多技術(shù)團(tuán)隊(duì)每年的年度計(jì)劃都會(huì)包括幾項(xiàng),比如,必需減少20%以上的維護(hù)工作,所以,這會(huì)逼著你要還技術(shù)債,把能自動(dòng)化的自動(dòng)化了……
51CTO:很有意思。那么接下來(lái),來(lái)談?wù)劶軜?gòu)師。您對(duì)于架構(gòu)師是如何定義的?他的能力,以及職責(zé)。
陳皓:我覺(jué)得架構(gòu)師就是程序員的一種。因?yàn)樽龀绦騿T必然要做設(shè)計(jì),做設(shè)計(jì)就必然存在架構(gòu)。所以你寫軟件就必須要做架構(gòu),你要去考慮平臺(tái)上會(huì)有些什么問(wèn)題,以后怎么擴(kuò)展,你要去想這些事。但是架構(gòu)師的能力要比一般程序員高,他還要對(duì)業(yè)務(wù)的理解有深度。T型人才,技術(shù)的深度和廣度要都覆蓋。他要明白哪些事情能干,哪些事情不能干,干了會(huì)出現(xiàn)什么問(wèn)題。
至于技能方面,架構(gòu)師要去寫代碼,能夠做原型,等等很多方面。職責(zé)就是能夠發(fā)現(xiàn)、能夠提出未來(lái)可能會(huì)遇到的麻煩,然后通過(guò)麻煩去想解決的辦法。有些架構(gòu)師總是在一些不存在的問(wèn)題上去做方案。
51CTO:這里有一個(gè)問(wèn)題就是,架構(gòu)師有的是程序員出身,有的是運(yùn)維,有的是DBA。您覺(jué)得他們之間有什么區(qū)別?
陳皓:我覺(jué)得架構(gòu)師應(yīng)該都要知道。他的基礎(chǔ)應(yīng)該是多元的,一個(gè)T型人才。好比說(shuō)DBA,雖然我不知道那個(gè)數(shù)據(jù)庫(kù)怎么配的,但是我大概知道數(shù)據(jù)庫(kù)系統(tǒng)的原理是什么,一般會(huì)有什么樣的功能。他應(yīng)該要閱讀一些這方面的文檔,他要知道事務(wù)處理,他要知道數(shù)據(jù)庫(kù)表是怎么做的,索引建的是什么樣的,數(shù)據(jù)庫(kù)的模型應(yīng)該是什么樣的,哪些字段能冗余哪些字段不能,必須要滿足很強(qiáng)的數(shù)據(jù)庫(kù)設(shè)計(jì)范式。這些都是他必須要知道的。
有些時(shí)候我們需要一個(gè)架構(gòu)師去做一個(gè)統(tǒng)管,因?yàn)橄旅娴膶?shí)施團(tuán)隊(duì)太多了。就像我要蓋一棟大樓一樣,我有非常多的工程團(tuán)隊(duì),那么我需要一個(gè)架構(gòu)師把藍(lán)圖畫出來(lái)。
51CTO:需要一個(gè)從上到下的布局。
陳皓:是的。然后他要督促每個(gè)團(tuán)隊(duì),保證這個(gè)架構(gòu)是實(shí)現(xiàn)正確的。但是他也不應(yīng)該是站在上面看,畫圖紙的人。他畫完圖紙之后應(yīng)該要到每個(gè)工程現(xiàn)場(chǎng)去,要回到基層,要去編碼,去做一些實(shí)際的事情。我想,從每個(gè)工程團(tuán)隊(duì)抽調(diào)幾個(gè)高級(jí)工程師來(lái)做整體架構(gòu)設(shè)計(jì)應(yīng)該會(huì)比建立一個(gè)純粹意義上的架構(gòu)師要好得多。
51CTO:好的。那么接下來(lái)的問(wèn)題有關(guān)您的個(gè)人成長(zhǎng)。您感覺(jué)自己職業(yè)生涯當(dāng)中有沒(méi)有發(fā)展特別飛快的一段時(shí)間?
陳皓:這是個(gè)大話題。哪段時(shí)間我的個(gè)人成長(zhǎng)最快?我入行頭兩年是在銀行,云南工行。兩年以后我去了上海,在上海我過(guò)了苦悶的兩年。
51CTO:苦悶的兩年?
陳皓:是的。就是覺(jué)得自己太差了,被人看不起。覺(jué)得自己這也弄不好,那也弄不好,而且跟這個(gè)社會(huì)差距特別大。甚至還有人羞辱我,說(shuō)我這個(gè)那個(gè)沒(méi)做好。還記得第一次面試的時(shí)候,到上海,就是低著頭面,從頭到尾都沒(méi)有看面試官一眼。他問(wèn)什么我都是不知道不知道……但是,那段時(shí)間是我成長(zhǎng)最快的時(shí)候。因?yàn)槟莻€(gè)時(shí)候,我知道自己什么也不懂,就會(huì)去學(xué)習(xí),看書。有時(shí)候會(huì)去不停地面試,面試的時(shí)候別人問(wèn)的問(wèn)題你不懂,不懂你就知道自己需要學(xué)什么。所以那個(gè)時(shí)候我學(xué)的特別多,找到了一條學(xué)習(xí)的方法。現(xiàn)在我覺(jué)得我自己的學(xué)習(xí)能力比較強(qiáng),就是受益于那個(gè)時(shí)候,學(xué)猛了。學(xué)的多了就找到了一條方法,一條最適合自己的方法。所以也就不害怕新的技術(shù)了。
首先是不害怕新的技術(shù)了。然后我知道該怎么去學(xué)習(xí)基礎(chǔ)。一點(diǎn)一點(diǎn)的,從原理上去學(xué)。然后,再到了找工作的時(shí)候,就不害怕沒(méi)工作了,因?yàn)槊嬖嚭髞?lái)就很容易就通過(guò)了。就是這樣,我覺(jué)得這段時(shí)間是我成長(zhǎng)最快的。
但是真正正兒八經(jīng)質(zhì)的提升,還是需要你有了這些基礎(chǔ)知識(shí),通過(guò)這些面試你只是有了塊敲門磚,可以進(jìn)到一些好的公司里面去,參與一些好的項(xiàng)目。眼界很重要。
51CTO:所以您覺(jué)得做好的項(xiàng)目,跟好的人一起共事……
陳皓:非常重要。非常重要。但是,你不能說(shuō)我沒(méi)有這些資源的時(shí)候我就可以什么也不懂,這就會(huì)變成這種情況:你什么也不懂,別人為啥要給你這個(gè)機(jī)會(huì),為啥這些人會(huì)跟你一起做事。就是這樣。你首先得改變自己。
還可以再補(bǔ)充一些。一開(kāi)始別人怎么羞辱我的就不說(shuō)了,基本上就是那時(shí)候別人面試完,他就跟我說(shuō),說(shuō)你出來(lái)干嘛?就這個(gè)水平,你在銀行里面老老實(shí)實(shí)待著就行了。“你根本就不行。”就這種感覺(jué)。然后去做項(xiàng)目的時(shí)候,犯了一些低級(jí)錯(cuò)誤,還給用戶造成了損失。還有很多這樣的事情。就是因?yàn)橛羞@樣的一些很糟糕的經(jīng)歷,所以我那時(shí)候?qū)W習(xí)其實(shí)不是為別的,就是想證明自己不比別人差,自己能夠?qū)W好。因?yàn)槟菚r(shí)候從銀行里出來(lái),家里人就會(huì)覺(jué)得你出來(lái)干嘛,很多人都反對(duì)。然后前面的這些人又說(shuō),你這水平還出來(lái),所以那時(shí)候就搞得巨難受。退也退不回去,進(jìn)也找不到路,就像是爬在懸崖邊上的感覺(jué),爬在懸崖中間,上也上不去,掉下去肯定是摔死。所以只能咬著牙,學(xué)習(xí)下去。就這樣,純屬意外。
51CTO:這,真的是想象不到……您這樣厲害的人,也有這樣的一段故事。
陳皓:比較勵(lì)志是吧(笑)。
51CTO:也是給后來(lái)者們很大的信心啊。那么最后一個(gè)問(wèn)題,您覺(jué)得軟件行業(yè)這兩年的變化大么?
陳皓:我覺(jué)得還是挺大的。這兩年,尤其在互聯(lián)網(wǎng)上面,還有風(fēng)險(xiǎn)投資,出來(lái)了Instagram這樣很少的人做出來(lái)的很大的服務(wù)?;ヂ?lián)網(wǎng)跟十年前的那個(gè)泡沫不一樣了。還有蘋果,移動(dòng)互聯(lián)網(wǎng)。目前的變化非常大,不像那個(gè)時(shí)候,我們做軟件的時(shí)候,就那點(diǎn)東西,那么個(gè)框架,沒(méi)什么好想的?,F(xiàn)在的方向就太多了,而且發(fā)展太快。變化真的非常大。
51CTO:那么,現(xiàn)在做一個(gè)軟件開(kāi)發(fā)者是否更加困難了?
陳皓:我覺(jué)得倒不是。做一個(gè)軟件開(kāi)發(fā)者更簡(jiǎn)單了。因?yàn)楝F(xiàn)在互聯(lián)網(wǎng)很發(fā)達(dá),你可以找到很多共享的知識(shí)——相對(duì)于我那個(gè)時(shí)候。第一,知識(shí)你容易查到,然后社區(qū)很多,文章、分享的人也越來(lái)越多。我們那個(gè)時(shí)候沒(méi)有的。上網(wǎng)一查,什么都沒(méi)有。都得去自己琢磨,自己去調(diào)查。所以我覺(jué)得相比我們那個(gè)時(shí)候更容易了。第二,工具變多了?,F(xiàn)在的工具比那個(gè)時(shí)候好用多了。我們那個(gè)時(shí)候就是一天到晚在vi里面,連個(gè)自動(dòng)提示都沒(méi)有,連個(gè)版本庫(kù)管理都沒(méi)有。不光工具變多,框架也多了,各種各樣的編程框架。我們那時(shí)候都是生寫。寫JavaScript,生寫,連個(gè)jQuery都沒(méi)有。沒(méi)有這些輔助性的、讓你提高生產(chǎn)力的東西。J2EE那時(shí)候也沒(méi)有。而且整個(gè)(開(kāi)發(fā)環(huán)境)都很不成熟。一個(gè)服務(wù)器的最高配置就1GB的情況下,一個(gè)WebSphere起來(lái)就占了900多MB——這還能跑什么應(yīng)用?所以只能去用最基礎(chǔ)的系統(tǒng)。所以我覺(jué)得現(xiàn)在,無(wú)論是環(huán)境,還是開(kāi)發(fā)的過(guò)程,都更規(guī)范了。以前我們做開(kāi)發(fā)的時(shí)候就是,什么都不懂就上了,瞎搞,沒(méi)有什么開(kāi)發(fā)規(guī)范,沒(méi)有人理你,反正你搞得好就搞好,搞不好就搞不好了。全靠自己,包括做測(cè)試。我覺(jué)得現(xiàn)在的軟件開(kāi)發(fā)就是,你一上去,就有好的工具,有好的知識(shí)庫(kù),有好的社區(qū),有好的開(kāi)發(fā)框架,還有好的流程,方法,甚至還有人幫你做測(cè)試,還有人告訴你應(yīng)該怎么做。很幸?!,F(xiàn)在好多人還說(shuō)這個(gè)不好那個(gè)不好,開(kāi)發(fā)難什么的。其實(shí)容易多了。
但是,有個(gè)東西我覺(jué)得是現(xiàn)在的軟件開(kāi)發(fā)者比我們那時(shí)候變得更難的。就是,你享福了以后,你就變懶了。對(duì)很多東西的抱怨就開(kāi)始多了。我們那個(gè)時(shí)候哪有什么好抱怨的?沒(méi)啥好抱怨的。干唄。有東西學(xué)就趕快學(xué)唄?,F(xiàn)在呢,學(xué)個(gè)什么東西還挑挑揀揀的。這就好像以前我沒(méi)東西吃,只有個(gè)糠吃,要是有面包有饅頭,我就覺(jué)得非常非常好了。現(xiàn)在是,好吃的東西多了我們還學(xué)會(huì)挑食了,抱怨Java太爛,C太爛,C++太爛,或者說(shuō)這個(gè)框架太差了,不好用什么的。
51CTO:嗯,這是一個(gè)心態(tài)上的轉(zhuǎn)變。
陳皓:是的。程序員變嬌氣了。所以這個(gè)變難,其實(shí)是程序員們自己變嬌氣了(笑)。
51CTO:好的,那么這次問(wèn)題就到這里結(jié)束。十分感謝陳皓老師接受我們的采訪!