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