天天看點

架構師心目中的關鍵詞

前些日子,在閑聊中,一位媒體朋友問我:軟體架構師(Software Architect)究竟與普通程式員有什麼差別,軟體架構師平時都在想些什麼?這一問,倒提醒了我。想來自己從事軟體架構設計這個行當也有十多年了,現在确實有必要以文字的形式,把自己這些年來對于軟體架構設計這項充滿魅力、極其有趣的工作的所思所想、經驗所得,好好整理一下。

軟體架構設計是一門建立在科學、工程基礎之上的藝術。根據我本人的體會,以下術語和詞彙大概就是那些讓一位軟體架構師在其職業生涯中時刻萦繞于心、揮之不去的核心關鍵詞:

權衡與平衡(Balancing the Tradeoffs)

軟體架構師必須學會的第一件事情是:懂得如何進行權衡,在各個互相沖突的設計要素、限制和限制條件之間巧妙地取得平衡。

與人類所從事的其他工程活動一樣,軟體開發、軟體工程本質上也是一種平衡的藝術。如何才能把握軟體開發藝術的平衡之道?在現實的軟體開發中,一名架構師必須首先掌握科學的、工程的思維方式和方法,也就是客觀的、系統的、符合邏輯的思維。錯亂的邏輯必然導緻錯誤的結論,基于錯亂邏輯設計出來的軟體也必然會破壞軟體架構内在的和諧之美,因而是醜陋的。

抽象、模組化與設計(Design with Abstraction and Modeling)

一位軟體架構師必須主動地選擇工作在合适的抽象層次上。在必要的情況下,他/她必須能夠脫離具象的程式設計語言(如 Java、C++、VB.Net、JavaScript、Ruby 等等)進行思考,能夠透過現象看本質,準确抓住事物的本質。

如果一位“架構師”隻會工作在代碼實作(Implementation)層,遇到任何問題就忍不住要寫上幾行代碼、砌上幾塊磚頭,擺擺看,否則就無法順利思考,卻不知道、不會利用圖形、符号、公式等抽象的、靈活的手段來描述自己的思考和設計,那麼這位“架構師”的能力是有嚴重缺陷的。

預見性和前瞻性(Prediction and Anticipation)

一位軟體架構師必須比團隊中的普通程式員、初級程式員看的更遠。

如果一位開發“能手”和“高手”,經驗豐富卻目光短淺,隻知道解決眼前的現實問題,不知道在有限的可用時間内往前多看幾步,考慮一下面向未來問題和潛在風險的應對之道,他是不足以享有“架構師”頭銜的。

簡化之美(The Beauty of Simplification)

簡化是這個世界上任何科學、工程技術 —— 邏輯藝術 —— 的本質要求。

E=mc^2 告訴我們,我們人類身處的這個宇宙存在着永恒的簡單真理。作為被科學家和工程師利用電子技術構造出來的虛拟世界 —— 軟體,這個空間、小宇宙自然也不例外。在軟體工程界,我們笃信:隻有簡單而有效,才是真正的軟體之美。

為什麼我們要白白耗費資源,開發出備援的、重複的、七繞八拐的低效程式?軟體架構師必須帶領他/她的程式員團隊,始終堅持對軟體架構藝術之美 —— 簡化的追求。

模式與重用(Patterns and Reuse)

軟體架構師必然首先是一名聰明的程式員,他/她知道何時、何處省力,如何省力:運用巧力來輕松完成原本繁重的開發工作。

節省工作量的最好一個辦法就是重用。如果軟體開發的 10 倍率銀彈存在的話(張恂一直認為談論布氏銀彈的存在與否并無多大的實際意義),軟體重用無疑是一顆最有效的銀彈。重用自己的或别人的代碼、程式、構件、子產品、子系統乃至整個系統,可以讓過去需要 10 天完成的工作在 1 天之内完成,讓過去需要 1 年完成的工作在 1 個月之内完成,這樣的例子遍地都是,有什麼辦不到的呢?

軟體模式的應用本質上是對軟體設計思想、設計知識的重用。毋庸置疑,世界上任何一位軟體架構師,都知道而且應當知道軟體設計模式存在的寶貴價值和重要意義。

品質、效率與資源(Quality, Efficiency and Resources)

如何在有限的,甚至往往是“窘迫”的時間進度、經費和人力資源等重重壓力之下,帶領團隊開發出真正符合客戶需要的、高品質的,同時又具有長久生命力的軟體産品或系統,能夠不斷為企業和客戶創造價值,這是所有軟體架構師必須擔當的一項首要職責、艱巨任務。當然,這又是一個相當複雜的、涉及到科學、工程、藝術、社會人際關系和公司政治等多方面因素的權衡問題。

靈活、疊代與演進(Agile Iterative Evolution)

高品質的、好的軟體架構從來都不是一蹴而就的。把一個項目切分成 5 個連續階段,通過需求階段完成需求分析,設計階段完成概要設計和詳細設計,實作階段完成程式編碼,測試階段完成系統測試,部署階段完成安裝部署,這種傳統的、錯誤的線性開發思維違背了軟體開發的複雜現實,成為導緻國内外大量軟體開發項目失敗的主要殺手。

我們應該避免采用這種高風險的傳統瀑布式開發流程,轉為采用疊代遞增、演進的方式來設計和發展軟體架構,這是過去 30 多年來世界軟體工程界以及軟體架構師們學到的最寶貴經驗之一。

開發出靈活、靈活、柔性,易于适應變化,能夠不斷地滿足客戶需求,不斷地為企業創造利潤,以及便于維護、擴充和更新的軟體架構,需要優良、合理、高效的軟體開發工藝流程的支撐。實作這一目标并非超乎現實的幻想,過去 20 年來世界上的上司企業和軟體開發機構已經為我們提供了大量系統、架構、架構和平台的成功開發案例。

軟體架構師應該與項目經理、團隊成員們一道為自己的團隊挑選、定制一種适用的軟體開發過程。靈活疊代開發要求軟體架構師通過軟體開發的疊代、演進周期,把握好前饋與回報、前構與重構的平衡,不斷地利用編碼、內建、運作、測試以及與使用者、客戶的溝通等活動來驗證軟體架構的設計思路、解決方案的正确性和有效性,進而最大限度地降低架構開發風險。

前構與重構(Prefactoring over Refactoring)

繼續閱讀