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