- 程序員必讀之軟件架構
- (英)Simon Brown
- 2274字
- 2020-05-06 16:48:11
第9章 軟件架構師應該編碼嗎
既然我創建了一個叫作編碼架構的網站,我猜這個問題的答案就不出人意料了。在我理想的世界觀中,軟件架構師應該編碼。曾經有人告訴我,優秀架構師的重要特征是抽象思維能力,也可以理解成不把所有時間都耗在細節里的能力。這沒錯,但你畫的那些框框線線終歸要形成代碼。
編寫代碼
我的建議是讓編碼成為你作為軟件架構師角色的一部分,只要把自己當作軟件開發團隊的一份子就行了。換句話說,你有一頂軟件架構的帽子和一頂編寫代碼的帽子。你不見得要成為團隊里寫代碼最厲害的,但參與到實踐和交付流程的好處非常大。畢竟,“知”和“行”還是不同的。
團隊欣聞你要貢獻代碼,通常會受到鼓勵,確保你的設計能落到實處。如果沒有,那么一旦你站在開發者的角度明白了這個問題,很快就能體會到那種痛苦。
創建能實際實現的軟件架構,這樣做的好處顯而易見,除此之外,貢獻代碼還能幫助你和團隊建立起融洽的關系,有助于縮短存在于很多軟件團隊的架構師和開發者之間的距離。引用瑞秋·戴維斯(Rachel Davies)和麗茲·賽德利(Liz Sedley)在《敏捷教練:如何打造優秀的敏捷團隊》一書中說的話:
如果你了解如何編程,往往會忍不住對開發者該如何編寫代碼提出建議。小心,因為你可能在浪費時間:如果你沒有參與項目的編程,開發者多半會無視你的編碼經驗。他們還會認為你越權,影響了他們的工作,所以盡量別在這方面指指點點。
構建原型、框架和基礎
當你被看作開發團隊的一員時,軟件架構的角色可能會輕松得多,然而有時這卻不太可能。晉升或被指定為軟件架構師帶來的一個問題在于,你可能會發現自己不能像期望的那樣寫很多代碼。這可能因為時間壓力,因為你有很多“架構”工作要做,或者只是公司政策不允許你寫代碼,我見過這樣的情況。如果是這樣的話,對軟件系統中有疑問的概念構建原型和證明是一個很好的參與方式。這讓你可以和團隊建立起融洽的關系,也是評估你的架構是否管用的好辦法。
作為替代,你可以幫助建立團隊可用的框架和基礎。試著抵擋住構建好這些東西再交給團隊的誘惑,因為這樣可能會適得其反。軟件開發非常容易趕潮流,所以小心別構建出一個東西卻被團隊當作毫無價值的過時破爛!
進行代碼評審
顯然沒有什么能代替給真正的項目編碼,我也不推薦把代碼評審作為一個長期的戰略,但參與(或做)代碼評審至少能讓你了解新技術及其應用。對于你沒有經驗的技術,挑剔或參與討論可能會損害你的名聲。我記得自己曾不得不向一個從未寫過一行Java代碼的架構師解釋自己的Java代碼。那很無聊。
實驗并與時俱進
你需要保持一定水平的技術知識,才能稱職地用它來進行方案設計。但是,如果無法對交付做出貢獻,作為架構師的你要如何維持編碼技能?
在工作之外你往往有更多的空間來維持編碼技能,從貢獻開源項目,到不斷嘗試你感興趣的最新語言、框架、API。書、博客、播客、會議和聚會都能達到這個目的。但有時候你必須跳出代碼。這些事我當然都做過,乘坐公共交通工具長途通勤的一個好處是你有時間去玩技術。當然了,前提是你經過一天的辛勤工作還不犯困的話!
軟件架構師和雇主之間的矛盾
我很幸運,我的軟件架構角色中有相當部分的實踐元素,大多數我參與的項目都有我的代碼。我堅定地認為,機會是自己創造的。我仍然動手實踐的原因可以這樣表述:它是這個角色的重要組成部分。對我來說這很簡單。設計軟件時,編碼是必不可少的,因為我需要熟悉最新的技術,搞清楚我設計的哪些東西能工作。另外,我得承認編碼很有趣。
可惜,許多組織似乎認為編碼是軟件開發過程中最容易的部分,因此他們通常讓另一個國家的其他人來做這件事,以為這樣能省錢。好的代碼在這樣的組織看來也是“低價值”的。組織中軟件架構師的資歷和編碼工作的價值就脫節了,矛盾由此產生。
以我的經驗,小組織不會發生這種事,因為需要人手時每個人都要參與進來。是的,那些大型組織里的矛盾最嚴重。我曾在一個中等規模的咨詢公司工作過一段時間,我的職位等級把我歸入管理團隊,但我仍會寫代碼。在某些方面,頂著“行政經理”的頭銜,又能每天寫代碼,真是了不起的成績!但有時這也讓人很不舒服,因為其他經理經常會試圖在其組織架構圖里加上我的名字。
陷入這種情況是很麻煩的,只有你自己能擺脫它。無論你是在一個正在發生這種事的組織,還是想要離開是非之地,都要搞清楚你對軟件架構師這個角色的看法,并準備好堅守自己的立場。
你不必放棄編碼
說到這一點,我會經常被問及“如果軟件架構師打算在公司的職業道路上有所作為,是否還能繼續編碼”,也就不奇怪了。這真是羞恥,尤其是如果這些人真的很喜歡他們所做的技術。
對此我的態度絕對是肯定的,你可以繼續寫代碼。對我來說,聽到人們說“好吧,為了成為架構師或在職業道路上更進一步,我明白自己不得不放棄編碼了”,是相當令人沮喪的。有很多組織是這樣的,肯定有很多人被告知組織中的高級職位不需要寫代碼。
軟件架構師在滿足非功能性需求、進行技術質量保證、確保軟件符合其用途等方面,要承擔很大的責任。這是一個領導的角色,編碼(以身作則)是保證項目成功最好的方式之一。此外,如果軟件架構師不保持技術能力,誰來培養更多未來的軟件架構師?
不要把全部時間都用于編碼
重申一下我的建議,軟件架構師不必放棄編碼。無論你怎么做,在不斷變化的世界中,編碼是一個保持技術能力的好辦法。很多人認為軟件架構是一種“后技術”的職業選擇,但除了豐富的經驗和更寬的知識面,它還需深厚的技術能力,需要能夠回答設計是否真的管用這類問題的T形人才。把這歸為“實現細節”是不可接受的。只是別把時間都花在編碼上。如果你花全部時間寫代碼,那軟件架構角色的其他部分由誰來扮演?