電腦專業概念有點大。就電腦科學與技術專業而言,以下這些是必修的:
1、電腦群組成原理(包括先修課程“數字邏輯與數字系統”,簡稱“數電”):這是一門硬體基礎課,學完後你能清楚的知道如何從用最簡單的數字元件,像搭積木一樣構成整個電腦系統,那就算及格了。
2、線性代數,機率論和離散數學:要知道,凡是能稱之為“科學”的專業,就必須有一定的數學功底,否則難以稱作“科學”。這三門課我覺得是本科時期最重要的三門數學課,比高等數學重要。如果你想在電腦科學的道路上走遠點,那這三門可是必修的。
3、MIT開設的《Introduction To algorithm》,中文版叫《演算法導論》:我覺得應該學習它而不是國內習慣開設的《資料結構》。資料結構僅僅是演算法的一部分,國內的資料結構課程迴避了很多本質的東西,僅僅是對一些常見的資料結構的羅列,學起來總有些不痛不癢的感覺。《Introduction To algorithm》雖然有些章節夾雜著很多很讓人討厭的“數學”,但卻能從本質上帶你領略這門十分必要而且有趣兒的課。
4、作業系統與編譯原理:作業系統可以說是《演算法導論》的實驗課,最好能在學習期間自己實現一個小型的作業系統,或者作業系統各分系統的Demo。編譯原理可能是普遍本科生覺得難的一門課,但是作為軟體科學家,這是基礎中的基礎,學完之後所有的語言在你看來應該沒有太大的區別,這麼課應該是離散數學+演算法導論的實驗課。最好能在學習期間自己實現一個小型的編譯器,語言最好是自創。
5、掌握一門常用的程式設計語言和編程技術:能瞭解你用過的所有的程式內部大致是怎樣的,能用你熟悉的語言編寫大部分的程式,至少不能是對任何一個程式滿頭霧水。
以上這些不難做到,我覺得是基礎中的基礎,我偏激的以為,不能掌握他們就不應該獲得學位。
簡而言之:
- 數學課 (機率,統計,微積分等等)
- 語言課(java,c++等)
- 資料結構和演算法
- 電腦網路
- 作業系統和編譯原理
其實只要演算法和數學牛,可以吃遍矽谷大多數的IT公司。
具體書籍
- Concrete Mathematics 具體數學,絕對是電腦科學的數學基礎“之一”,國內的電腦科學跟不上國外的一大原因,我始終認為是數學上的差距。
- Introduction to Algorithms 演算法導論,所有的程式都需要演算法作為基礎,所以演算法是不得不學的。
- Introduction to Computer Science and Programming 整體的介紹了電腦,同時也讓學生瞭解CS能幹嘛,自己該幹嘛。
- Operating System Engineering 作業系統的重要性不言而喻,同時也介紹了編譯器。
- Network 網路編程,中國 大學的本科生們有多少能熟練於網路編程。當今又有多少程式不需要考慮到網路。
有時候問自己幾個問題:
- 當你學完各種數學、原理、演算法之後,你能用這些知識解決什麼問題?
- 你能開發出什麼應用或系統嗎?你具備多強的開發能力?
- 是更多人對這個專業更感興趣了,還是心生厭倦、恐懼、甚至放棄了?
- 大學畢業到現在,還有多少知識你還記著?有多少還在用?
其實能解決問題的課程才是最重要的。