如何自学现代计算机科学(转)

本文提供了丰富的计算机科学学习资源,覆盖编程、算法、数据库等多个领域,旨在帮助本科生掌握核心概念及实用技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

 

这里收集了很多学习资源,都是关于一些适合本科生学习的计算机科学“话题(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站-李宏毅深度学习

 

大数据

 

 

研究生研究课题:加密学

This text develops a comprehensive theory of programming languages based on type systems and structural operational semantics. Language concepts are precisely defined by their static and dynamic semantics, presenting the essential tools both intuitively and rigorously while relying on only elementary mathematics. These tools are used to analyze and prove properties of languages and provide the framework for combining and comparing language features. The broad range of concepts includes fundamental data types such as sums and products, polymorphic and abstract types, dynamic typing, dynamic dispatch, subtyping and refinement types, symbols and dynamic classification, parallelism and cost semantics, and concurrency and distribution. The methods are directly applicable to language implementation, to the development of logics for reasoning about programs, and to the formal verification language properties such as type safety. This thoroughly revised second edition includes exercises at the end of nearly every chapter and a new chapter on type refinements. Table of Contents Part I Judgments and Rules Chapter 1 Abstract Syntax Chapter 2 Inductive Definitions Chapter 3 Hypothetical and General Judgments Part II Statics and Dynamics Chapter 4 Statics Chapter 5 Dynamics Chapter 6 Type Safety Chapter 7 Evaluation Dynamics Part III Total Functions Chapter 8 Function Definitions and Values Chapter 9 System T of Higher-Order Recursion Part IV Finite Data Types Chapter 10 Product Types Chapter 11 Sum Types Part V Types and Propositions Chapter 12 Constructive Logic Chapter 13 Classical Logic Part VI Infinite Data Types Chapter 14 Generic Programming Chapter 15 Inductive and Coinductive Types Part VII Variable Types Chapter 16 System F of Polymorphic Types Chapter 17 Abstract Types Chapter 18 Higher Kinds Part VIII Partiality and Recursive Types Chapter 19 System PCF of Recursive Functions Chapter 20 System FPC of Recursive Types Part IX Dynamic Types Chapter 21 The Untyped λ-Calculus Chapter 22 Dynamic Typing Chapter 23 Hybrid Typing Part X Subtyping Chapter 24 Structural Subtyping Chapter 25 Behavioral Typing Chapter Part XI Dynamic Dispatch Chapter 26 Classes and Methods Chapter 27 Inheritance Part XII Control Flow Chapter 28 Control Stacks Chapter 29 Exceptions Chapter 30 Continuations Part XIII Symbolic Data Chapter 31 Symbols Chapter 32 Fluid Binding Chapter 33 Dynamic Classification Part XIV Mutable State Chapter 34 Modernized Algol Chapter 35 Assignable References Chapter 36 Lazy Evaluation Part XV Parallelism Chapter 37 Nested Parallelism Chapter 38 Futures and Speculations Part XVI Concurrency and Distribution Chapter 39 Process Calculus Chapter 40 Concurrent Algol Chapter 41 Distributed Algol Part XVII Modularity Chapter 42 Modularity and Linking Chapter 43 Singleton Kinds and Subkinding Chapter 44 Type Abstractions and Type Classes Chapter 45 Hierarchy and Parameterization Chapter Part XVIII Equational Reasoning Chapter 46 Equality for System T Chapter 47 Equality for System PCF Chapter 48 Parametricity Chapter 49 Process Equivalence Appendix A Background on Finite Sets
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值