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