|
研發人員的職業規劃时间:2020-11-01 最近經?吹饺氖畾q的程序員被裁員、找工作處處碰壁,每次看到類似的新聞都不由的想到,大齡程序員是真心喜歡寫代碼還是只是為了一個工作,如果是真心喜歡,那到無可厚非,但我相信大多數的程序員對自己的職業生涯是有期待的,如果能夠認真做好自己的職業規劃,按照規劃的路徑不斷成長也不會如此窘迫。 開發人員如果沒有一個良好的職業規劃,隨著時間的流逝,年齡的增大,體力、精力都將大不如前;當你某天突然發現原來和你同一起跑線的同窗好友,落下你的差距大到讓人驚訝時,就真的很難逆轉這種局面了。 職業規劃總是在不停的指引我們向前發展,因為我們有目標、有規劃、有方向,不會感到彷徨、困惑,這就是職業規劃的力量!不要因為你現在的微不足道而放棄對自己的規劃,只要做好切實可行適合你的規劃,并且一步一步的按著規劃來做,達到目標只是時間問題! 那我們應該如何做好職業規劃呢?每位技術人員的實際情況不同,但是大部分技術人員的職業可以分為三個階段。 第一階段為起步期,一般是畢業后的三年內。不論何種背景,這一階段的主要工作是打牢技術基礎,編寫代碼、功能測試和系統維護;主要目標是學習和掌握公司產品/項目的基本技術、工具和流程。本階段也是軟件行業所有職業的起點和立身之本,不論將來擔任何種職位,都必須依賴于這一階段打下的基礎。大家在這個階段更多的是忙著做一些基本的日常工作,對職業規劃的方向感比較模糊。當然,確實也有些同學在這個階段就可以充分的認識自己,有明確的職業規劃。 第二階段為成長期,一般為畢業后三到十年。這一階段我們已經掌握了基本的技術技能和經驗,能夠獨立工作、指導或帶領他人工作。 這一階段要認真思考自己的能力、特長以及行業方向,有哪些適合。自我認知和環境認知是很關鍵的一個環節,需要對自己和企業內外部環境有全面且清晰的了解,結合自己的興趣、性格、價值觀、能力,確定職業發展目標并制定職業規劃。當然,知易行難,有了計劃是第一步,關鍵在于執行,如何按照設定的目標去行動才是決定因素。對開發人員來說,一般是走技術路線或者管理路線,當然也有少數人轉行去做市場、銷售、質量管理的,這里只討論技術和管理兩個方向的職業規劃。 技術發展路線是這樣的,軟件開發工程師--->高級軟件工程師--->軟件架構師--->高級架構師--->技術專家--->資深技術專家--->CTO;如何采取行動逐步實現這個目標呢,職業規劃的本質是設定職業目標,然后拆解目標,分階段全力實現。 如果將終極目標定為CTO,需要先制定階段目標,第一個階段就是成為架構師。假如要在三年后成為架構師,從現在開始要制定一個分階段的規劃,比如前兩年達到高級開發的水平,可以做一些小型項目的架構設計工作,后一年要對各個技術的優缺點、適用業務場景都有自己的分析,從更高的維度對架構進行設計,保持技術的先進性、可擴展性。在此基礎上,把規劃再細化一些,每年的每個季度、每月完成哪些內容,目標進一步細化,最后的目標要設定為自己可以完成的粒度,每個細粒度的任務完成后,日積月累,大目標會越來越近,起碼不會感覺很遙遠。假如執行過程中有偏差也可以根據實際情況進行調整,但是大方向不會變化,執行過程中會逐步建立自信心,執行順利的話可能會提前實現目標。 對于一些開發人員暫時沒有明確的職業規劃,但是也想進步、想學習、想在公司展現自己的能力,可以根據實際情況制定小目標,比如這周我要精通某個技術,下月我要學習一門新的技術,多個小目標達成后,你會發現你比身邊人已經進步很多了,但前提是要堅持去做。堅持做一件事永遠比想象中要困難,因為現在快節奏的生活中,誘惑太多,時間不經意就浪費了,需要有堅定的決心和毅力去執行計劃。執行過程中會對自己要求越來越高,逐漸發現自己的優勢,對自己有更深刻的認知,逐漸就有了更清晰的職業規劃,也就有了前進的動力。 這里說一下Java相關的技術知識體系,如果要走技術路線,可以參考以下內容進行規劃提升。 Java知識體系主要包括基礎知識、工具、并發編程、數據結構與算法、數據庫、JVM、架構設計、應用框架、中間件、微服務架構,可以按時間線從這些方面進行技術的提升。 基礎知識包括基礎語法、面向對象、集合框架、IO流、網絡編程、常用API、常用工具類庫、單元測試、異常、日志,這些在我們發展的第一階段應該掌握,沒有掌握的知識點可以針對性地鞏固一下,這是走向架構師的必備基礎。 工具主要包括開發工具、持續集成工具,如IDEA、Navicat、Maven、Sonar、Git、GitLab這些開發工具是日常開發必須要掌握的,像Jenkins、Docker、Kubernetes這些持續集成工具在前期只需要了解熟悉,后期微服務需要集群部署、水平擴展時就需要更深入的學習使用了。 就像升級打怪一樣,掌握基礎知識和開發工具后,只是可以滿足日常的開發工作,要想進一步提升解決問題的能力,需要學習Java高級特性相關知識,這些也是我們走向高級開發要掌握的內容。 并發編程,包括并發的基礎知識、并發理論、并發關鍵字、Lock體系、并發容器、線程池、原子操作類、并發工具,最后需要并發實踐,生產者-消費者模式是一個十分經典的多線程并發協作模式,可以按照這個業務模式寫代碼進行實戰,觀察線程執行情況。 數據結構與算法,數據結構包括數組、棧、隊列、鏈表、樹, 樹包括二叉樹、完全二叉樹、平衡二叉樹、二叉查找樹(BST)、 紅黑樹、B樹、B+樹;算法也分很多種類,排序算法:快速排序、歸并排序、計數排序 ;搜索算法:回溯、遞歸、剪枝 ;動態規劃:背包問題、最長子序列、計數問題 ;基礎技巧:分治、倍增、二分法、貪心算法;所有的后臺系統的代碼邏輯,都是由這些數據結構和算法組成的,這些數據結構和算法也是進入大廠的必要條件。 數據庫,說一下應用最廣泛的MySQL、Redis、MongoDB。MySQL主要包括數據庫基礎知識、數據類型、存儲引擎、索引、三大范式、常用SQL語句、存儲過程與函數、視圖、MySQL優化、事務、數據備份與還原;Redis主要包括Redis支持的數據類型、發布訂閱、事務、管道、持久化、主從復制、LRU淘汰策略、集群部署;MongoDB主要是數據結構、命令操作、索引、優化、高可用。這些不能只停留在會用的階段,必須要掌握原理、性能優化; JVM,包括內存模型、堆棧、GC、類加載系統、反編譯、基本指令、字節碼文件、JVM優化等。 架構設計,包括高可用架構、高并發架構、可伸縮架構、集群,使用的設計模式按類型主要分三類;創建型:單例模式、工廠模式、抽象工廠模式;結構型:適配器模式、外觀模式、代理模式、裝飾器模式;行為型:觀察者模式、策略模式、模板模式,掌握了這些設計模式可以讓你做架構設計時游刃有余。 應用框架,首先要了解框架的優缺點、解決了什么問題,官網的技術文檔是快速了解框架的最好方式。其次就是搞清楚框架原理、工作流程、工作原理,再詳細一些就是源碼分析、核心類、核心方法、設計模式;應用框架類型主要包括Java服務器、負載均衡、web層框架、服務層框架、持久層框架、私服、消息組件、日志框架、緩存框架、RPC框架、規則引擎、工作流、批處理、通用查詢框架、Java安全框架、Linux操作系統。 中間件,消息中間件主要有RabbitMQ、Kafka、RocketMQ、ActiveMQ;遠程過程調用中間件:Dubbo;還有數據訪問中間件、Web應用服務器、Tomcat、Nginx、緩存等。 微服務和分布式,微服務相關的生態主要有Spring Cloud、服務注冊發現、服務配置、負載均衡、服務調用、服務限流、熔斷降級、網關路由、服務權限、鏈路追蹤、分布式事務、分布式緩存、分布式會話、日志收集、服務監控、消息驅動、數據處理流、自動化測試與部署、分布式協調服務Zookeeper。 大家可以根據上面的內容進行遞進的規劃學習,只要堅持去執行,始終持之以恒的堅持,那目標就不遠了。 管理發展路線是這樣的,高級軟件工程師--->開發經理/項目經理/產品經理--->項目總監--->技術管理總監--->部門經理--->總經理;技術發展路線最后的職位是資深技術專家或者CTO,而管理路線的發展空間更為廣闊,發展成為CEO也不無可能。 如果沒有發自內心的熱愛編程,又或者你有管理方面的特質,可以嘗試走管理路線。管理路線是可以預見未來的,是可以看到結果的,是相對可靠的,走管理路線需要做很多功課提前儲備這方面的能力,從開發轉到管理,首先要十分熟悉產品和技術,還要具備良好的協調溝通能力;掌握軟件工程的流程、進度控制、質量控制、資源的有效使用等;掌握項目管理的知識、技術、技巧與方法,具備一定的行業知識。同時也需要機遇,日常工作中要善于表現自己,主動承擔項目的一些協調、管理的工作,可以從開發組長做起,逐漸鍛煉自己的管理能力,有合適的機會讓領導看到并表達自己的意愿,通過這樣一個過程來實現目標。 第三階段為發展期,一般為工作十年以后。這一階段的人員已經成為組織內的技術或管理骨干,可以向更高層次的綜合管理和企業戰略方向發展。如果說第一階段比較容易實現,第二階段通過一定程度的努力可以實現,而第三階段則主要靠機遇和個人奮斗了。 目前我們開發小伙伴大多數都是在第二個階段,大家可以結合自己的實際情況思考一下,如果沒有明確的職業規劃,在沒有工作安排或者周末休息的時候,是不是都不知道做什么了?是不是找一些視頻、電視劇來消磨時間?長期下來,你會發現自己在一年中并沒有什么成長,最多只是多了一些工作經驗。當你的技術能力沒法跟上發展的時候,很可能被市場淘汰掉。 公司一直在成長進步中,如你不能跟著公司一起快速成長,那自己就是在倒退。盡早制定一個可行的職業規劃,讓自己空閑的時候忙起來,哪怕這個規劃是短期的,起碼讓自己有一個目標,有一個前進的動力,這樣才能夠讓自己不斷進步、當面臨選擇時讓自己擁有更多主動權。 |