為了升級到架構師,程序員無需過度關注哪些技能?哪些技能不可缺?


    如果走技術路線,架構師是個關鍵的結點。如果在大廠,一般有有6年時間足以升級到高級開發。因為在大廠里,能提供架構師所需的分布式組件開發調試以及上線的經驗,上進點的程序員只要跟着大流,多通過排查問題觀察底層,多通過壓測或部署組件多實踐緩存、高並發高可能之類的技術,想不升級到架構師都難。

    但不少程序員止步於高級開發,在我之前的博文為什么很多程序員沒有升級到架構師?里講述了這一現象並分析了原因。如果是因為主觀不上進導致自身發展受限,那么別人也幫不了你,不過我在面試候選人的時候,發現一些態度積極的程序員把時間和精力用在了不正確的技術方面,從而無法升級,這是相當可惜的。在本文里,就先從反面講,哪些技術可以在升級到架構師以后再看,同時講下從高級開發升級到架構師的關鍵技術,以及實踐方法。

1 理論方面的知識,不必整本書地學

    像網絡,Linux操作系統,編譯原理等理論方面的書籍,一般很厚,不過幸好,此類知識可以邊學邊看,比如要看linux線程並發方面的知識時,再看相關資料也不遲。

    這里將綜合多個大廠面試和開發的標准,給出理論方面需要掌握的普遍標准,反之沒提到的就可以用到再學。

    1 數據結構方面,了解鏈表,隊列,堆棧,線性表,樹和矩陣,圖以及更復雜的無需了解,然后結合一種語言,比如Java,了解對應的對象,比如ArrayList。同時了解下紅黑樹,二叉樹之類的概念,或許面試會問到

    2 編譯原理,了解狀態機概念,可能會用到。

    3 網絡方面,理解七層網絡協議,外帶了解下tcp,udp和http協議細節即可

    4 Linux方面,稍微會寫命令即可。

    5 數據庫原理方面,也就了解些概念即可,比如索引原理,事務,范式和鎖即可。

    總之,與其花時間看整本理論方面的書,還不如多敲些實際的代碼。

2 項目管理方面的技能,需結合實際,而無需啃書

    這方面有很多經典,但看百本書,比如實踐一個月,這方面的建議是,在架構師之前的階段,看些相關軟件管理的實踐要點即可,比如敏捷開發里,頭腦風暴以及迭代發布的實踐要點,而且最好和你當前從事的軟件管理模式相匹配,比如你現在用的是敏捷模式,那么就關於詳細設計概要設計等文檔的編寫方式,大致了解下格式即可,也無需深入。

    還是這句話,這方面的一些經典書,當你成為項目經理或高層以后,再看不遲,而且到了這個層次看了很有幫助。不過話說回來,目前在大多數的公司里,不是你在項目管理方面的技能很資深才提拔你成為項目經理,而是你對業務有一定了解,同時技術,尤其是解決問題的能力達到一定水平 ,而且溝通協調方面的能力還不錯,才提升你。

    在成為架構師之前,項目管理方面的技能大致要了解到什么程度呢?比如拿敏捷開發舉例。

    1 每天站會該如何組織,如何表面自己已做,未做和當做的事,如何表明自己任務的阻礙點。

    2 如何維護每天站會所需的看板,看板上該有哪些模塊,相關任務點該怎么寫。

    如果到了項目經理級別,還得會用看板,站會和任務紙條等方式管理項目,以及控制風險,但如果僅僅是架構師之前的開發,了解這兩點即可,不用看過多其它的資料。所以為了升級到架構師,更應當把時間用在分布式等技能上。 

3 虛擬機,底層代碼,一定要對景實際問題,別脫離實際去看

    我見過不少虛擬機方面的書,非常經典,從底層和細節全面講述了虛擬機的結構和GC流程,同時也看過不少關於字節碼結構方面的資料,此外,我也見了不少深入細節講線程的書。這些書在面試方面對人的幫助優於提升技能方面。

    為什么不建議在升級到架構師之前,過多看虛擬機等方面理論的資料呢?第一平時開發用到的可能性不大,第二看不用不久就會忘掉,第三對解決調優高並發之類的問題,也沒什么太大的幫助。

    而且,對於底層代碼,也要解決問題去看,不建議大面積地看諸如集合,Spring IOC底層的源碼。比如某天遇到因Kafka而導致的OOM異常,那么可以通過Debug到底層看消息相關流程,再排查問題,調試MyCAT的問題也可以這樣。總之如果帶有排查問題的目的,針對性很強,非常有幫助,就像圍繞語境學習常用英語單詞和詞組,但如果大面試去看底層代碼,就好比背字典,效果大家可以想象。 

4 設計模式,軟件重構之類的技能應放在項目大環境,別抽象學,更全面鋪開學

    這方面也有不少經典,可謂字字珠璣。這里我提兩個問題。

    第一,面試時如何考察這方面的技能?估計是問“你用過哪些設計模式?”,大家結合項目敘述下即可。

    第二,在工作中你接收了一段代碼,在此技術上新增功能,你敢按設計模式和軟件重構方面的知識,重構現有代碼嗎?估計不敢,因為風險太大。

    那么這方面的技能對程序員有什么幫助呢?

    第一固然是面試時幫助加分,第二能讓你在解決問題時有更多的方案,比如實現通知回調類需求可以用觀察者模式,第三能幫助你的代碼看上去不難看。

    比如一些文學名著,對我們的幫助更多的是陶冶情操多漲知識,設計模式和軟件重構類的著作能幫我們提升在軟件開發方面的素養,在升級到架構師之前,這方面該掌握到什么程度呢?

    1 了解必要的設計模式,而不是23種都面面俱到,需要結合項目問題了解,同時面試時,能結合你解決過的問題說明某些設計模式的細節。

    2  了解軟件重構方面的結論,比如哪類代碼不好,該如何重構?

    要達到這個程度,所需花費的精力並不多,但如果用大量時間看這方面純理論的書,而不結合項目實際有選擇性地調個別點來看,那么到了架構師以后,你會發現當初學的很多點對你的幫助並不大。

5 面試時如何考察架構師?架構師平時干哪些活?

    在前文里,給出了一些無需着重看的技能點,無需着重看,並不是慫恿大家不學習,而是把看這些技能的時間用在能立竿見影出效果的技能上。

    在講架構師哪些技能不可缺之前,我們先來看下面試架構師的問題。 

    第一層問理論和實踐細節,比如Netty的序列化方式,以及Dubbo針對不同級別設置超時時間的方式。

    第二層問分布式調優和解決實際問題的技巧,比如如何配置MySQL主從模式,如何配置MyCAT讀寫分離外帶高可用,如何壓測,如何根據壓測結果調優代碼。

    第三層問底層細節,比如dubbo協議,Netty讀寫索引的細節,kafka持久化,Redis超時失效機制等方面。

    第四層是針對資深架構,問如何根據業務設計高並發框架,比如秒殺系統如何實現。

    為什么要問這些呢?因為招進來的架構師需要在平時工作中干這些活,哪方面的活呢?

    第一固然是高級開發所需的,分析和解決代碼層面的問題。

    第二是出了分布式組件方面的問題,首先知道該看哪些底層代碼,即了解組件的重要組件和工作流程。而且這方面要有經驗,比如出了Netty OOM問題,得知道該從堆外內存等方面排查,而且得優先檢查通訊結束時release部分的代碼,如果沒問題再debug。這才是架構師比高級開發值錢的點。

    第三得給出面向高並發高可用的方案,比如搭建負載均衡和限流組件等,而且不光是理論層面的,還得負責部署上線。

    其實在我之前相關博文里,已經給出了類似內容, 上文只是總結。在下文里,將面向這個目標,給出升級到架構師不可或缺的技能,以及如何高效掌握這些技能。

6 要熟悉解決異常問題方面的組件技能

    理論方面的技能應該很多,網上有很多xx大廠的面試題,而且大家只要稍微上心點,應該也能看到理論方面的相關技能,比如Netty重要組件,Netty協議等,但如果光知道這些用處不大,還得繼續看解決異常方面的技能。

    比如為了Dubbo超時會有什么危害,如何防治?或者Netty線程池滿了以后該如何優雅降級。如何掌握這方面的技能呢?

    第一到網上搜,比如用 Netty OOM異常,Netty 線上問題排查 等關鍵字查,這樣好歹能知道該看哪些方面。我在博客園上就看到不少結合問題分析分布式組件的文章。

    第二結合平時遇到的線上問題看底層代碼,分析為什么會出錯,也就是說結合實踐看。如果沒機會實踐怎么辦?大廠里一般可以找其它組, 小公司一般比較全棧,估計在部門里多觀察即可。

    比如遇到一個MyCAT問題,大家可以先按照大神分析問題的步驟,再調試一遍代碼,復盤下大神排查問題的思路,然后再擴大看下這個流程的細節,以及MyCAT的組件,這樣哪怕一周遇到一次問題,一個月也有四次實踐學習的機會,積累個半年,你的能力就大漲了。比起單純看資料,這樣的升級效率就高多了。 

7 更要掌握全棧流程的分布式組件部署技能

    這方面,要多向運維學習,小到linux命令和shell腳本,中到系統上線,大到擴容,你未必動手敲代碼,但可以參與值班。架構師所需的高可能高並發技能是虛的,下面給出這方面的具體技能。

    1 能通過jenkins或shell腳本部署組件的能力,系統上線時,需要了解灰度發布切流量的實踐技巧。

    2 未必需要了解底層,但需要配置高可用的集群,比如redis集群,一台機器出故障,第一會報警,第二能自動切換。

    3 需要掌握優雅停機和遷移擴容的實踐技巧,比如遷移服務時,如何設置優雅停機,擴容時,第一如何起新服務,第二如何把流量切到新服務上,第三如何設置回退預案。

    4 如何組織壓測,如何在壓測時監控關鍵指標,如何根據壓測結果優化性能。

    還是這句話,如果當前沒機會參與,就先在邊上看,等給出結論后,再自己復盤看下相關技能的實踐要點。這些技能就比較難得了,網上類似資料有,但很少,而且需要自己組織,所以更需要在平時工作中主動積累。我見過很多高級開發,平時也就注重在windows上開發業務,由於工作中用不到,他們為圖省事,不去參與部署壓測和擴容方面的工作,結果會在高級開發的階段停滯不前,最后年齡上來了,導致無法升級。

8 隨后才是看些面試題應對面試

    我也知道,如果當前處於初級和高級開發階段,平時被分配的工作任務很少涉及到上述架構師所需要的技能,但並不意味着你身邊就沒有架構師,工作中就看不到這方面的技能,當你通過觀察復盤,結合案例掌握了架構師相關技能后,如果在大廠,那么自然有機會升級到架構師,但如果在小公司,那么你就需要多刷相關面試題了。

    這方面的題太多了,比如redis面試50題,xx大廠 dubbo面試xx題。如果光看這些題,面試官一旦結合案例問dubbo細節,一定能問出你沒相關經驗。如果被問出沒相關實踐經驗,那么甚至你面不上大廠的高級開發崗,更別提架構師了。

    但現在你已經積累了案例經驗,那通過刷題積累更廣泛的技能,那么面試架構師,甚至面試大廠架構師,都不是問題了。或者退而求其次,你或者可以先進大廠做高級開發,這個職位也能積累架構師的經驗,這總比在小公司前途要光明。

9 總結:不為炫耀學,學的時候更得注意優先級和方法

    我們看書,不是為了向朋友炫耀自己了解多少,而是要提升自己解決實際問題的能力,看底層代碼同樣也如此。

    在明確目標的前提下,我們也要明確學習的優先級和方法,比如一些對現階段幫助不大的技能,可以延后學,而對升級到架構師有幫助的技能得結合實際問題學。

    總之目標得明確,所謂在正確的階段做正確的事。如果要走技術發展路線,要升級到架構師,所有的學習都得是為這個目標。如果當前的技能無法滿足大廠的面試需求,應方向正確,優先結合項目實踐看分布式組件技能,而不是繼續挖掘單機版這類對架構師幫助不大的技能,而且總是先深入技能,再看能幫助提升知識面的各種著作。  

    本人在之前也寫過不少關於升級到架構師技巧的文章,比如以互聯網公司的經驗告訴大家,架構師究竟比高級開發厲害在哪?而在這篇文章里,是針對了一些升級方法上的誤區,先講述哪些技能無需過度學,再講述哪些技能得優先結合項目學,自認為能在前文的基礎上,進一步幫助大家在升級到架構師的路上少走彎路,希望大家能喜歡。

     最后感謝大家能讀完本文,祝大家新春愉快,身體健康,萬事如意。

    

版權說明:

    如果要轉載本文,請先征得本人同意。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM