- 程序員必讀之軟件架構
- (英)Simon Brown
- 1195字
- 2020-05-06 16:48:13
第19章 軟件架構咨詢師
我的職業生涯大部分都是在IT咨詢公司工作,在那里我要么在外包合同下為客戶構建軟件系統,要么是客戶-供應商混合團隊的一份子(通常被稱為“勞務派遣”)。在咨詢的語境中擔任軟件架構的角色,基本上和在其他語境中是一樣的,然而也有一些潛在的問題需要注意。
領域知識
對業務領域的了解必不可少。如果在金融行業工作,對行業內跟你相關的部分(比如,基金管理、投資銀行、零售銀行等)是如何運作的,你應該有所了解。大部分業務領域都比它們應有的樣子更復雜,即使看似簡單的領域也會讓你吃驚。我記得第一次看到渡輪和酒店領域,就驚訝地發現并不只是預訂渡輪座位或酒店房間那么簡單。對業務領域的了解可以幫助你更好地理解目標和建立成功的軟件產品。
這提出了一個有趣的問題。對業務領域的深厚知識,只來自于在這個領域內長時間的工作,但大多數咨詢師跟不同的客戶、團隊和業務領域打交道是很常見的。因此,期望咨詢師們具備深厚的領域知識算公平嗎?
我見過一些方法。首先就是把自己的咨詢工作限制在單一的業務領域,這樣就能獲得這個業務領域深入的工作知識。舉個例子,我工作過的許多IT咨詢機構都專注于投資銀行業,它們的咨詢師在各個投資銀行間游走。這肯定是確保咨詢師了解業務領域的一種有效方式,但我不是特別喜歡。向我過去合作過的一些咨詢師提供投資銀行的外部咨詢工作時,他們實際上很生氣。在跟其他咨詢師做比較時,這些人通常會認為他們深厚的業務領域知識是關鍵差異或者說獨特賣點。
看看我的書架就會發現,我對技術的興趣遠遠超過任何業務領域。如果我想在一家銀行工作,我會為銀行工作,而非咨詢機構。因此,我很高興能定期更換業務領域,這提供了一定程度的變化,很少能在單個領域中工作獲得。我也發現觀察其他行業如何解決相似問題很有意思,這本身也帶來了很多思想碰撞的機會。當然,缺點就是我對任何特定領域的知識都不如在那個業務領域中全職工作的人。
為了防止這一問題,我相信,有一種技能可以讓我們能夠快速精通一個新的業務領域。這正是我的方法。如果以咨詢的身份從事軟件架構,你需要敏銳的分析能力來理解業務領域的關鍵部分,而不陷入分析癱瘓的惡性循環。
權威
軟件架構角色需要引入多少控制,取決于和你一起工作的軟件開發團隊的類型。然而團隊通常會提出另一些挑戰,特別是如果你以軟件架構咨詢師的身份和客戶的內部開發者團隊一起工作。
如果你負責一個軟件系統的軟件架構和技術交付,就必須有決策權。如果有責任卻沒有權力,并因此不斷為決策尋求許可,那就像是在一條崎嶇不平的道路上行駛。
軟件架構的角色意味著技術領導力,也就是你要讓整個團隊朝著同一方向前進。如果你不是一隊軟件開發者的直接上司,口述指導不太可能很有效。如果你是客戶團隊的補充,這種情況經常發生。這就是施展軟技能的地方,特別是建設關系、建立信任和激勵團隊相關的軟技能。我發現要做一個寫代碼的實踐派架構師,取得成果也要走很長的路。