計算機專業畢業?
我本來不是計算機專業出身,也并非大師之類的人物,本來不敢好為人師。不過,既然作了這個行業,也算有點心得,被問到,也就說點心得和建議,對與不對,各位看官指教。蓋個體情況差距極大,本文是個人觀點,也就姑且一聽,有用則用,當然,這世上怕也沒有所謂萬全之策的。
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,正則表達式無處不在。
* 任何一種腳本語言
腳本語言是最偉大的發明之一。這種簡單,快捷,入門成本低的語言,雖然效率不算高,但是確實能做很多事。無論是輔助工作,做一些自動化的工作,還是完成大型任務,都有用武之地。比如,用腳本去定時抓取某個頁面,解析內容,放在相應的位置,這種工作用腳本完成比用編譯語言完成容易的多。
以上幾種,是計算機世界中必不可少的幾個方面,如果都能掌握了,下面做什么大概就不需要我再多說了。能做的事情太多了。這一套東西學過來,你從一個“專業畢業但不真正理解計算機”的人變成了一個能夠和計算機對話的人。這就是所謂的“道”了。從此之后,在"應用"這個層面,應該沒有什么東西能難住你了,所謂天下萬物皆為兵器,舉手投足皆可傷人的境界,已經差不多了。