通向架構師之路

infoq發表於2013-09-30

  對於不少開發者來說,成為架構師是職業生涯的目標之一,但是如何成為一名架構師卻沒有統一的教科書,Verizon公司架構師Bett Correa在Software期刊中分享了自己的成長經歷,主要的經驗包括均衡發展技術知識、領域知識和溝通能力,通過架構來學習架構等。

  Bett認為架構師必須瞭解當前的系統如何滿足客戶的需求、實際地編寫程式碼、與客戶坐下來觀察他們的工作,並聽取他們對軟體的反饋意見。架構師必須搭建團隊之間的橋樑,理解每一個團隊自身的侷限性,並考慮每一方的利益。當業務部門提交了一個新需求,架構師必須據此做好滿足需求的軟體設計,並把這個設計“賣給”各個團隊,讓開發人員和測試人員瞭解新系統的工作原理。

  另一個重要的經驗是平衡,技術知識、領域知識和溝通能力之間的均衡發展。Bett最初以技術人員出身,學習Perl和JavaScript等,當時並沒有考慮軟體設計方面的問題,基本的想法就是“儘可能快速地編碼,快速完成任務”,但事實上,通常這只是個美好的願望。在進入一家新公司之後,她開始瞭解該領域的知識和溝通技巧。她參與了Toastmasters活動,提高了當眾演講和主持會議的自信。然後,開始瞭解系統需求,這離軟體設計又近了一步,她把其他人對系統的需求分析記錄下來,持續了幾個月的時間。

  她的工作導師要求她瞭解軟體系統和工作原理,並與各個團隊的領導打交道。一段時間之後,她成為了該系統的專家,許多人開始找其諮詢。同時,與業務部門接觸,瞭解市場行情,學習公司的發展史,閱讀公司網站上的白皮書和線上課程。

  這些付出都是值得的,因為Bett可以輕鬆地與開發人員和業務客戶討論系統的細節問題。一天,導師讓Bett設計軟體系統的一個小模組,她需要決定許多方面的問題。Bett發現設計不是一個簡單的01遊戲——設計都是權衡和妥協的結果,比如增強安全性可能會降低響應速度。某個決定在一些情況下生效,在其他情況可能無效,Bett不得不找出失效的各種情況,並評估其成本。

  在擔任架構師的第一年,Bett服務於25個不同的小專案,從而全面的瞭解軟體系統的各個部分。她能夠將不同背景的人組織到一起拿出解決方案。慢慢地,Bett發現她的設計可以讓各個利益相關者接受。

  Bett建議,如果你想培訓架構師,那麼:

  • 發展團隊中的好苗子
  • 給他們安排一些設計工作
  • 鼓勵互相交流
  • 讓整個團隊都考慮設計問題
  • 鼓勵設計方面的培訓

  如果你想成為架構師,那麼:

  • 找一位資深的架構師做導師
  • 尋找可以設計的專案,甚至可以是自己的專案
  • 參加正式培訓並多交流
  • Bett特別強調,只有親自參與設計,才會真正瞭解應該如何設計。起初有很多想法,但是開始設計了,才發現很多都是不切實際的。通過課程或者書籍來培訓自己是必要的一步。

  說到架構師的溝通和協商能力,Dave Hendrichsen在“軟體架構師的12項修煉”中做了充分的剖析,建議如下。

  多說“是”,少說“不是”

  架構師經常會被諮詢問到某個專案的可行性,並提供從戰略到戰術的多個替代方案,附帶若干成本選項,以使商務夥伴能根據特定專案的投資進行判斷。架構師與專案評估團隊的角色不是決定要構建什麼,而是決定怎樣構建。我們試圖說出的答案是“對,我們能構建這個專案,這些是相關的資訊”。產生的資訊需要包括諸如所考慮的各種替代方案、專案風險(以及可能的規避策略)、基於的假設條件,以及需要指出的突出問題。我們不是在尋找這樣的答案:“不行,這個專案不可行,但我們能構建另一個專案(通過消除原困難專案中的難題,而代之以我們想構建的那些特性)。”

  但是,如果一個專案或任務不可行,我們需要立即巧妙地指出評估結果、解釋原因,並提供替代方案。這通常歸結於法律法規、行規等原因,以致“不”是正確的回答。當然了,還有其他一些例外情況:提出需求的人是想逃避工作,需求違反了公司的政策,或者你手頭有優先順序更高的工作,無法讓你有足夠時間來對需求做出滿意的答覆。這些情況下,你要清楚地告訴人家你說“不”的原因。

  瞭解別人和自己的溝通需求

  在架構師的世界中,你需要例行地與許多人交流。你可能在上一次會議上與有些人談過話,也可能沒有和這些人談話。挑戰就是快速瞭解人們在說什麼,他們怎麼說這些話,來“讀懂”本次會議。

  觀察關鍵的時刻,即做出決定的時刻是一個要點,以此識別人們提出的問題和關心的地方,來加強核心概念,幫助你關注會議的方向以及把會議引向一個成功的結論。為了認識這些關鍵時刻,我們需要吸收所有資訊,包括提供給我們的語言或非語言資訊。

  觀察別人的舉止能夠告訴我們如何與每個人最好地溝通。由於每個人都不相同,並且對溝通也有不同的需求,架構師必須讓傳遞資訊的方式適應這些需求,以確保有效溝通。
關鍵點就是我們要基於每個聽眾成員的溝通需求來匹配交流風格。有些人的反應是能夠看出來的,他們的偏好能夠用諸如“我明白你的意思”之類的話辨別。另外有些人需要傾聽,並吸納語言細節,他們的偏好能夠用諸如“我在聽你說”之類的話辨別。還有一些人在交談中比較情緒化,他們的偏好能夠用諸如“我覺得怎樣怎樣”之類的話辨別。

相關文章