你是一名軟體架構師嗎?

2022-01-04 ImportNew

(給ImportNew加星標,提高Java技能)

轉自:arthurchiao,

連結:arthurchiao.art/blog/are-you-a-software-architect-zh/

譯者序

本文翻譯自 2019 年的一篇英文博客 "Are You A Software Architect?" 由於譯者水平有限,本文不免存在遺漏或錯誤之處。如有疑問,請查閱原文。以下是譯文。

軟體開發和軟體架構之間有一條微妙的線。有人會說,這條線根本不存在,架構只是開發者設計過程的簡單延伸。另外一部分人則說,這是一條巨大的鴻溝,只有少數出類拔萃的開發者才能跨越,這些開發者都認為你必須不斷地向上抽象,避免陷入令人生厭的實現細節的泥沼。如果以務實的眼光看,那這兩者之間必定存在某個平衡點,但這接著也提出了問題:如何從開發者變成架構師

將軟體架構從軟體設計和開發中區分開來的關鍵因素包括:規模的上升、抽象層次的上升, 以及做出正確的設計決策帶來的影響的上升等等。軟體架構就在於能有一個全局視角、能具備更大的視野,理解軟體系統作為一個整體是如何工作的。這些因素對區分軟體開發和軟體架構也許有幫助,但還是無法解釋一些人如何從開發轉到了架構。進一步地,對於如何識別哪些人將會成為出色的架構師,作為 HR 如何發現這些人,以及自己是不是一名架構師,上述定義也無能為力。

經驗

儘管經驗是一個很好的衡量指標,但你應該看得更深

沒有人是在一夜之間或一次升職就成為軟體架構師的。架構師是一個角色,而非級別。這是一個演進的過程,在這個過程中你會不斷獲得承擔架構師角色所需的經驗與自信。

架構師身上有許多不同的品質,而他們過去的經驗通常是承擔這個角色所需能力的一種很好的度量。架構師角色包括很多方面,因此需要在更深的層次地去理解架構師在不同方面展現出來的參與度、影響力、領導力和責任。

寬泛地說,大部分項目的軟體架構過程可以分成兩個階段:定義階段交付階段

軟體架構的定義

架構的定義過程似乎相當直接:確定需求,然後設計一個滿足這些需求的系統。但實際 上並沒有這麼簡單,由於參與程度和對待自己角色的認真程度各有不同,軟體架構的角色也有很大的區別。如下圖所示,角色的架構定義部分可以進一步分解為幾個子部分。

1. 非功能性需求的管理

軟體項目經常將注意力放在用戶的功能特性上,而很少問用戶有什麼非功能需求或系統性能要求。有時需求方會告訴我們說「系統必須足夠快」,但這種表述太主觀了。要滿足非功能需求,那這些需要必須是具體的、可測量、可實現以及可測試的。

大部分非功能需求本質上是技術性的,而且通常對軟體架構有很大影響。理解非功能需求是架構師角色的核心能力之一,但試圖理解這些需求與質疑這些需求的合理性有所不同。畢竟,你見過多少真正需要 7x24 小時運行的系統呢?

2. 架構定義

弄清了非功能需求後,下一步就要思考如何定義架構,解決需求方提出的問題。 我們可以說每個軟體系統都有架構,但不是每個軟體系統都有現成的架構。這才是關鍵點。

軟體定義過程需要思考如何在給定的限制下滿足提出的需求,進而解決問題。架構定義過程是在項目的技術方面引入結構、規範、原則和領導力的過程。定義架構軟體架構師的工作,但從頭設計一個軟體系統與擴展一個現有系統還是有很大的差別。

3. 技術選型

技術選擇通常是一個愉快的過程,但當考慮到成本、授權、供應商關係、技術策略 、兼容性、互操作性、支持、部署、升級策略、終端用戶環境等問題時,挑戰往往相當大。這些因素綜合起來,經常會把一個簡單的選擇某些東西,例如設計一個功能豐富的客戶端,變成一場噩夢。

接下來還有另一個問題:這些技術能否像期望的那樣運行。

技術選型的本質管理風險:在複雜性或不確定性較高的地方減少引入風險,在可能帶來收益的地方適當接受風險。技術決策需要考慮所有的因素並需要評審和評估,包括軟體項目的核心組件,以及開發過程會用到的庫和框架。如果正在進行架構定義,你需要確信自己的技術選型是正確的。同樣地,為一個新系統開展評估技術與向現有系統引入新技術有著很大的區別。


4. 架構評估

如果讓你來設計軟體,需要問自己:我的架構能否工作?

對於我來說,這樣的架構可以工作:滿足非功能需求,為其他部分的代碼提供了必要的 基礎設施,為解決底層業務的問題提供了一個平臺。

軟體最大的問題之一就是複雜性和抽象,很難從 UML 圖或代碼去想像出軟體運行時的特點。在軟體開發的過程中,會採用多種測試技術確保交付的系統在上線之後能正常工作。為什麼不對架構設計採用同樣的方式呢?如果可以測試架構, 就可以證明該架構可以正常工作。這項工作做得越早,就越能減少項目失敗的風險。而不是簡單寄希望於它能正常工作。

5. 架構協作


與世隔絕的軟體系統很少見,大部分軟體系統都是需要靠人來理解。開發人員需要理解後按照架構實現;需求方出於安全、資料庫、運維、支持等角度,也可能對架構實現感 興趣。軟體要成功,就需要與這些需求方緊密合作,保證架構能夠和環境成功集成。不幸的是,即便在開發組內架構協作都很少發生,更遑論外部的需求方了。

軟體架構的交付

架構交付的部分也是類似,軟體架構的角色會隨著參與度不同而有所區別。

1. 擁有更大的視野

要確保架構成功落地,必須得有人在軟體開發的整個生命周期內擁有更大的視野,向大家描繪遠景。如有必要跟隨項目一起演進,承擔將交付責任 。如果你定義了一個架構,那始終保持對架構的參與和演進是很有意義的,而不是將它交給 「實現團隊」。

2 領導力

把控大圖是技術領導力的一部分,但在軟體項目交付期間還有其它一些事情要做,包括向大家介紹任務的重要性、提供技術規範、做技術決策,以及具備決策權威。

作為架構師,你需要承擔技術領導力,保證所有的事情都考慮到了而且團隊走在正確的 道路上。軟體架構師的位置天然與領導力有關。雖然聽起來顯而易見,但很多團隊中的架構師可能會認為,成功交付並不是他們需要考慮的問題,進而喪失了必要的技術領導力。

3. 培訓與指導

培訓團隊和指導下屬是大部分軟體開發項目中容易被忽視的一項活動,導致的後果:一些團隊成員並沒有得到他們應該得到的幫助。雖然技術領導力是關於對項目整體進行掌舵,但也有一些時候個人需要幫助。而且,培訓團隊和指導下屬提供了一種增強隊員技能和提升他們職業生涯的方式。

這是架構師職責的一部分,而且很顯然,為團隊培訓架構和設計技能與助他們解決代碼問題之間有著顯著的區別。

4 質量保障

如果交付工作做的太差的話,即使擁有世界上最好的架構和最強的領導力,項目仍然會失敗。

質量保障是架構師角色中的很大一部分工作,但並非僅僅是代碼審核。例如,需要提供基準性能指標時,意味著需要引入標準和工作守則。從軟體開發的角度講,這包括編碼標準、設計原則、原始碼分析工具等。可以肯定地說,大部分項目的質量保障做的並不夠。因此你需要辨別出哪些是重要的,並優先保證這些部分被執行。對我來說,一切對架構有重要影響的、對業務非常關鍵的、複雜的或能夠可視化的東西都是重要的。這需要腳踏實地,意識到你無法保障所有方面,但實際做一些工作總比什麼都不做好。

5 設計、開發與測試

軟體架構師角色的最後任務就是設計、開發和測試。作為一名工作在一線的架構師,並不意著你必須參與每天的寫代碼任務。而是持續參與到項目中,積極主動地去幫助打造軟體並實現交付。話已至此,我們不禁要說,為什麼每天寫代碼不應該成為架構師角色的一部分呢?大部分架構師都是經驗豐富的程式設計師,因此保持這項技能的狀態是有意義的。除此之外 ,架構師還能經歷團隊成員都會經歷的痛苦,在此過程中可以幫助他們從開發的角度理解他們設計出來的架構。一些公司明令禁止架構師參與編碼工作,因為覺得架構師太寶貴了,不應該從事編碼這樣普通的工作。顯然,這種態度是錯誤的。如果不讓他們參與成功交付的過程,那又為什麼讓他們花費精力設計架構呢?

當然,有些情況下讓架構師參與寫代碼確實不太可行。例如一個大型項目通常意味著需要思考的架構很大,不一定有時間參與到實現過程。但通常來說,寫代碼的架構師只會比只會旁觀的架構師更加高效和快樂。

你是一名軟體架構師嗎?

不論軟體開發和軟體架構之間的那條線是神話還是鴻溝,本文討論的內容都說明了——軟體架構師這個角色,經驗隨著實際參與項目的程度以及對待架構師角色的認真程度不同而不同。大部分開發者都不會周一早上醒來就能宣稱自己是一名軟體架構師。我自己當然不是這樣,成為架構師的過程是一個演進的過程。其實,一部分開發者可能已經在承擔部分軟體架構師的角色了,雖然他們的職位並沒有體現出這一點。

參與一個軟體系統的架構和親自設計一個軟體架構有很大不同。持續精進技能、知識和跨多領域的經驗成就了軟體架構師的角色。

跨越軟體工程師和軟體架構師的主動權在自己手上。而首先要做的,就是了解目前自己的經驗所處的層次。

看完本文有收穫?請轉發分享給更多人

關注「ImportNew」,提升Java技能

好文章,我在看❤️

相關焦點

  • 程式設計師問大師:我要成為一名軟體架構師……
    >我要成為一名軟體架構師。大師:好吧,如果是這樣,你就沒必要成為一名軟體架構師了。阿寶:當然有必要了!我要成為一個能夠做所有重要決定的人。大師:這樣很好,只是你沒有列出哪些才是重要的決定。你剛才說的那些跟重要的決定沒有什麼關係。阿寶:你說什麼?難道資料庫不重要?你知道我們在資料庫上面花了多少錢嗎?大師:可能很多。
  • 如何成為一名系統架構師
    很多做軟體開發的小夥伴都立志想成為一名系統架構師,卻不知怎麼樣才算是一名合格的架構師,是在某一個技術領域有深刻專研的技術達人?還是在技術面上涉獵廣泛的通才?抑或有個五六年的工作經驗之後就自動變成了「架構師」?下面從以下幾個方面聊聊「架構師」這個高大上的職業。一、架構師需要具備什麼能力?
  • 軟體架構師到底是做什麼的?
    貴公司的項目團隊中有軟體架構師嗎?貴公司需要一名軟體架構師嗎?
  • 如何成為一名優秀的架構師?
    程式設計師和架構師都對這樣的架構評審望而生畏。軟體架構師的角色應當像園丁而非指揮官。前者的職責主要是塑造、策劃並清除雜草,而後者主要任務是發號施令。在 WSO2,我參與架構評審的時間已長達八年之久。WSO2 的產品非常豐富,比如 WSO2 ESB 、WSO2 API Manager  以及 WSO2 SP  都人盡皆知。
  • 原來合格的軟體架構師是這樣!!!
    軟體架構就在於能有一個全局視角( holistic view)、能看到更大的圖,以理解軟體系統作為一個整體是如何工作的。這些因素對區分軟體開發和軟體架構也許有幫助,但還是無法解釋一些人如何從開發轉到了 架構。進一步地,它無助於識別哪些人將會成為出色的架構師、如果你是 HR 你如何尋找這 些人,以及你是否是一個架構師。
  • 從軟體搬磚師到軟體架構師,程式設計師的架構師之路
    從做事的角度來講我們招到的人可能會分三個層次(程式設計師三個級別),大家經常開玩笑說我是做搬磚的,所以第一個 level 我把他叫軟體搬磚師,再然後是軟體工程師、軟體架構師。軟體搬磚師可以有很多。但今天數量其實還不算太多,因為我們知道這門學科只有 50 年的歷史。但是好的一點是,產生軟體搬磚師並不難,我做了一個長達四年的實踐:從小學二年級開始教小學生編程。
  • 怎樣成為軟體架構師?(1)
    和大多數人一樣,我是從一個軟體開發人員開始自己的職業生涯,與團隊合作開發軟體系統。隨著時間的推移,我開始設計自已的軟體系統,到現在我成為現在的位置,一名軟體架構師,為企業提供軟體架構設計,有很多技術團隊從我的指導受益。我很多時間是在IT諮詢機構,這些客戶和項目都需要軟體系統。為了更好的服務客戶,擴大組織就需要更多的人加入團隊。
  • 架構師不寫代碼,能行嗎?
    CTO 不寫代碼已經引起諸多爭議了,架構師也不寫代碼,能行嗎? 當我面試架構師職位的候選人時,我通常會問一個這樣的問題:「你認為架構師是否應該做一些編碼工作?」而通常會得到下面兩個反饋之一:「不,我正在尋找一個不再需要編碼的職位。」「我喜歡繼續編碼,至少是少量的編碼,但可能不會有時間這樣做。」
  • 軟體架構師需要具備哪些能力?
    作者:張恂老師來源:知乎技術能力軟體架構師是一位具有一定技術
  • 軟體架構師必備的八大工程技能
    您不必成為所有這八個領域的專家,但是有必要去深耕某幾個領域,融會貫通,進而成長為一名真正的軟體架構師。下面,讓我們以學習路線的思路,逐一進行深入討論:)》一書所帶來的各種軟體觀點和架構視角,涵蓋了各種制定軟體架構時可遵循的指導性方法。
  • 網管,網工,Or 網絡架構師?你覺得自己是哪一個?
    網際網路公司伺服器變了,網絡架構必須變,任何廠家都不能告訴我們網絡長成什麼樣,因為他不知道我們有多少伺服器、多少應用。OEM 設備廠家的核心技術能力是設備埠密度、散熱、軟體 Feature。網路架構要如何匹配成本、規模、應用性能發展到需要「用戶」自己設計,於是這5年來,網際網路公司的網絡工程師從網管變成了一名網工。
  • 如何成為優秀的軟體架構師?這10幾本好書告訴你
    高級開發人員和軟體架構師之間是存在巨大差異的 。作為架構師,你需要有更多的經驗才能設計出端到端解決方案。軟體架構理論和實踐一樣重要,因此我們的軟體開發人員和架構師團隊準備了今年最好的軟體架構書籍清單!這些軟體架構書籍能夠幫你理解和有效地將軟體架構原則應用於實際軟體項目當中去1.
  • 一個架構師談什麼是架構,以及怎麼成為架構師
    還記得回字的四種寫法嗎?那麼你專門就研究回字的四種寫法 ,但你有沒有想過我把回字折開來又可以變成幾個字?是否好折?要知道最時髦的並不一定是最好的成功的軟體又是怎麼樣的呢我們談的是軟體架構,架構的最終體現是一個軟體,那麼什麼是成功的架構什麼是成功的軟體呢?
  • 沒有架構師的命,卻得了架構師的病!
    而架構師也可以分為初級、中級、高級三檔,江湖上真正高水平的軟體架構師就更少了。所以,大部分(超過九成的)碼農幹上許多年,還是做不了架構師,這是什麼原因造成的呢?寫代碼和做架構是兩個不同的事情。什麼是架構師,架構師要做什麼事情,為什麼 Java 的領域裡,會更注重架構師?
  • 怎樣成長為優秀的軟體架構師?
    當我們把程式設計師類比成建築師時,按照能力水平來分,我覺得大體可以分為三個層次:搬磚師、工程師、架構師。軟體搬磚師之名對應到建築行業的建築工人,他們的編程能力和業務基本上停留在堆疊代碼,按照要求去實現功能需求的層面。只要能讓程序跑起來,能正確地實現業務邏輯,就可以稱為「會編程」的人。
  • 軟體架構師應具備的十大特點
  • 10本軟體架構師必讀書籍
    1. 在我們看來,這是今天世界上了解軟體架構最好的教科書。但是,如果你不喜歡用「學術」風格書寫的書則另當別論。 [註:幻燈片在線可得:https://www.softwarearchitecturebook.com/svn/main/slides/ppt/]
  • 你離軟體架構師還有多遠?
    軟體架構領域也不例外。如果一個人只能通過工作中的項目來獲得實踐經驗,那麼他的理論知識則利用工作以外的時間去提高。開發理論和軟體架構理論的主要區別之一是後者知識過時的速度更慢。因此,如果你有2000年的書,它很可能仍然和現在的技術具有很強的相關性。我建議你從閱讀一些書籍開始了解軟體架構理論。
  • 架構與架構師2
    對於這兩個問題,之前也總結過一篇《架構和架構師》[1],再結合他的專欄文章和視頻,補充一下架構李運華給架構的定義:軟體架構指軟體系統的頂層結構,縮句成架構指結構,而結構的修飾語蘊含了太多東西,抽象不夠直白這個定義裡面蘊含了作者介紹的系統和子系統、模塊與組件、框架與架構三組常見的概念
  • 一位架構師的感悟:過度忙碌使你落後
    也許是由於人性的貪婪,對於軟體系統我們同樣想要更多:更多功能、更好的性能、更好的伸縮性、擴展性等等。作為軟體架構師要明白軟體架構設計就是一種取捨或平衡。當大家都在往裡面加東西的時候,架構師更應該來做這個說「不」的人。軟體設計和定義過程中存在很多取捨,例如:著名的 CAP 原則,就是一個很好的取捨指導策略。