相關(guān)閱讀:
鹿晗關(guān)曉彤公開戀情,是如何把微博服務(wù)器搞炸的? 附大型網(wǎng)站高可用架構(gòu)和解決方案
本文首發(fā)于infoQ:
http://www.infoq.com/cn/articles/the-well-rounded-architect
作為技術(shù)領(lǐng)導(dǎo)者
作為開發(fā)人員
聚焦系統(tǒng)
具備企業(yè)家思維
具備權(quán)衡策略思維與戰(zhàn)術(shù)思維
能夠進(jìn)行良好的溝通
作為技術(shù)領(lǐng)導(dǎo)者
一名好的軟件架構(gòu)師需要明白,作為領(lǐng)導(dǎo)者并不一定要告訴開發(fā)人員做什么。相反,好的架構(gòu)師就像一個(gè)導(dǎo)師,能夠帶領(lǐng)開發(fā)團(tuán)隊(duì)向同一個(gè)技術(shù)愿景前進(jìn)。好的架構(gòu)師會(huì)借助于講故事、影響力、引導(dǎo)沖突、構(gòu)建信任等領(lǐng)導(dǎo)技能,將他們的架構(gòu)愿景變成現(xiàn)實(shí)。一個(gè)好的領(lǐng)導(dǎo)者,同時(shí)也是一個(gè)好的架構(gòu)師。他/她會(huì)仔細(xì)聽取每個(gè)參與者的意見,通過與團(tuán)隊(duì)的反饋互動(dòng)調(diào)整他們的愿景。
一個(gè)架構(gòu)師同時(shí)又是一個(gè)好的開發(fā)人員。通常,做出一個(gè)良好的架構(gòu)選擇需要權(quán)衡理想的架構(gòu)狀態(tài)與軟件系統(tǒng)的當(dāng)前狀態(tài)。例如,如果一個(gè)問題更適合采用關(guān)系型數(shù)據(jù)庫來解決,那么將文檔數(shù)據(jù)庫引入到系統(tǒng)中的做法是毫無道理的。一個(gè)架構(gòu)師如果不考慮技術(shù)選型與問題域之間的匹配度,那么會(huì)很容易受到各種技術(shù)的誘惑——這也就是常見的“象牙塔式架構(gòu)師”行為模式。
緩解這種情況的最佳方式是讓架構(gòu)師多與開發(fā)人員待在一起,花一些時(shí)間在代碼上。了解系統(tǒng)的構(gòu)建方式及系統(tǒng)的約束,這將幫助架構(gòu)師在當(dāng)下環(huán)境做出正確的選擇。
經(jīng)驗(yàn)豐富的開發(fā)人員明白代碼只是軟件的一個(gè)部分。為了讓代碼可運(yùn)行,他們還需要了解代碼在生產(chǎn)環(huán)境中運(yùn)行良好所需的其他重要質(zhì)量屬性。他們需要考慮部署過程、自動(dòng)化測試、性能、安全和可支持性等方面。開發(fā)人員可能以臨時(shí)的方式來實(shí)現(xiàn)這些質(zhì)量屬性,而架構(gòu)師不僅需要專注于了解代碼,還要了解并滿足不同利益相關(guān)者(如支持、安全和運(yùn)營人員)的需求。一個(gè)好的架構(gòu)師需要專注于尋找那些能夠滿足不同利益相關(guān)者需求的解決方案,而不是選擇針對(duì)某一個(gè)參與者的偏好或風(fēng)格進(jìn)行優(yōu)化的工具或方法。
所有的技術(shù)選型都有相關(guān)的成本和收益,一個(gè)好的架構(gòu)師需要從這兩個(gè)角度考慮新的技術(shù)選型。成功的企業(yè)家愿意承擔(dān)風(fēng)險(xiǎn),不過也會(huì)尋求快速學(xué)習(xí)和快速失敗的方法。架構(gòu)師也可以用類似的方式做出技術(shù)選型,收集真實(shí)世界中有關(guān)短期和長期成本的信息,以及他們可能意識(shí)到的好處。
這方面一個(gè)很好的例子是,架構(gòu)師避免承諾立即使用一個(gè)在閱讀新文章時(shí)看到的工具或某一會(huì)議上聽過的工具。相反,他們?cè)噲D通過架構(gòu)調(diào)研來了解工具在其環(huán)境中的相關(guān)性,以收集更多信息。他們對(duì)于工具的選擇不是基于銷售量,而是考慮他們需要什么、以及這個(gè)工具所提供的價(jià)值。他們還會(huì)尋找這些工具背后的隱性成本,例如工具的支持情況(如文檔化程度、社區(qū)使用情況),工具可能帶來的約束或長期來看可能引入的額外風(fēng)險(xiǎn)。
許多團(tuán)隊(duì)由一些獨(dú)立的開發(fā)人員一起構(gòu)建軟件,而每個(gè)人都傾向于選擇自己最舒適或最有經(jīng)驗(yàn)的工具和技術(shù)。好的架構(gòu)師會(huì)持續(xù)關(guān)注可能有用的新技術(shù)、工具或方法,但不一定立即采用它們。技術(shù)采用往往需要長期的考量。架構(gòu)師將在團(tuán)隊(duì)和組織層面尋求敏捷度(允許團(tuán)隊(duì)快速采取行動(dòng))和對(duì)齊(保持足夠的一致性)之間的良好平衡。建立自己的技術(shù)雷達(dá)這樣的練習(xí)是用戰(zhàn)略思維探索技術(shù)的一個(gè)有用工具。
架構(gòu)師需要知道,有效溝通是建立信任和影響團(tuán)隊(duì)以外成員的關(guān)鍵技能。他們知道不同群體使用不同的詞匯,而使用技術(shù)術(shù)語和描述與業(yè)務(wù)人員溝通將會(huì)變得比較困難。與其談?wù)撃J?、工具和編程概念,架?gòu)師需要使用聽眾熟悉的詞匯與之交流,諸如風(fēng)險(xiǎn)回報(bào)、成本和收益等。這比單純使用技術(shù)詞匯進(jìn)行溝通來得更好。架構(gòu)師還需要認(rèn)識(shí)到團(tuán)隊(duì)內(nèi)部溝通與外部溝通同樣重要,可以使用圖表和小組討論的方式來建立和完善技術(shù)愿景,并進(jìn)行書面記錄(如架構(gòu)決策日志或Wiki等),從而為將來留下可追溯的歷史。
做一個(gè)技術(shù)全面的架構(gòu)師并不容易,因?yàn)橛泻芏喾矫嫘枰覀冴P(guān)注,而每個(gè)方面都有很多作為開發(fā)人員經(jīng)常不會(huì)專注并練習(xí)的技能。其實(shí)最重要的不一定是一個(gè)架構(gòu)師的能力,而是他們?cè)诿總€(gè)不同的領(lǐng)域都有足夠的專業(yè)知識(shí)。僅僅掌握上述某個(gè)領(lǐng)域的架構(gòu)師不如在六個(gè)方面都有良好專業(yè)知識(shí)的架構(gòu)師有價(jià)值。
Pat Kua/文 禚嫻靜/
看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人
聯(lián)系客服