在企業資訊系統轉型過程中,架構師扮演非常關鍵的角色。軟體架構師必須具備電腦科學或軟體工程的知識,多數由程式開發員入職,再逐步朝架構師發展。為此,本文將詳細說明軟體架構師所應具備的軟硬技能以及養成步驟。
「人無遠慮,必有近憂」,套用到企業也是一樣,就拿曾經是電商龍頭的PChome購物來說,這次疫情帶來電商最好的機會,宅經濟興起,網購市場順勢締造新高,不過PChome卻出現掛牌18年來首度營收衰退,陷入創新的兩難,在後進者競爭下投入補貼戰,忽視資訊系統包袱逐漸跟不上行動優先的消費模式。當然許多鍵盤柯南指出PChome購物最大問題在於介面設計:「介面難用、價格不優,很難有起色」、「那個上世紀的介面到底要不要改」、「PChome介面設計真的好難用,不夠便民」、「介面換一換吧!沒人有時間在一堆文字中找東西」、「換個介面好像要他老命」。
但相信從事軟體開發或資訊從業人員都心知肚明,光是將前後端耦合的網頁程式改成符合行動裝置需要的API服務就是一項大工程,更何況還要針對既有網頁介面去調整UI/UX,提高操作流暢度和體驗,簡直是緣木求魚。
上述的程式改寫工程,必須透過瞭解現有業務邏輯的多位資深開發工程師,具備現代化開發技術、工具及整體架構,考量公司現有人力資源及技能,反覆討論出最佳重構路徑,多次與高管或業務高層簡報討論達成協議或共識,隨著進度發現問題,找出解決方案,評估各種方案的利弊,承擔錯誤並修正,其實這就是軟體架構師的主要職責及工作內容,在「軟體架構師的12項修煉」書中就說明各種相關技能並繪製成金字塔結構,見圖1。
如何成為軟體架構師
不只是企業經營會遇到上述問題,個人工作和職涯發展也是,多數企業沒有多餘資源協助員工提升專業技能,多數主管沒有閒暇時間協助員工進行職位規劃,若無自我審視個人條件並規劃可行的未來方向和目標,便會溫水煮青蛙,導致技能無法隨著外在環境變化而提升,被鎖住在既有公司內進退兩難,加上必要開支的經濟包袱,害怕離職後又無法適應,成為發展停滯待遇受限的困頓上班族,「程序員的7堂職場課」一書就詳細解說了資訊人員的種種心路歷程(https://www.books.com.tw/products/CN11714511)。
近日面試多位應徵軟體架構師的候選人,對於架構師職位的專業技能和工作屬性仍不清楚,甚至連企業的資訊主管對於架構師職責也是一知半解,並且多數的技術書籍和文章,主要內容皆為技術硬技能方面,對於架構師必要的軟技能卻著墨不深,因此深感有必要撰寫此文說明,讓有意朝架構師發展的資訊從業人員,有可供參考發展的指引路徑。
在軟體工程的第一堂課中,教授便開門見山說出:「軟體工程既是科學也是藝術」,軟體建置涉及到人員、組織、投入資源和專案管理等諸多環節,只要其中一項沒有管控好,就會進度延宕造成災難或損失,失去業務優勢導致營業收入下滑,國內外失敗案例不勝枚舉,所以架構師在關鍵時刻也必須擔任吹哨者,避免團體迷思(https://zh.wikipedia.org/zh-tw/團體迷思)。
軟體架構師必須具備電腦科學或軟體工程的知識,多數由程式開發員入職,再逐步朝架構師發展,其他如系統管理或網路管理人員較少能成為架構師,主因是未深入業務邏輯和整體系統規劃,而軟體架構師還可分為偏重業務邏輯的領域架構師,和偏重技術規劃的技術架構師;目前主流的企業架構方法論是國際開放標準組織(The Open Group)提出的TOGAF(The Open Group Architecture Framework),為企業軟體開發提供高層級的準則框架,定義各種架構師的職責和分工(技術架構部分如圖2所示),透過系統化方法,協助組織開發系統,依照時程執行並符合預算,讓專案需求與業務單位接軌,產出可正確穩定運行的資訊系統。所以,軟體架構師的大部分知識和經驗來自實際執行軟體專案,通常軟體架構師的養成至少須具備多年的軟體專案開發相關工作經驗。企業整合模式的共同作者Gregor Hohpe就曾擔任過首席架構師,以自身經驗出版了多本架構師書籍,並在AWS re:Invent 2022發表相關演說(The Architect Elevator,https://youtu.be/goYiaIGebFo)。
技術領域硬技能
技術持續發展,外部政策及環境改變,擔任架構師必須跟上業務轉型的步伐,學習包括雲端運算、事件驅動架構、人工智慧和機器學習等知識,正如圖1底下的技術技能是必要條件,但決定學習哪些專業領域和如何學習並與時俱進,以便對技術、模式和架構做出正確的選擇,這便是培養硬技能的關鍵。筆者建議步驟如下:
1. 確認自身專業定位
資訊系統架構包括:前端、後端、中間整合層、資料庫、資訊安全和雲地基礎架構等方面,而前端又包括網頁開發、行動App,後端則是開發框架、虛擬機和容器、快取和分散式設計等;以及產業領域知識,銀行業包括存放款、外匯、消企金、電子支付等業務,電商包括銷售流程、供應商管理、物流倉儲等,族繁不及備載,所以先專注發展單一領域。
2. 選擇學習的優先順序
確認定位後,收集相關技能樹和技能範圍,評估自身能力決定順序,例如Kubernetes,必須先學會Linux、Shell Script、Docker才不會感到挫折,圖3的小男孩沒耐性直接學,最終卻什麼都學不好。針對應用開發學習方面,參考Gartner技能範圍,筆者建議可從開發框架先學習,再朝前後端分離的應用系統或API服務,並熟悉敏捷開發流程跟DevOps實踐,如圖4所示。
3. 正確學習方式
疫情後出現大量的線上學習課程,但品質參差不齊,建議先以書籍為主,理解全貌後,再輔以優質線上課程,便可事半功倍快速掌握一項技術,至於技術專欄文章或部落格,屬於片段知識來源,不建議完全倚賴。故筆者建議學習素材順序為:
‧相關書籍:閱讀多本相同主題的書,建立自己的清單或知識庫,如微信讀書(https://weread.qq.com/)提供大量免費簡體技術書。
‧線上課程:篩選評價高且多人購買的完整解說線上課程,不合適亦可退費。
‧研究報告或論文:付費或免費的優質研究報告,如Gartner報告會詳細解說技術脈絡,以便迅速吸收,而論文是以關鍵字找出國內外研究成果,尤其是架構設計和最佳實踐,可從arXiv開放論文(https://arxiv.org/)或Sci-Hub影子圖書館(https://sci-hub.shop/)尋找。
‧技術專欄、部落格及演講:篩選並訂閱相關領域文章,持續觀察產業變化,思考潛在機會和威脅,如網管人、InfoQ(https://www.infoq.cn/)等。
‧技術社群聚會:參加技術同溫層的讀書會分享,討論共同的技術坑和解決方式,順便建立人際網絡。
‧ChatGPT:學習討論夥伴,可作為讀書會討論對象,透過提問審視自身觀念是否正確,訓練判斷能力。(猜看看本文哪部分是由ChatGPT撰寫的?)
以上是掌握該領域知識、技能和他人經驗的主觀建議,訓練深度研究的學習過程和方法之後,再掌握多方面的廣度知識和技能,從前端到後端、從資料庫到基礎架構,分散式架構設計等方面,透過訓練學習這些技能,才能具備此領域的敏銳度做出合適的技術決策。
一項新技術或解決方案的出現,可能使軟體開發變得更加高效,甚至顛覆整個產業,如Docker容器技術,所以架構師必須掌握評估技術或產品的能力,在評估技術方案過程中,需要考慮多個因素。
首先,需要確定技術和解決方案是否符合專案的需求和目標。其次,需要考慮成本和風險,包括開發成本、維護成本、資安風險和技術導入風險等。
此外,還需要考慮後續的可擴展性和可維護性,以及是否適合目前專案的開發團隊和維運團隊。
關於架構師硬技能方面的書籍,筆者推薦書單如下:
‧"Design It!: From Programmer to Software Architect",簡譯版,《架構師修煉之道》
‧"12 More Essential Skills for Software Architects",簡譯版,《軟件架構師的12項修煉:技術技能篇》
‧"Scalability Rules: Principles for Scaling Web Sites 2nd",簡譯版,《架構真經:因特網技術架構的設計原則》
‧"Solution Architecture Patterns for Enterprise: A Guide to Building Enterprise Software Systems"
‧"System Design Interview - An insider's guide"和"System Design Interview – An Insider's Guide: Volume 2"
‧"Fundamentals of Software Architecture: A Comprehensive Guide to Patterns, Characteristics, and Best Practices",中譯版,《軟體架構原理:工程方法》
職場領域軟技能
前面談到軟體工程涉及到專案管理,而架構師就像營造業的建築師和工地主任,必須跨團隊協作解決各種非功能面需求和問題,持續推動專案前進,因此架構師軟技能就包括溝通協調、簡報說明、組建團隊等,而現代化架構團隊組建隨著微服務組織發展演化,從共用的平台工程(Platform Engineering)實踐中衍生出了團隊拓樸(Team Topologies)方法論。
1. 溝通協調能力
在繁雜的軟體解決方案採購或建置過程中,客戶或高管在前期階段需要接收詳細資訊以便做出採購決策,架構師須從不同供應商瞭解產品技術優劣,思考能否符合目前基礎設施資源,架構師需要作為業務團隊、開發團隊和基礎管理團隊之間的橋樑,這些團隊成員可以提供專案方面或技術方案的寶貴意見,傾聽各團隊意見去理解他們的需求和擔憂,依照建議協調各團隊達成決策共識,所以架構師必須具備溝通、談判、傾聽和解決問題等能力,以深厚的技術知識與軟技能相結合,為公司發展新業務。
2. 簡報製作能力
「一張圖勝過千言萬語」,言語溝通經常會遇到定義不清或詞不達意的Ambiguity情況,此時透過簡報或架構圖,讓雙方有可聚焦討論的共同目標或概念,才能加速溝通效率,彼此理解進而減少衝突。通常先瞭解受眾的需求和背景,再決定故事線來鋪陳簡報內容,表達前因後果可以更快讓對方進入討論主題,獲得對方信任,進而解決軟體專案所面臨的問題。至於簡報風格,建議採用圖大字少的文宣方式,使用統一的字體和顏色,適當的間距和自動對齊方式,配合企業識別色系,加上白灰黑簡單色彩來輔助配色即可。
3. 現代化架構團隊組建
隨著新興技術出現,企業軟體開發流程與組織也必須逐步調整,以符合軟體架構設計,促進團隊合作及權責分工,ByteByteGo第52集技術文章(https://blog.bytebytego.com/p/ep-52-devops-vs-sre-vs-platform-engineering/)對比DevOps、SRE到Platform Engineering的組織結構(圖5),DevOps讓開發人員承擔過多的工作和責任,SRE團隊透過制定共用標準協助部署、監控及優化系統效能,但SRE仍舊無法協助開發人員面對多樣的雲端服務技術選型和新技術導入所帶來的認知負荷,故引進平台工程團隊負責平台的相關工具和框架,各開發團隊只須專注在功能面業務邏輯開發,和容器內的開發框架及工具,讓同仁樂於工作發揮所長。
團隊拓樸(Team Topologies)是描述軟體相關團隊,如何有效率溝通和協作的一套組織設計方法論,見圖6,其中賦能團隊(Enabling Team)的成員就包括軟體架構師,指導業務服務開發團隊,促進團隊合作和專案進程;在2022年Docker公司也發表文章說明使用此方法論來建立更強大且愉快的工程團隊(https://www.docker.com/blog/building-stronger-happier-engineering-teams-with-team-topologies/);而架構師賦能團隊與業務流對齊團隊協作現代化架構的步驟和詳細過程,可參考「Architecture Modernization Enabling Teams (AMET)」一文(https://esilva.net/articles/architecture-modernization-enabling-team)。
關於架構師軟技能方面的書籍,筆者推薦書單如下:
‧"The Software Architect Elevator",中譯版,《軟體架構師全方位提升指南》
‧"12 Essential Skills for Software Architects",簡譯版,《軟件架構師的12項修煉》
‧"Team Topologies: Organizing Business and Technology Teams for Fast Flow",簡譯版,《高效能團隊模式:支持軟件快速交付的組織架構》
‧"The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change",中譯版,《經理人之道:技術領袖航向成長與改變的參考指南》
結語
以上就是成為軟體架構師所需的軟硬技能和步驟,整體來說,成為軟體架構師硬技能需要掌握具備相關產業的業務流程領域知識、系統架構設計、技術評估和建議方案選型、軟體工程、企業整體架構從客戶端到核心端的E2E全貌,以及資安和個資保護的基本概念;軟技能則是跨團隊溝通和協作、技能持續精進和自我學習能力。對應到圖1的架構師技能金字塔,企業架構師團隊組成是由多位專家所構成(圖7),並不只侷限在技術面的技術架構師。
呼應EIP大師Gregor Hohpe的「The Architect Elevator」部落格文章(https://architectelevator.com/),以一張圖說明架構師職業(圖8),希望此文章對於想要成為軟體架構師的資訊同業,提供可供參考的學習資源和未來方向,也希望大家能夠在各自工作領域中有所突破和成就。
<本文作者:鄭淳尹,Docker.Taipei社群共同發起人,國泰金控技術架構師,曾任台北富邦銀行雲端系統部架構師、微軟MVP、momo購物網架構師、臺北榮民總醫院資訊工程師、玉山銀行資訊處專員、宏碁eDC維運工程師。開源技術愛好者,曾在多間大學資工系擔任Docker容器技術講師,並翻譯審閱多本容器技術書籍。>