標籤:

計算機科學與技術本科專業有哪些核心課程?應該如何安排學習順序?各個課程推薦哪些經典教材?

例如:

  1. 計算機學科導論和 C 語言

  2. 彙編、操作系統、C++、數據結構、離散數學、數值分析和計算機組成原理

  3. 計算機編譯原理和資料庫

  4. 計算機網路與安全和軟體工程

還有其它的諸如:高數、線性代數、離散數學、網路原理、網頁設計、多媒體技術、彙編語言、面向對象的設計語言、Java 編程、ASP、SQL等

我在網上搜了好多,大家說法都不一樣,我也搜集了一些教材,但不知道是否全面,而且也不知道學習順序,我的思路是這樣的:

  1. 先學習 C 語言和 C++。教材有:C programming language-KR、C traps and pitfalls、Algorithms in C 和 Expert C Programming

  2. 學習數據結構。清華大學嚴蔚敏《數據結構》,目前還未找到經典的國外教材

  3. 學習演算法。演算法導論和具體數學及其應用

  4. 計算機組成原理。Computer Organization and Design The Hardware-3rd-David Patterson

  5. 計算機系統。CSAPP

  6. 操作系統。鳥叔的私房菜和計算機網路

我也看了一下清華大學等名校的本科課程,但是課程好多啊,哪位大俠能夠按照循序漸進、由淺入深的學習順序給介紹一個合理的順序?如果沒時間推薦教材的話,我可以根據推薦的課程來搜一下,然後補充進來,讓這個話題有一個綜合的、完整的答案。


核心就三門課:

  • 數據結構:看《演算法導論》。
  • 操作系統,看 Tanenbaum 的書,這是最最核心的課程。
  • 計算機體系結構,看 David Patterson 和 John Hennessy 合寫的書。

另外,「操作系統」不是教你怎麼安裝配置Linux,看原問和樓下某些答案太搞笑了。


少量圖預警!!!

----------20160803更新--------------------

國外名校計算機學習資源:

MIT EECS課程列表:http://student.mit.edu/catalog/m6a.html

加州大學伯克利分校EECS網站:EECS Course WEB Sites

--------------------------------------------------

一、課程安排

看了看答案,發現竟然沒有ACM的Curricula Recommendations,感覺不科學啊。

戳:Curricula Recommendations

ACM的《Computing Curricula 2005》將計算類專業的課程分為了:

  • Computer Science

  • Computer Engineering

  • Information Systems

  • Information Technology

  • Software Engineering

在網站都可以下載到對應的PDF,就不附下載鏈接了。

如果英文看不懂,如下是中文圖(圖片來自網易大學計算機專業HIT《計算機專業導論》):

二、學習順序

個人感覺網易大學計算機專業安排的就挺好:

可以詳細看網易教育 @孫志崗 的回答。

三、經典教材

1.華章圖書計算機科學叢書

我來安利華章科技的計算機科學叢書了,我發現這套書就和它的封面一樣,有品位,有內涵,必備!基本上每本書都有配套網站,可以下載課件、習題等等,原版圖書在谷歌一搜就能搜到,很方便。

戳:華章圖書計算機科學叢書

2.Lucida程序員必讀書單1.0

Lucida(鞏朋)是Google員工,他整理的程序員必讀書單,把程序員所需掌握的關鍵知識總結為三大類19個關鍵概念,然後給出了掌握每個關鍵概念所需的入門書籍,必讀書籍,以及延伸閱讀。

戳:程序員必讀書單 1.0

四、聲明

一千個讀者就有一千個哈姆雷特。

勿噴,作為文科生的我,僅僅做了一下搬運工,發表一下個人的觀點。如有不足,望各位大神海涵。


說點靠譜的吧,畢竟剛畢業,這個順序用來做完計算機科學與技術專業入門應該還是可以的。入門後還得根據自己的興趣看更多專業方向的書。

大一上學期:

1. 計算機導論 這個隨便找個名校的課程就行,主要是梳理後面的知識脈絡。

2. c語言 《kr》一本即可,也不要全看完(初次看後面鐵定看不懂),到struct那章把所有語法點弄明白就差不多了。其他c語言方面的書可以涉獵,但實話說幫助不大。

sp:這時最好動手實踐計算機配機器,裝機器;

大一下學期:

3. 數據結構與演算法 《演算法導論》一本即可,關鍵是每章習題必須全部做完,配合mit教學視頻(帶有中文字幕)。當然也不用全部看完,到動態規劃和貪心演算法那章即可,有興趣看完則是好事。這個橫跨大一與大二。

4。 線性代數 清華版或是同濟版到都可以,mit有開放課程視頻(帶有中文字幕)。

sp:這時可以學點網頁製作相關知識,推薦《Web標準設計》與《CSS權威指南》,想入門千萬別用dreamweaver

大二上學期:

5。計算機組成原理 這個推薦《深入理解計算機系統》,中文版前面翻譯都很好,後面稍微差點,但總體質量很高(這算是幫美女老師做廣告么。。。)這本關鍵是每節插入的各個習題,每章後面的習題不要求。這本書實際還涵蓋:彙編語言,操作系統導論

6。 離散數學 這個可以用國內教程,也可以用國外教材

sp:C++ 《C++ Primer》入門一本即可;

大二下學期:

7。 概率論與數理統計 這個跟上面一樣,國內數學教材也很好

8。 操作系統 什麼鳥叔就呵呵了,這門課關鍵是設計實現好不,最需要掌握的是操作系統中涉及的簡單演算法與數據結構概念。所以推薦《操作系統原理》。浙大都有開放教程。

9。 資料庫導論 推薦《資料庫原理》,這門課關鍵是資料庫系統中的庫表設計和sql使用,必須動手做點小項目。自學Java或是php搞點什麼xx管理系統吧

sp: Linux操作入門,Java,PHP,Mysql等DBMS。到這裡已經基本入門了,做點小項目問題不大,之後才是真正開始修鍊各種高級內功的時候,最關鍵書理論要理解,實踐也不可以少。

大三上學期:

10。 計算機網路 推薦那本國內謝希仁的,別看啥自頂向下。

11。 計算機體系結構 推薦國外那本《計算機組成與軟硬體介面》,別忘記習題。

12。 編譯原理 入門《龍書》就可以了,可以跳過第二章,第一遍看到第六章就行,別忘記習題與實踐。完全可以跟著cousera上那門Compiler,有視頻有實踐作業挺好的。

大三下學期:

從這裡開始可以根據興趣專研自己感興趣到部分了,必修一門:

13。 軟體工程 書太多了,經典理論與敏捷理論都最好涉獵一下;不過光看用處不大,可以做些項目了,在實踐中學習才是最好的學習。

sp:這時應該已經做過幾個小項目了,可以學習使用版本控制軟體svn以及git進行代碼文檔的管理。

@yuwei 提議增加方向的選擇,個人也只能根據稀少的經驗稍微寫點目前的推薦書目,因為專研到各個技術方向的細節太多,而且瞬息萬變,不像入門只要看經典就可以了。

Web前端:可以在編譯原理、計算機網路、圖形學多鞏固一下。js入門推薦《JavaScript高級編程》,千萬別直接看犀牛書。

Web後端:分為Java和C++方向,前者多看下《設計模式》,後者肯定得把《effective C++》系列讀完。C++方向推薦看看《UNIX環境高級編程》《STL源碼剖析》

系統:在操作系統、體系結構多下點功夫,推薦看看《計算機系統結構:一種量化研究方法》,《操作系統設計與實現》,反正系統架構是一通百通

演算法:本人一竅不通

另外強烈推薦《計算機程序的構造和解釋》!


我搜索了一下各個學校大約開了這些課程,同時我解釋下這些課程的具體真實含義

電子技術:如何焊接二極體

離散數學:既在數學課上看英文題的基礎上,增加美術的部分

程序設計:學慣用十種方式在黑黑的框里輸出hello world

數據結構:學會如何爬樹

操作系統:如何正確安裝盜版Ghost

計算機組成原理:學習如何去電腦城暑期打工裝機系列一 用於忽悠客戶的辭彙表

微機系統:學習如何去電腦城暑期打工裝機系列二 如何把正確的配件安裝在正確的位置

計算機系統結構:學習如何去電腦城暑期打工裝機系列三 能點亮機器

編譯原理:一言不合就寫編譯器的裝逼指南

計算機網路:學習RJ45水晶頭的接線和安裝方法

資料庫系統:MYSQL的安裝與卸載

軟體工程:為非計算機人才裝成計算機人才量身定做

計算機圖形學:學習如何用在電腦上顯示一個旋轉的三角形,黑客電影必備知識

數字圖像處理:了解如何選取合適大小和清晰度的愛情動作片

計算機通訊原理:複習RJ45水晶頭的接線和安裝方法

多媒體信息處理技術:掌握多種看片軟體,了解不同片子使用不同軟體會看得更爽

數字信號處理:學習買手機要看能上3G還是4G

面向對象程序設計:時刻被警示:你沒有對象,對象沒有初始化,對象不存在,引用了非法的對象


正文傳送門——題目本身還是有一定討論價值的:

計算機的基本功就是寫代碼=演算法+數據結構

美帝學校的原則都是,讀得來恭喜你,你是我們的學生,讀不來很抱歉,祝你好運。(我們學校本科十個人中只有六個能在六年內讀完本科學位;當然了我室友年年4.0無壓力。這就是制度兇殘但是中國留學生更兇殘啊)

參考1——UIUC(點擊圖片放大看):

Degree Requirements

參考2——UCB:

Required Courses for Satisfaction of the CS Major

LS CS majors must earn 27 units in upper division technical courses, including:

  1. Required Courses:
    • CS 170 (Algorithms)
    • CS 162 (Systems)
  2. Breadth courses choose two from the following:
    • CS 150 (Digital Systems)
    • CS 152 (Computer Architecture)
    • CS 160 (User Interfaces)
    • CS 161 (Computer Security)
    • CS 164 (Languages and Compilers)
    • CS 169 (Software Engineering)
    • CS 184 (Computer Graphics)
    • CS 186 (Databases)
    • CS 188 (Artificial Intelligence)
  3. Any two additional Upper Division Computer Science courses.
  4. Technical electives.

    Any upper division CS or EECS course provided it is graded is automatically approved. See the list of other approved non-CS technical electives.

Undergraduate LS CS Students

跑題一分鐘,可跳過看正文

這是一個雄心勃勃的問題,按理說咱們應該be nice and 不潑冷水。

只是你自己已經知道這個胖子是一口吃不成的了:

我也看了一下清華大學等名校的本科課程,但是課程好多啊

況且你還是個純外行——

「翻譯; 是一個對文學、歷史感興趣的人,特別喜歡古典文學。」

我們花半天功夫寫個不錯的課表又怎麼樣?有意思嗎?

該不會是看比爾蓋茨自傳頭腦發熱了吧?


零基礎直接從C Primer Plus開始看起,中間有幾章,講I/O和位運算的部分可以先跳過。全書下來就大概知道程序是個啥長啥樣,再重看一遍,至少C語言基本功就很紮實了。

數據結構和演算法看《數據結構與演算法分析:C語言實現》,吃下來這本書這方面就算有感覺了,至少知道各種數據結構和演算法都是啥玩意了。之後再看高級的演算法書也有底了,感覺不錯可以直接看演算法導論了。

《深入理解計算機系統》學完C和基本數據結構就可以開始看,越早看越好,越早看越好,因為很重要所以說兩遍。這本書樹立了計算機的大局觀,從底層到系統到網路,什麼都有涉獵,這本書吃下來後已經有能力自行決斷要看哪些書要研究什麼方面了。


我的建議順序是兩條線,一條是計算機一條是數學:

1、學數字邏輯,書《編碼的奧秘》

2、學組成原理,書《深入理解計算機系統》

3、學C語言,書隨意,千萬不要一上來就學C,學了前兩個,你才能學這個,不迷惑

4、學數據結構和演算法,書《演算法導論》

5、學操作系統,書《操作系統:精髓與設計原理》

7、網路、彙編、編譯原理、資料庫,到這兒就比較隨意了


第一次在知乎答題!

正好之前在北郵人上發了這麼個帖子, 現在略作修改後原帖轉過來, 包括關於北郵人上幾個回帖的討論部分。

簡單總結一下計算機科學(CS)的課程體系

關於計算機科學(CS)的課程體系,我個人打算分三部分或者說沿著三條線來總結,分別是「數據結構
演算法」,「程序語言」和「系統
工程」。

1. 數據結構
演算法

數據結構和演算法其實就是一回事

1.1. 離散數學

& (Kenneth
H. Rosen)

好吧,可能對程序員們來說,已經想不起還有這麼門課了。不過其實對於一個沒接觸過CS數學思維的人來說(比如大一新生),學一下離散數學還是有所幫助的,像遞歸這些概念我們已經習慣了所以覺得理所當然,但是對外行來說還是不那麼容易理解的,至少我給我老婆講的時候她沒理解。

1.2. 數據結構
演算法

& (Robert Sedgewick Kevin Wayne)

& (Thomas H. Cormen et al.)

現在已經不是我讀大學的那個時代了,我看那些本科生直接看演算法導論完全沒壓力,所以其實也不用這本那本的推薦了。實在還嫌《演算法導論》難的話就上面那本《演算法》吧,簡潔得多,有具體的程序語言實現,也沒那麼些數學證明。

1.3. 高度依託於演算法的課

其實依託於演算法的課程非常非常多,鑒於都是選修課,就介紹兩個吧:

1.3.1. 數據挖掘

& (Jiawei Han et
al.)

數據挖掘算是這些年數一數二熱門的方向,不提不行啊。

1.3.2. 人工智慧

& (Stuart
Russell and Peter Norvig)

我本人是做人工智慧的,所以算是捧捧場吧。人工智慧其實是個大雜燴,傳統的那些分支,比如狀態空間搜索,約束問題,推理,規劃,知識表達,已經非常冷門了,所以反過來那些熱門的分支都出去自立門戶了,比如機器學習,自然語言處理,計算機視覺,機器人。

2. 程序語言

程序語言的知識體系其實並不像國內高校教的那樣。程序語言有沒有理論體系,有,你要是看過王垠的博客就知道了。在美國的大學裡程序語言理論一般分三部分或者說三門課程。第一門語法學,其實就是編譯原理;第二門語用學,這個下面會講;第三門語義學,這個我覺得太理論,離現實太遠了。就我本人而言,當年博士資格考試考過語義學之後就再也沒有用過。還有,很多人都推崇那本《計算機程序的構造和解釋》(&),其實我覺得如果不搞這方面學術的話完全沒必要看那麼深。

2.1. 編譯原理

& (Alfred
V. Aho et al.)

美國的CS教學特彆強調「計算理論」相關的課程內容,比如自動機,lambda表達式,P =
NP?。當然做科研的話這些東西可能會用到,但是干程序員的話這些東西基本上不會用到。而唯一比較接地氣而又涉及到計算理論的東西就是編譯原理了。

2.2. 程序語言語用學

& (Michael l. Scott)

其實我一直沒搞懂為什麼中國的大學計算機系都不開這門課,按道理國內都應該特別喜歡教這種很「記背」類型的課程啊。我要對國內的學生們強烈推薦這門課程,語用學其實就是比較和總結各種各樣程序語言的共性和區別。在去學各種各樣具體的編程語言之前,這門課程可以從總的視角來幫助學生了解不同程序語言的背景和特徵,對具體語言的特徵不但知其然還知其所以然。要是國內大學像美國一樣也把這門課列成必修課程的話,可以幫助學生樹立很多正確觀念,比如「不同語言是有不同的適用範疇的,沒什麼優劣之分」。

2.3. 具體的程序語言

& (Stanley B. Llippman et al.)

& (Bruce Eckel)

這裡貼兩本C++和Java的吧,其他的就不貼了。除了C/C++和Java這種學校會教的以外,值得推薦的還有用於腳本的Python,用於網頁的PHP和用於動態效果的Javascript,至於Lisp,Prolog啊什麼的對普通程序員太遠了。

3. 系統
工程

這些都是配盤子的課了,我打算提5門,分別是「計算機組成與設計」,「操作系統」,「計算機網路」,「資料庫」和「軟體工程」。

3.1. 計算機系統

& (Brian W. Kernighan
Dennis M. Ritchie)

& (Randal
E. Bryant David R. O"Hallaron)

對於前三門計算機系統的課程,不得不提一下大神級的著作《深入理解計算機系統》,這確實是經典中的經典,我當年都還是看了APUE之後才看的,仍然覺得受益非淺。當然這些課都得先學c語言做基礎。

3.1.1. 計算機組成與設計

& (David A. Patterson and John L. Hennessy)

現在基本上硬體課程在計算機系已經越來越不重要了,做系統結構的大多都跑電子系(EE)去了,並且他們搞完系統結構之後還得過來找程序員的工作,像彙編語言這樣的東西也越來越淡出大多數程序員所能接觸到的範圍了,看看《深入理解計算機系統》了解了解就足夠了。

3.1.2. 操作系統
計算機網路

& (Andrew S. Tanenbaum and
David J. Wetherall)

& (Andrew S. Tanenbaum and David J.
Wetherall)

以前讀大學的時候老師都把這兩門課當「記背」類型的課了,都是直到後來看了CSAPP,APUE和UNP才會寫。

3.2. 資料庫

& (Abraham Silberschatz et
al.)

3.3. 軟體工程

&
(Roger Pressman and Bruce Maxim)

----------------------------------------------------------------

以下是當時對北郵人的幾個回帖的討論:

看了北郵人的幾個回帖之後,想想其實說說哪些課程是不必深究的也是有意義的,所以我在這裡補充幾個回復:

回復1.關於《計算機體系結構:量化研究方法》

& (John
L. Hennessy and David A. Patterson)

本人之前是通信工程本科畢業,後來在電院的計算機應用技術碩士畢業(院系合併之前),畢業後在愛立信寫基站板子上的軟體,所以我的看法應該不代表「我郵的CS」,從出身而言,我也應該不會因為不了解硬體而忽視硬體課程。

就說說不是我郵的情況吧。我是在美國大學讀的CS博士,回復里也有人提到了,由於歷史原因,美國很多大學CS和EE都是放在一個系的,但是碰巧了,我讀的那個大學不但CS和EE分為兩個系,而且CS屬於科學學院,EE屬於工程學院,甚至EE居然叫做Electrical
and Computer Engineering而不是Electrical
and Electronical,而這個EE系分四個大組,用中文來說分別是電氣工程,電子工程,通信工程和計算機工程。在我讀的那個CS系,只有一個韓國教授做的是體系結構這種硬體的方向,他的實驗室索性設在了EE系裡,所有學生都去EE系的實驗室和計算機工程的那個大組一起做,課程也基本上和EE的一起選,但最後所有這個韓國教授的學生還都去的是軟體工程師的職位。美國的CS系都要考博士資格考試,當時操作系統和系統結構這兩門課是二選一,除了韓國教授的學生以外,我讀博士的那麼多年裡所有其他的學生選的都是操作系統。。

所以我的觀點在原文里也說了,如果你做的是計算機硬體相關的方向,那麼《計算機體系結構量化研究方法》肯定是必學的,但是鑒於現在CS系做硬體的人越來越少,完全是軟體一統天下的局面,我真心覺得CS的課程設置里體系結構並不是必須的了。多說一句,別說CS系了,我當年本科通信工程一個班32個人裡面,軟體工程師出了八九個,而硬體工程師只出了一個。

回復2.關於《計算理論》(包括《形式語言與自動機》)

& (Michael
Sipser)

首先,我對做計算理論的人是很崇敬的,完全沒有忽視的意思,看看圖靈獎一半以上的得主都是這個方向的就知道了。我是在美國的大學讀的CS博士,我讀博士的時候,計算理論這門課是最難的一門,沒有之一,博士資格考試計算理論是必考,也是最難的一門,沒有之一。不巧的是,我就是做科研的,本來當年考完博士資格考試就想著我這輩子應該再也不會用計算理論的東西了吧,誰知道後來生平第一篇論文投出去的時候,審閱的人就問我這個問題證明了難度了嗎,我想還有這碼子事啊,於是趕緊證明一下是P-Complete的,寄了過去,誰想到審閱的人回復說,證明是make
sense的,但是裡面有個小錯,我給你糾正了,最終結果不是P-Complete的而是P-hard的。

原文里關於編譯原理我也說了,「美國大學CS特彆強調『計算理論』相關的課程,做學術的話這些東西可能會用到,但是干程序員的話這些東西基本上不會用到。」

所以我的觀點是,計算理論這種東西太高大上了,更像是數學專業而不像是CS的課程,讀博士將來做科研的話好好學學是應該的,但是對於絕大多數念完CS專業去公司里干程序員的人來說,沒必要學那麼深,學好編譯原理足夠了。

回復3.關於北郵人上之前的帖子《我心目中計算機軟體科學最小必讀書目》(關於APUE與UNP)

我多年前在北郵人上發過的一個帖子,叫《我心目中計算機軟體科學最小必讀書目》,後來發現自己的想法真是變化好大,所以特意上北郵人去把帖子刪了。但是刪完以後才發現網上已經到處都是轉載了,心裡那個慚愧啊,算是散播了一些偏見。

我多年前是系統級軟體的程序員,就是成天抱著APUE和UNP的那種,後來辭了職去讀博士才轉的方向,由於受之前的工作經歷影響,我上次那篇帖子是站在系統級軟體工程師的角度說的,但是時過境遷,現在的計算機工業界特別是互聯網行業已經大大地向前端轉移了,所以很可能一個寫PHP或者Javascript的程序員會覺得過去那個帖子寫的和他的知識體系完全不是一個方向,因此我覺得上一個帖子有點偏了。那天也是一時衝動就刪了,其實想想叫《我心目中計算機軟體科學最小必讀書目》的話是有點偏了,但要是不刪掉改個名字叫《我心目中系統級軟體程序員的最小必讀書目》也還是可以的。


個人認為,關鍵是要由系統化的思維,能夠遷移,搞清楚要解決什麼樣的問題,其他自由腦補

1、導論:《SICP:CH1-3,4-5》,北京大學裘宗燕翻譯,前3章就是新手看的,基本的抽象能力就有了;C + PYTHON/RUBY方面,python2就是各種補丁,能直接上py3可能順眼得多;《計算的本質》;HtDP又不太實用,racket對語義理解要求有些高而且繁雜

2、數據結構C語言描述(維斯的最經典) + 演算法概論 === OK,《演算法導論》就不必了,寬泛且淺,倒是可以翻翻高教綠皮《運籌論》,實操可以是北航尹寶林教授的《C程序設計思想》,虐了一代代學生,或者《C編程介面?郭旭翻譯了一遍》

3、彙編,操作系統,鏈接與匯編、計算機組成原理 ===《CSAPP》基本夠用了

4、計算機網路,網路協議TCP/IP詳解Vol1,再隨便找個好點高校比如北郵裡面的網路實驗課件對照看看,找找感覺;找個tcpdump, wireshark命令或者工具抓包試試手;真心說謝襲人的絕對良心之作;

5、操作系統核心,LDD,ULK或者德國人的《深入理解linux內核架構》,郭旭的翻譯還是不錯的;找源碼,特定關注某個子系統,塊設備IO;

6、編譯:《編程語言設計模式》,《龍書上半段》,《虎書演算法描述》,若要深入優化,《鯨書全部》=== SICP+EoPL

7、其它的諸如:高數再補一個《重溫微積分》、線代+概率統計、離散組合推薦北京大學出版社屈婉玲耿素雲等的教材、OOP不如直接看coolshell裡面總結的軟體設計原則再補充看看《敏捷軟體開發模式》前半段用OO語言詳細解說編程基本原則(原則是真的,模式是特定語言或者領域的)、資料庫直接拿ORACLE的解說文檔看看,不可多得,一通百通,一窺頂尖DBMS的使用和實現基本概念和手法

說的有點亂,有些名字也記不清楚了,感興趣自行放狗,上下文相關搜索


有些答案有秀書的嫌疑嘛,列那麼一大堆一個普通本科生能四年能看完(看懂)基本上也不需要再去寫代碼了,因為沒時間。

如果真追求實用,要認真研讀的書還真不多,四門核心課(數結,操系,計網,計體)用心學足夠支撐一個人深入學習感興趣的東西了吧(相信大部分人還是以找到好工作為追求的),沒有想成為各方面都熟悉一點的多面手還是別花過多時間研究各種東西了.比如在語言上,lisp,haskell等等很cool的語言;資料庫上,MS家的,O記的,mysql等等一堆;XXX上,XXXXX。這些東西學了可能有幫助,但是撿了芝麻丟了西瓜這事兒不大值得,當然學有餘力了解一下,是可以為以後加分。

P.S:我買過大量的書,是涉及到一個學生能想到的各個方面,但是如今有很多都閑置了,因為在剛開始學習的時候什麼都想學,什麼都覺得重要,但是後來發現。。。真的駕馭不了那麼多東西,好好弄清楚自己的方向才是重要的。


從最底層開始學

先學邏輯電路和數字電路,玩玩單片機,再學彙編語言,推薦王爽的那本書。再學計算機組成原理。

在學這些底層東西的同時,可以熟悉一下linux操作系統。可以看看薄一點的書,如果毅力強,可以看鳥哥的那本書

然後再學c語言(不包括c++),《21天學通C語言》這本書還不錯,然後可以再看c語言之父的那本書或者C primer plus都可以。

然後再用C語言做做小項目,比如貪吃蛇之類的小遊戲

然後再學數據結構和演算法

C++ / C# /java任選一個精通即可

再學操作系統,計算機網路

把上面的這些基礎打牢就可以了


CSAPP〈深入理解計算機系統〉很不錯,可以讓你對計算機系統有個比較大致的了解,包含了彙編,操作系統,網路等的一些基礎知識~。。。尤其是書配套的lab非常好~這個好像是cmu的ics213的用書~


贊同陳碩大爺的答案,其實就是csapp中4-10章加上數據結構和演算法。這是最核心的。其他的諸如網路、資料庫等等只能算是重要科目或者是次核心了。組成原理此類的是基礎課程。


數學演算法:具體數學+演算法導論。

語言:kr c語言,OO類語言:java c++python,學OO不建議一上來就C++,容易陷入語法的坑。

系統:深入理解計算機系統,吃透這本外加操作系統足以。


你寫的順序正好,大部分學校就是這個順序,切學。不過剛開始可能會有點抽象,學的時候對著視頻看,效果可能會好點。操作系統看操作系統原理或linux內核。


首先,我們沒有程序設計課!沒有!毛都沒有!

自學,真的是自學,雖然有程設的同學也說是自學,可是見過這麼玩的嗎?計科沒有程序設計課!寶寶想哭。

教材嘛clrs,graph theory,algorithmics, 等等


看看考研考什麼應該會有一些幫助,很多時候提早閱讀以後需要的東西會對當下起到指導作用,就像提早接觸高考題型,會對高中的學習起到指導作用,計算機方面:數據結構,計算機組成,操作系統,計算機網路


我覺得能不學C++就不學C++之外,其他也沒什麼好修改的了。

不過樓主本科就看具體數學,那其他的看點什麼都不奇怪了。


推薦閱讀:

你所在的計算機科學領域的 big picture 是怎樣的?
計算機網路該如何深入學習?
為什麼研究生階段有一大堆 EE 轉 CS 的但卻很少聽說有 CS 轉 EE 的?
有哪些計算機科學方向的課程作業(Assignment/Project)值得一做?
C語言初學者,在電腦性能足夠的情況下,VS2017,codeblocks,devcpp如何選擇?

TAG:計算機科學 |