作為程序員,我們應該如何去規劃好自己的職業道路?
作為程序員群體的一員,我發現身邊很多同學都非常的踏實,雖然這是一個很好的素質,但我們除了踏實做事以外,也需要多抬頭看看路。才能讓自己在職業道路上走的更穩更長久。
身邊很多同學都知道去追求升職加薪,但卻很少去考慮一個完整的職業規劃,很少去考慮自己的職業目標。對于以后自己是去做 技術管理?還是做 技術架構?又或者是干脆轉行?很少去思考。
因此,今天我就來跟大家簡單聊一聊程序員的職業發展路徑。
一、先看看各技術層級的要求?
在聊程序員的發展之前,我們先看一下常見的互聯網公司技術團隊里,程序員這職業的等級是怎么劃分的?
一般分為以下幾個級別,再往上可能就是技術專家或者首席技術官了。
初級工程師
中級工程師
高級工程師
資深工程師/架構師
下面繼續看一下每個級別的素質要求是什么?
初級工程師
初級工程師主要是指剛畢業的,職場上的技術新人。通常這類人會有一定的專業理論知識,所以也能夠比較快的學習公司的常用框架、工具和開發技術。能夠在上級/導師的指導下,理解相關的業務知識。
能夠按照研發需求完成部分模塊和功能的開發,能夠在別人的指導下解決研發中遇到的問題。
中級工程師
中級工程師是大多數三到五年程序員所處的水平。中級工程師必須要能夠獨立承擔開發任務,并且能夠獨立負責某個模塊或小系統。
能夠根據自己的歷史經驗和學習能力,獨立解決日常工作中遇到的技術問題。
高級工程師
高級工程師,一般是混跡多年,且有一定技術積累的程序員,有一套自己的開發方法。對于高級工程師要求能快速的理解業務、夠獨立負責一個中大型系統,且在工作中需具備指導他人的能力,屬于團隊骨干,在團隊中有一定的技術影響力。
資深工程師/架構師
程序員到了資深的級別之后,其實在職業上可以分為兩個發展方向。
一個是繼續往技術深度上鉆研,在某個技術領域內有一定的深度和影響力,我們稱為資深工程師。
還有另一個方向就是往技術的廣度上發展,除自身技術線以外,對周邊相關技術也有一定的研究和理解,能夠站在更高的維度上去俯視項目里的技術結構,業務理解能力也很強,根據不同業務,設計出不同的技術方案,這一類我們稱為架構師。
上面雖然從企業的用人視角來列舉了不同技術層級應具備的要求,但還是不夠具體,不太方便量化和評估,因此,我們可以根據上面的要求,總結出一套對程序員的評估方法,主要分為三個方面:
通用素質:
用來評估程序員的通用素質水平。比如 系統思維能力、溝通表達能力、經驗開放意識、嚴謹性、組織能力、影響力等。
知識技能:
用來評估程序員的知識和技術水平。比如 編程語言、安全、框架應用、系統設計等能力。
業務能力:
這個主要用來評估程序員的業務理解能力、業務建模能力等。
二、有哪些基礎技能是都必須具備的?
在知道了程序員各不同層級的能力模型后,我們再來看一下有哪些基礎的技術能力是不同層級都應該具備的,是程序員技術水平的基石:
數據結構
數據結構是基礎中的基礎。有些人覺得數據結構的知識貌似在實際工作中用到很少,反而在面試中問的多,所以就認為這個東西不實用。殊不知數據結構是我們編碼的根本。只不過我們平時用的框架工具多了,很多都被封裝好了,大家直接調用即可,導致大家對這一塊兒漸漸忽略了。但是只有真正理解了數據結構,我們才能寫出有質量的代碼。
常用的數據結構有:數組、鏈表、堆棧、隊列、樹、二叉樹、圖等。
常用算法
算法是每一個程序員都繞不開的話題。但算法跟數據結構一樣也是編程的靈魂,是真正區別出不同程序員編程水平的地方,每個技術人都應該學好。
數據存儲
存儲是每個項目的必須環節。以數據庫舉例,有關系型的數據庫,還有NoSQL數據庫等,另外還有文件存儲系統。這些在做項目中都可能遇到,所以需要熟練掌握其原理和用法。
編程規范
編程規范這個自然不必多說,也是最容易看出程序員水平的地方。雖然很多不規范的代碼也能運行,但是作為一個有追求的程序員,理應按照一定的編程規范去管理好自己的代碼。優秀的程序員始終要有個理念記在心中:代碼的第一作用是給人讀的,第二作用才是給機器使用。
開發平臺
這里指的是程序員常用的編程語言、以及語言所在的生態和框架。以Java程序員舉例,必須得深入了解Java的語言特性,以及Java這個語言平臺的生態體系,同時熟練掌握Java的常用框架和主流方案,每一個語言都有這樣的平臺與生態。
安全
粗略可分為代碼安全和運維安全。
代碼安全指的是程序員在開發項目的時候,編寫出來的代碼應具備一定的安全性,例如 防止XSS跨站攻擊、防止SQL注入等等。這些除了寫代碼的時候要注意,后期也可以通過單元測試、代碼評審來發現風險。
運維安全是項目在生產環境下,部署的環境安全、資源隔離、運維操作規范、漏洞掃描等方面的安全工作。
三、如何打造屬于自己的技術體系?
技術的成長是靠一步一步走出來的,不可能一口吃個胖子。既然上面聊了程序員在這條職業道路上應該具備的一些技能和素質。那這里就再補充一下如何去提高這些技能,如何去一步一步走出自己的技術體系。
這個部分也是學習了「 程序員進階攻略 」后的深刻體會。這里我就借鑒《極客時間》中「 程序員進階攻略 」專欄作者胡峰老師提出的“點-線-面”的成長原則,結合自己的思路跟大家聊一聊:
點
我們可以把學到的任何一個知識/技能都當做一個「 點 」。比如 我們剛接觸計算機編程的時候學習了 數據結構、后來又學習了 Java基礎,然后在工作中又學習了 框架Spring,然后根據項目需要又學習了 Linux、學習了 Hadoop、學習了 JavaScript,等等等等。
我們在初級階段的時候,是在不斷的學習各種知識技能,這些就像是天上的星星一樣,一個一個的零散的知識點,它是不成體系的,我們需要用到什么就去學習什么。這些不成體系的知識點幫助我們完成了工作,但是它們又很容易被忘記,且一般都不夠深入。
線
隨著我們學到的「 點 」越來越多之后,就會發現里面有些「 點 」是有關聯的,甚至是觸類旁通的。那么這些「 點 」在我們的腦海中就可以慢慢的形成「 線 」被串起來。它是一個隨著累積之后,自然而然的過程,當然也需要我們不斷的去總結知識。
而有一部分知識點可能隨著技術的變遷,沒有合適的「 線 」去串聯,也就慢慢的被我們所放棄。
「 線 」是由「 點 」匯聚而成。因此要想知識能夠形成「 線 」,我們除了不斷學習以外,還需要不斷的找出知識技能的共性和規律。
面
「 面 」又是由「 線 」交織而成。這個時候我們對技能的認知就從一維上升到了二維。這個「 面 」就像一張技能地圖一樣,所有的知識技能都能在這張地圖里面找到位置和關系。我們再學習新的知識的時候,也只不過是往這張地圖里面添加一些錨點,每次添加,都會讓這個知識更為牢固和深刻。這就是我們追求的每個人自己的技術體系圖了。
-
程序員
+關注
關注
4文章
953瀏覽量
29822
發布評論請先 登錄
相關推薦
評論