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