作者/ 徐凱強
很多同學(xué)問過我,畢業(yè)后想去騰訊、阿里等一些知名互聯(lián)網(wǎng)公司工作,應(yīng)該如何努力;另外一些行動比較早的同學(xué),通過競賽(ACM-ICPC)、實驗室、實習(xí)接觸到了計算機行業(yè)中的一部分領(lǐng)域,對下一步的發(fā)展又產(chǎn)生了更多的疑問。
今天這篇文章,我想為在IT行業(yè)發(fā)展的計算機專業(yè)學(xué)生,解決以下三個困惑[1]:
1、學(xué)了計算機專業(yè),怎么還是做不出網(wǎng)站、軟件、APP?
2、如果我想搞技術(shù),那么學(xué)習(xí)計算機理論部分還有沒有必要?
3、我現(xiàn)在應(yīng)該如何提高技術(shù)水平?

1、學(xué)了計算機專業(yè),怎么還是做不出網(wǎng)站、軟件、APP?
小李想成為想成為一名開挖掘機的高手,有人告訴他,要先學(xué)習(xí)《機械動力學(xué)》才能開好挖掘機《柴油發(fā)動機原理》;還有人告訴他,深刻理解了“燃?xì)鉁u輪發(fā)動機”的原理,對成為挖掘機高手有很大幫助。
初學(xué)者被高大上的名詞擊倒是一件很正常的事情,所以我們首先搞清楚,計算機專業(yè)學(xué)的究竟是什么。計算機專業(yè)的必修課有這么幾個:
數(shù)據(jù)結(jié)構(gòu)、計算機網(wǎng)絡(luò)、計算機組成原理、算法分析與設(shè)計、數(shù)據(jù)庫原理、軟件工程
做網(wǎng)站、做APP是哪個課程教的呢?答案是,哪個也不是。計算機科學(xué)研究的都是非常基礎(chǔ)的東西。即使有些名稱看著和開發(fā)有關(guān),教授的內(nèi)容也不是開發(fā)軟件,比如這里所說的“軟件工程”,不是教你開發(fā)網(wǎng)站、App的,而是研究如何系統(tǒng)、規(guī)范化的開發(fā)和維護軟件,以及結(jié)合管理技術(shù)和技術(shù)方法來管理項目的學(xué)科。
實際上,國內(nèi)大學(xué)的計算機專業(yè)的名稱往往是“計算機科學(xué)與技術(shù)”,包括了計算機科學(xué)、計算機技術(shù)兩部分。做網(wǎng)站、做APP,就屬于那個“與技術(shù)”。在學(xué)校里,“與技術(shù)”的部分往往只開設(shè)幾門技術(shù)早已過時的課程,開發(fā)App當(dāng)然不在其中,這也跟IT業(yè)界發(fā)展速度快有很大關(guān)系。
2、如果我想搞技術(shù),那么學(xué)習(xí)計算機理論部分還有沒有必要?
你選擇學(xué)習(xí)內(nèi)容的標(biāo)準(zhǔn),就看它能否顯著提高你的生產(chǎn)力。科學(xué)和技術(shù)的區(qū)別在于,科學(xué)追求盡量深入,探索原理;而技術(shù)追求盡量封裝,提高效率。
當(dāng)技術(shù)遇到效率瓶頸時,往往是因為依賴底層理論細(xì)節(jié)或原理,這時就應(yīng)該嘗試去透徹地理解它們。比如說如果你開發(fā)了一個網(wǎng)站,十分火爆,每分鐘有幾千個人訪問你的網(wǎng)站,這時數(shù)據(jù)庫沒有辦法同時響應(yīng)這么多人請求,網(wǎng)站卡住了。數(shù)據(jù)庫原理課上教給你的知識,舉個例子說‘索引’,就是你解決的數(shù)據(jù)庫性能問題的利器。
但具體到Web、APP開發(fā),最能提高你生產(chǎn)力的,不是《編譯原理》,而是那些前/后端框架和腳本,學(xué)完了你馬上就能做產(chǎn)品。當(dāng)然,上邊說了,你要學(xué)挖掘機,一定要先學(xué)《機械動力學(xué)》,否則你就沒有內(nèi)功,永遠不可能成為挖掘機高手,我并不反對這種說法,但是理論和技術(shù)沒有高低貴賤之分,技術(shù)中也有很多理念需要學(xué)習(xí),經(jīng)驗也需要積累,有良好的理論基礎(chǔ)可以幫你更好的學(xué)習(xí)技術(shù),但并不能取代技術(shù)的學(xué)習(xí)過程。
總而言之,技術(shù)和科學(xué)是不能完全分開的,如果你不懂得如何實現(xiàn),那么你設(shè)計的時候就會陷入困局。編程當(dāng)然不是僅僅決定如何開發(fā)實現(xiàn)那么簡單,但是在最好的情況下,編程實現(xiàn)就是對理念的設(shè)計--因為最好的設(shè)計方式就是實現(xiàn)它。
3、我現(xiàn)在應(yīng)該如何提高技術(shù)水平?
學(xué)技術(shù)的關(guān)鍵思路是兩點:一個是模仿,一個是邊實踐邊學(xué)[1]。以做網(wǎng)站為例,首先你可以看看w3schools.com,或者用Codecademy,學(xué)會HTML和PHP(或者Python)基本操作。然后找一些簡單的框架,比如Bootstrap和Django,學(xué)習(xí)一下是如何用的,然后,你可以自己設(shè)計一個小網(wǎng)站,嘗試把它做出來。
不要讓完美主義拖慢了你,不需要把所有的東西都學(xué)會了再開始。做的過程中,遇到障礙再去針對性地去學(xué)習(xí)和解決,或者尋求幫助。這種邊實踐邊學(xué)習(xí)的模式,才是學(xué)技術(shù)的正確思路,這跟搞理論研究的思路是不一樣的。
當(dāng)你對技術(shù)開發(fā)有了基本的理解之后,你就可以嘗試去找實習(xí)了,最好找那種把實習(xí)生當(dāng)正式員工來要求的公司,這樣你就能很快的成長起來。
[1] 文中三個‘困惑’取材自蘇椰老師的知乎回答(http://www.zhihu.com/answer/32455092)