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