如何自學現代計算機科學(轉)

簡介

 

這裏收集了很多學習資源,都是關於一些適合本科生學習的計算機科學“話題(Topics)”。這裏僅僅只提供“話題”列表,而不會提供諸如知識點剖析、練習題等內容。如果你對某一個話題特別感興趣,想深入研究一下,但又買不起文中提到的書籍(實體書),那你可以嘗試通過 LibGen(http://gen.lib.rus.ec/) 這個網站來搜索有關的文章或書籍。如果你想要一個比本文更詳細一點的濃縮版本計算機科學介紹,那可以看看 Great Theoretical Ideas in Computer Science 系列文章,在這裏可以找到你感興趣的話題。因爲每一部分的學習資源都包含了必要的背景介紹,所以如果沒有看第二章——預熱的話,也沒關係。

 

學習策略

 

根據牛頓用以自學幾何學的迭代學習法:

 

當他看懂了前兩三頁,他從頭重新開始並繼續多看三四頁,發現懂的更多了,直到碰到其他令他感到困難的課題爲止,弄懂這個難題後,他繼續重新開始並且越讀越多他懂的也越多,就這樣循環往復直到他能夠精通於所有書上的知識而不需要任何人的啓發和指導

 

我在理解一場講座時會遵循這樣的章法:看完一場講座或者讀一篇文章,然後做實驗,然後自己動手寫筆記,然後假裝在課堂上向學生講解自己筆記的內容,講解時用最少量的專業術語,如此,直到我能完全理解這個章節或講座。這種學習方法叫做費曼學習法,在這個網站(http://www.calnewport.com/)上詳細解釋了何爲費曼學習法。這個網站有很多營銷學的知識,還有很多關於學習的奇聞異事,比如 如何在離散幾何課上取得好成績。除此以外,網上還有很多其他關於學習方法的建議,比如 如何做學習計劃並付諸實踐

 

預熱

 

關於“計算”的簡介

命令行是如何工作的?如何搭建網絡?基礎防火牆是什麼?包管理工作是如何進行的?

 

 

關於“編程”的簡介

 

譯者注:這本書中用的示範編程語言是Pyret,一門在風格上和Python很像,而且是專門用於教編程語言的編程語言

 

其他內容

 

 Common Lisp(Lisp編程語言的一門方言,適用於人工智能領域)

本文列出的所有課程,至少在理論上,都可以用Common Lisp去實踐一遍,比如當你學完了 15-213 計算機系統之後打造一個你自己的domain-specific machine code,或者玩轉一下基於Common Lisp的函數式數據結構,或者寫一個自己的模式匹配器(編譯器的一部分?),或者模擬一臺圖靈機,等等。當然你也可以用課程裏推薦的編程語言與工具,但是用Lisp語言做一些屬於自己的原型玩具,可以加深你對知識的理解。另外,CommonLisp有一個特點是,即使它的三方庫已經超過20年沒有更新過了,依然可以正常使用...

 

 

Little Schemer Series(一系列經典教材,學好Lisp很重要)

 

卡耐基梅隆大學的Python課程

 

 

假設你有數學專業背景

 

 

函數式編程

 

函數式編程的原則(卡耐基梅隆大學的課程)

 

 

使用OCaml編程

 

 

代數

 

線性代數

 

譯者補充

網上公認的講授線性代數最好的教授 網易雲課堂-線性代數 by Prof. Gilbert Strang from MIT

原視頻來自油管,不過網易雲課堂出了整理翻譯版本,適合國人學習

感謝Gilbert教授,讓我這樣的數學渣渣也能理解線性代數

 

抽象代數

 

 

離散數學

 

理論數學

 

 

用StandardML學離散數學

 

 

 

計算機科學領域的偉大Ideas

 

 

計算機系統與架構

 

計算機科學不僅僅是關於計算機,你之所以認爲計算機科學就是關於計算機的科學,是因爲你在計算機科學的諸多領域中都剛剛起步,而且無法完全理解其中的各種概念、思維、知識點。

 

這一部分從一個程序員的視角去學習計算機架構,比如,如何寫緩存友好的代碼,如何爲x86-64架構做優化,用彙編語言寫循環,搞清楚遞歸在最底層是如何運行的,學習機器指令,瞭解編譯器如何工作,return oriented programming (ROP) to bypass stack protections,內存層級,網絡,等等。在這部分,你可以簡單瞭解C語言編程這本書,不過這部分課程會從彙編語言的層級去闡述指針(這句不會翻譯了。。)。

 

 

設計系統(Designing Systems)

 

 

分析系統(Analyzing Systems)

 

 

網絡

 

計算、經濟、社會學的世界是如何連接在一起的?

 

 

計算機網絡

 

 

編譯器(Compilers)

 

 

數據庫系統

 

 

數據科學實踐

 

 

元語言概念(Meta-Linguistic Abstraction)

 

In computer science, metalinguistic abstraction is the process of solving complex problems by creating a new language or vocabulary to better understand the problem space. It is a recurring theme in the  MIT textbook, the Structure and Interpretation of Computer Programs, which uses Scheme as a framework for constructing new languages.【來自wiki的解釋】

 

 

 

自然語言處理(NLP)

 

 

編程語言理論

 

 

軟件質量保證

 

 

算法

 

串行與並行算法簡介

 

這裏講的不是傳統的數據結構與算法,而是專注講解並行與串行機制,如何用基於開發語言的分析模型去評估一些抽象問題的複雜度,比如垃圾回收。

 

 

高級算法

 

譯者補充

神童教授Prof. Erik Demaine from MIT的算法導論課程(油管)

 

複雜度理論

 

本科生階段的複雜度理論課程

 

 

研究生階段的複雜度理論課程

 

 

量子計算簡介(研究生階段課程)

 

 

一大堆貼近實戰的專業筆記(或書籍)

 

研究生研究課題:類型理論(Type Theory)

 

研究生研究課題:機器學習與人工智能

 

 

深度學習

 

譯者補充

吳教授的機器學習課程 網易雲課堂-斯坦福公開課:機器學習斯坦福的公開課課程主頁上有更加詳細的筆記、講義等資料

臺大李宏毅的深度學習課程,B站-李宏毅深度學習

 

大數據

 

 

研究生研究課題:加密學

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