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

2023-11-18

简介

 

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

 

大数据

 

 

研究生研究课题:加密学

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自学现代计算机科学(转) 的相关文章

  • tensorflow历史版本源码下载地址

    最近在tensorflow对应的网站上找到了tensorflow历史版本源码的下载地址 tensorflow历史版本下载地址
  • 导入MDF文件到数据库

    1 导入脚本 EXEC sp attach db dbname yhzm filename1 d jspyhzm mdf filename2 d jspyhzm log ldf 2 Microsoft SQL Server删除数据库提示出错
  • inno setup制作的安装包,安装后以管理员身份启动

    添加管理员权限 1 在 Setup 节点添加 PrivilegesRequired admin 2 进入安装目录 找到文件SetupLdr e32 这是一个二进制配置文件 需要用到ResHacker exe这个工具修改 找到
  • Win10 WSL2-CentOS7开启systemctl命令(2022-11-18更新)

    Win10 WSL2 CentOS7开启systemctl命令 2022 11 18更新 概述 文章基于如下环境 已开启WSL2的win10或者win11 WSL2下的CentOS7 下载地址为 CentOS7 自从win10支持WSL2以
  • lanelet安装

    1 https github com KIT MRT mrt cmake modules 2 sudo apt get install libpugixml dev sudo apt get install libpugixml1v5 3
  • 群体遗传学---admixture软件快速群体分群

    群体遗传学中测的很多个个体 得到了最终的SNP vcf文件 需要将其分成群体 看那几个物种聚在一起 一般使用的软件就是STRUCTURE 但是STREUTURE运行速度极慢 后面frappe软件提升了速度 但是也不是很快 admixture
  • php 解析 %e5%80%aa%e9%a3%9e,content.json

    title Linux安装Docker date 2020 11 08T14 54 29 000Z path 2020 11 08 Linux安装Docker tags name Linux Docker slug Linux Docker
  • loC和AOP使用扩展

    6 1多种方式实现依赖注入 6 1 1构造注入 6 1 2技能训练1 6 1 3使用p命名空间实现属性注入 Spring配置文件从2 0版本开始采用schema形式 使用不同的命名空间管理不同类型的配置使得配置文件更具扩展性 列如 我们曾使
  • [Python]pip查找包的历史版本

    pip查找包的历史版本 场景 在一些时候通过pip install xxx 安装第三方库的时候默认情况下安装最新版本 由于是最新版本有个稳定性就不得不考虑其中 所以部分场景会存在一些bug这就要求我们安装历史版本 对一些更新频率比较高的三方
  • Window&linux使用换行符的问题总结

    1 Window使用Git时 设置换行符格式 参见 https www jianshu com p 6ef90ce18ba2 2 vi下设置回车换行符等特殊符号 换行方式 在早期的打印机时代 开始新的一行要占用两个字符的时间 如果到了一行的
  • java.lang.UnsatisfiedLinkError

    java lang UnsatisfiedLinkError 原因 jni注册的时候匹配写错了 I B B 如下 static JNINativeMethod methods native getSps I B B void Native
  • Keras保存模型并载入模型继续训练

    我们以MNIST手写数字识别为例 import numpy as np from keras datasets import mnist from keras utils import np utils from keras models
  • PyQt5中的按钮3-QCommandLinkButton

    PyQt5中的按钮3 QCommandLinkButton QCommandLinkButton介绍 QCommandLinkButton举例 QCommandLinkButton介绍 CommandLinkButton 外观像是一个被设置
  • verilog赋多位值_关于verilog 赋值

    1 wire表示直通 即只要输入有变化 输出马上无条件地反映 reg表示一定要有触发 输出才会反映输入 2 只有 lt 表示非阻塞 给沿触发的寄存器赋值 是阻塞赋值 给电平触发的信号赋值 3 不指定就默认为1位wire类型 专门指定出wir
  • 计算机视觉论文-2021-07-19

    本专栏是计算机视觉方向论文收集积累 时间 2021年7月19日 来源 paper digest 欢迎关注原创公众号 计算机视觉联盟 回复 西瓜书手推笔记 可获取我的机器学习纯手推笔记 直达笔记地址 机器学习手推笔记 GitHub地址 1 T
  • 在struts1.1框架下,利用smartupload实现文件的上传(可以是多个文件)

    1 前端页面upload jsp 后台处理程序UplodAction java 2 struts config的配置参数如下 没有设置 ActionForm
  • JAVA的WebService规范(支持)

    SOA Service Oriented Architecture 面向服务架构是一种思想 它将应用程序的不同功能单元通过中立的契约 独立于硬件平台 操作系统和编程语言 联系起来 使得各种形式的功能单元更好的集成 目前来说 WebServi
  • windows7旗舰版 appium环境搭建

    1 安装jdk 8u171 windows x64 exe 注意配置环境变量 参考资料 https jingyan baidu com article 6dad5075d1dc40a123e36ea3 html java version 查
  • Modbus RTU协议各知识点入门 + 实例

    文章目录 1 起因 2 几个重点 2 1 一些难懂的概念 2 2 CRC的高低位 2 3 其他 3 介绍 3 1 起源 3 2 分类 4 格式 4 1 串口协议 4 2 帧格式 5 数据类型 6 功能码 7 CRC16 modbus 8 实
  • React(Hook介绍)

    为什么要用Hook 介绍Hooks之前 首先要给大家说一下React的组件创建方式 一种是类组件 一种是纯函数组件 并且React团队希望 组件不要变成复杂的容器 最好只是数据流的管道 开发者根据需要 组合管道即可 也就是说组件的最佳写法应

随机推荐

  • 如何在 CentOS 8 上安装 Python 3.8

    本文来自于 阿里云官方镜像站 https developer aliyun com mirror utm content g 1000307095 原文链接 https developer aliyun com article 756221
  • 报错java.lang.Long cannot be cast to java.lang.Integer解析

    用博客记录工作中出现的问题 给自己一个提醒 也给其他朋友一些借鉴 报错 java lang Long cannot be cast to java lang Integer Long 无法转化成Integer类型 这个异常 经常出现在hin
  • 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话

    该如何理解下面段代码的第二行QWidget parent 1 Widget Widget QWidget parent 2 QWidget parent 3 4 在讲解原因之前 先请大家看下面的一个例子 include
  • git切换分支时报错(error: pathspec ‘master‘ did not match any file(s) known to git.)的解决方法

    git切换分支时报错 切换分支 root git my code git checkout master 产生如下报错 error pathspec master did not match any file s known to git
  • 用 Python 爬取网红城市大长沙!

    这两天获取了两份关于长沙的数据 长沙景点和长沙美食 之后进行了分析 如果有朋友想去长沙或者周边城市玩 要仔细看看喔 导入库 长沙景点 数据获取 长沙景点的数据获取方法和之前那篇关于厦门的文章是一样的 只是重新跑了一遍代码 具体过程不再阐述
  • HADOOP集群搭建

    安装步骤 机器mini yum mini2 mini3 mini4 注意 下面的步骤在4台机子上都要做的操作 1先将虚拟机的网络模式选为NAT 2修改主机名 vi etc sysconfig network NETWORKING yes H
  • git:kex_exchange_identification:Connection closed by 52.74.223.119 port 22

    使用Rider的git进行push操作时提示 kex exchange identification Connection closed by remote host Connection closed by 52 74 223 119 p
  • AJAX 缓存处理

    关于AJAX请求服务器后缓存数据 造成没有及时刷新的问题 最近在做项目的时候 使用了ajax去请求服务器的数据 刚开始还可以 我测试一切运行正常 我不是专业的测试人员哈 所以还是有些问题没有测出来哈 后来ajax请求的数据变化了 但是页面数
  • 设计模式之命令模式

    在日常生活中 我们常常会遇到这样一些问题 需要向某些对象发送请求 但是并不知道请求的接收者是谁 也不知道被请求的操作是哪个 我们只需在程序运行时指定具体的请求接收者即可 此时 可以使用命令模式来进行设计 使得请求发送者与请求接收者消除彼此之
  • react 显示当前时间_react中monent如何获取日期?

    方法 1 使用 npm install moment save 安装moment 2 在组件中使用import语句引入moment 3 使用monent提供的方法来获取日期 例 moment format 获取当前时间 本教程操作环境 wi
  • OneFlow 中的 Softmax

    Softmax 是深度学习模型中的常见算子 PyTorch 的 Softmax 算子直接调用 cuDNN 的接口 而 OneFlow 内部针对输入数据的类别数量 采用3个 kernel 来分别处理 在多数情况下都可以获得比 cuDNN 更优
  • 【Git】(三)回退版本

    1 git reset命令 1 1 回退至上一个版本 git reset hard HEAD 1 2 将本地的状态回退到和远程的一样 git reset hard origin master 注意 谨慎使用 hard 参数 它会删除回退点之
  • redis必杀高级:安全

    题记 我们可以通过 redis 的配置文件设置密码参数 这样客户端连接到 redis 服务就需要密码验证 这样可以让你的 redis 服务更安全 例如 设置密码 查看是否设置了密码验证 127 0 0 1 6379 gt CONFIG ge
  • 【Java日志】你真的知道怎么使用Java日志API吗?

    你真的知道怎么使用Java日志API吗 一 背景 二 Java日志API错误使用示例 1 占位符的错误使用示例 2 异常日志的错误使用示例 三 推荐一个学习Java日志的项目 一 背景 在平时的开发过程中 常常看到一些编码不规范的打印日志的
  • Flask读取RTSP视频流,及其简单的一个案例

    Flask读取RTSP视频流 及其简单的一个案例 此章节包括通过是使用Flask可以实时地显示RTSP视频流 代码确实非常简单 源于Github 主要为为Nvidia Deepstream极致细节 3 Deepstream Python R
  • 华为怎么显示返回按键_华为怎么把返回那三个键调出来

    华为怎么把返回那三个键调出来 其实这个方法一点都不难 1 首先在华为nova3的桌面找到 设置 并点击进入 2 点击打开 系统 3 在系统菜单下 点击进入 系统导航 4 点击勾选 屏幕内虚拟导航栏 即可打开虚拟导航 不勾选即可直接关闭虚拟导
  • vscode配置快捷键注释模板

    文章目录 前言 一 打开配置项 1 首选项编辑配置 2 新建代码片段 3 配置注释文件名 二 新建代码注释模板 三 注释使用 前言 本篇文章可以在vscode中配置快捷键显示代码的信息注释 如作者 描述 创建时间等 一 打开配置项 1 首选
  • SD卡中FAT32文件格式快速入门(图文详细介绍)

    说明 MBR Master Boot Record 主引导记录 DBR DOS Boot Record 引导扇区 FAT File Allocation Table 文件分配表 硬件 本文SD卡为Kingston 4GB FAT32格式 簇
  • 【Python】 Pandas数据导入与导出

    数据读取 import pandas as pd data pd read csv data csv 读取数据文件 print data 数据索引与查看 x data loc x 读取表头为 x 的那一列的数据 print x y data
  • 如何自学现代计算机科学(转)

    简介 这里收集了很多学习资源 都是关于一些适合本科生学习的计算机科学 话题 Topics 这里仅仅只提供 话题 列表 而不会提供诸如知识点剖析 练习题等内容 如果你对某一个话题特别感兴趣 想深入研究一下 但又买不起文中提到的书籍 实体书 那