1. 程式人生 > >計算機專業學生應該學什麼

計算機專業學生應該學什麼

收到一封mail,是一個計算機系大三學生寫來的,想聽聽我的建議,面臨將要畢業的關口,應該學點什麼才能對將來有用。隨後又有不少朋友通過mail,im等等方式詢問我對這個問題的看法。想必是上次csdn視訊聊天的節目引起了不少朋友的思考。

我本來不是計算機專業出身,也並非大師之類的人物,本來不敢好為人師。不過,既然作了這個行業,也算有點心得,被問到,也就說點心得和建議,對與不對,各位看官指教。蓋個體情況差距極大,本文是個人觀點,也就姑且一聽,有用則用,當然,這世上怕也沒有所謂萬全之策的。

1 你是否真的喜歡計算機

我是真的喜歡的。如果讓我選擇發了大財做什麼,我仍然繼續玩計算機,只不過可以更自由自在的玩喜歡的東西。如果你也喜歡,喜歡學新的東西,喜歡複雜而精巧的設計,喜歡工程之美,那就適合走技術道路。如果不是這樣,這條路比較辛苦,還請三思。其實產業裡相關的領域也大有可為,比如說寫技術相關的趨勢作者,鮮有優秀的。目前除了
網際網路週刊的陳瓊同學
,我還沒看到給商業媒體寫技術相關的寫手有幾個寫的好的,甚至往往都有致命的本質錯誤。諸如此類的周邊領域很多,都有不錯的機會,不一一列舉。

2 假如1你回答的是喜歡,那麼

你需要學習很多東西。我認為不可缺少的東西包括:

* 基礎理論
* 演算法
* C語言
* C++或java,如果精通C,可以捨棄C++,學java
* unix
* 正則表示式
* 任何一種指令碼語言(目前推薦python)

依次講解為什麼這麼說

* 基礎理論和演算法
20年來,應用層面急速發展,令人眼花撩亂,而實際上,大幕之後的東西,從1972年C和unix誕生以來就沒有過本質的變化。在作業系統,資料庫理論,編譯原理,資訊管理系統理論之類,都是*相對*靜止的。雖然其中有類似於微核心還是整體核心之類的理論之爭,但是幾乎不影響格局,大可以放心去學。學這些東西唯一的問題是理論枯燥,最好是結合實踐,做一些應用,學一些理論,張弛有度,這樣總能保證好奇心旺盛。

學這些東西的目的是為了真正的瞭解計算機。不真正瞭解一個東西,很難舉一反三,很難作到融匯貫通。其實高校教的這些東西都極有價值,只不過是在缺乏實踐的基礎上填鴨,效果往往變成了應付考試。

* C語言
我對C語言的認識如下: (1)是對計算機的最小抽象 (2) 是一種操作記憶體的語言。

基於這2個認識,C是必須要學好的。

寫程式,就是讓計算機按照人的思想去幹活的過程,C提供了計算機的抽象模型,讓我們控制計算機變的簡單,而程式設計中,記憶體的使用是最為重要的。(記得彙編裡面對暫存器的應用多麼重要嗎?)。操作記憶體是程式設計師的基本功,雖然現在自動記憶體管理和垃圾回收技術已經變的日益完善,但學習到優秀的記憶體使用觀念仍然是程式設計師的必修課。真正掌握了這種觀念,看任何語言都不困難了。我總認為,記憶體就是計算機的七寸命門,懂了這個,也就一通萬事通了。

另外一個理由,就是大部分語言是用C語法做為藍本的。熟練的C語言基本功會讓你未來的學習變的輕鬆很多。

* C++和JAVA

鑑於面向物件理論如此重要,我們必須要學好一種操作物件的語言。如同C是操作記憶體的語言,C++和JAVA就是操作物件的語言。

C++我曾經認為是很好的語言,但是過於複雜,變化多端,再加上模版的語法和傳統的C風格差距頗大,已經越來越不適合成為一種入門語言。JAVA變的更加值得推薦。

JAVA對於物件的控制能力,遠遠高於C++,學習成本低,且能達到效果,是更加值得選擇的。

C++變的原來越尷尬,在開發底層系統的時候,不如C來得快捷和迅速,在開發高階應用的時候,比不上JAVA的開發效率。所以說,如果精通C,甚至可以跳過C++不學。

* UNIX

UNIX或是linux ,這是計算機歷史上最寶貴的財富。寶貴說的不僅僅是其高效的系統和良好的原始碼,更指其哲學。

一個幾十年來,幾乎沒有修改過技術架構的系統,確實令人驚訝,相對於windows系統,每3年就會將過去的技術完全推倒重來,unix世界看起來似乎恆定不變。

UNIX哲學對於*nix的系統走向影響巨大。以最基本的“簡單就是美”來說,這條原則的重要性往往被忽視,人們喜歡開發複雜的,大而全的系統,最後結果往往很悲慘。unix則是提供了一系列的功能單一的小程式,每個程式都有特定的用途,然後利用管道等等方式將這些小程式結合起來使用。每個程式都簡單,而,越簡單的結構越穩定,在這樣的思想上建立起來的系統也會具有極佳的穩定性。

理解了UNIX基本哲學,就能理解很多優秀的開源產品設計思路。比如說,mysql為什麼提供的功能如此簡陋,還得到了極其廣泛的應用?Apache為何穩定,php為何速度如此之快等等。這是內力,悟到了,用什麼東西都無往不利。

* 正則表示式

這個東西看起來好像天書,但怎麼強調重要都不算過分。
去看看程式設計師們每天做什麼工作,往往會驚訝的發現,其實大部分時間都是在處理字串。無怪乎一個高手感慨,應用軟體最重要的就是兩件事,字串處理和資料庫。
正則表示式無疑是處理字串最強大的武器。利用這個,往往可以實現一些看起來不可能完成的任務。

什麼時候開始學習正則表示式合適?當你要處理字串的時候,放棄過去那種,從第幾個字元進行substr到多少個字元之類的麻煩的方法,直接嘗試用正則表示式代替。等熟悉了正則表示式,你會發現unix更可愛了,無論是grep還是vi或是apache,正則表示式無處不在。

* 任何一種指令碼語言

指令碼語言是最偉大的發明之一。這種簡單,快捷,入門成本低的語言,雖然效率不算高,但是確實能做很多事。無論是輔助工作,做一些自動化的工作,還是完成大型任務,都有用武之地。比如,用指令碼去定時抓取某個頁面,解析內容,放在相應的位置,這種工作用指令碼完成比用編譯語言完成容易的多。


以上幾種,是計算機世界中必不可少的幾個方面,如果都能掌握了,下面做什麼大概就不需要我再多說了。能做的事情太多了。這一套東西學過來,你從一個“專業畢業但不真正理解計算機”的人變成了一個能夠和計算機對話的人。這就是所謂的“道” 了。從此之後,在"應用"這個層面,應該沒有什麼東西能難住你了,所謂天下萬物皆為兵器,舉手投足皆可傷人的境界,已經差不多了。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=777956