軟體架構師需要具備哪些能力?

2022-01-04 JAVA葵花寶典

作者:張恂老師
來源:知乎

技術能力

軟體架構師是一位具有一定技術、產品、項目和團隊等管理能力的高級程式設計師(編程高手),通常是一個開發團隊裡面技術最牛(或者比較牛)的少數幾個人之一。架構師自身的技術水平和管理水平不行,常常會把團隊帶溝裡,重要性可想而知。

成為架構師需要較長時間的一線開發經驗的積累。單純看工作年限,一般 3-5 年可成為初級架構師,5-8 年可成為中級架構師,8-10 年以上可成為高級軟體架構師,當然這只是大致的估計,具體達到何種水平還要看架構師的實際能力。

經年累月,摸爬滾打,一位優秀的軟體架構師需要掌握的技術能力很多,先說幾個最基本的。

建模

軟體開發領域的建模能力,主要是指抽象的思考能力。

普通碼農通常用代碼思考,負責一個系統中的幾個小模塊,所以思維常常局限在低層(low-level)、戰術(tactic)的層面,考慮的基本上大多是某個功能、某個模塊實現的具體細節與技巧。這是應該而且正常的,是團隊合理分工的結果。

而架構師,顧名思義,要負責整個系統的架構,尤其是涉及到一個系統(或子系統)全局的整體設計,所以往往需要高層、上層(high-level)的戰略(strategic)層面的思考,這樣就必然需要架構師經常進行建模(Modeling),對代碼、模塊、子系統和系統中的各種靜態結構、關係和動態行為、交互等等進行抽象。所以,在架構師的日常工作中,經常看到各種各樣的圖表、圖形符號和模型,是很正常的。

可以說,不會建模,不習慣於用模型思考的程式設計師,是很難成為一名稱職的軟體架構師的。

系統分析與設計

前面已經說了,系統分析與設計(System Analysis and Design)的主要技術手段是建模,兩者是高度重合的。

編程的四門功課

<img data-rawheight="896" data-rawwidth="1121" src="https://pic2.zhimg.com/3d771f862492d2e819f0e0b63fdf7af5_b.png" class="origin_image zh-lightbox-thumb" width="1121" data-original="https://pic2.zhimg.com/3d771f862492d2e819f0e0b63fdf7af5_r.png">

上圖畫的是任何軟體開發、軟體工程必然離不開的四門基本功課(四項基本活動或任務):

1、需求分析

2、設計實現

3、測試驗證

4、調試糾錯

把這四項活動連起來正好組成一個菱形,所以我也把它們叫作「編程之鑽」(The Programming Diamond)。

這四門功課既可以看作是一個團隊在整個項目開發過程中所連續從事的必不可少的四項基本活動(團隊層面),也可以看作是一名程式設計師在日常開發中為了實現一個需求而需要完成的必不可少的四項基本任務(個體層面)。

從一個功能的需求分析,到程序設計、編碼實現,再到測試確認這個功能的完成,以及發現錯誤後進行調試定位、代碼修改、設計重構或優化,再次進行測試和確認,通過後再選擇下一個需求進行分析,如此周而復始。。。這四個基本動作正好構成一個功能開發的小循環,也是每個程式設計師日常工作的標準核心動作。

那麼,為什麼普通碼農的開發不如編程高手,總是比別人慢,往往也不如別人的好?可能有許多種原因。有一個比較簡單的辦法能幫你找到開發的瓶頸:評估一下以上這四項任務在你的日常開發中的時間佔比。

我這 20 年的觀察是,國內許多碼農的開發效率低、質量不高,是因為他們往往在 Coding、Debugging 上花去了大量時間(人稱 code-and-fix),而在「編程之鑽」的需求分析、自動測試、架構設計等其他幾個重要方面往往草草帶過,佔比明顯不平衡。

什麼原因?因為許多人不知道怎麼有效率、高質量地去做需求分析、自動測試、架構設計以及調試除錯,以為只有 Coding(程式語言的語法技巧和框架 API 如何使用等)最重要,忽視了其他的軟體工程關鍵實踐,於是導致個人整體的開發速度和質量降低,老是提不上去。

而這又是什麼原因造成的?因為一方面「軟體工程無用論」長期存在,加上浮躁和急功近利的社會風氣,影響了人們的觀念和意識,導致追求短平快、糙快猛;而另一方面僅通過大學短短的四年,常常很難全面、紮實地學到並掌握「編程之鑽」的關鍵技術,而工作以後又常常忙於加班應付、各種趕工期,缺少足夠的時間來學習提高自己的開發水平。

今日勵志雞湯:只有不停的深入,你才會覺得快樂(我指的是學習)

(偷偷告訴你,輸入技術,你會有意想不到的收穫喲~)

看完本文有收穫?請轉發分享給更多人,轉載只需三秒

如果你有好的建議,請底下留言,我們共同成長

關注 勵志程式設計師 ,編程更有趣

相關焦點

  • 軟體架構師應具備的十大特點
  • 從軟體搬磚師到軟體架構師,程式設計師的架構師之路
    結論是做搬磚師不難,小學生也能做到。這是很有意思的一件事情,編程並不是非常複雜的學問,只要具備基本的邏輯能力,把常規的業務代碼按部就班地壘出來,基本上可以算打到搬磚師水準。我自己認為這並不難。軟體工程師會相對難一些,我心目中的軟體工程師首先在代碼上會非常追求可讀性、可維護性。另外,畢竟我們工程是群體協作,所以在群體協作上還是有自己的方法論和思考。比如說代碼評審、單元測試。
  • 你是一名軟體架構師嗎?
    將軟體架構從軟體設計和開發中區分開來的關鍵因素包括:規模的上升、抽象層次的上升, 以及做出正確的設計決策帶來的影響的上升等等。軟體架構就在於能有一個全局視角、能具備更大的視野,理解軟體系統作為一個整體是如何工作的。這些因素對區分軟體開發和軟體架構也許有幫助,但還是無法解釋一些人如何從開發轉到了架構。
  • 架構師,是否需要寫代碼?
    系統架構師:一個既需要掌控整體又需要洞悉局部瓶頸並依據具體的業務場景給出解決方案的團隊領導型人物 --- 某百科既然是討論一下架構師是否需要寫代碼這事,那我們先從何謂架構師開始說說,從某百科拿過來的定義,大家可以看到,架構師既要掌控整體,又需洞悉局部
  • 關於架構師:角色、能力和挑戰
    阿里電商系統很早就建立了,我們這一代一代人在裡面去做架構,都是站在前一代人的肩膀上。要去看前一代人為什麼要這麼設計,去想或跟他去聊,吸取他好的地方。現在可能遇到新的問題,通過其他的方法來解決一些新的問題,需要有實踐和知識的積累。接觸更多的人和事,用新方法解決新問題,這個很關鍵。不能只看代碼看一個月,要找真實的業務方,你的上遊、下遊、合作夥伴。
  • 架構師,是否需要寫代碼
    大夥交流得很high,本獅卻覺得心底空鬧鬧的,我們在討論架構師是否需要寫代碼的時候,我們先看看架構師的定義:      系統架構師: 一個既需要掌控整體又需要洞悉局部瓶頸並依據具體的業務場景給出解決方案的團隊領導型人物 ---  某百科既然是討論一下架構師是否需要寫代碼這事,那我們先從何謂架構師開始說說,從某百科拿過來的定義,大家可以看到,架構師既要掌控整體
  • 架構與架構師2
    對於這兩個問題,之前也總結過一篇《架構和架構師》[1],再結合他的專欄文章和視頻,補充一下架構李運華給架構的定義:軟體架構指軟體系統的頂層結構,縮句成架構指結構,而結構的修飾語蘊含了太多東西,抽象不夠直白這個定義裡面蘊含了作者介紹的系統和子系統、模塊與組件、框架與架構三組常見的概念
  • 系統架構師是怎樣煉成的
    成為架構設計師是廣大開發者職業發展道路之一,架構師究竟是個什麼樣的職業?需要具備什麼基本能力?如何才能成為一個優秀的架構設計師以及架構設計師需要關注哪些內容?在架構師需要具備的能力上,架構師首先必須具有豐富的開發經驗,是個技術主管。因為他必須清楚什麼是可以實現的,實現的方式有哪些,相應的難度怎麼樣,實現出來的系統面對需求變化的適應性等一系列指標。另外,需要對面向過程、面向對象、面向服務等設計理念有深刻的理解,可以快速的察覺出實現中的問題並提出相應的改進(重構)方案(也就是通常說的反模式)。
  • 沒有架構師的命,卻得了架構師的病!
    而架構師也可以分為初級、中級、高級三檔,江湖上真正高水平的軟體架構師就更少了。所以,大部分(超過九成的)碼農幹上許多年,還是做不了架構師,這是什麼原因造成的呢?寫代碼和做架構是兩個不同的事情。什麼是架構師,架構師要做什麼事情,為什麼 Java 的領域裡,會更注重架構師?
  • 原來合格的軟體架構師是這樣!!!
    軟體架構就在於能有一個全局視角( holistic view)、能看到更大的圖,以理解軟體系統作為一個整體是如何工作的。這些因素對區分軟體開發和軟體架構也許有幫助,但還是無法解釋一些人如何從開發轉到了 架構。進一步地,它無助於識別哪些人將會成為出色的架構師、如果你是 HR 你如何尋找這 些人,以及你是否是一個架構師。
  • 軟體架構師到底是做什麼的?
    貴公司的項目團隊中有軟體架構師嗎?貴公司需要一名軟體架構師嗎?
  • 華為開始面向全球招募首席軟體架構師
    昨晚,華為官方發布招聘信息,面向全球招募首席軟體架構師。
  • 軟體定製開發,寫程序前該具備的能力學會反問電腦問題
    軟體定製開發寫代碼的時候,你應該要「先」學會什麼?此時你/你應該會選好IDE(集成開發環境)跟學習的語言,甚至已經在學習的路上了,不過我們還是先來談談寫程序前需要什麼樣的能力。  是滴,單純是寫程序的話直接寫會讓你最快了解「現在的自己」喜不喜歡寫,但是如果想寫好、順暢地學習,你應該要專心在培養什麼能力呢?
  • 怎樣成為軟體架構師?(1)
    和大多數人一樣,我是從一個軟體開發人員開始自己的職業生涯,與團隊合作開發軟體系統。隨著時間的推移,我開始設計自已的軟體系統,到現在我成為現在的位置,一名軟體架構師,為企業提供軟體架構設計,有很多技術團隊從我的指導受益。我很多時間是在IT諮詢機構,這些客戶和項目都需要軟體系統。為了更好的服務客戶,擴大組織就需要更多的人加入團隊。
  • 如何成為一名系統架構師
    很多做軟體開發的小夥伴都立志想成為一名系統架構師,卻不知怎麼樣才算是一名合格的架構師,是在某一個技術領域有深刻專研的技術達人?還是在技術面上涉獵廣泛的通才?抑或有個五六年的工作經驗之後就自動變成了「架構師」?下面從以下幾個方面聊聊「架構師」這個高大上的職業。一、架構師需要具備什麼能力?
  • 為什麼說我們需要軟體架構圖?
    除此之外,敏捷宣言宣稱,團隊應該更加重視軟體本身而不是文檔,也就是不鼓勵繁瑣的文檔處理過程。為了找到恰當的文檔級別平衡點,可以嘗試在團隊中這麼做:詢問每個同事,他們需要文檔為他們提供怎樣的內容,以及應該包含哪些類型的架構圖。收集他們的意見,然後進行集體討論,並就團隊真正需要哪些的東西達成一致。
  • 架構師的必備素質和成長途徑
    圖4 架構師的八個素質做為一個合格的架構師必須具備八個重要的素質,包括業務理解、技術廣度、技術深度、豐富經驗、美學素養、動手能力和溝通能力。架構師的業務素質就是指要懂業務,對業務有足夠的敏感度,能夠清楚地知道自己的設計能給公司帶來多大的業務影響。對技術素質最基本的要求是深度和廣度。美學素質是要求架構師有美感和藝術感,所以易寶經常安排技術人員聽音樂會,看藝術表演,因為藝術和設計是相通的。動手能力是指在適當的時候架構師能夠上手實際操作,需要寫代碼的時候動手寫代碼,尤其是底層的關鍵代碼。
  • 一個架構師談什麼是架構,以及怎麼成為架構師
    成功的軟體又是怎麼樣的呢我們談的是軟體架構,架構的最終體現是一個軟體,那麼什麼是成功的架構什麼是成功的軟體呢?架構之美架構,架構,到底什麼是架構?我以前上大學時有一個70多歲的老教授,他上課每講20分鐘左右,需要2個同學」架「著去上一次WC,我們的架構師當然不是指這種」架構師「。那麼我們一直說的架構,到底它是一個什麼樣的東西呢?怎麼樣又可以做出一個完美的架構呢?
  • 怎樣成長為優秀的軟體架構師?
    當我們把程式設計師類比成建築師時,按照能力水平來分,我覺得大體可以分為三個層次:搬磚師、工程師、架構師。軟體搬磚師之名對應到建築行業的建築工人,他們的編程能力和業務基本上停留在堆疊代碼,按照要求去實現功能需求的層面。只要能讓程序跑起來,能正確地實現業務邏輯,就可以稱為「會編程」的人。
  • 10本軟體架構師必讀書籍
    在各種場合,在關於軟體架構的研討會上,在私下的交談中,談到軟體架構,最最通常的問題是:「有關軟體架構的書籍汗牛充棟,到底需要閱讀哪些書之後才能登堂入室呢