周愛民:真正的架構師是沒有title的

非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/120377程序員

周愛民,現任豌豆莢架構師,國內軟件開發界資深軟件工程師。從1996年起開始涉足商業軟件開發,歷任部門經理、區域總經理、高級軟件工程師、平臺架構師等職,有18年的軟件開發與架構、項目管理及團隊建設經驗,曾任盛大網絡平臺架構師、支付寶業務架構師,是Borland Delphi 產品技術專家,也是 Qomo 開源項目(JavaScript)的發起者。2003年5月被美國 Borland 公司授予「Borland Delphi產品專家」稱號,並授予「論壇特別貢獻獎」。著有《大道至簡——軟件工程實踐者的思想》、《大道至易——實踐者的思想》、《Delphi源代碼分析》、《JavaScript 語言精髓與編程實踐》等專著。面試

圖片描述

關於選擇

「既然我已經答應夫人要走,就不想作別的選擇了。」編程

問:您從何時開始接觸編程?微信

我從1994年的時候開始學習編程,最開始接觸電腦是學習WPS,DOS之類的,其中有一門課程是DBase,這是早期的編程語言。個人專業不是編程,我學的是機械電子。當時我其實更喜歡文學,可是我認爲專業做家早晚會被餓死,因此我就選擇了計算機,至少搞計算機不會餓死。網絡

我發現您的職業經歷也很豐富,在成爲架構師以前,您好像還得到過Borland公司發的獎?
我在去盛大以前的經歷都是在Delphi圈子裏,當時Borland一下發了兩個獎給我。一個是Borland產品專家獎,由於那個時候我已經出了第一本書《Delphi源代碼分析》。那本書是講Borland產品內核的,從對Delphi的瞭解程度來說我是能夠拿這個獎的。另一個獎叫作社區專家獎,這是由於我是Delphi早期社區的活躍者。我去盛大以前面臨了兩個Offer,一個是Borland China,請我去作產品工程師,一個是盛大的。Borland在中國沒有開發,因此他們只好叫作產品工程師,能夠理解成售後服務。我當時以爲雖然Borland公司的title能夠,但不是我想作的事,因此我決定去盛大。架構

問:您曾經是一位Delphi專家,也曾做爲架構師就任於盛大和阿里巴巴,您職業轉換的緣由和動機是什麼?框架

我在鄭州待了9年,我在那裏的最後一份工做是軟件部的負責人,帶項目兼作開發。我離開鄭州的緣由其實很簡單。當時我有一位很是好的朋友,他也是個人開發團隊中的主力工程師。他說他拿到了微軟的Offer,想問一下個人意見,我就告訴他:做爲朋友我建議你當即去微軟,這對你來說是事業發展的大好機會。他向我提出離職以後,次日我就向老闆提出了離職。那個時候,我忽然想明白了一件事,對於軟件開發人才來講,鄭州不是一個好環境。當咱們把一我的培養得很成熟了,他就會受到更大的環境(好比北京)的影響,人才會流失。在鄭州這樣的環境下搞軟件或者軟件企業受限太大了,而這樣的現實不是我能改變的。我今天會面臨朋友的離職,我若是繼續在鄭州作下去,過一兩年還會面臨一樣的問題。編程語言

我開始意識到整個產業環境對局部地方的影響,對於人才的影響,對於公司企業規模的影響。當時咱們還在作一些項目,面向移動、金融、電信這些企業。很是明顯,咱們做爲本地企業,拿到的永遠都是小骨頭。從北京來的其餘公司,人沒有你多,素質不必定有你高,可是報價會比你高不少。從北京來的公司只要說他們後面有怎樣的一家大公司在支持他,他就會拿到比你更大的東西。學習

離開鄭州後,我去了盛大,盛大對於我來講,是做爲架構師的第一個階段。爲了處理一些家務事,我2008年離開盛大。2009年去支付寶,2011年8月份左右離開支付寶,由於保密協議的問題我等了一年,沒有在工做。spa

對於選擇這件事,除了離開鄭州以外,我都沒有更充分的動機和理由。我從盛大離開是無可奈何,由於有私事必需要處理。從支付寶走的時候是想換一個環境,不想在那樣的環境下生活,不想在那樣的工做背景裏面工做。

問:您能歸納講一下爲何不喜歡那樣的環境嗎?

這只是誘因,不是結果。我夫人當時在杭州病得特別厲害,她嚴重失眠,一個多月只能睡到20個小時,基本上天天一個小時都不到,已經抗不住了。我就跟她講咱們回鄭州吧,由於咱們家安在鄭州。以後咱們就搬家了,她的病也在漸漸好轉。當時阿里金融給了我一個offer,讓我去阿里金融作架構。可是既然我已經答應夫人要走,就不想作別的選擇了。

問:您來豌豆莢的時候有沒有什麼特別的緣由呢?

我在來到豌豆莢以前也有一些其餘的offer,最後促使我選擇豌豆莢的緣由也很簡單。我來豌豆莢面試的時候跟創始團隊一塊兒溝經過,個人感受是他們很誠懇,這種誠懇的具體表現就是:知道就是知道,不知道他會告訴你。你會從他們那裏聽到:咱們正在創業,咱們面臨了不少的競爭,有些問題咱們也許沒有想清楚,可是咱們須要像你這樣的人過來幫助咱們一塊兒作事。大多數創始人不會這樣作,這樣誠懇的人是很可貴的,這是我當時很感動的地方。

第二,當時的豌豆莢還有不少事情沒有人拎起來作。不少事情就直接打包到一個團隊裏面,由團隊往下推動,或者打包到一件事裏面當成一件事作。在我看來整個體系不成形,雜亂無章。我感受在這樣的背景下面有不少架構工做要作,我架構的能力和背景必定可以幫到這家公司,有我施展的地方,因而我就選擇了豌豆莢。

架構師

「真正的架構師是沒有title的。」

問:您是如何成爲一位架構師的?

人生有不少巧合,不必定非得要預測一個途徑。我離開鄭州的時候就有一份簡歷是投到盛大的,面試經過以後他們就發了一份offer,上面寫了架構師。緣由是我在Delphi圈子裏比較資深,盛大給我發offer的時候,以爲高級工程師已經不太適合了,就只能是架構師。

我去盛大的時候沒有架構師,包括我本人在內沒有人知道怎麼作架構。當時是2005年,架構師在國內仍是比較陌生的名詞。CTO給我安排的活兒是但願我能給某個東西作架構,把底層作起來。我到了以後就按照這樣的思路去作,按照本身的理解去推動、實施,用了2個多月,初步作出了原型。雖然最後這個數據底層處理系統沒有用,可是這個過程讓你們看到,架構的作法跟原來的開發方式不太同樣。因此他們很快把我調去了盛大機頂盒的系統,作平臺架構。在去盛大以前我已經工做9年了,我基本上把過去工做的全部東西所有彙總,變成了我技術架構上的基礎。

若是說在我作平臺架構以前,已經大概知道如何作架構了,可是什麼叫作平臺架構仍是沒人知道的事。那個時候國內能夠出來說平臺架構的人尚未幾個,相關的理論知識也沒有。我該如何定義什麼是平臺?想要的東西是什麼?我怎麼去作?我怎麼影響那些決策者?我如何把他們想要的東西描繪出來推動下去?因此,作平臺架構也是摸索着往前走,在盛大這件事我大概作了兩年。後來盛大爲將來5到10年規劃的是叫作OMMO的大型多人在線遊戲項目(也就是後來的「零世界」項目),因而我在盛大工做的最後半年時間,就在作這個項目的平臺設計。

那個時候開始,我已經在作架構了,可是沒有範本,沒有理論和數據告訴我怎麼作。我按照本身的想法去實施,按照本身的方法造成本身的體系,不斷地去修改、適應它。

問:您對架構的理解經歷了幾個階段?

最先的架構師就是某家公司沒有合適你的title,就給你一個架構師作。坦率地說,這是不少公司架構師的出處。我在盛大前兩個月左右的時候,第一個項目作得不錯,正有一點自得,當時被稱爲盛大首席架構師的一位同事就要離職了。他跟我聊了一件事,他說他其實半年前就想走了,可是CTO找到他說:你看盛大還有不少事情,你也有不少能量沒有發揮出來,咱們真的不但願你走,接下來你作盛大的首席架構師吧,把你的能力釋放下來。他當時以爲能夠留下來,等過了半年再來看這事的時候,他忽然醒悟了,他說不是公司想要作架構,也不是我能作架構,而是公司想把他留下來,又找不到適合的理由,因而須要一個合適的title把他留住。

我當時聽了他的解釋就一陣透心涼,我來盛大作架構也是這樣的,找不到一個能夠給個人title,可是又想把我留到盛大,因而讓我來作架構師了。我跟盛大或者整個行業都經歷了這樣的階段。架構師就是一個title,爲了挽留一些人,或是爲了在某些場合下能夠跟別人遞一張名片。

在盛大作了兩年多以後,我進入到第二個階段,從架構的結果到架構過程的領悟。最先作架構怎麼作呢?去Google搜各類各樣的架構的文章、各類各樣架構的圖和材料,例如要作數據的架構只要搜一些國外大公司數據架構的文章和圖就好了。我最初的兩年時間也經歷了這樣的過程。最終我從學習架構的作法獲得了忽然的領悟:若是那些東西是架構,那麼它們是怎麼得來的?後來《架構之美》這本書出版的時候,我寫了一篇序,裏面有我關於架構的第一個感悟:架構是一個過程,而非結果。水管滴下來一滴水,從它滴落到裂開的過程,中間有多少形態的變化?你們只會看到水在地上綻放的結果,不會想到在中間的過程是什麼。咱們只看到了架構師畫出來的東西,而如何獲得它纔是架構師最重要的部分。這是我2008年左右從盛大離開時的感悟。

從支付寶離開的時候,我又感覺到了變化。過程即使也是能夠被描述和展示的,也不足以說明架構自己,也就是說,這個過程是不具備靈魂的。假設,我是一個老石匠,我有一位學徒小石匠,我雕石獅子的過程他看得清清楚楚,請問他照着我作一遍就能夠成爲老石匠了嗎?這個過程是能夠被仿造的,能夠被形式化,可是並不具有靈魂。個人第二個感悟是:過程是不具有靈魂的,真正要學的應該是架構師思考方式。我在《大道至易》裏面花了很多工夫去分析架構的過程和結果,可是核心的部分是給你們講什麼是架構的思惟,怎麼用架構的思惟思考。因此後來孟巖寫序的時候,說愛民是在用架構的思惟看這個,看那個。管理也好,技術也好,架構自己也好,我都是站在架構思惟的視角去看的,可以看到這本書的後半部才能把這本書看明白。這是第三個階段,思考架構在思惟階段怎麼造成,而不是怎麼把石獅子雕出來,或者雕出來的結果漂不漂亮,這二者已經偏向於末端了。

問:孟巖曾在《大道至易》的序中提出了一個有趣的問題:組織架構跟技術架構之間的搭配如何纔是合適的。可是您在書裏面並無深刻地討論這件事。您如今對這個問題有沒有更深的理解?

這個問題是沒有通解的。任何一個系統,我將要實施的架構和該架構所在的這家公司中間必定存在着總體系統的視角,系統中不一樣的東西確定會有矛盾和衝突。這種矛盾和衝突在不一樣的背景下表現是不同的。這個東西自己沒有通解,可是問題是徹底一致的:如何能讓你實施的架構跟這家公司的組織結構及其推進方法協調。你要麼改變A,要麼改變B,採用的手法是在實施的技術架構上作調整。

舉個例子,某個架構的實施須要500人,可是這家公司原本才200人,顯然是實施不下去了,可是你還得想辦法實現怎麼辦?你能夠去買一個500人實施出來的產品把這個坑填掉,你的架構自己是沒有變化的,只是實施的手段變了。第二,咱們不要這個架構了,能不能作一個更簡潔、輕便,可以適應200人規模的架構。第三,調整公司和架構,這200人不是不夠嗎?我能不能再買一個500人的公司過來,若是能,我能夠把這個放進去。因此調整哪個都有可能,這是實施手法的問題。

我跟孟巖沒法造成共識的問題是:到底什麼是衝突的自己?孟巖認爲系統多是不可預設的,也許一開始作架構這件事就錯了,由於你預設了系統。而個人觀點是系統是能夠預設的,我認爲架構的發展和須要作的事情是能夠按照這個設計往下走的。若是我假設系統能夠預設,必然會產生了剛纔所講的矛盾,咱們解決矛盾的方法要麼是演化,要麼是改變。

問:頗有趣的分析。您來到豌豆莢以後遇到最大的技術挑戰是什麼?

這個問題的答案其實也是我剛纔問題的。也就是說,若是技術框架跟公司層面存在了一個矛盾,它會有挑戰嗎?其實沒有。因此在架構的層面討論剛纔的問題,是永遠不存在技術障礙的。由於我永遠能夠有其餘選項,我能夠不作它,或者我能夠不用如今作它,我能夠用各類方法把這個問題消化掉。因此若是在架構層面上存在技術挑戰或者技術上不可解決的問題,就是你架構作錯了,只有架構作錯了纔會存在這樣的矛盾。

因此從技術的角度上講,老是可以解決,儘管確實永遠存在能力的問題。人多了以後就會存在的第二個問題,就是組織問題。人少不存在這樣的問題,一我的開發永遠不會打架。因此從這個角度考慮,技術上存在的最大挑戰每每第一是須要人來解決的部分,咱們的人力以及相應的能力不夠。第二,人多了以後,存在的管理問題是須要經過非技術方法來解決掉的,好比說組織結構的調整,管理方法等等。

問:若是想從一個普通的程序員成爲一位架構師,須要學習什麼?

跟你老闆搞好關係,讓他給你一個title(笑)。

問:那要成爲一位真正的架構師呢?

其實真正的架構師是沒有title的。首先你要想清楚你在作的東西是否是架構,你是否是會作架構。問題自己就是要讓一個願意學習的同窗(不必定是工程師)可以理解到怎樣作架構。第一,認識架構最重要的事:你要知道你所面對的是一個系統而不是一件事。你可能天天會面對一堆待處理的事,若是你看到的只是事的過程和結果,而非事情自己,你就僅僅是工程師,一位實施者。跳出這個框子,你面臨的實際上是一個系統,你看清楚這個系統以後,還要看清楚這個系統裏面的關鍵要素。

我經常使用過河來做例子。一我的在河的前面想過這條河,有一條船放在那裏,若是你認爲過河是一件事,你的第一件事是跳到船上想辦法把船划過去。你遇到的第一個問題多是你沒有划船的技能。可是若是你是一個架構師,你的第一個問題是:這是什麼東西?你能夠定義其爲一個障礙,河這個東西對你來說是阻礙,你跨過阻礙的方法不必定是划船。我架一個橋不行嗎?我直接跳下去,游泳過去不行嗎?另外,這條河是否是障礙仍是一個問題,若是它很淺呢?你非要認爲它是障礙就製造了矛盾,系統中也許不存在這樣的矛盾。

因此從架構思惟的角度來說,第一件事是要看到這是一個系統,第二件事是定義問題,第三件事是看到這個問題是否是真實存在。找到這個問題跟方案之間的關係在哪裏,你就會作架構了。

至於作多大範圍的架構,就是我在《大道至易》裏面提到的領悟、領袖和領域能力的問題了。第一個部分就是領悟的能力,知道划船不是第一要素,思考問題和定義問題以及否認這些問題的整個過程就是架構思惟。第二個部分是領域能力的部分,你得知道河流,你得知道船,你得知道橋,這些東西是屬於領域的部分。第三部分是領袖能力,你真的想要造一座橋的話,你得組織一羣人把橋造出來;若是大家是四、5我的,你的決策是我往上走一千米嘗試一下尋找源頭,那麼你怎麼讓其餘4我的跟着你往那一千米的上游走,這是領袖能力。不然你就會本身變成排頭兵,「大家你們等着,我去上游看看」。若是你是領袖的話,能夠安排一些人去上游看看,另外一些去下游看看,半個小時後在這裏集合。這就是領袖,把你設想的解決問題的架構實施下去。

豌豆莢的動力引擎

「也許今天這艘船很小,是一葉扁舟那麼小,我也給了它一個超大能力的引擎,有一天當它成長爲很是大的船的時候,同樣是能夠用的。」

問:您提出的架構師的三種能力(領袖,領域,領悟)反映在您在豌豆莢作架構的過程之中,您更倚重於哪一種能力?

我認爲是平衡力的問題,不是多少的問題。假設你作技術架構在你的團隊使用,你選擇了一個插件的框架或者數據流的框架,總共就影響四、5我的,你須要的領袖能力無非是你站起來拍板說我已經調查過的,這個技術絕對沒有問題,大公司都已經用過了。這就是你的領袖能力。可是你要想影響到一個行業,好比咱們如今正在作的應用內搜索,這是整個行業的一部分,你可能要跳出來講之後整個搜索就是以應用內搜索爲核心的,但你怎麼可以用領袖能力使得全部人相信未來應用內搜索在這個領域裏面是一個方向呢?這就是領袖能力。

你須要在你的能力之間找到一個平衡,而不是考量解決多少問題。領域能力也是如此,全部這部分的能力的要素其實都是能夠放在別的角色或者是別人身上的。舉個例子,豌豆莢要作應用內搜索,並不等於說CEO須要把應用內搜索全部的領域知識瞭解得很是清楚。最終他在這個領域的能力是如何構建的呢?是豌豆莢的全部工程師、各個角色在這個領域的集合,支撐了他來討論應用內搜索可不能夠成爲行業方向。對於他來說,這個領域能力就被分解在不一樣的角色和不一樣的團隊上了。

真正不可或缺的部分變成了領悟能力。好比在決策上豌豆莢爲何要選擇應用內搜索做爲咱們在移動領域上面的方向,在這樣的問題上,領悟能力的部分纔是架構思索不可或缺的部分。必定要有一個理論體系來支撐這個決策,而其它兩個(領域能力和領袖能力)只是在實施手段中所須要找到的、平衡總體能力的部分,能夠把它嫁接到別的團隊,別的人身上,這會造成一種結構。

我在架構師的能力上面提到的三種能力並非要集於某一人身上,而是你必定要理解架構所須要的能力,須要多大能力的集合才能把這個系統消化掉。

問:您初到豌豆莢時曾提過您對不少豌豆莢的組織和文化的來源不是很清楚,而您有一個觀點是認爲組織結構和文化是跟架構有關係的,對這些來源,您如今有沒有更清楚?

確實是更清楚了。組織方法和文化氛圍的造成,都是有歷史淵源的。一個公司如何成長爲如今這樣?用什麼方法來推動它的事和產品?這些都有習慣性的方法和思惟在裏面。

一家公司作事方法的歷史根源,是值得你花必定的時間和精力追本溯源的,有一些信息是須要你去挖掘的,這也是我在豌豆莢一年多的工做裏面比較關注的事。豌豆莢由於特別公開、透明,我可以從文檔上面看到兩三年前,或者是更早時期他們的一些工做過程。這是一個關於信息的問題。

第二部分是文化的造成,這部分不像剛纔那麼容易。我在《大道至簡》那本書裏面說到過,一個公司或者一家企業或者一個組織的造成是與那些核心人物有密切關係的,那些創始者和初期團隊的構建者的行爲、方法、習慣和思惟方式都會留下痕跡,這是由人帶來的一種氣質和影響。因此,更多的是要經過了解這些創始者、創始者團隊和早期的團隊來理解公司,理解方向,理解他們在作的事業。這個東西不是信息,不是你在過去的文檔裏面能搜到的東西了,須要你跟他們碰撞、瞭解、接受、感悟。這一年多以來我在團隊融入上的投入使得我可以對豌豆莢的文化和現狀有更深的瞭解。

問:您曾把豌豆莢的組織結構形容爲 「開放、透明」,這樣的組織對您的技術架構有影響嗎?

有影響。無論你怎樣作架構,最終是在系統裏作實施,這個系統的文化、組織,以及工做方法,必定程度上都影響了你如何去設定這個架構,你不能作出這裏面的人沒法接受的架構來。必定要掉過頭來看這些人習慣並想要用什麼樣的方法作這些事,在架構實施推動過程當中要可以再去調整它。

作架構這件事跟公司的組織和文化有一個漫長的協調過程,你須要在你設定目標和爲了達到目標而演化出解決方案的過程當中思考。因此一個好的作架構的人必定是對組織、文化、工做方法、項目管理,對整個系統的各個方面都很是瞭解的,他不必定會作,可是要看到方方面面。

處在擴張階段的豌豆莢用人須要很大,不少應屆畢業生也對豌豆莢很感興趣,大家須要什麼樣的年輕開發者?
只要有才,惟纔是舉。首先我以爲要對軟件,產品,或者是對你所選擇的方向、視野有熱心和激情。在一家公司裏面不只僅是要招架構師,也要招軟件工程師,各個方向都要招各類各樣的人才。人才的定義可能會受到外界的影響,可是由內到外的孜孜不倦的精神,別人一眼就能看得出來。若是你在這件事上具備那樣的信心、慾望和力量,這可能會激發每一個人的創造力、動力和想要達到一切目標的原始驅動。這是我所但願的定義。

雖然我以爲能力很重要,可是你能夠認可本身的不足。咱們不會要求剛畢業的學生有多麼強的能力,由於這件事原本就不靠譜,我認爲在你的背景下面具備合適的能力就好了。拿學生的背景和履歷跟經驗更豐富的人比較是不公平的。我以爲若是你對本身所作的事,對現有的履歷有足夠的信心和熱情,你願意去了解豌豆莢並加入到咱們的事業裏來,這就夠了。

問:若是把豌豆莢比喻成一艘大船,您在上面的角色是什麼?

一艘船由不少部分組成,船上的全部人都是不可或缺的,拋掉了誰都是不能夠的,但同時,也不是缺了誰就不行,不是缺了廚師長你們都沒有飯吃,缺了船長就沒有人知道方向了。對於我來講,我願意定義的是我可以作到什麼,個人能力是哪一個方面,我不想把它擬人化、職務化。

我以爲我應該是動力引擎中的組成部分,由於架構師這個角色所提供的是能力。我不提供這個船的船體,船體不是我工做的目標和對象。也許今天這艘船很小,是一葉扁舟那麼小,我也給了它一個超大能力的引擎,有一天當它成長爲很是大的船的時候,同樣是能夠用的。可是若是一開始作得很大的話,這個小舟可能裝不下,我願意作其中的一部分,從小舟開始一直到船很是大的時候都存在,而且起到它的做用,這就夠了。我不但願的是,今天咱們的引擎是動力0.1版的,只做用於一艘小船,明天我把這個東西扔到海里,換一個大的,那不是我作動力引擎的方法。架構師更傾向於構造一個可擴展的,能夠長期影響這個結構的引擎。


更多精彩,加入圖靈訪談微信!

圖片描述

相關文章
相關標籤/搜索