简介

这里收集了很多学习资源,都是关于一些适合本科生学习的计算机科学“话题(Topics)”。这里仅仅只提供“话题”列表,而不会提供诸如知识点剖析、练习题等内容。如果你对某一个话题特别感兴趣,想深入研究一下,但又买不起文中提到的书籍(实体书),那你可以尝试通过 LibGen(http://gen.lib.rus.ec/) 这个网站来搜索有关的文章或书籍。如果你想要一个比本文更详细一点的浓缩版本计算机科学介绍,那可以看看 Great Theoretical Ideas in Computer Science 系列文章,在这里可以找到你感兴趣的话题。因为每一部分的学习资源都包含了必要的背景介绍,所以如果没有看第二章——预热的话,也没关系。

学习策略

根据牛顿用以自学几何学的迭代学习法:

当他看懂了前两三页,他从头重新开始并继续多看三四页,发现懂的更多了,直到碰到其他令他感到困难的课题为止,弄懂这个难题后,他继续重新开始并且越读越多他懂的也越多,就这样循环往复直到他能够精通于所有书上的知识而不需要任何人的启发和指导

我在理解一场讲座时会遵循这样的章法:看完一场讲座或者读一篇文章,然后做实验,然后自己动手写笔记,然后假装在课堂上向学生讲解自己笔记的内容,讲解时用最少量的专业术语,如此,直到我能完全理解这个章节或讲座。这种学习方法叫做费曼学习法,在这个网站(http://www.calnewport.com/)上详细解释了何为费曼学习法。这个网站有很多营销学的知识,还有很多关于学习的奇闻异事,比如 如何在离散几何课上取得好成绩。除此以外,网上还有很多其他关于学习方法的建议,比如 如何做学习计划并付诸实践。

预热

关于“计算”的简介

命令行是如何工作的?如何搭建网络?基础防火墙是什么?包管理工作是如何进行的?

  • (Slides) CS 2043 Unix Tools & Scripting 这个PPT中介绍了emacs、vim一类的编辑器
  • The Unix Programming Environment 这本书介绍了Awk\Grep\Sed以及Bash脚本
  • 这本书 更加清楚的解释了现代计算机硬件、软件以及交互网络的基础概念

关于“编程”的简介

  • Programming and Programming Languages 布朗大学的教科书,介绍了编程基础概念并分析了编程语言
  • How to Design Programs 同上一本书的作者,并且是一个在线教育项目Bootstrap(不是那个前端框架Bootstrap)的一部分

译者注:这本书中用的示范编程语言是Pyret,一门在风格上和Python很像,而且是专门用于教编程语言的编程语言

其他内容

Common Lisp(Lisp编程语言的一门方言,适用于人工智能领域)

本文列出的所有课程,至少在理论上,都可以用Common Lisp去实践一遍,比如当你学完了 15-213 计算机系统之后打造一个你自己的domain-specific machine code,或者玩转一下基于Common Lisp的函数式数据结构,或者写一个自己的模式匹配器(编译器的一部分?),或者模拟一台图灵机,等等。当然你也可以用课程里推荐的编程语言与工具,但是用Lisp语言做一些属于自己的原型玩具,可以加深你对知识的理解。另外,CommonLisp有一个特点是,即使它的三方库已经超过20年没有更新过了,依然可以正常使用...

  • (Book) Common Lisp - A Gentle Introduction to Symbolic Computation 这本书假设读者毫无编程基础,引导读者用纸和笔一步一步的学习编程
  • Road to Common Lisp 也是介绍CommonLisp,但是示例内容比较新,全是基于2017年的开发规范
  • Paradigms of Artificial Intelligence Programming 循序渐进教你学Lisp
  • On Lisp

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

  • The Little Schemer 教你搞懂递归
  • The Seasoned Schemer 教你搞懂高阶函数
  • The Little MLer 教你加深对递归思想的理解

卡耐基梅隆大学的Python课程

  • (Full Course) 15-112 Fundamentals of Programming and Computer Science 2019年春季推出的课程,按周教学,每一节在油管上都有对应的视频讲解,而且每一节都有课后作业(Python完成)
  • 介绍如何撰写好的代码提交备注 (???)

假设你有数学专业背景

  • 数学基础

函数式编程

函数式编程的原则(卡耐基梅隆大学的课程)

  • (Lecture Notes) 15-150 Principles of Functional Programming
  • Daniel R.Licata教授给这门课程做的笔记
  • Programming in Standard ML 课程中的一部分

使用OCaml编程

  • 康奈尔大学的OCaml课程
  • Data Structures and Functional Programming 康奈尔大学 2018年春季的课程,正如其名,既讲了数据结构也讲了函数式编程

代数

线性代数

  • Wildberger Liner Algebra 一个学习线性代数的油管教学视频
  • (Full Course) CS053 - Coding the Matrix  布朗大学的线性代数课程
  • Linear Algebra - As an Introduction to Abstract Mathematics 有很多练习题的线性代数免费在线课程

译者补充

网上公认的讲授线性代数最好的教授 网易云课堂-线性代数 by Prof. Gilbert Strang from MIT

原视频来自油管,不过网易云课堂出了整理翻译版本,适合国人学习

感谢Gilbert教授,让我这样的数学渣渣也能理解线性代数

抽象代数

  • Wildberger Abstract Algebra 一个学习抽象代数的油管教学视频
  • (Full Course) Math-371 Abstract Algebra 宾夕法尼亚大学的抽象代数课程
  • Abstract Algebra Open Learning Course 哈佛大学的抽象代数课程

离散数学

理论数学

  • (Book) An Infinite Descent into Pure Mathematics 收集了卡耐基梅隆大学的讲座笔记,这个课程时离散数学、理论数学的基础!
  • 康奈尔大学2019年春季的数学课程

用StandardML学离散数学

  • (Book/Lectures) Discrete Mathematics and Functional Programming - Thomas VanDrunen

计算机科学领域的伟大Ideas

  • (Full Course) 15-251 Great Theoretical Ideas in Computer Science 卡耐基梅隆大学的课程,是一门大杂烩课程,包含了很多重要的数学概念,但是要先学完前面提到的理论数学的课程

计算机系统与架构

计算机科学不仅仅是关于计算机,你之所以认为计算机科学就是关于计算机的科学,是因为你在计算机科学的诸多领域中都刚刚起步,而且无法完全理解其中的各种概念、思维、知识点。

这一部分从一个程序员的视角去学习计算机架构,比如,如何写缓存友好的代码,如何为x86-64架构做优化,用汇编语言写循环,搞清楚递归在最底层是如何运行的,学习机器指令,了解编译器如何工作,return oriented programming (ROP) to bypass stack protections,内存层级,网络,等等。在这部分,你可以简单了解C语言编程这本书,不过这部分课程会从汇编语言的层级去阐述指针(这句不会翻译了。。)。

  • (Full Course) 15-213 Intro to Computer Systems (CMU) 卡耐基梅隆大学的计算机系统课程,这个课程包罗万象,从计算机原理、计算机系统、数据库、计算机网络等,都有涉及
  • The labs (Data Lab, Bomb Lab ect) are on the book website 课程配套的在线实验课程

设计系统(Designing Systems)

  • (Book) MMIXware: a RISC computer for the third millennium - Donald E Knuth 非常老的一本书,阐述了如何设计一个计算机系统架构

分析系统(Analyzing Systems)

  • (Book) Performance Modeling and Design of Computer Systems: Queing Theory in Action - Mor Harchol-Balter

网络

计算、经济、社会学的世界是如何连接在一起的?

  • (Book) Networks, Crowds and Markets - Kleinberg & Easley 这本书是基于我们在康奈尔大学教授的跨学科课程,讲的不仅仅是计算机网络,而是广义的网络概念,除了信息技术,还涉及经济学、市场学、社会学等等。

计算机网络

  • (Book) Computer Networks: A Systems Approach - Larry Peterson and Bruce Davie 在上文提到的15-213课程(计算机系统)中介绍了计算机网络和Socket编程,这本书详细解释了网络架构设计的底层原理
  • 15-744: Computer Networks Syllabus 卡梅隆大学的计算机网络课程,里面有很多PPT和PDF可以看

编译器(Compilers)

  • (Full Course) CSE 131: Compilers 加州大学圣地亚哥分校的编译原理课程
  • 卡耐基梅隆大学的编译器课程(一)
  • 卡耐基梅隆大学的编译器课程(二)
  • 一个讲如何搭建虚拟机的视频讲座

数据库系统

  • 一位教授在2015年写的关于数据库技术未来发展的讲座
  • (Full Course) 15-445 Database Systems (CMU) 卡耐基梅隆大学的数据库系统课程
  • 15-445/645 Intro to Database Systems (Fall 2017) 油管上与上面课程对应的数据库系统讲解视频,一共25个视频
  • (Book) DatabaseSystem Concepts 一本经典教材,但是最好在学完前面提到的15-213课程后再看
  • (Full Course) 15-721 Database Systems (CMU)  进阶课程,基于Peloton自己动手打造一个数据库系统

数据科学实践

  • (Full Course) 15-388 Practical Data Science 卡耐基梅隆大学(额 好像不是)的课程,很有用的一门课,全面讲述了数据科学领域需要用到的各种技术,包括数据收集与处理、数据可视化与展示、通过深度学习构建静态模型、大数据等等
  • Computational and Inferential Thinking 康奈尔大学的课程,同样是全面讲解数据科学技术,用的示例开发语言是Python,用到了jupyter notebooks
  • (Book) Foundations of Data Science 康奈尔大学的教材

元语言概念(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的解释】

  • 简单说就是为了解决一个特定领域的复杂问题,发明一种新的语言或者词汇表。源于麻省理工的一门开创性课程——(Full Course) 6.037 Structure and Interpretation of Computer Programs
  • 1985年MIT的教授给HP员工上这门课时的全部录像
  • 如果对Lisp这门语言感兴趣,可以看看Norvig的一本关于人工智能的书(github)

自然语言处理(NLP)

  • 11-411 Natural Language Processing 卡耐基梅隆大学的NLP课程
  • 11-411课程对应的视频讲解
  • sci-hub 一个论文搜索引擎,上面可以直接搜索NLP有关的文献资料
  • 一些和NLP算法有关的笔记,也是卡耐基梅隆大学的

编程语言理论

  • 一篇文章讲解为什么要学习编程语言
  • (Book) Practical Foundations for Programming Languages - Robert Harper(已失效)卡耐基梅隆大学的教材
  • Oregon Programming Languages Summer School 一些和上面那本书有关的讲座

软件质量保证

  • (Lecture Notes) 15-316 Software Foundations of Security and Privacy CMU的讲座笔记,将软件安全、隐私、测试等
  • (Book) Verified Functional Algorithms Andrew Appel 写的书
  • 上面那本书的作者的讲座记录
  • (Full Course) 15-424 Foundations of Cyber-Physical Systems

算法

串行与并行算法简介

这里讲的不是传统的数据结构与算法,而是专注讲解并行与串行机制,如何用基于开发语言的分析模型去评估一些抽象问题的复杂度,比如垃圾回收。

  • (Book) Parallel and Sequential Algorithms CMU的教材
  • 和上面那本教材有关的课程

高级算法

  • (Full Course) CS224 Advanced Algorithms 哈佛大学的高级算法课程
  • Purely Functional Data Structures 和上面课程相关的书
  • Functional Data Structures 加拿大滑铁卢大学的教材,里面的练习题是用OCaml语言做的

译者补充

神童教授Prof. Erik Demaine from MIT的算法导论课程(油管)

复杂度理论

本科生阶段的复杂度理论课程

  • (Full Course) 15-455 Undergraduate Complexity Theory CMU的课程
  • 上面课程的讲座视频

研究生阶段的复杂度理论课程

  • (Full Course) 15-855 Graduate Computational Complexity Theory CMU的课程
  • 上面课程的讲座视频
  • Computational Complexity: A Modern Approach 剑桥大学的教材

量子计算简介(研究生阶段课程)

  • (Full Course) 15-859BB: Quantum Computation CMU的课程,学习这个课程之前需要先学习完复杂度理论、线性代数、离散概率论等课程
  • 上面课程的讲解视频

一大堆贴近实战的专业笔记(或书籍)

研究生研究课题:类型理论(Type Theory)

研究生研究课题:机器学习与人工智能

  • (Full Course) 15-780 Graduate Introduction to AI CMU在2019年春季的研究生人工智能课程
  • CMU: Spring 2017: 15-780 Graduate Artificial Intelligence CMU在2017年的研究生人工智能课程视频
  • 15-780 Graduate Artificial Intelligence | CMU  研究生人工智能课程视频
  • 一系列MIT的人工智能讲座视频
  • 2017年的一套研究生课程,专注回顾一些往年论文中未解决的AI难题或者观点
  • Artificial Intelligence MIT在2010年面向本科生的AI课程

深度学习

  • CMU在2016年关于并行GPU编程训练的课程视频、讲座
  • (Full Course) 11-785 Introduction to Deep Learning CMU在2017年秋季的课程,介绍深度学习
  • CMU 11-785 spring 2018 CMU在2018年春季的课程,介绍深度学习
  • 18-739: Security and Fairness of Deep Learning  CMU在2019年春季的课程,介绍深度学习的安全与公正

译者补充

吴教授的机器学习课程 网易云课堂-斯坦福公开课:机器学习,斯坦福的公开课课程主页上有更加详细的笔记、讲义等资料

台大李宏毅的深度学习课程,B站-李宏毅深度学习

大数据

  • (Full Course) CS229r Algorithms for Big Data 哈佛大学的大数据算法课程,这个课程的首页还介绍了非常多的其他大学的往年的大数据课程
  • Principles of Large-Scale Machine Learning  大规模机器学习 康奈尔大学在2019年春季的课程
  • https://www.textbook.ds100.org/  加州大学伯克利分校的本科生入门教材,全英文,介绍数据科学原理,内容较简单,需要统计学和 Python 基础

研究生研究课题:加密学

如何自学现代计算机科学(转)相关推荐

  1. 计算机科学导论第二章,补基础:自学:计算机科学导论 第二章 数字系统

    1. 其他进制到十进制的转换 例2.8: 将二进制数110.11转换为十进制数 二进制 1 1 0 1 1 位置量 22 21 20 2-1 2-2 各部分结果 4 + 2 + 0 + 0.5 + 0 ...

  2. 计算机科学导论数据运算,补基础:自学:计算机科学导论 第四章 数据运算(示例代码)...

    4.1 逻辑运算:指那些应用于模式中的一个二进制位,或在两个模式中相应的两个二进制位的相同基本运算. 4.1.1 位层次上的逻辑运算 0 代表逻辑 假, 1 代表逻辑 真. 4种操作: 非(NOT): ...

  3. 计算机网络概论何莉电子书,江苏自学考试计算机网络技术及其实践教材大纲

    江苏技术师范学院编 一.课程性质.地位.目的和任务 计算机网络技术及其实践是高等教育自学考试计算机科学教育专业主干的课程.考生通过本课程的学习,应该了解和掌握计算机网络的基本概念和体系结构:掌握局域网 ...

  4. 计算机辅助教学( ),27075 计算机辅助教学

    高纲1228 江苏省高等教育自学考试大纲 27075计算机辅助教学 江苏技术师范学院编 江苏省高等教育自学考试委员会办公室 一.课程性质及其设置目的与要求 (一)课程性质和特点 <计算机辅助教学 ...

  5. 成为REAL程序员的终极指南

    Beginning my career I met a senior developer who was writing code like this: 在我的职业生涯开始时,我遇到了一位资深开发人员 ...

  6. 自学计算机科学CS总结-by 要有光LTBL

    这篇文章大半年前看过,原作者 要有光LTBL 同学也在课程图谱的群里,这两天群里讨论的时候想到了这篇文章,还花了一点时间扒了出来,所以征得作者有光大神的同意,转发和备份到这里,顺便给课程做了一个内部链 ...

  7. 如何系统地学习计算机科学与技术?六步帮你轻松自学

    计算机科学与技术是一门广泛而深入的学科,随着信息技术的蓬勃发展,其在许多领域中的应用也越来越广泛.如今,计算机科学和技术不仅是许多职业的基础,而且在实用应用上也非常重要.那么,如何将计算机科学与技术系 ...

  8. GitHub 上这个「计算机科学」自学指南火了!

    公众号关注 "GitHubPorn" 设为 "星标",每天带你逛 GitHub! 作者:Ozan Onay.Myles Byrne 译者:Keith Null ...

  9. 自学计算机科学,你需要这份指南

    相信经常看我的Github排行榜的朋友,最近会发现有一个项目经常上热门,TeachYourselfCS-CN,看名字就知道,这是一个教你自学计算机的项目,原作者为Ozan Onay和Myles Byr ...

最新文章

  1. 全球43亿IPv4地址正式耗尽,IPv6才是物联网的菜
  2. tomcat服务器访问网址组成
  3. 负载测试与压力测试的区别
  4. HDU_2795 Billboard(线段树)
  5. Spring boot + mybatis + oracle代码生成器
  6. SpringCloud工作笔记047---FastJson解析多级JSON_FastJson解析嵌套JSON_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
  7. ListView.setOnItemClickListener 点击无效
  8. org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案
  9. iframe去边框,无边框。使用大全
  10. delphi xe3 mysql,delphi10.3安装使用mySQL
  11. STM32 KEIL 下的 printf 函数
  12. lua绑定c++的时候常见得错误
  13. 安装tensorflow时候报错ImportError: DLL load failed: 找不到指定的模块。Failed to load the native TensorFlow runtime.
  14. 计算机桌面图标变小了,电脑桌面图标变小了怎么办
  15. DRF总结(三)Serializer的使用
  16. 启动Jmeter录制代理进行录制,报 jmeter.protocol.http.proxy.ProxyControl
  17. FPGA vs ASIC
  18. Android studio 中使用GeenDao
  19. java 使用TexturePaint和Graphics2D可以实现多边形图片裁剪
  20. 如何让《隐秘的角落》快速大结局?只需要一份保险......

热门文章

  1. mirror国内镜像源网站整理
  2. java诺基亚nba,诺基亚携手NBA,合作跨越大中华地区
  3. HCIE之路-11 华为路由引入,路由控制基础思维导图(不定期更新,纯个人理解,欢迎批评指正!!!)
  4. 教你如何升级索爱X10至Android 2.1(适用于任何版本)
  5. Oracle获取上个月的第一天、今年第一天
  6. 如何做科研以及研究生毕设与论文研究【笔记】
  7. 汇客huikeCRM项目实战-初出茅庐
  8. Alfresco入门
  9. 生活中的定律之晕轮效应
  10. 第三阶段(CGB个人笔记)