架構師,當然是腦力勞動者,但是,同樣是腦力勞動也存在重大的差別。有一類腦力勞動的成果,是比較容易被評價的。或者能夠判斷其對錯:比如考試的分數;或者能夠比較其高下:比如兩個人下棋分出輸贏;或者能夠交由市場來判斷:比如某種ui/ue設計,我們可以通過資料統計,了解其受使用者歡迎的程度。
但是,架構設計只是軟體開發過程中的乙個環節,而在這個多人協作的場景中,我們很難單獨評價架構的優劣。由於硬體、軟體、部署、人員、測試、使用者、市場等眾多的差別,即使是非常相近的兩個系統,我們也很難判斷兩個架構孰優孰劣。比如:ebay的架構與taobao的架構哪個更加優秀?在交付拖延的時候,我們可以將問題歸咎於開發團隊的效率低下。在出現質量問題的時候,我們可以將問題歸咎於測試團隊的疏忽大意。在負載撐不住的時候,我們可以將問題歸咎於運維團隊不夠專業,甚至是競爭對手的ddos攻擊。那麼,在出現什麼樣的問題的時候,我們可以將責任歸咎於架構呢?
所以,現狀就是:架構師是乙個很難做好的職業。但是,從某種意義上來說,又是乙個非常容易混的職業。(當然,混是另一種需要持續修煉的高階技能。)因此,架構師也是特別需要強調自我修養與職業道德的職業。
對於架構的定義,有很多種,我比較同意的一種定義是:「架構是一組關鍵決策。」這樣的決策包括但不限於:使用什麼作業系統、語言、框架與類庫;是否在架構中使用某種全新的技術方案;優先考慮或滿足哪一方面的需求以及如何在技術上實現這一點;更進一步的,面對乙個不斷發展的系統,哪些部分需要優先重構or優化、哪些決策需要重新考慮甚至修改;再進一步,某些前瞻性的考慮,也是架構決策的一部分,等到問題發生再來解決,同樣是架構方面考慮不周。
能夠做出這些決策的,就是架構師。或者說,在乙個團隊中,實際的最終決策者,就是事實上的架構師。無論他被賦予什麼樣的頭銜。在乙個團隊中,我們總能找到這樣的角色(無論他做得是不是稱職),而乙個優秀的架構師,就是通常能夠做出「較多」正確決策的人。
僅僅做出決策是不夠的,我們可以從時間線上來觀察:在做出決策之前,架構師需要足夠了解自己的「可選項」,無論是使用者的實際需求,還是最新出現的技術和框架,並且都得要有足夠深入的理解(否則就是在拍腦袋做決策)。這時,架構師的角色,是乙個「研究者」。
在綜合各項因素,甚至是相互矛盾的各種需求之後,在考慮到團隊的實際能力與交付壓力之後,在平衡了先進性與可靠性、擴充套件性與穩定性、重要性與緊迫性之後,架構師做出了一組決策。這時,架構師的角色,是乙個「設計師」。
為了確保自己架構設計能夠被正確的實施和貫徹,架構師需要與研發團隊密切配合,或者說服、或者引導、或者輔導、或者鼓動、甚至需要某種「強有力的推進手段」,這對於架構師的「硬實力」與「軟實力」都提出了很高的要求。這時,架構師的角色,是乙個「top coder」。
在某些大公司,架構師還需做很多的文件工作,這些文件並不是交付給開發團隊的說明性文件。而是某種向上級證明某某方案可行,某某架構有效的證明性文件。這時,架構師的角色,是乙個「說服者」。
從上面的描述,我們也可以發現,架構師像是乙個千面人:需要與上下前後左右的不同角色打交道;多面手:需要了解甚至掌握諸多不同的知識和技能。要想做好這個工作,提公升自我修養,是根本之道!
架構師不是產品經理,不是市場人員,不是客服人員。但是,如果只懂技術,只考慮技術,不能深入的理解使用者的需求(強調一下,使用者的真實需求!),就會做出「純粹追求技術先進性」的想當然爾的架構出來。
架構師當然需要很強的表達能力,甚至還需要有忽悠能力。但是,無論是表達還是忽悠,都必須以「實力為基礎」。如果不能腳踏實地,積累實力,只會夸夸其談。那就相當可恥了。
還是那個經典的台詞「兄弟們跟我上」與「弟兄們給我上」的區別。如果對於一些困難的問題,架構師自己都搞不定,卻擺出一副胸有成竹的表情:「這不是很簡單的嗎?你到網上搜一下嘛,資料大把大把的。」這種做派,就很令人不齒。
如果某種技術,架構師自己都沒有做過評測,沒有看過框架**,沒有在過去的實踐中應用過。卻因為一篇文章,乙個講座,甚至某個大公司曾經用過這樣的證據,就將一種技術引入到專案之中。這樣的決策,很少有不失敗的。
「過度設計」當然是乙個貶義詞,但是架構師一定要有前瞻能力。不能等到火燒起來了,再去救火。雖然在企業裡,的確存在「救火英雄公升遷快」的現象。但是,乙個優秀的架構師,應該以「消除隱患於無形」為榮。
在架構領域,很少有唯一解、最優解。大多數時候,我們只能在多個各有優劣的方案中,反覆權衡,考慮取捨。這時,開闊的視野、開放的心胸,就顯得尤為重要。如果一味的獨斷專行,聽不進團隊裡其他同事的意見(尤其是那些學習了賈伯斯的架構師),就會非常危險。
技術的進步實在太快,曾經有一種誇張的說法:「平均每天誕生一種革命性的、顛覆性的技術」。雖然有很多新技術,都在如此宣稱,作為架構師,卻必須不斷的主動學習,了解,甚至在某些領域做一些初步的嘗試。這樣的過程,在架構師的整個職業生涯中,都無法停止。一旦產生了「固步自封」的念頭,這個架構師也就「不過爾爾」了。
架構師是乙份困難的工作,更加重要的是:隨著架構設計的完成,架構師的工作,才剛剛開始。接下來的任務,會非常瑣碎,也許會更加困難。這份工作的主題是:「架構看護」盡可能保護架構,不會隨著時間的推移,隨著特性的增加,漸漸的變得腐化。很多最初設計得相當優秀的架構,到最後變得不堪入目。說到底,還是要怪架構師沒有能夠堅持自己當初的決策。
在《中庸》裡,子曰:「好學近乎知,力行近乎仁,知恥近乎勇。知斯三者,則知所以修身;知所以修身,則知所以治人;知所以治人,則知所以治天下國家矣。」
簡單的翻譯解釋下:好學就能顯得有智慧型(至少能有知識),力行就能不脫離群眾(因不忘本而能具備仁慈之心),知恥就能守底線(有所為有所不為之勇)。能做到這三點,就算是懂得如何提公升自己的修養了。懂得如何提公升修養,才能懂得如何駕馭團隊。懂得如何駕馭團隊,才能創作出真正偉大的,甚至風行全球的軟體產品來。
這就是我理解的架構師的中庸之道,與諸位共勉吧。
本文首發於《程式設計師》
論架構師的自我修養
確實說的不錯!架構師,當然是腦力勞動者,但是,同樣是腦力勞動也存在重大的差別。有一類腦力勞動的成果,是比較容易被評價的。或者能夠判斷其對錯 比如考試的分數 或者能夠比較其高下 比如兩個人下棋分出輸贏 或者能夠交由市場來判斷 比如某種ui ue設計,我們可以通過資料統計,了解其受使用者歡迎的程度。但是...
論架構師的自我修養
架構師,當然是腦力勞動者,但是,同樣是腦力勞動也存在重大的差別。有一類腦力勞動的成果,是比較容易被評價的。或者能夠判斷其對錯 比如考試的分數 或者能夠比較其高下 比如兩個人下棋分出輸贏 或者能夠交由市場來判斷 比如某種ui ue設計,我們可以通過資料統計,了解其受使用者歡迎的程度。但是,架構設計只是...
論架構師的自我修養
架構師,當然是腦力勞動者,但是同樣是腦力勞動也存在重大的差別。有一類腦力勞動的成果,是比較容易被評價的。但是,架構設計只是軟體開發過程中的乙個環節,在這個多人協作的場景中,我們很難單獨評價架構的優劣。架構師,當然是腦力勞動者,但是,同樣是腦力勞動也存在重大的差別。有一類腦力勞動的成果,是 比較容易被...