與30年前相比,現在網際網路時代的程式設計師已經有了很多細分的研發方向,比如前端、後端、演算法、桌面軟體、人工智慧等等,不同的細分方向,也都有不同的要求。但不論選擇什麼方向,一名優秀的程式設計師都應具備下面這五點能力。
能力1:掌握一門業務語言不同領域使用的開發語言大多都不一樣,比如,app、手遊開發一般使用Java;作業系統、微控制器使用C;客戶端遊戲使用C++等等。當我們選定了業務方向,就要掌握這個業務上最常使用的開發語言。
掌握一門語言不僅僅是會列印hello world或者寫一些簡單的程式,更重要的是熟悉語言的底層機制、語言特點、編譯方式、常用類庫、設計模式等等內容。而只有掌握這些才能使用這門語言來解決實際問題。
能力2:精通演算法與資料結構精通演算法與資料結構是非常重要的。不僅僅因為大廠面試要考察演算法和資料結構的題目,更因為演算法資料結構才是一個程式的核心。開發程式是為了解決問題,而解決問題的思想是演算法。
能力3:掌握一門指令碼語言掌握了了業務開發語言和演算法,就可以進行實際的開發了。不過日常工作中除了業務開發,還會有很多小問題需要寫程式碼來解決,這就需要掌握一門指令碼語言了。
比如,伺服器上有一批使用者資料,我們希望從日誌中把使用者的登入時間提取出來,進行相關的分析。這時如果用C++,要經過編譯、執行、甚至gdb除錯等很多步驟,非常麻煩,但如果使用python或者shell指令碼,幾行語句就可以將問題解決了。
能力4:熟悉業務的開發與執行環境就像士兵打仗,如果把開發語言比作武器,那麼開發環境就是戰場。比如做桌面軟體要熟悉windows;開發web要熟悉Linux;開發手遊要熟悉安卓。不僅要會呼叫這些系統的API,更需要懂得底層的執行機制,例如系統與CPU、記憶體、網路的互動方式。
另外我們還要清楚程式碼是如何在系統中編譯的,因為開發過程中的很多問題都和系統直接相關。有時候同樣的程式碼在不同的系統中執行結果不一樣,某個系統正常執行,某個系統有bug。如果對系統熟悉,這些問題都很容易解決。
能力5:不斷學習才能保持自身的競爭力在網際網路時代,不論哪個領域的技術都是日新月異的變化。尤其像前端、手遊等相關技術更新的非常快。相對來說,底層或者演算法技術會慢一些,但是我們也要隨時跟進學術界的優質論文,很有可能工業上的一些難題在學術界已經有了很好的解決方法。不管哪些領域,也只有不斷學習才能保持自身的競爭力。