架構(gòu)師到底該不該寫代碼
提問:沈老師是從什么時候開始寫文章的?
我從大學(xué)開始有寫文章的習(xí)慣,最開始主要記錄學(xué)習(xí)上和生活上的一些東西。畢業(yè)加入百度之后,在百度空間總結(jié)一些學(xué)習(xí)到的技術(shù)的東西,后來百度空間好像轉(zhuǎn)型做交友平臺了,于是搭建了自己的博客,在博客上寫了一兩年。最近當(dāng)然就是在公眾號“架構(gòu)師之路”上寫,梳理和總結(jié)自己日常工作中學(xué)習(xí)到的一些技術(shù),業(yè)務(wù)上和架構(gòu)上遇到的一些問題,分享給大家。
提問:網(wǎng)上有個很有爭議的問題“架構(gòu)師需要寫代碼嗎?”,您對此怎么看?
我認(rèn)為架構(gòu)師應(yīng)該寫代碼。
首先,業(yè)務(wù)是肯定需要深入去了解的,我比較反對一個公司成立一個所謂的架構(gòu)師部門,擁有公司所有的架構(gòu)師資源。我的建議是每個業(yè)務(wù)線團(tuán)隊都需要有架構(gòu)師。架構(gòu)師一定要深入了解業(yè)務(wù)的特點(diǎn),針對業(yè)務(wù)的特點(diǎn)去設(shè)計系統(tǒng)架構(gòu)。
我一直有一個觀點(diǎn)“任何脫離業(yè)務(wù)的架構(gòu)都是耍流氓”??隙]有一個一成不變的架構(gòu)方案,適用所有的業(yè)務(wù)場景。
其次,是要貼近系統(tǒng),所以得看代碼,寫代碼。即使完全沒有時間去寫代碼的話,至少詳細(xì)設(shè)計的每一個細(xì)節(jié)架構(gòu)師都需要清楚,每一個流程、接口參數(shù)、數(shù)據(jù)庫設(shè)計都要非常清楚。詳細(xì)設(shè)計盡量詳細(xì)到組內(nèi)的任何一個工程師拿到詳細(xì)設(shè)計都可以去做實(shí)現(xiàn)。CodeReview也非常重要,保證代碼至少是有兩個人看過,而且它的實(shí)現(xiàn)邏輯和詳細(xì)設(shè)計是一致的。
我對架構(gòu)師的建議是:有時間的話,親自去寫核心代碼,如果沒有時間的話,要把關(guān)詳細(xì)設(shè)計并安排資深工程師去做CodeReview。
提問:當(dāng)前互聯(lián)網(wǎng)技術(shù)更新非???,您認(rèn)為架構(gòu)師對此應(yīng)該持什么態(tài)度?
首先對于新技術(shù),需要去關(guān)注,但我的觀點(diǎn)是“應(yīng)用到線上,一定要慎重”。去看、去學(xué)、去研究是一個技術(shù)人員必須做的,但是學(xué)習(xí)新技術(shù)與把它應(yīng)用到線上生產(chǎn)環(huán)境是兩回事。
我負(fù)責(zé)58到家的一些后端架構(gòu),實(shí)施一些通用的技術(shù)平臺,比如說線上的監(jiān)控、數(shù)據(jù)的統(tǒng)一收集等,如果技術(shù)體系統(tǒng)一,綜合成本會非常小。
再拿存儲來舉例,存儲的軟件和技術(shù)有很多,mysql,sql-server, mongodb等,統(tǒng)一用一個非常重要,一定不能是哪個團(tuán)隊想用什么就用什么。
我的建議是:對新技術(shù)我們一定要去學(xué)習(xí),但應(yīng)用到線上一定要慎重。
提問:大家覺得架構(gòu)師的知識寬度是很廣的,那會不會有什么都懂、什么都不精這樣一種現(xiàn)象存在?
首先什么都懂是絕對不可能的,什么都精也是絕對不可能的,但是架構(gòu)師也不能哪一塊都不精。雖然業(yè)務(wù)不一樣,但是架構(gòu)設(shè)計上肯定會有通用的地方。我原來做過幾百萬同時在線的即時通訊系統(tǒng),它肯定有架構(gòu)領(lǐng)域內(nèi)通用的東西,比如接入、數(shù)據(jù)、可用性、擴(kuò)展性、一致性等,所以這些經(jīng)驗對我后面做推薦系統(tǒng)的設(shè)計,支付系統(tǒng)的設(shè)計肯定會有幫助。
其實(shí)架構(gòu)師對于知識的寬度和深度都是有要求的,像現(xiàn)在網(wǎng)上有一種說法說架構(gòu)師的能力是π型人才,除了技術(shù)寬度,還要有兩條腿:一條是專業(yè)能力,還有一條是通用能力,比如表達(dá)、溝通、解決問題、管理、創(chuàng)新等。
提問:有很多立志于成為架構(gòu)師的人不知道如何開始?沈老師能不能給一些比較具體的建議?
我認(rèn)為架構(gòu)師之路分為三個階段:
***個階段是打基本功的階段。對應(yīng)我自己的話就是職業(yè)生涯的前三年,語言、數(shù)據(jù)結(jié)構(gòu)、算法、設(shè)計模式、研發(fā)工具、調(diào)試工具等,基本功沒打好,其他的一切都是空談。
第二個階段是業(yè)務(wù)的積累或叫技術(shù)深度的積累。對于我來說,則是業(yè)務(wù)深入,即前五年在即時通訊領(lǐng)域的打拼。業(yè)務(wù)的深度決定了進(jìn)入一家公司的時候,你的身價,一個公司要解決某個業(yè)務(wù)問題,就必須有針對性的招相關(guān)的人才,如果你可以解決這個業(yè)務(wù)領(lǐng)域內(nèi)的大部分問題,這就是你的核心競爭力。
第三個階段,π型人才的另外一條腿,即通用素質(zhì)這一塊,就是你的執(zhí)行力、責(zé)任心、推動能力、溝通表達(dá)能力、項目管理能力,這些會讓別人覺得你是靠譜的。在技術(shù)能力大家都差不多的情況下,一個事情為什么交給你來做,大家有沒有想過?因為公司覺得你是靠譜的,靠譜這個評價很高。
提問:對一個架構(gòu)來說,因為沒有***的架構(gòu),它一定會有一些缺陷,那好的架構(gòu)有一個什么樣的標(biāo)準(zhǔn)嗎?
架構(gòu)是為業(yè)務(wù)服務(wù)的,能夠滿足業(yè)務(wù)的需求并且對它的擴(kuò)展性多考慮一步,我覺得這樣的架構(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)人機(jī)制很重要,就是任何一個研發(fā)一定會有一個高職階的人帶,有任何技術(shù)上的問題一定是有人可以交流和解答的。
第二個我覺得很重要的是技術(shù)評審,技術(shù)評審是一個很好的契機(jī)讓大家溝通交流和討論技術(shù)上的問題。
第三個是分享機(jī)制,每個團(tuán)隊內(nèi)部定期組織技術(shù)分享,讓大家溝通交流。包括我也每周會花時間和團(tuán)隊的同學(xué)做一些技術(shù)的交流和溝通。
提問:PHP是世界上***的語言嗎?
技術(shù)的同學(xué)在討論的時候要避免討論兩個問題,一個是哪種語言是世界上***的語言,第二個要避免討論的是Vim好還是Emacs好。
總結(jié)
(1) 架構(gòu)師需要寫代碼嗎?
有時間的話,親自去寫核心代碼,如果沒有時間的話,要把關(guān)詳細(xì)設(shè)計并安排資深工程師去做CodeReview
(2)對于新技術(shù),持什么樣的態(tài)度?
需要去學(xué)習(xí),但應(yīng)用到線上一定要慎重
(3)對架構(gòu)師的能力要求?
π型人才,除了技術(shù)寬度,還要有兩條腿:一條是專業(yè)能力,還有一條是通用能力
(4)架構(gòu)師三個階段?
打基本功,業(yè)務(wù)沉淀,通用素質(zhì)進(jìn)階
(5)好的架構(gòu)的標(biāo)準(zhǔn)?
能夠滿足業(yè)務(wù)的需求并且對它的擴(kuò)展性多考慮一步
(6)技術(shù)氛圍怎么培養(yǎng)?
指導(dǎo)人機(jī)制,技術(shù)評審,技術(shù)分享
***給有志于成為架構(gòu)師的同學(xué)一個建議:多學(xué)習(xí)、多交流、多溝通。
【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】