[知乎]作爲計算機專業學生,最應該學習的課程前五位是什麼?

轉載自:https://www.zhihu.com/question/19628851

計算機專業概念有點大。我本人畢業於國防科技大學計算機科學與技術專業,個人覺得就計算機科學與技術(CS)專業而言,以下這些是必修的:

1、計算機組成原理(包括先修課程“數字邏輯與數字系統”,簡稱“數電”):這是一門硬件基礎課,學完後你能清楚的知道如何從用最簡單的數字元件,像搭積木一樣構成整個計算機系統,那就算及格了。 一門名爲計算機體系結構是本課程的擴充包,對於瞭解近代計算機結構體系當然是必要的,但由於這裏討論的是Top 5,因此我認爲計算機組成原理更爲基礎。
2014-07-15:在評論裏有人讓我推薦書目,我個人比較喜歡這本 Computer Systems - A Programer’s Perspective (2rd Edition)。中文譯本是《深入理解計算機系統》。在之前寫的,本文最後的補充閱讀中我也提過這本書。

2、線性代數,概率與統計和離散數學:要知道,凡是能稱之爲“科學”的專業,就必須有一定的數學功底,否則難以稱作“科學”。這三門課我覺得是本科時期最重要的三門數學課,比高等數學重要。如果你想在計算機科學的道路上走遠點,那這三門可是必修的。

3、MIT開設的《Introduction To algorithm》,中文版叫《算法導論》:我覺得應該學習它而不是國內習慣開設的《數據結構》。數據結構僅僅是算法的一部分,國內的數據結構課程迴避了很多本質的東西,僅僅是對一些常見的數據結構的羅列,學起來總有些不痛不癢的感覺。《Introduction To algorithm》雖然有些章節夾雜着很多很讓人討厭的“數學”,但卻能從本質上帶你領略這門十分必要而且有趣兒的課。

4、操作系統與編譯原理:操作系統可以說是《算法導論》的實驗課,最好能在學習期間自己實現一個小型的操作系統,或者操作系統各分系統的Demo。編譯原理可能是普遍本科生覺得難的一門課,但是作爲CS本科生或者未來的軟件科學家,這是基礎中的基礎,學完之後所有的語言在你看來應該沒有太大的區別,這門課應該是離散數學+算法導論的實驗課。最好能在學習期間自己實現一個小型的編譯器,語言最好能自創,或者是某個已有的你喜歡的語言的基本子集。

5、掌握一門常用的編程語言和編程技術:能瞭解你用過的所有的程序內部大致是怎樣的,能用你熟悉的語言編寫大部分的程序,至少不能是對任何一個程序滿頭霧水。

以上這些不難做到,我覺得是基礎中的基礎,我固執地以爲,不能掌握他們就不應該獲得CS學士學位。

補充閱讀:

在評論中有位朋友這麼說道:
一看就是典型科班好學生。人生很短,學自己要用到的就好。多花時間在2、3、5是對的,甚至任選其二就能讓你受益良多、樂在其中。 1和4所起到的作用,比起它們的意義,更多的是讓一部分學生從一開始就對計算機產生失望和絕望,是抹殺學生本來的興趣的兇手。回到問題本身,既然是“應該學習”,1、4不該放在裏面,即使不學它們,我想在計算機專業的大多數領域是做得下去的。

我想對此做個迴應:
首先,我自認爲不是典型的中國式的“典型科班好學生”。這裏列出的Top 5不是爲了成爲“典型科班好學生”,因爲光學好這5門絕不夠“好”;更不是爲了“在計算機領域做得下去”,我相信在某個計算機領域,比如作爲Microsoft Office的金牌培訓講師,只要精通Office就能乾得很棒。
這裏列出的Top 5是作爲一個計算機科學與技術專業畢業生該有的知識儲備,是這個專業的根基。如果你對這個專業真正有興趣,並且熱愛它,那我認爲學習這裏列出的Top 5會是個不錯的選擇。

當然,對於一個計算機世界的從業人員,學好它們也會收益良多。比如對於程序員來說,操作系統與編譯原理這門課能夠讓你對你的程序如何在計算機裏出生,運行,死亡有個好的認識,在我的編程經驗中,我覺得這種認識讓我收益良多。很多朋友也許知道有一本經典的書籍叫“Computer Systems:A Programer’s Perspective”,裏面的基礎就是來源於操作系統與編譯原理
還是那句話,如果你喜歡CS,這5門課是必須的,要是在這5門課上感到失望或者絕望,我想你該考慮換個專業了。

作爲非科班出生的碼農,還是得好好學習一下基礎知識。
不然會被別說,“你寫的代碼基本上不能用”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章