與30年前相比,現(xiàn)在互聯(lián)網(wǎng)時(shí)代的程序員已經(jīng)有了很多細(xì)分的研發(fā)方向,比如前端、后端、算法、桌面軟件、人工智能等等,不同的細(xì)分方向,也都有不同的要求。但不論選擇什么方向,一名優(yōu)秀的程序員都應(yīng)具備下面這五點(diǎn)能力。
不同領(lǐng)域使用的開發(fā)語言大多都不一樣,比如,app、手游開發(fā)一般使用Java;操作系統(tǒng)、單片機(jī)使用C;客戶端游戲使用C++等等。當(dāng)我們選定了業(yè)務(wù)方向,就要掌握這個(gè)業(yè)務(wù)上最常使用的開發(fā)語言。
掌握一門語言不僅僅是會(huì)打印hello world或者寫一些簡(jiǎn)單的程序,更重要的是熟悉語言的底層機(jī)制、語言特點(diǎn)、編譯方式、常用類庫、設(shè)計(jì)模式等等內(nèi)容。而只有掌握這些才能使用這門語言來解決實(shí)際問題。
精通算法與數(shù)據(jù)結(jié)構(gòu)是非常重要的。不僅僅因?yàn)榇髲S面試要考察算法和數(shù)據(jù)結(jié)構(gòu)的題目,更因?yàn)樗惴〝?shù)據(jù)結(jié)構(gòu)才是一個(gè)程序的內(nèi)核。開發(fā)程序是為了解決問題,而解決問題的思想是算法。
經(jīng)常有人把技術(shù)看做是程序員的外功,而算法是內(nèi)力。內(nèi)力高了,練什么技術(shù)都很快。很多同學(xué)希望能速成算法,但既然是修煉內(nèi)功,基本都不會(huì)太快。最好的方法就是日積月累的練習(xí),編寫基礎(chǔ)的算法代碼,像快速排序、二叉查找樹、哈希表這些經(jīng)典算法,應(yīng)該隨手就能寫出來。
掌握了了業(yè)務(wù)開發(fā)語言和算法,就可以進(jìn)行實(shí)際的開發(fā)了。不過日常工作中除了業(yè)務(wù)開發(fā),還會(huì)有很多小問題需要寫代碼來解決,這就需要掌握一門腳本語言了。
就像士兵打仗,如果把開發(fā)語言比作武器,那么開發(fā)環(huán)境就是戰(zhàn)場(chǎng)。比如做桌面軟件要熟悉windows;開發(fā)web要熟悉Linux;開發(fā)手游要熟悉安卓。不僅要會(huì)調(diào)用這些系統(tǒng)的API,更需要懂得底層的運(yùn)行機(jī)制,例如系統(tǒng)與CPU、內(nèi)存、網(wǎng)絡(luò)的交互方式。
另外我們還要清楚代碼是如何在系統(tǒng)中編譯的,因?yàn)殚_發(fā)過程中的很多問題都和系統(tǒng)直接相關(guān)。有時(shí)候同樣的代碼在不同的系統(tǒng)中運(yùn)行結(jié)果不一樣,某個(gè)系統(tǒng)正常運(yùn)行,某個(gè)系統(tǒng)有bug。如果對(duì)系統(tǒng)熟悉,這些問題都很容易解決。
在互聯(lián)網(wǎng)時(shí)代,不論哪個(gè)領(lǐng)域的技術(shù)都是日新月異的變化。尤其像前端、手游等相關(guān)技術(shù)更新的非???。相對(duì)來說,底層或者算法技術(shù)會(huì)慢一些,但是我們也要隨時(shí)跟進(jìn)學(xué)術(shù)界的優(yōu)質(zhì)論文,很有可能工業(yè)上的一些難題在學(xué)術(shù)界已經(jīng)有了很好的解決方法。不管哪些領(lǐng)域,也只有不斷學(xué)習(xí)才能保持自身的競(jìng)爭(zhēng)力。
聯(lián)系客服