阿里P7架構師:通往架構師路上的經驗總結

困擾架構師平常問題

  1. 架構師應不該該寫代碼
  2. 爲何別人的系統老是那麼爛
  3. 成爲架構師最困難的門檻是什麼?
  4. 如何更高效的學習?
  5. 面對目前流行的技術不知如何下手?
  6. 一家公司待久了,過得很安逸,但跳槽時面試碰壁?
  7. 以爲如今的技術基礎感受到很紮實,但就是本身的技術提高不上?
  8. 以爲本身很牛B,通常需求都能搞定,可是所學的知識點沒有系統化,很難在技術領域繼續突破?
  9. 如今以爲本身技術還能夠,但就是薪資漲不上去?

 

以上這幾點,作爲開發人員的大家,有遇到過麼?有爲本身想過麼?有細心仔細的去解決過這些問題麼?有深入的想過麼?雖然這幾個問題很簡單,但對於咱們在開發路上,是有很是重要的幫助的。java


 

1:架構師應不該該寫代碼程序員

合格的程序員對於明確分配的任務會完成的很好,可是大部分狀況下「架構」這個詞意味着架構師並不會涉及太多細節,架構圖和代碼實現之間總仍是有些距離,你沒法保證全部人都會正確的理解你的設計,或者是程序員寫代碼時遇到障礙時會馬上想出足夠優雅的解決方案。面試

在我看來,寫代碼的架構師更像是在作後勤保障的工做:在代碼中第一時間發現可能存在的問題,向其餘人提出警告,或是給予其餘人改進的意見,必要的時候或是給其餘人演示一下正確的姿式。數據庫

大部分狀況下我做爲架構師並不須要攬下「核心模塊」開發這種工做,畢竟我能調配的時間太零散了,效率難以保證,不少人在專一的狀況下比我作的好不少,我只須要保持大局觀須要適度參與就能夠了。編程

總的來講,架構師和程序員在某些方面上有點像產品經理和用戶的關係,大部分程序員並不會主動告訴你他們想要什麼、哪裏須要優化,甚至本身也不知道這些。想要作出好的產品,捷徑之一就是跟用戶作一樣的事情。設計模式


2:爲何別人的系統老是那麼爛api

不少程序員解決問題的能力很強,說要解決一個什麼問題,下午就能寫出幾百行代碼把功能實現了。可是作出來的東西有種少考慮了什麼東西的感受。大部分程序都能實現功能,可是若是把「時間」這個也做爲一個考慮的維度的話,就會意識到一個合格的項目須要考慮更多的東西:更通用的使用方式、易於理解的文檔、簡單而易於擴展的設計,等等。性能優化

不少公司應該都會有一些遺留系統,它們龐大、笨重、難用、幾乎沒法維護,全部人都在抱怨這些系統,而且天天都在千方百計換掉那些遺留系統。可是一段時間過去以後,又會發現身邊的新人又開始吐槽當時替代遺留系統的那個系統了。架構


3:成爲架構師最困難的門檻是什麼?併發

不少人自稱架構師的人跟你講一個架構時簡直口若懸河,各類技術名詞像是說相聲同樣從他嘴裏說出來,三句話不離高併發大數據,可是稍微追問一下,就會發現不少基本概念的缺失,例如自稱精通高併發的人說不清楚他所謂的高併發系統的瓶頸在哪裏,自稱精通架構設計的人說不明白他的系統怎麼保證高可用,自稱超大數據量的系統實際上只有不到100萬條數據,等等。

架構師雖然聽起來很高大上,但本質上仍然是工程師,不是科學家,也不是忽悠人的江湖騙子。學習再多,也須要實踐落地。設計架構方案更多的是在作一些抽象和權衡:把複雜的需求抽象成簡單的模型,從功能、性能、可用性、研發成本等等方面規劃如何構建一個系統,這些內容須要更多的實踐練習。


4:如何更高效的學習?

大多數人天天能留給本身學習的時間有限,這個階段如何提高學習效率就成了要解決的重點。

說說本身提高學習效率的心得,其實很是簡單:體系化的學習。

在重複了幾回痛苦的學習-梳理過程後,再去看一些獨立的文章或者資料每每會事半功倍,由於能在體系內找到相對應的知識,甚至有時候一本書裏一頁只須要看一句話,點破那層窗戶紙,就能夠掌握新的知識。

跟不少人同樣,剛畢業時我以爲做爲程序員,只要努力,加上少量天賦即可以得到一些成績。

工做一段時間後,對本身和其餘人的認識也愈來愈清晰,逐漸的發現程序員之間的差距或許比人和猴子之間的差距還大,接受這個事實這讓我鬱悶了好久。

再過一段時間,發現本身已經可以客觀的評價本身的能力,也意識到了距離並非那麼重要,只要想辦法跑的更快,就足夠了。


5:面對目前流行的技術不知如何下手?

第一,根據本身目前工做中所用到的技術,有目的性的學習;

第二,能夠根據各大互聯網公司的招聘要求,有選擇性地進行規劃學習;

第三,能夠參照文章尾部Java架構師所具有知識點,上面有從源碼到分佈式到微服務到併發等,是十多年的一羣有經驗的老師整理出來的。


6:一家公司待久了,過得很安逸,但跳槽時面試碰壁?

不少程序員有這樣的狀況,由於一直處於本身的溫馨區,天天寫的是本身熟悉的業務代碼,更多的作的是crud的工做,技術上沒有挑戰性,以爲生活也還能夠。可是一旦跳出這個溫馨區,就會很難適應,不知所措,由於外面新的技術太多,本身徹底跟不上技術的步伐,這時候須要梳理一下本身目前所欠缺的點,有針對性地進行提升。


7:以爲如今的技術基礎感受到很紮實,但就是本身的技術提高不上?

這種技術紮實更多的是基礎,好比javase,javaee等,並不能適應一線互聯網公司的技術體系,好比分佈式,微服務這塊。技術提高不上是由於本身沒有接觸過相關的項目,之前那種基礎知識網上還一大篇,可是越往上走資料越少,好的資料就越少,並且越往上若是沒有引路人更加舉步維艱。


8:以爲本身很牛B,通常需求都能搞定,可是所學的知識點沒有系統化,很難在技術領域繼續突破?

這裏的通常需求,更多的應該是在單機環境之下的crud操做,項目沒有太多難度,頂可能是業務上的分析複雜一些,技術用到了一些主流的技術,好比dubbo,也僅僅停留在api的使用層面,不瞭解其原理,並且與dubbo相關的其餘技術分支並無很好的拓展,因此感受很難突破。


9:如今以爲本身技術還能夠,但就是薪資漲不上去?

須要弄清楚薪資由什麼決定,是由你的價值決定,而你的價值取決於你的技術能力,若是你的技術能力一直停留在crud的層面,確定會上不去,你須要作的是突破技術瓶頸。(我相信這一點,是大多數開發人員會首先考慮到的問題)。


通過以上的幾個問題的總結,大家有一點點理解了麼?有什麼感觸沒?沒有?那麼大家繼續往下看。

程序員應有的幾個階段

  • 第一階段----三年

我認爲三年對於程序員來講是第一個門檻,這個階段將會淘汰掉一批不適合寫代碼的人。這一階段,咱們走出校園,邁入社會,成爲一名程序員,正式從書本上的內容邁向真正的企業級開發。咱們知道如何團隊協做、如何使用項目管理工具、項目版本如何控制、咱們寫的代碼如何測試如何在線上運行等等,積累了必定的開發經驗,也對代碼有了必定深刻的認識,是一個比較純粹的Coder的階段。


 

  • 第二階段----五年

五年又是區分程序員的第二個門檻。有些人在三年裏,除了完成工做,在空餘時間基本不會研究別的東西,這些人永遠就是個Coder,年紀大一些勢必被更年輕的人給頂替;有些人在三年裏,除了寫代碼以外,還熱衷於研究各類技術實現細節、看了N多好書、寫一些博客、在Github上分享技術,這些人在五年後必然具有在技術上獨當一面的能力而且清楚本身將來的發展方向,從一個Coder逐步走向系統分析師或是架構師,成爲項目組中不可或缺的人物。


 

  • 第三階段----十年

十年又是另外一個門檻了,轉行或是繼續作一名程序員就在這個節點上。若是在前幾年就抱定不轉行的思路而且爲之努力的話,那麼在十年的這個節點上,有些人必然成長爲一名對行業有着深刻認識、對技術有着深刻認識、能從零開始對一個產品進行分析的程序員,這樣的人在公司基本擔任的都是CTO、技術專家、首席架構師等最關鍵的職位,這對於本身絕對是一件榮耀的事,固然老闆在經濟上也毫不會虧待你。


我認爲,隨着你工做年限的增加、對生活對生命認識的深刻,應當不斷思考三個問題:

  • 我到底適不適合當一名程序員?
  • 我到底應不該該一生以程序員爲職業?
  • 我對編程到底持有的是一種什麼樣的態度,是夠用就好呢仍是不斷研究?

最終,明確本身的職業規劃,對本身的規劃負責併爲之努力。


架構師所具有的知識點

一:常見模式與工具

學習Java技術體系,設計模式,流行的框架與組件是必不可少的:
  • 常見的設計模式,編碼必備
  • Spring5,作應用必不可少的最新框架
  • MyBatis,玩數據庫必不可少的組件

 

 

 

 

 

二:工程化與工具

工欲善其事必先利其器,無論是小白,仍是資深開發,玩Java技術體系,選擇好的工具,提高開發效率和團隊協做效率,是必不可少的:
  • Maven,項目管理
  • Jenkins,持續集成
  • Sonar,代碼質量管理
  • Git,版本管理

 

 

在此我向你們推薦一個架構學習交流qun。交流學習qun號:+q q-q u n:948 368 769 qun內已經有小夥伴將知識體系整理好(源碼,筆記,PPT,學習視頻)。裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

 

 

三:分佈式架構

高併發,高可用,海量數據,沒有分佈式的架構知識確定是玩不轉的:
  • 分佈式架構原理
  • 分佈式架構策略
  • 分佈式中間件
  • 分佈式架構實戰

 

 

 

 

 

四:微服務架構

業務愈來愈複雜,服務分層,微服務架構是架構升級的必由之路,Java技術體系,和微服務相關的技術有哪些呢?
  • 微服務框架
  • Spring Cloud
  • Docker與虛擬化
  • 微服務架構

 

 

 

在此我向你們推薦一個架構學習交流qun。交流學習qun號:+q q-q u n:948 368 769 qun內已經有小夥伴將知識體系整理好(源碼,筆記,PPT,學習視頻)。裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

 

五:性能優化

任何脫離細節的ppt架構師都是耍流氓,向上能指揮若定,向下能解決一線性能問題,Java技術體系,須要瞭解:
  • 性能指標體系
  • JVM調優
  • Web調優
  • DB調優

 

 

 

 

在此我向你們推薦一個架構學習交流qun。交流學習qun號:+q q-q u n:948 368 769 qun內已經有小夥伴將知識體系整理好(源碼,筆記,PPT,學習視頻)。裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

六:底層知識

從架構設計,到應用層調優,再深刻了解底層原理,紮實的Java基本功才能讓本身變爲掃地神僧:
  • 內存模型
  • 併發模式
  • 線程模型
  • 鎖細節

 

相關文章
相關標籤/搜索