如何成長為一名架構師?
很多程式設計師想成為一名架構師,但是對於其中的技能掌握程度,以及程式設計功底的要求?設計能力的要求有哪些?
我簡要從以下6點經驗來談,從技能的角度拋磚引玉。
1:程式設計基本功:資料結構和演算法
1.資料結構相關的雜湊表、連結串列、二叉樹等等
2.常見的演算法有哪些?至少下圖的演算法我認為應該要掌握。
比如:HashMap如何擴容,重點就是考底層資料結構。
2:程式設計基本功:Java程式設計
這些都算是程式設計基本功底:多執行緒、JVM、併發容器、併發類、NIO等。
3:Web開發
其實web開發這個領域,如果你要掌握好了,發展也非常不錯的。
比如:現在的H5、小程式等,對於掌握前端技術的開發人員,競爭力也是槓槓的。
當然作為後端開發人員,多掌握點前端的技術,那也是必須的。
4:資料庫
重點就看圖了,這裡涉及的技術還是蠻多的,mysql、oracle、nosql相關的mongodb,以及如今大家都熟知的分庫分表、讀寫分離等技術。
這些都是大家熟知的,我補充點設計相關的:資料庫設計正規化、索引、事務、資料庫相關的慢查詢、長事務。
這些也算是資料庫技術的程式設計功底。
5:研發相關的框架工具
Java程式設計師對於下圖應該都是比較熟悉的,這些框架與工具都是經常使用。
6:架構設計
談到設計,就不得不提到專案中的概要設計和詳細設計,這就會涉及到UML。
除此之外,整個專案的設計,這個時候考驗你的架構設計能力。
這裡的架構設計,包含的系列非常多,特別是Redis、應用程式拆分、拆分後涉及到的RPC微服務等技術,以及後端資料庫的拆分技術,以及拆分後的分散式叢集部署。
程式設計師如何突破成長瓶頸?
對工作1-3年的程式設計師來說,依據個人情況提前規劃未來職業發展方向,這很重要。譬如,在未來3-5年甚至更久,工作要做到什麼程度?往哪個方向發展?通過怎樣的路徑才能實現目標?如果沉浸在當下“程式設計師高薪”的論調中歲月靜好,總歸有一天會面臨網上熱議的“程式設計師中年危機”,以至於最後不得不步入轉行或提前退休的尷尬局面。
作為經常跟IT人接觸的我,我一直認為這個話題對程式設計師非常重要,今天和大家詳細聊聊。
職業規劃的重要性
人生和職場就像下象棋,你只有明確了目標才不會在每一步上迷茫,之所有迷茫,是因為不清楚自己最終想要什麼,下一個階段的目標在哪裡?
- 某公司表示薪資上浮20%-30%,我應該跳槽加入嗎?
- 我最近收到了幾個offer,應該去哪一家更好?
- 從大公司去小公司,是否值得去嘗試?
- 想成為架構師,但不知道自己的技術是否能勝任?
- 從程式設計師轉行,但不知道未來自己的競爭力會變弱嗎?
- ……
其實,追求短期利益(眼前)或長期利益(未來),取決於你自己的決定。
我的建議是,不要在你經歷之後,再去回顧職業生涯,初期跳槽漲薪確實很快,但到了中後期,跳槽再也帶不來前期的漲幅,反而在頻繁的跳槽過程中,失去了很多機會,技能與業務的能力也沒能積累沉澱下來,這將直接導致很多人在即將步入中年時感到異常焦慮,不知道自己未來的路何去何從。
跳槽和轉行如果僅僅只是工作逃避的手段,未來你將面臨更大的焦慮,未來也根本談不上什麼有什麼核心競爭力。但如果跳槽和轉行,是謀定而後動,圍繞你的主線職業去發展,這是完全不一樣的結果。
總之,在職業的選擇上,絕不能有“逃避”二字,逃避將會讓你無處藏身,你只有明白了這個道理,你才會去克服眼前的困難,學會承擔,這樣的人生才有未來。
程式設計師的職業發展方向
1、架構師(專注技術,側重技術)
每一個程式設計師都有一個架構師的夢想,這個方向是很多技術人的第一選擇,從年薪十幾萬的程式設計師成長為年薪幾十萬甚至過百萬的架構師,給力的薪酬已足以讓不少程式設計師心動不已。若未來你想成為架構師,那麼現在至少需要清楚瞭解架構師的主要職責是什麼?有目標有方向地堅持學習。
2、專案經理(技術一般,側重管理)
往管理方向發展的職業路徑,專案經理主要側重於專案管理工作,主要能力是計劃、溝通及組織協調。溝通和表達是開發人員短柄,所以想往此線路發展的同學,從日常的工作、生活中就得逐步加強鍛鍊這方面能力。
3、技術經理(技術和管理結合)
技術經理需要帶領團隊前行,在國內的技術經理,大部分都在30歲左右。一般,程式設計師在30歲是一個職業分水嶺。
技術經理的這個階段的工作重點不再是專注於技術,而是在培養團隊,帶領團隊為主。如果你沒有讓團隊的成員變得更好,沒有分享,沒有利益分享的想法,沒有去幫助大家成長的想法,這樣的程式設計師不太適合這個崗位。
總之,這個職位成全大家而不是自己才是重點。
4、產品經理(轉崗)
如果你對技術發展路徑、管理髮展路徑都不感興趣,那麼不妨考慮轉產品經理,移動網際網路時代,產品經理的角色越來越重要,一個好的產品經理有可能帶給公司顛覆性的發展,收入各方面也還不錯,我認識的一些程式設計師,也有轉行做產品經理,並且做得還不錯的。
5、CTO(管理+技術結合,側重管理)
需要有一定的技術能力和團隊管理能力。CTO的工作更偏業務、偏管理,以及商業等,主要職責包括團隊管理、開發流程、公司戰略、業務增長以及各類技術疑難問題的解決等,可以說是一個比較全方位的發展方向,一句話,CTO的主要職能是管理+技術+業務+商業的綜合發展。
成長為Java架構師必須突破的11個技術點
1、Java基礎技術體系掌握牢固:
- JVM記憶體分配
- 垃圾回收
- 類裝載機制
- JVM效能優化
- 反射機制
- 多執行緒
- 網路程式設計
- 常用資料結構和相關演算法
2、對物件導向的軟體開發思想有清晰的認識、熟悉掌握常用的設計模式:
- 熟練使用UML工具以及各種流程圖
- 經典的設計模式會手寫以及熟知使用場景
- 概要設計與詳細設計
- 物件導向的核心思想需要運用在程式碼程式設計中,例如:高內聚低耦合
3、目前流行開源框架,除了熟練使用,還需要掌握核心原理和實現
- Spring
- Springmvc
- MyBatis
建議看原始碼以及debug配合掌握實現原理。
4、熟悉Oracle、MySQL等SQL,以及MongoDB等NoSQL開發。
- 特別是MySQL,相關的索引優化、SQL查詢優化、慢的事務優化等,以及MySQL的分庫分表等也需要掌握。
- MongoDB等典型的NoSQL大資料場景設計
5、CDN,以及分散式快取系統Redis或 Memcached的設計和研發
CDN與分散式快取的設計原理其實是一致的,重點你需要掌握兩者之間的區別和使用場景。
6、熟悉底層中介軟體等分散式技術
分散式技術涉及範圍比較廣,例如相關的訊息中介軟體就會涉及到3個以上,為什麼要選擇Kafka或者
RabbitMQ,選擇和比較需要掌握。除此之外,很多內部系統還會涉及到JBPM工作流中介軟體等。
7、精通shell程式設計,熟練應用awk、sed、grep、strace、tcudump、gdb等常用命令。
8、有大型分散式、高併發、高負載(大資料量)、高可用性系統設計開發經驗。
大型分散式就會設計到高併發解決方案,以下有相關的知識。
9、對配置管理和敏捷研發模式有所瞭解。
- jekins、nexus、git等
- 敏捷開發、極限程式設計等。
10、熟悉常見的一些解決方案及其原理
單點登入、分散式快取、SOA、全文檢索、訊息中介軟體,負載均衡、連線池、流計算等。
11、能大概知道市面上主流技術的特點及業務瓶頸
例如秒殺系統等如何設計。
總結
不管選擇什麼樣的路徑,都離不開提前規劃、充分準備,機會總會留給有準備的人。程式設計師是個相對公平的職業,你若盛開,蝴蝶自來,薪酬也會隨能力得到明顯增幅,那麼大家在應對中年危機時更加遊刃有餘了。