為什么我認(rèn)為架構(gòu)師需要堅(jiān)持寫代碼?
2021-05-25
最近在高可用架構(gòu)群、EGO 會員群等多個場合,大家都在討論架構(gòu)師的能力的問題,架構(gòu)師應(yīng)該具備哪些能力?在面試時如何合適的評估一個架構(gòu)師的能力?
架構(gòu)師的兩種類型
第一種是可以將業(yè)務(wù)實(shí)現(xiàn)的人,他可能需要整合公司不同部門的資源、解決不同技術(shù)模塊整合、解決不同版本之間的兼容性、解決各個模塊的技術(shù)選型等,解決任務(wù)的分解及分配,解決進(jìn)度上出現(xiàn)的問題。當(dāng)上面所有這些問題都完成后,架構(gòu)師順利幫助公司完成了項(xiàng)目目標(biāo)。
第二種是在第一種的基礎(chǔ)上,利用技術(shù)的力量,改進(jìn)了一個領(lǐng)域的效率或提升了生產(chǎn)力。比如一個在現(xiàn)有技術(shù)基礎(chǔ)上提升 20% 效率的視頻解碼模塊、或者類似美劇硅谷中的,研發(fā)出一套壓縮比很大且保持高質(zhì)量信息的壓縮算法。目前的大部分互聯(lián)網(wǎng)創(chuàng)新在某種程度也是利用技術(shù)變革的力量,比如電子商務(wù)及在線教育等行業(yè)。
如果從輸出結(jié)果的角度來看,架構(gòu)師有兩種類型,具備技術(shù)杠桿能力的和不具備杠桿能力的架構(gòu)師。并不否認(rèn)第一種架構(gòu)師在戰(zhàn)略執(zhí)行層面的作用,他們是各個軟件開發(fā)團(tuán)隊(duì)的中堅(jiān)力量。但從影響力的角度,其歸根結(jié)底是在一個畫好的表格里面填東西,他從事領(lǐng)域的最終的格局是由市場、運(yùn)營或者產(chǎn)品主導(dǎo)。而一種是真正具備杠桿能力的工程師或者架構(gòu)師,他可以利用技術(shù)的力量,在填寫一個格子的同時,利用技術(shù)的力量,將格子的功效放大,影響十倍或者百倍以上的結(jié)果。比如在音樂播放軟件中,推薦算法的應(yīng)用徹底改變了用戶播放音樂的習(xí)慣與體驗(yàn)。
很多人所說的架構(gòu)師的設(shè)計(jì)能力,大多也可以歸納到第一種情況。很多所謂的架構(gòu)設(shè)計(jì),就是拿著多年一成不變的分層模式往業(yè)務(wù)上套,把業(yè)務(wù)按照功能規(guī)劃成軟件模塊填寫到架構(gòu)圖,并且把上下游的調(diào)用串起來。這種設(shè)計(jì)的大多時候是起給客戶或者領(lǐng)導(dǎo)展示的作用。程序員代碼的整體構(gòu)思,大多可以通過白板上或者白紙以及程序員直接的溝通很敏捷的完成,大多不需要一個專職畫圖紙的架構(gòu)師來指導(dǎo)。
第一種架構(gòu)師是可以不寫代碼的,因?yàn)樗蟛糠炙龅氖虑槭歉舜蚪坏?、分配任?wù)以及解決開發(fā)過程中各種進(jìn)度問題。因此很多技術(shù)負(fù)責(zé)人面試時候看重協(xié)調(diào)能力等非真正的技術(shù)能力。而那些服務(wù)甲方項(xiàng)目型的公司,更是特別看重人際關(guān)系、溝通能力、展示能力等跟客戶打交道的能力。另外一些軟件版本歷史包袱重的企業(yè),則看重架構(gòu)師的打補(bǔ)丁能力。由于功能型及偏執(zhí)型型的團(tuán)隊(duì)偏多,因此在很大程度上造成了架構(gòu)師的能力標(biāo)準(zhǔn)的偏離,在一些討論的場合,過份看重項(xiàng)目執(zhí)行中的個別技巧型能力,比如項(xiàng)目管理、人際關(guān)系等能力常常還占據(jù)了主流的聲音。
但這類架構(gòu)師只能勉強(qiáng)稱為“技術(shù)架構(gòu)師”,因?yàn)榇蟛糠謺r候,他做的事情是填格子,而無法做到利用技術(shù)的力量,把一個格子放大到 10 個格子及更多。在另外一方面,這些不寫代碼進(jìn)而慢慢喪失代碼能力的“架構(gòu)師”,也不太可能利用技術(shù)的力量去做發(fā)揮技術(shù)杠桿的事情。當(dāng)然技術(shù)架構(gòu)師也可以驅(qū)動工程師去完成一個技術(shù)型的大項(xiàng)目,大型的項(xiàng)目也需要合理的組織,但并不意味不寫代碼的人就比寫代碼的人做得更好。而那些對技術(shù)體系有深入了解及一線體驗(yàn)的架構(gòu)師,比那些只跟人員管理打交道的人,更有機(jī)會利用技術(shù)的力量促進(jìn)變革。
因此如果希望一個架構(gòu)師有令人滿意的技術(shù)驅(qū)動能力,他應(yīng)該具備代碼能力,對技術(shù)有直接的了解及體驗(yàn),進(jìn)而能夠精通如何利用技術(shù)來改變未來生產(chǎn)力。
如何面試及評估架構(gòu)師的能力
Tim 的面試方法是,候選人需要第一步通過電腦上完成一個小型的代碼實(shí)現(xiàn),在代碼基本符合要求的情況下,才會獲得所有面試官可以接受的一個能力起點(diǎn)。如果不做這一點(diǎn),面試時候,面試官需要費(fèi)盡心思去問對方項(xiàng)目上更多細(xì)節(jié)問題,才可能了解一個候選人真正的開發(fā)能力。而通過考試,則可以在驗(yàn)證候選人具備一定開發(fā)能力的基礎(chǔ)上,愉快的聊一些其他輕松的話題。
在 EGO 會員討論時候,一部分創(chuàng)業(yè)公司技術(shù)負(fù)責(zé)人擔(dān)心一些資深的候選人不能接受這種方式,國內(nèi)這種現(xiàn)象確實(shí)也不少見。但換個角度來想,創(chuàng)業(yè)公司大多還在起跑階段,需要的肯定是從事大量一線開發(fā)的人。如果面試通不過機(jī)考編程,或者是不愿意做題,這種候選人也未必能完全適合創(chuàng)業(yè)公司需要。而那些不愿意做一線事情的架構(gòu)師即使進(jìn)來,他大部分時候在分派任務(wù)或者強(qiáng)化流程,可能讓公司的技術(shù)層級及開發(fā)環(huán)節(jié)變多、管理成本變高進(jìn)而導(dǎo)致整體研發(fā)效率下降。
面試時候大家也認(rèn)可的一些驗(yàn)證架構(gòu)師能力的方法,比如把當(dāng)前技術(shù)開發(fā)中遇到的一些典型性技術(shù)場景讓對方來提出實(shí)現(xiàn)方案,以便評估對方是否具備應(yīng)對類似場景的能力。在入職之后,可以讓新的架構(gòu)師獨(dú)立承擔(dān)及完成一些任務(wù),以便考察對方是否具備獨(dú)立的架構(gòu)實(shí)現(xiàn)能力。