1. 程式人生 > >架構師到底該不該寫程式碼

架構師到底該不該寫程式碼

週末InfoQ-StuQ直播,主持和聽眾提問的簡版實錄,快消時代,精簡到1分鐘可以讀完(原文有10000字)。

提問:沈老師是從什麼時候開始寫文章的?

我從大學開始有寫文章的習慣,最開始主要記錄學習上和生活上的一些東西。畢業加入百度之後,在百度空間總結一些學習到的技術的東西,後來百度空間好像轉型做交友平臺了,於是搭建了自己的部落格,在部落格上寫了一兩年。最近當然就是在公眾號“架構師之路”上寫,梳理和總結自己日常工作中學習到的一些技術,業務上和架構上遇到的一些問題,分享給大家。

提問:網上有個很有爭議的問題“架構師需要寫程式碼嗎?”,您對此怎麼看?

我認為架構師應該寫程式碼。

首先,業務是肯定需要深入去了解的

,我比較反對一個公司成立一個所謂的架構師部門,擁有公司所有的架構師資源。我的建議是每個業務線團隊都需要有架構師。架構師一定要深入瞭解業務的特點,針對業務的特點去設計系統架構。

我一直有一個觀點“任何脫離業務的架構都是耍流氓”。肯定沒有一個一成不變的架構方案,適用所有的業務場景。

其次,是要貼近系統,所以得看程式碼,寫程式碼。即使完全沒有時間去寫程式碼的話,至少詳細設計的每一個細節架構師都需要清楚,每一個流程、介面引數、資料庫設計都要非常清楚。詳細設計儘量詳細到組內的任何一個工程師拿到詳細設計都可以去做實現。CodeReview也非常重要,保證程式碼至少是有兩個人看過,而且它的實現邏輯和詳細設計是一致的。

我對架構師的建議是:有時間的話,親自去寫核心程式碼,如果沒有時間的話,要把關詳細設計並安排資深工程師去做CodeReview

提問:當前網際網路技術更新非常快,您認為架構師對此應該持什麼態度?

首先對於新技術,需要去關注,但我的觀點是“應用到線上,一定要慎重”。去看、去學、去研究是一個技術人員必須做的,但是學習新技術與把它應用到線上生產環境是兩回事。

我負責58到家的一些後端架構,實施一些通用的技術平臺,比如說線上的監控、資料的統一收集等,如果技術體系統一,綜合成本會非常小。

再拿儲存來舉例,儲存的軟體和技術有很多,mysql,sql-server, mongodb等,統一用一個非常重要,一定不能是哪個團隊想用什麼就用什麼。

我的建議是:對新技術我們一定要去學習,但應用到線上一定要慎重

提問:大家覺得架構師的知識寬度是很廣的,那會不會有什麼都懂、什麼都不精這樣一種現象存在?

首先什麼都懂是絕對不可能的,什麼都精也是絕對不可能的,但是架構師也不能哪一塊都不精。雖然業務不一樣,但是架構設計上肯定會有通用的地方。我原來做過幾百萬同時線上的即時通訊系統,它肯定有架構領域內通用的東西,比如接入、資料、可用性、擴充套件性、一致性等,所以這些經驗對我後面做推薦系統的設計,支付系統的設計肯定會有幫助。

其實架構師對於知識的寬度和深度都是有要求的,像現在網上有一種說法說架構師的能力是π型人才,除了技術寬度,還要有兩條腿:一條是專業能力,還有一條是通用能力,比如表達、溝通、解決問題、管理、創新等。

提問:有很多立志於成為架構師的人不知道如何開始?沈老師能不能給一些比較具體的建議?

我認為架構師之路分為三個階段:

第一個階段是打基本功的階段。對應我自己的話就是職業生涯的前三年,語言、資料結構、演算法、設計模式、研發工具、除錯工具等,基本功沒打好,其他的一切都是空談。

第二個階段是業務的積累或叫技術深度的積累。對於我來說,則是業務深入,即前五年在即時通訊領域的打拼。業務的深度決定了進入一家公司的時候,你的身價,一個公司要解決某個業務問題,就必須有針對性的招相關的人才,如果你可以解決這個業務領域內的大部分問題,這就是你的核心競爭力。

第三個階段,π型人才的另外一條腿,即通用素質這一塊,就是你的執行力、責任心、推動能力、溝通表達能力、專案管理能力,這些會讓別人覺得你是靠譜的。在技術能力大家都差不多的情況下,一個事情為什麼交給你來做,大家有沒有想過?因為公司覺得你是靠譜的,靠譜這個評價很高。

提問:對一個架構來說,因為沒有完美的架構,它一定會有一些缺陷,那好的架構有一個什麼樣的標準嗎?

架構是為業務服務的,能夠滿足業務的需求並且對它的擴充套件性多考慮一步,我覺得這樣的架構就是合適的。

我曾經被問到“58同城從05年發展到現在,架構迭代了很多版,如果回到05年重新做架構設計,58的架構會不會是現在的樣子”,答案是一定不會跟今天一個樣子,一定還是和05年時候一個樣子。

提問:58的技術氛圍是怎麼建立起來的?

第一個指導人機制很重要,就是任何一個研發一定會有一個高職階的人帶,有任何技術上的問題一定是有人可以交流和解答的。

第二個我覺得很重要的是技術評審,技術評審是一個很好的契機讓大家溝通交流和討論技術上的問題。

第三個是分享機制,每個團隊內部定期組織技術分享,讓大家溝通交流。包括我也每週會花時間和團隊的同學做一些技術的交流和溝通。

提問:PHP是世界上最好的語言嗎?

技術的同學在討論的時候要避免討論兩個問題,一個是哪種語言是世界上最好的語言,第二個要避免討論的是Vim好還是Emacs好。

總結

(1) 架構師需要寫程式碼嗎?

有時間的話,親自去寫核心程式碼,如果沒有時間的話,要把關詳細設計並安排資深工程師去做CodeReview

(2)對於新技術,持什麼樣的態度?

需要去學習,但應用到線上一定要慎重

(3)對架構師的能力要求?

π型人才,除了技術寬度,還要有兩條腿:一條是專業能力,還有一條是通用能力

(4)架構師三個階段?

打基本功,業務沉澱,通用素質進階

(5)好的架構的標準?

能夠滿足業務的需求並且對它的擴充套件性多考慮一步

(6)技術氛圍怎麼培養?

指導人機制,技術評審,技術分享

最後給有志於成為架構師的同學一個建議:多學習、多交流、多溝通。