計算機專業概念有點大。我本人畢業於國防科技大學計算機科學與技術專業,我的以爲就計算機科學與技術(CS)專業而言,如下這些是必修的:程序員
一、 計算機組成原理(包括先修課程「數字邏輯與數字系統」,簡稱「數電」):這是一門硬件基礎課,學完後你能清楚的知道如何從用最簡單的數字元件,像搭積木同樣構成整個計算機系統,那就算及格了。 一門名爲計算機體系結構是本課程的擴充包,對於瞭解近代計算機結構體系固然是必要的,但因爲這裏討論的是Top 5,所以我認爲計算機組成原理更爲基礎。2014-07-15:在評論裏有人讓我推薦書目,我我的比較喜歡這本 Computer Systems - A Programer's Perspective (2rd Edition)。中文譯本是《深刻理解計算機系統》。在以前寫的,本文最後的補充閱讀中我也提過這本書。
二、線性代數,機率與統計和離散數學:要知道,凡是能稱之爲「科學」的專業,就必須有必定的數學功底,不然難以稱做「科學」。這三門課我以爲是本科時期最重要的三門數學課,比高等數學重要。若是你想在計算機科學的道路上走遠點,那這三門但是必修的。算法
三、MIT開設的《Introduction To algorithm》,中文版叫《算法導論》:我以爲應該學習它而不是國內習慣開設的《數據結構》。數據結構僅僅是算法的一部分,國內的數據結構課程迴避了不少本質的東西,僅僅是對一些常見的數據結構的羅列,學起來總有些不痛不癢的感受。《Introduction To algorithm》雖然有些章節夾雜着不少很讓人討厭的「數學」,但卻能從本質上帶你領略這門十分必要並且有趣兒的課。編程
四、操做系統與編譯原理:操做系統能夠說是《算法導論》的實驗課,最好能在學習期間本身實現一個小型的操做系統,或者操做系統各分系統的Demo。編譯原理多是廣泛本科生以爲難的一門課,可是做爲CS本科生或者將來的軟件科學家,這是基礎中的基礎,學完以後全部的語言在你看來應該沒有太大的區別,這門課應該是離散數學+算法導論的實驗課。最好能在學習期間本身實現一個小型的編譯器,語言最好能自創,或者是某個已有的你喜歡的語言的基本子集。數據結構
五、掌握一門經常使用的編程語言和編程技術:能瞭解你用過的全部的程序內部大體是怎樣的,能用你熟悉的語言編寫大部分的程序,至少不能是對任何一個程序滿頭霧水。編程語言
以上這些不難作到,我以爲是基礎中的基礎,我執拗地覺得,不能掌握他們就不該該得到CS學士學位。 學習
補充閱讀:spa
在評論中有位朋友這麼說道:
一看就是典型科班好學生。人生很短,學本身要用到的就好。多花時間在二、三、5是對的,甚至任選其二就能讓你受益良多、樂在其中。 1和4所起到的做用,比起它們的意義,更多的是讓一部分學生從一開始就對計算機產生失望和絕望,是抹殺學生原本的興趣的兇手。回到問題自己,既然是「應該學習」,一、4不應放在裏面,即便不學它們,我想在計算機專業的大多數領域是作得下去的。操作系統
這裏列出的Top 5是做爲一個計算機科學與技術專業畢業生該有的知識儲備,是這個專業的根基。若是你對這個專業真正有興趣,而且熱愛它,那我認爲學習這裏列出的Top 5會是個不錯的選擇。