架構(gòu)師到底該不該寫代碼

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

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

我從大學開始有寫文章的習慣,最開始主要記錄學習上和生活上的一些東西。畢業(yè)加入百度之后,在百度空間總結(jié)一些學習到的技術(shù)的東西,后來百度空間好像轉(zhuǎn)型做交友平臺了,于是搭建了自己的博客,在博客上寫了一兩年。最近當然就是在公眾號“架構(gòu)師之路”上寫,梳理和總結(jié)自己日常工作中學習到的一些技術(shù),業(yè)務(wù)上和架構(gòu)上遇到的一些問題,分享給大家。


提問:網(wǎng)上有個很有爭議的問題“架構(gòu)師需要寫代碼嗎?”,您對此怎么看?

我認為架構(gòu)師應(yīng)該寫代碼。

首先,業(yè)務(wù)是肯定需要深入去了解的,我比較反對一個公司成立一個所謂的架構(gòu)師部門,擁有公司所有的架構(gòu)師資源。我的建議是每個業(yè)務(wù)線團隊都需要有架構(gòu)師。架構(gòu)師一定要深入了解業(yè)務(wù)的特點,針對業(yè)務(wù)的特點去設(shè)計系統(tǒng)架構(gòu)。


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

其次,是要貼近系統(tǒng),所以得看代碼,寫代碼。即使完全沒有時間去寫代碼的話,至少詳細設(shè)計的每一個細節(jié)架構(gòu)師都需要清楚,每一個流程、接口參數(shù)、數(shù)據(jù)庫設(shè)計都要非常清楚。詳細設(shè)計盡量詳細到組內(nèi)的任何一個工程師拿到詳細設(shè)計都可以去做實現(xiàn)。CodeReview也非常重要,保證代碼至少是有兩個人看過,而且它的實現(xiàn)邏輯和詳細設(shè)計是一致的。

我對架構(gòu)師的建議是:有時間的話,親自去寫核心代碼,如果沒有時間的話,要把關(guān)詳細設(shè)計并安排資深工程師去做CodeReview。

提問:當前互聯(lián)網(wǎng)技術(shù)更新非常快,您認為架構(gòu)師對此應(yīng)該持什么態(tài)度?

首先對于新技術(shù),需要去關(guān)注,但我的觀點是“應(yīng)用到線上,一定要慎重”。去看、去學、去研究是一個技術(shù)人員必須做的,但是學習新技術(shù)與把它應(yīng)用到線上生產(chǎn)環(huán)境是兩回事。


我負責58到家的一些后端架構(gòu),實施一些通用的技術(shù)平臺,比如說線上的監(jiān)控、數(shù)據(jù)的統(tǒng)一收集等,如果技術(shù)體系統(tǒng)一,綜合成本會非常小。

再拿存儲來舉例,存儲的軟件和技術(shù)有很多,mysql,sql-server, mongodb等,統(tǒng)一用一個非常重要,一定不能是哪個團隊想用什么就用什么。


我的建議是:對新技術(shù)我們一定要去學習,但應(yīng)用到線上一定要慎重。

提問:大家覺得架構(gòu)師的知識寬度是很廣的,那會不會有什么都懂、什么都不精這樣一種現(xiàn)象存在?

首先什么都懂是絕對不可能的,什么都精也是絕對不可能的,但是架構(gòu)師也不能哪一塊都不精。雖然業(yè)務(wù)不一樣,但是架構(gòu)設(shè)計上肯定會有通用的地方。我原來做過幾百萬同時在線的即時通訊系統(tǒng),它肯定有架構(gòu)領(lǐng)域內(nèi)通用的東西,比如接入、數(shù)據(jù)、可用性、擴展性、一致性等,所以這些經(jīng)驗對我后面做推薦系統(tǒng)的設(shè)計,支付系統(tǒng)的設(shè)計肯定會有幫助。


其實架構(gòu)師對于知識的寬度和深度都是有要求的,像現(xiàn)在網(wǎng)上有一種說法說架構(gòu)師的能力是π(pai)型人才,除了技術(shù)寬度,還要有兩條腿:一條是專業(yè)能力,還有一條是通用能力,比如表達、溝通、解決問題、管理、創(chuàng)新等。

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

我認為架構(gòu)師之路分為三個階段:

第一個階段是打基本功的階段。對應(yīng)我自己的話就是職業(yè)生涯的前三年,語言、數(shù)據(jù)結(jié)構(gòu)、算法、設(shè)計模式、研發(fā)工具、調(diào)試工具等,基本功沒打好,其他的一切都是空談。


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

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

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

架構(gòu)是為業(yè)務(wù)服務(wù)的,能夠滿足業(yè)務(wù)的需求并且對它的擴展性多考慮一步,我覺得這樣的架構(gòu)就是合適的。


我曾經(jīng)被問到“58同城從05年發(fā)展到現(xiàn)在,架構(gòu)迭代了很多版,如果回到05年重新做架構(gòu)設(shè)計,58的架構(gòu)會不會是現(xiàn)在的樣子”,答案是一定不會跟今天一個樣子,一定還是和05年時候一個樣子。

提問:58的技術(shù)氛圍是怎么建立起來的?

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

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

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


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

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


總結(jié)

(1) 架構(gòu)師需要寫代碼嗎?

有時間的話,親自去寫核心代碼,如果沒有時間的話,要把關(guān)詳細設(shè)計并安排資深工程師去做CodeReview

(2)對于新技術(shù),持什么樣的態(tài)度?

需要去學習,但應(yīng)用到線上一定要慎重

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

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

(4)架構(gòu)師三個階段?

打基本功,業(yè)務(wù)沉淀,通用素質(zhì)進階

(5)好的架構(gòu)的標準?

能夠滿足業(yè)務(wù)的需求并且對它的擴展性多考慮一步

(6)技術(shù)氛圍怎么培養(yǎng)?

指導(dǎo)人機制,技術(shù)評審,技術(shù)分享


最后給有志于成為架構(gòu)師的同學一個建議:多學習、多交流、多溝通。



歡迎加入我的社群或關(guān)注公眾號“架構(gòu)師之路”進行討論。

架構(gòu)師之路二維碼

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號