從職業方向,談程序員如何突破成長瓶疾,咱們該怎麼去學習?


如何成長爲一名架構師?

不少程序員想成爲一名架構師,可是對於其中的技能掌握程度,以及編程功底的要求?設計能力的要求有哪些?前端

我簡要從如下6點經驗來談,從技能的角度拋磚引玉。mysql

1:編程基本功:數據結構和算法

1.數據結構相關的哈希表、鏈表、二叉樹等等git

2.常見的算法有哪些?至少下圖的算法我認爲應該要掌握。程序員

好比:HashMap如何擴容,重點就是考底層數據結構。web


2:編程基本功:Java編程

這些都算是編程基本功底:多線程、JVM、併發容器、併發類、NIO等。面試


3:Web開發

其實web開發這個領域,若是你要掌握好了,發展也很是不錯的。算法

好比:如今的H五、小程序等,對於掌握前端技術的開發人員,競爭力也是槓槓的。sql

固然做爲後端開發人員,多掌握點前端的技術,那也是必須的。mongodb


4:數據庫

重點就看圖了,這裏涉及的技術仍是蠻多的,mysql、oracle、nosql相關的mongodb,以及現在你們都熟知的分庫分表、讀寫分離等技術。shell

這些都是你們熟知的,我補充點設計相關的:數據庫設計範式、索引、事務、數據庫相關的慢查詢、長事務。

這些也算是數據庫技術的編程功底。


5:研發相關的框架工具

Java程序員對於下圖應該都是比較熟悉的,這些框架與工具都是常用。


6:架構設計

談到設計,就不得不提到項目中的概要設計和詳細設計,這就會涉及到UML。

除此以外,整個項目的設計,這個時候考驗你的架構設計能力。


這裏的架構設計,包含的系列很是多,特別是Redis、應用程序拆分、拆分後涉及到的RPC微服務等技術,以及後端數據庫的拆分技術,以及拆分後的分佈式集羣部署。

程序員如何突破成長瓶頸?

對工做1-3年的程序員來講,依據我的狀況提早規劃將來職業發展方向,這很重要。譬如,在將來3-5年甚至更久,工做要作到什麼程度?往哪一個方向發展?經過怎樣的路徑才能實現目標?若是沉浸在當下「程序員高薪」的論調中歲月靜好,總歸有一天會面臨網上熱議的「程序員中年危機」,以致於最後不得不步入轉行或提早退休的尷尬局面。

做爲常常跟IT人接觸的我,我一直認爲這個話題對程序員很是重要,今天和你們詳細聊聊。

職業規劃的重要性

人生和職場就像下象棋,你只有明確了目標纔不會在每一步上迷茫,之全部迷茫,是由於不清楚本身最終想要什麼,下一個階段的目標在哪裏?

  • 某公司表示薪資上浮20%-30%,我應該跳槽加入嗎?
  • 我最近收到了幾個offer,應該去哪一家更好?
  • 從大公司去小公司,是否值得去嘗試?
  • 想成爲架構師,但不知道本身的技術是否能勝任?
  • 從程序員轉行,但不知道將來本身的競爭力會變弱嗎?
  • ……

其實,追求短時間利益(眼前)或長期利益(將來),取決於你本身的決定。

個人建議是,不要在你經歷以後,再去回顧職業生涯,初期跳槽漲薪確實很快,但到了中後期,跳槽再也帶不來前期的漲幅,反而在頻繁的跳槽過程當中,失去了不少機會,技能與業務的能力也沒能積累沉澱下來,這將直接致使不少人在即將步入中年時感到異常焦慮,不知道本身將來的路何去何從。

跳槽和轉行若是僅僅只是工做逃避的手段,將來你將面臨更大的焦慮,將來也根本談不上什麼有什麼核心競爭力。但若是跳槽和轉行,是謀定然後動,圍繞你的主線職業去發展,這是徹底不同的結果。

總之,在職業的選擇上,毫不能有「逃避」二字,逃避將會讓你無處藏身,你只有明白了這個道理,你纔會去克服眼前的困難,學會承擔,這樣的人生纔有將來。

程序員的職業發展方向

一、架構師(專一技術,側重技術)

每個程序員都有一個架構師的夢想,這個方向是不少技術人的第一選擇,從年薪十幾萬的程序員成長爲年薪幾十萬甚至過百萬的架構師,給力的薪酬已足以讓很多程序員心動不已。若將來你想成爲架構師,那麼如今至少須要清楚瞭解架構師的主要職責是什麼?有目標有方向地堅持學習。

二、項目經理(技術通常,側重管理)

往管理方向發展的職業路徑,項目經理主要側重於項目管理工做,主要能力是計劃、溝通及組織協調。溝通和表達是開發人員短柄,因此想往此線路發展的同窗,從平常的工做、生活中就得逐步增強鍛鍊這方面能力。

三、技術經理(技術和管理結合)

技術經理須要帶領團隊前行,在國內的技術經理,大部分都在30歲左右。通常,程序員在30歲是一個職業分水嶺。

技術經理的這個階段的工做重點再也不是專一於技術,而是在培養團隊,帶領團隊爲主。若是你沒有讓團隊的成員變得更好,沒有分享,沒有利益分享的想法,沒有去幫助你們成長的想法,這樣的程序員不太適合這個崗位。

總之,這個職位成全你們而不是本身才是重點。

四、產品經理(轉崗)

若是你對技術發展路徑、管理髮展路徑都不感興趣,那麼不妨考慮轉產品經理,移動互聯網時代,產品經理的角色愈來愈重要,一個好的產品經理有可能帶給公司顛覆性的發展,收入各方面也還不錯,我認識的一些程序員,也有轉行作產品經理,而且作得還不錯的。

五、CTO(管理+技術結合,側重管理)

須要有必定的技術能力和團隊管理能力。CTO的工做更偏業務、偏管理,以及商業等,主要職責包括團隊管理、開發流程、公司戰略、業務增加以及各種技術疑難問題的解決等,能夠說是一個比較全方位的發展方向,一句話,CTO的主要職能是管理+技術+業務+商業的綜合發展。

成長爲Java架構師必須突破的11個技術點

一、Java基礎技術體系掌握牢固:
  • JVM內存分配
  • 垃圾回收
  • 類裝載機制
  • JVM性能優化
  • 反射機制
  • 多線程
  • 網絡編程
  • 經常使用數據結構和相關算法
二、對面向對象的軟件開發思想有清晰的認識、熟悉掌握經常使用的設計模式:
  • 熟練使用UML工具以及各類流程圖
  • 經典的設計模式會手寫以及熟知使用場景
  • 概要設計與詳細設計
  • 面向對象的核心思想須要運用在代碼編程中,例如:高內聚低耦合
三、目前流行開源框架,除了熟練使用,還須要掌握核心原理和實現
  • Spring
  • Springmvc
  • MyBatis

建議看源碼以及debug配合掌握實現原理。

四、熟悉Oracle、MySQL等SQL,以及MongoDB等NoSQL開發。
  • 特別是MySQL,相關的索引優化、SQL查詢優化、慢的事務優化等,以及MySQL的分庫分表等也須要掌握。
  • MongoDB等典型的NoSQL大數據場景設計
五、CDN,以及分佈式緩存系統Redis或 Memcached的設計和研發

CDN與分佈式緩存的設計原理實際上是一致的,重點你須要掌握二者之間的區別和使用場景。

六、熟悉底層中間件等分佈式技術
  • 分佈式技術涉及範圍比較廣,例如相關的消息中間件就會涉及到3個以上,爲何要選擇Kafka或者
    RabbitMQ,選擇和比較須要掌握。

  • 除此以外,不少內部系統還會涉及到JBPM工做流中間件等。

七、精通shell編程,熟練應用awk、sed、grep、strace、tcudump、gdb等經常使用命令。
八、有大型分佈式、高併發、高負載(大數據量)、高可用性系統設計開發經驗。

大型分佈式就會設計到高併發解決方案,如下有相關的知識。

九、對配置管理和敏捷研發模式有所瞭解。
  • jekins、nexus、git等
  • 敏捷開發、極限編程等。
十、熟悉常見的一些解決方案及其原理

單點登陸、分佈式緩存、SOA、全文檢索、消息中間件,負載均衡、鏈接池、流計算等。

十一、能大概知道市面上主流技術的特色及業務瓶頸

例如秒殺系統等如何設計。

總結

無論選擇什麼樣的路徑,都離不開提早規劃、充分準備,機會總會留給有準備的人。程序員是個相對公平的職業,你若怒放,蝴蝶自來,薪酬也會隨能力獲得明顯增幅,那麼你們在應對中年危機時更加遊刃有餘了。

往期精彩文章

兩個月拿到N個offer,看看我是如何作到的

面試總結:2019年最全面試資料學習大全

淘寶面試回來,想對程序員們談談

相關文章
相關標籤/搜索