成爲架構師

你們何時成爲架構師的?
相信要麼企業內部晉升、要麼跳槽新公司。
若是你已是架構師了,相信有過這樣的問題:
公司和招聘要求定義的職責到底該怎麼才能作好?
如何開始架構師的職業生涯?
如何平衡專業技術追求和企業賺錢第一位的追求?程序員

架構師要作什麼

對於合格架構師的職責以下:數據庫

  • 設計軟件系統架構;
  • 系統分解成爲多個可實現的模塊;
  • 兼顧大局、確保系統總體穩定有效;
  • 權衡質量屬性(非功能性需求);
  • 管控不可避免的技術債務;
  • 鍛鍊和提高整個團隊的架構設計能力。

簡而言之就是在統籌系統全局、規避系統風險、抽象等的知識下,作設計、分解系統,分配任務,保障系統順利開發和上線,並利用這些知識來提高團隊能力。架構

何爲軟件架構

軟件架構是關於如何組織軟件的一系統重大設計決策和意圖的集合,旨在實現指望的質量屬性和其餘目標。學習

以上的定義有點抽象,如下引用卡內基梅隆大學軟件工程研究院(SEI)的定義:
計算機系統的軟件架構是解釋系統所需的結構體的集合,其中包括:軟件元素、元素之間的相互關係,以及兩者各自的屬性。spa

該定義說明了組成軟件架構相當重要的要素:元素、關係及屬性。
即:元素(屬性) + 關係 (屬性)= 架構。簡單來講就是將多個有某些屬性的元素以有某些屬性的關係鏈接在一塊兒,就組成了架構。你能夠把元素和關係想象成建築工地的磚塊和水泥,磚塊和水泥有不少種類和屬性。元素是軟件的基本組成(類、包、層、數據庫表等),關係則描述了元素如何協做完成任務(調用、依賴、運行於等)。.net

然而,並不能簡單地認爲就是這些結構體組成了架構,而是說架構爲了解釋系統所需的結構體而整合在一塊兒來講明,由於架構還包含了設計的決策和意圖。就像JavaBean的命名規範,包含的意圖就是代碼的規範化、提高代碼的可維護性等。架構設計

總結下來,軟件架構應該是:
元素(屬性) + 關係 (屬性)+ 決策 + 意圖= 架構設計

成爲團隊架構師

大致來講,成爲架構師以前應該至少參與過三到五個系統的開發,並且承擔的技術職責應該不斷增長,但最重要的是要總結經驗造成全面的知識體系。blog

從程序員向架構師轉變,首先應該要記錄和總結你在開發過程當中學到的知識。針對每個項目,作如下幾點記錄和總結:開發

  • 記錄利益相關方和主要業務目標。
  • 記錄和總結項目的總體解決方案。
  • 記錄涉及的技術以及選用的緣由。
  • 記錄最大的風險和克服過程。
  • 分析項目存在的不足,總結改進的方法。

不管你但願內部晉升,仍是跳槽晉升,都要有耐心來提高專業水平。機會是留給有準備的人的。

記住,架構師不只僅是團隊中的角色,更是一種思惟方式。就算你是程序員,天天寫代碼也會作出不少設計決定的,這其中確定有些決定是具備架構意義的。不想作將軍的士兵都不會是好的士兵,因此不管你的頭銜是什麼,你都應該運用架構設計的思想作出恰當的決策,讓架構向着健全的方向發展,那你實際上就是架構師。

開發出色的軟件

開發軟件系統要儘可能規避風險,佛祖保佑永無bug那種,而架構是軟件成功的基礎。

優秀的軟件架構應該是這樣的:

  • 架構將問題分而治之。架構精確地解釋瞭如何將系統劃分爲獨立輕巧且易於處理的小模塊,同時還能保證整個系統協同工做,讓系統的總價值高於各模塊的價值之和,即1+1大於2。

  • 架構提供了協同工做的指導方針。軟件開發不僅僅是技術,也是以人爲本的藝術。軟件架構描述了整個系統如何組成和意圖。掌握了架構也就清楚了你們該怎麼分工合做進行軟件開發。

  • 架構爲複雜設計提供了知識。提供統一的詞彙、術語、概念等等知識,都爲溝通和理解帶來了極大的便利。知識是隨時間而積累和提高的,利用知識,重複的問題的發生就能避免。

  • 架構是最優決策的成果。架構不僅僅考慮功能的基本實現,還要考慮成本、約束、進度、風險、團隊的交付能力,以及最重要的質量屬性。權衡這些進行恰如其分的架構設計,纔是最優的決策。

  • 架構讓你避免犯重大錯誤。架構設計並不是萬能,但至少要能規避重大的、常見的風險。預防大於治療,所以架構是能夠幫助咱們去預防從此可能出現的風險和問題,而不是佛祖保佑就能夠的。

  • 架構讓系統更靈活。業務是不斷地隨時間而變化的,相應的系統也應該隨之變化,而不是推倒重來。所以架構須要爲軟件開發提供靈活應變的結構。

總結

頭銜和職稱並非架構設計的本質所在,必須專一於架構設計的核心職責,逐步學習和積累相應的架構設計知識,並運用這些知識去開發出色的軟件,這就真正成爲了架構師。

作好架構師是須要原則的,下篇文章將講解《架構設計思惟原則》。

相關文章
相關標籤/搜索