天天看點

技術硬實力,如何才能成為一名架構師

學習是一件需要長期投入的事情,尤其是在當下大環境惡劣的背景下,我們程式員必須要多多的投資自己,去加強自己的技術硬實力和軟實力。

很多程式員的夢想,就是将來能成為一名架構師。包括我剛學程式設計那時候,也是以當架構師為目标,覺得不想當架構師的程式員不是好程式員,希望将來能成為一個優秀的架構師。就像拿破侖那句名言:“不想當将軍的士兵不是好士兵。

”随着工作經曆的增多,我也開始參與到架構設計中。對架構設計了解的越多,我越發覺得,其實做架構設計,并不代表一定要有一個架構師的頭銜。

拿破侖那句名言,原句是“Every French soldier carries a marshal’s baton in his knapsack”,意思是“每個士兵背包裡都應該裝有元帥的權杖”。

元帥的權杖,意味着大局觀,元帥的思維方式。當士兵背包裡裝有元帥的權杖,就意味着士兵也能胸中有大局觀,能有元帥的思維,了解元帥在特定戰場上想什麼,這樣能更好的執行指令,提升整體的戰鬥力。

其實拿破侖的本意是激勵每一名上戰場的士兵都要有大局觀,有元帥的思維,并不需要每一個人都一定去當将軍、當元帥。

這也适用于技術領域,對于程式員來說,并不代表一定要有一個架構師的頭銜,而是心中有大局觀,有架構師的思維,進而能了解架構設計,能寫出好的程式。

你了解架構的精髓嗎?

我查閱了很多技術資料,并結合自身的了解,給大家總結了如下幾條:

  • 具備抽象能力;
  • 具備分治能力;
  • 具備複用能力;
  • 具備疊代能力;

(1)什麼是抽象能力呢?

抽象能力可以說是整個架構設計的基礎。因為對于架構設計來說,是要為了滿足業務需求的,而業務需求都是一些文字性的描述、原型、UI 設計圖,這些需求要最終變成代碼讓機器執行,就必須先進行抽象,抽象成計算機能識别的模型。

在軟體項目中,遇到類似的場景,就會考慮抽象出來,總結一個規則和方法。有時候即使場景不同,也可以把其中有共性的内容抽象出來,可以更友善的使用。

(2)什麼是分治能力呢?

架構設計的一個重點,就是要對複雜系統分而治之,分解成小的、簡單的部分。但光分解還是不夠的,同時還需要保證分解後的部分能夠通過約定好的協定內建在一起。

還有像我們平時說的大資料,高并發這些複雜問題,也是通過分治來解決的。要知道單台機器,無論你性能如何優化,都是有其極限的。而像“雙十一”這種高峰時刻,瞬間的流量可能是幾百、幾千萬,就需要通過設計合理的政策,分化到不同的伺服器,讓每個伺服器的流量不至于太大。

這種分治的能力其實不僅适用于架構上,也适用于平時程式員寫代碼。比如說有些程式員寫代碼,喜歡把大量的邏輯放在一個方法或者一個類裡面,最後極其難以了解和維護,如果能分拆成幾個小的方法或者小的類,不僅結構更清晰,也更容易了解和維護。

(3)什麼是複用能力呢?

用是一種非常簡單有效的提升開發效率的方法,通過對相同内容的抽象,讓其能複用于不同的場景。

複用能力在日常寫程式的時候也很常用,比如有的程式員喜歡複制粘貼代碼,是以經常看到很多重複的代碼,如果要修改,得修改好幾個地方。如果能把這些重複的代碼提取成公共的類或者方法,就可以減少很多重複,讓代碼更簡潔和易于維護。

(4)什麼是疊代能力呢?

好的架構設計,通常不是一步到位,而是先滿足好目前業務需求,然後随着業務的變化而逐漸演進。

就像淘寶這樣的業務,它背後的架構設計也不是一步到位成現在這樣,拆分成好多微服務。最開始,它也隻是個普通的分層架構,後來随着業務不斷擴充,逐漸疊代成今天這樣複雜的架構。

這種疊代的能力,在寫程式時也很重要。因為很多程式員喜歡追求完美,期望能一步到位,然而這樣帶來的問題是開發成本會大量增加,導緻進度延誤。另一方面,如果對需求的變化預測不正确,就會有很多備援的代碼,後面難以維護。

其實,開發人員對以上提到的這些思維模式都不陌生,隻是在實踐的時候,總是有意無意地忽略了。

好的架構師具備怎樣的品質呢?

對于程式員來說,培養架構師思維,并不是很難的事情。然而要成為好的架構師,光有架構師思維還不夠。

一個好的架構師,不僅技術要好,還要懂業務;能從整體設計架構,也能在局部實作功能。

比如說一個做網際網路軟體架構設計有豐富經驗的架構師,要去做建築行業軟體的架構設計,短時間内一定是很難設計出好的架構,因為他需要先熟悉建築行業軟體的業務,才能設計出符合業務特點的架構。

有一種架構師叫“PPT 架構師”,也就是說擅長寫 PPT,畫架構圖。對各種熱門的名詞如數家珍。但是脫離一線開發,對業務和底層基礎知識知之甚少。這樣的架構師設計出來的架構,通常是不接地氣的,實作起來會非常困難,成本也高。

因為作為架構師,如果不寫代碼,是不能體會出設計不好帶來的問題,無法及時地對架構中的問題做出調整。

是以好的架構師,一定要是程式員出身,并且能堅持做一線程式員。也許他不需要寫大量的業務代碼,但至少要參與一部分編碼工作,以及代碼審查工作,以保證架構的正确執行。

好的架構師,不僅要有技術深度,還要有一定的技術廣度。因為技術的選型,通常不能局限于一種技術,需要根據業務特點和團隊特點靈活地選擇。

好的架構師還有一個能力就是溝通能力。作為程式員,可能把自己的子產品開發好就不錯了,相對不需要太多的溝通工作。但是架構師就不一樣,除了架構設計,還有大量溝通工作。

首先架構師要經常和産品經理打交道,反複确認需求,了解需求細節,隻有這樣才能分析清楚需求,了解各種使用者場景。

然後架構師設計出來的架構,要通過文檔、會議來講給其他人聽,能讓其他人了解架構,用好架構。

是以要成為好的架構師,需要具備幾個條件:

  • 有架構師具備的能力:具備良好的抽象能力、分治能力、複用能力和疊代能力;
  • 懂業務需求:能很好地了解業務需求,能針對業務特點設計好的架構;
  • 有豐富的編碼經驗:像抽象、分治、複用這些能力,都需要大量的編碼練習才能掌握;
  • 另外保持一定量的編碼經驗也有助于驗證架構設計;
  • 良好的溝通能力:架構師需要溝通确認需求,需要讓團隊了解架構設計。

具備了這些條件,就可以成為很好的架構師,設計出好的架構,組織好人員和技術,低成本的滿足好需求和需求變化,以及系統的運作。

如何才能成為一名優秀的架構師?

想要成為好的架構師,沒有什麼捷徑,需要比普通程式員更多的努力才行。如果你有志向成為架構師的話,一定要做到如下幾點:

(1)要成為一個優秀的程式員;

技術好是成為架構師的基礎條件。需要讓你的代碼容易讀,容易擴充,能重用。這樣通過大量的編碼實踐,才能逐漸地培養出好的架構師思維。

(2)多模仿多學習;

在剛開始的時候,不用想着閉門造車,想出一個特别牛的架構。反倒不如先把業界成熟的流行的架構吃透,用好。現在網絡上也有很多好的開源項目,這些開源項目都有良好的架構設計,可以找幾個跟你研究方向相關的項目,本地搭建一下,然後自己試一下,最好能弄一個自己的項目二次開發或者模仿一遍,做中學,是最簡單有效的。

(3)選擇好行業和平台;

軟體其實下面細分了很多行業領域,大類有像網際網路應用、企業應用、遊戲應用,大類下面又有細分的小類。比如說企業應用又和各行各業的業務結合在一起的,像建築行業軟體,就需要有建築行業的專業知識。

前面我說過,架構師要同時懂業務和技術,而這些行業知識,也不是短時間内能積累起來的。是以如果想當架構師,最好能選擇一個合适的行業,能在一個行業裡面早點積累足夠的行業知識,後面做架構設計的時候,就能更好地設計出符合業務特點的架構。

同時,這些行業領域的業務經驗,和技術結合的架構經驗,也會成為你個人獨特的優勢,不容易被替代。

還有平台也很重要,好的平台,能給你更多的實踐機會。是以你看極客時間上那些開課講架構、微服務的,無一例外都是大廠出來的,因為隻有大廠,才有機會去實踐這種高并發大資料的架構設計。

如果你有志成為架構師,不能光埋頭寫程式,也要早做打算,選擇适合你自己的行業和平台,少走彎路。

是否真的是人人都是架構師?

很多人可能都被灌輸這樣一個思想,那就是“人人都是架構師”,其實大家被這個“僞命題”給誤導了,正确的來将是“每個人都要具備成為架構師的能力”,但是通常要想成為架構師,門檻事非常高的,并不是說你想想,就可以成為一名架構師的。

比如說,我經常碰到業務團隊,很多比較資深的工程師,在自我介紹的時候,說自己是負責團隊内部負責的業務的架構師,當我們在深度的溝通之後發現,它就是對業務要比一般的工程師熟悉一點,但是基本都是停留在細節層次,根本不具備業務的整體思維能力,也就是說不具備一個業務從0-1的能力。

換一句話說,那就是當你的業務、技術、架構和管理的融合能力達不到一定的層次,你是很難成為架構師的。是以,我通常建議那些剛畢業才幾年的小夥伴,一定不要一開始就轉型去做業務架構師,而是要紮根在業務的第一線,去為自己積累更多的實戰經驗,當經驗和能力積累到一定程度之後,你轉型到架構師之後,你會發現你做事情會得心應手,而不是處處都是你認為的坑點。

就比如現在剛剛履新支付寶中國董事長的倪行軍,它是程式員出身,并且一路轉型為架構師、技術負責人、CTO、業務總裁,最後到現在的支付寶中國董事長。其實呢,這個才是最好的成長路徑,作為技術人來說,當你在技術這個領域有了積累,并能夠利用這些積累,給自己帶來職位上的躍遷的時候,你才能真正的去做事情,并且也能夠組做好事情。

我和大家聊這些的主要原因是因為現在市面上,存在太多的水貨架構師或者某某高管,其實它們的能力真的一般,就是不知道找了哪位高人,将自己包裝成一個無所不能的人才,混進了你所在的平台。不過一般這樣的人,是很難做到蒙騙所有人的。

我見過一些高管,空降之後就把下面的人能夠向上回報問題的所有通道全部關閉,自己在部門内部搞一言堂,但是最終還是紙包不住火,還是東窗事發了,其實它忽略了一個問題,“兔子急了還會咬人呢?更何況那些要被你逼掉飯碗的中年人呢?“

總結

要想成為好的架構師,沒有什麼捷徑可以走,首先需要要成為一個優秀的程式員,然後多模仿、多學習好的架構設計,最後還要早點選擇好行業和平台,積累好行業的業務知識,借助平台獲得大量的實踐機會。而好的架構師,需要具備“有架構師思維”、“懂業務需求”、“有豐富的編碼經驗”和“良好的溝通能力”。