...

爲什麼(me)我認爲架構師需要堅持寫代碼?

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