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

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

提問(wèn):沈老師是從什么時(shí)候開(kāi)始寫文章的?

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


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

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

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


我一直有一個(gè)觀點(diǎn)“任何脫離業(yè)務(wù)的架構(gòu)都是耍流氓”??隙](méi)有一個(gè)一成不變的架構(gòu)方案,適用所有的業(yè)務(wù)場(chǎng)景。

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

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

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

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


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

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


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

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

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


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

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

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

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


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

第三個(gè)階段,π型人才的另外一條腿,即通用素質(zhì)這一塊,就是你的執(zhí)行力、責(zé)任心、推動(dòng)能力、溝通表達(dá)能力、項(xiàng)目管理能力,這些會(huì)讓別人覺(jué)得你是靠譜的。在技術(shù)能力大家都差不多的情況下,一個(gè)事情為什么交給你來(lái)做,大家有沒(méi)有想過(guò)?因?yàn)楣居X(jué)得你是靠譜的,靠譜這個(gè)評(píng)價(jià)很高。

提問(wèn):對(duì)一個(gè)架構(gòu)來(lái)說(shuō),因?yàn)闆](méi)有完美的架構(gòu),它一定會(huì)有一些缺陷,那好的架構(gòu)有一個(gè)什么樣的標(biāo)準(zhǔn)嗎?

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


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

提問(wèn):58的技術(shù)氛圍是怎么建立起來(lái)的?

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

第二個(gè)我覺(jué)得很重要的是技術(shù)評(píng)審,技術(shù)評(píng)審是一個(gè)很好的契機(jī)讓大家溝通交流和討論技術(shù)上的問(wèn)題。

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


提問(wèn):PHP是世界上最好的語(yǔ)言嗎?

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


總結(jié)

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

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

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

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

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

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

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

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

(5)好的架構(gòu)的標(biāo)準(zhǔn)?

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

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

指導(dǎo)人機(jī)制,技術(shù)評(píng)審,技術(shù)分享


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



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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)