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