跳到主要内容

计算机科学基础

把这页当作检查清单,而不是课程大纲。真正持久的核心其实很小:

  1. 表示:位、数值、文本、指令和数据格式。
  2. 执行:表达式、状态、控制流、函数、递归和抽象。
  3. 资源:时间、内存、存储、网络及其相互权衡。
  4. 组合:接口、模块、进程、协议和分层。
  5. 可靠性:不变量、测试、失效模式、可观测性和安全边界。

接下来可以看 数据结构、算法 和 编程语言。如果想系统入门,Berkeley CS 61A 是个不错的参考。

把检查清单变成阅读路径​

这是一张编程基础地图,不是对硬件、操作系统、网络和安全的完整论述。可以从零开始,但最好选一门语言实际运行例子,不要同时学习所有层次。

问题阅读起点怎样判断自己理解了
给变量赋值,会复制数据吗?Python 名称与对象预测修改一个有别名的列表后,两个名称看到的值是否都会变化。
函数怎样产生结果?函数区分参数、局部名称、返回值与副作用。
为什么输入越多,工作量越大?时间复杂度写复杂度之前,先说明输入规模和计算的操作。
修改后哪些事实必须保持成立?链表解释删除最后一个元素时头尾指针应怎样变化。
程序怎样保存自己的状态?进程、地址空间与内存区分进程内存与共享资源。
请求怎样到达应用?网络请求的完整路径判断故障发生在 DNS、连接、TLS 还是 HTTP 层。
关联记录怎样保持一致?关系型数据、SQL 与事务解释约束保证什么,以及事务把哪些修改一起提交。
怎样发现程序违反约定?单元测试分别测试普通输入、空输入和非法输入。

不变量是每个合法状态、或每一步循环结束后都必须保持的性质。测试检查选定的执行情况;基于不变量的论证则解释为什么所有满足假设的执行都正确。两者都需要先说明程序应该做什么。 还需要论证算法会逐步接近停止条件;只有不变量,不能证明算法一定会结束。

探索关联打开关联网络