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

简介

 

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

 

大数据

 

 

研究生研究课题:加密学

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值