周愛民:真正的架構師是沒有title的(圖靈訪談)

盼盼姐發表於2014-09-17

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

enter image description here

關於選擇

“既然我已經答應夫人要走,就不想做別的選擇了。”

問:您從什麼時候開始接觸程式設計?

我從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月份左右離開支付寶,因為保密協議的問題我等了一年,沒有在工作。

對於選擇這件事,除了離開鄭州之外,我都沒有更充分的動機和理由。我從盛大離開是迫不得已,因為有私事必須要處理。從支付寶走的時候是想換一個環境,不想在那樣的環境下生活,不想在那樣的工作背景裡面工作。

問:您能概括講一下為什麼不喜歡那樣的環境嗎?

這只是誘因,不是結果。我夫人當時在杭州病得特別厲害,她嚴重失眠,一個多月只能睡到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的。首先你要想清楚你在做的東西是不是架構,你是不是會做架構。問題本身就是要讓一個願意學習的同學(不一定是工程師)能夠理解到怎樣做架構。第一,認識架構最重要的事:你要知道你所面對的是一個系統而不是一件事。你可能每天會面對一堆待處理的事,如果你看到的只是事的過程和結果,而非事情本身,你就僅僅是工程師,一位實施者。跳出這個框子,你面臨的其實是一個系統,你看清楚這個系統之後,還要看清楚這個系統裡面的關鍵要素。

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

所以從架構思維的角度來講,第一件事是要看到這是一個系統,第二件事是定義問題,第三件事是看到這個問題是不是真實存在。找到這個問題跟方案之間的關係在哪裡,你就會做架構了。

至於做多大範圍的架構,就是我在《大道至易》裡面提到的領悟、領袖和領域能力的問題了。第一個部分就是領悟的能力,知道划船不是第一要素,思考問題和定義問題以及否定這些問題的整個過程就是架構思維。第二個部分是領域能力的部分,你得知道河流,你得知道船,你得知道橋,這些東西是屬於領域的部分。第三部分是領袖能力,你真的想要造一座橋的話,你得組織一群人把橋造出來;如果你們是4、5個人,你的決策是我往上走一公里嘗試一下尋找源頭,那麼你怎麼讓其他4個人跟著你往那一公里的上游走,這是領袖能力。否則你就會自己變成排頭兵,“你們大家等著,我去上游看看”。如果你是領袖的話,可以安排一些人去上游看看,另一些去下游看看,半個小時後在這裡集合。這就是領袖,把你設想的解決問題的架構實施下去。

豌豆莢的動力引擎

“也許今天這艘船很小,是一葉扁舟那麼小,我也給了它一個超大能力的引擎,有一天當它成長為非常大的船的時候,一樣是可以用的。”

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

我認為是平衡力的問題,不是多少的問題。假設你做技術架構在你的團隊使用,你選擇了一個外掛的框架或者資料流的框架,總共就影響4、5個人,你需要的領袖能力無非是你站起來拍板說我已經調查過的,這個技術絕對沒有問題,大公司都已經用過了。這就是你的領袖能力。但是你要想影響到一個行業,比如我們現在正在做的應用內搜尋,這是整個行業的一部分,你可能要跳出來說以後整個搜尋就是以應用內搜尋為核心的,但你怎麼能夠用領袖能力使得所有人相信將來應用內搜尋在這個領域裡面是一個方向呢?這就是領袖能力。

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

真正不可或缺的部分變成了領悟能力。比如在決策上豌豆莢為什麼要選擇應用內搜尋作為我們在移動領域上面的方向,在這樣的問題上,領悟能力的部分才是架構思索不可或缺的部分。一定要有一個理論體系來支撐這個決策,而其它兩個(領域能力和領袖能力)只是在實施手段中所需要找到的、平衡整體能力的部分,可以把它嫁接到別的團隊,別的人身上,這會形成一種結構。

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

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

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

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

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

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

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

做架構這件事跟公司的組織和文化有一個漫長的協調過程,你需要在你設定目標和為了達到目標而演化出解決方案的過程中思考。所以一個好的做架構的人一定是對組織、文化、工作方法、專案管理,對整個系統的各個方面都非常瞭解的,他不一定會做,但是要看到方方面面。

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

雖然我覺得能力很重要,但是你可以承認自己的不足。我們不會要求剛畢業的學生有多麼強的能力,因為這件事本來就不靠譜,我認為在你的背景下面具有合適的能力就行了。拿學生的背景和履歷跟經驗更豐富的人比較是不公平的。我覺得如果你對自己所做的事,對現有的履歷有足夠的信心和熱情,你願意去了解豌豆莢並加入到我們的事業裡來,這就夠了。

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

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

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

豌豆莢2015校園招聘


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

相關文章