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