CS 划重点
10 个主题,从命令行到数据库。把「读懂代码、改得动代码、知道程序在跑什么」打牢。
提问的智慧
把'提问'放在所有 CS 知识的第一位。读完之后,向 AI 提问、向人提问都会更有章法。
通读一遍 Github 经典文章《How To Ask Questions The Smart Way》。重点是学会:如何描述问题、如何给上下文、如何展现你已经做过的尝试。
收益不止是技术论坛。AI 时代,提示词和提问本质是同一件事,给足上下文、说清意图、展示你已排查的步骤。
环境、工具与命令行
以 MIT Missing Semester 为主,扩展《命令行的艺术》。这是 VibeCoder 跨过 vibe coding 阶段的第一道门槛。
需要掌握的核心模块:
- Git / Version Control。分支、merge / rebase、推送、版本回退。能在终端里独立操作,不是 AI 帮我点按钮。
- SSH。公钥/私钥原理,能在终端独立连上 Linux 服务器,知道连接过程中发生了什么。
- Tmux。终端复用器。能在服务器上跑进程、detach / attach 切换会话。
- Shell。Linux 哲学:每个工具做一件事,管道串起来。能写出
ls | grep epub | wc -l这样的命令链。 - Vim。兜底编辑器。
i进入、esc退出、:wq保存退出、:q!强退。 - Makefile。知道 target / dependency / command 三个概念,不需要写复杂构建。
- Docker。理解 image 与 container 的区别。能跑起容器、写 Dockerfile。
- 环境配置。AI 配环境时看它的 CoT,能看懂在做什么就行。
编程语言
C / C++ / Python / Java 等大学基础课会教的内容。目标不是学新语言,是*读懂*不同范式的代码。
知道所有编程语言都有的概念:数组、循环、判断、函数。能读懂常见语法。
- Python 是解释性语言。慢,先变成字节码再用解释器逐条执行,没有直接编译成机器码。
- C / C++ 是编译型。直接编译成机器码。
- OOP(类、继承、多态)知道概念就行——这是经典基础,但实际工程中常常被过度使用。
不用重新学。选哪种语言取决于库,不是语言本身。
数据结构与算法
所有代码人绕不过的部分。但不应试的话,*不是*手撕 LeetCode 难题。目标:AI 写完你*抄一遍*,至少看懂在写什么。
- 模运算。
(a * b) % 9 = ((a % 9) * (b % 9)) % 9这种基本法则。 - 时间复杂度 / 空间复杂度。必须学会。O(n)、O(n²)、O(n log n) 是常用档位。
- 摊还分析。了解概念:有些操作单次很贵但平均下来很便宜。
- 表、栈、队列、优先队列,知道有这些东西,大概是啥,不用会写。
- 算法设计思路:贪婪、分治、动态规划、搜索、排序、树、图。
想面试转行的同学需要自己刷 LeetCode、上点难度。不转开发的话,知道概念即可。
软件工程
要懂的不是技术细节,是*术语*。遇到项目里有人提到这些词,能在 30 秒内讲清楚是什么。
- 黑盒 / 白盒测试。黑盒不关心内部逻辑,只测输入输出;白盒看代码内部来测。
- Unit Testing。一次只测一个小功能(一个函数、一个模块)。
- CI / CD。每次提交自动跑测试 / 自动部署。
- A / B Testing。同时上线两个版本,看哪个效果更好。
- Infrastructure as Code。写配置文件告诉服务器该装什么,不手装。
当词典查。做项目时再深入。让专业开发去搞。
体系结构、操作系统、系统
这一节的核心是*会用 GDB 跟 AI 一起 debug*。理解「每条指令只做一件事」就够。
- 体系结构。CPU 只有少量寄存器,每条指令只做一件事(改一个寄存器的值或一块内存)。编译器把高级语言翻译成这些基本指令。
- 边界意识。知道计算机能写什么和不能写什么。要浇花得有根线连到机械臂上,计算机自己不会长出手。
- 进程 / 线程 / 内存。一个进程有一块内存,里面可以有很多线程。线程共享内存,但各自有独立的寄存器。
- 二进制、电路、汇编。知道基本概念。
- 文件系统、IO、死锁。知道在干啥。
- Raft。分布式共识算法。核心要求是至少一半以上服务器在线系统才能工作。
- 并发编程。deadlock、各种 lock、multithread、context switch。
- 编译原理。上下文无关语法:你可以挑出其中一小段,只要这段本身符合语法规则,外面的东西不受影响。
知道 Raft 的「过半存活」原则、知道并发经典问题。不需要自己实现分布式系统或编译器。
计算机网络
了解网络结构与协议通信方式。实践:装 Wireshark 抓包。
- TCP vs UDP。TCP 可靠(有重传),UDP 快速(不保证送达)。
- 丢包率、延迟、带宽。三个指标知道是什么、怎么影响体验。
- IPv4、IPv6。知道有两个版本,IPv6 地址更长。
- 端口号。同一个 IP 上不同服务的区分方式。
- 局域网地址。
10.x.x.x和192.168.x.x是经典段。
用 TCP 写一个小聊天程序,能和另一台机器(或同一台机器的另一个端口)建立连接、互相发消息。能通就算过关。
数据库系统
会用就行。不需要深入数据库引擎实现。
- CRUD。增删改查基本功。
- 索引。为什么有索引查询就快(O(n) 变成 O(log n) 或 O(1))。
- ORDER BY。排序;多列排序是第一列相等再看第二列。
- Group By。分组聚合。
- 聚合函数。求和、计数等。
能用 SQLite 写点小练习,知道这些操作在底层大概是怎么执行的。
Web 开发
Web 开发的最小可读懂面:HTML 负责结构、CSS 负责样式、JS 负责交互,再加一个前端框架(React 或 Vue)。
- 三件套。CSS / HTML / JS 各自负责什么(结构、样式、交互)。
- 一个前端框架。React(生态大、复杂)或 Vue(简单一点)。
AI 时代不需要自己从零手写,但要能看懂框架生成的代码,知道组件、状态、路由这些基本概念。
数学相关
偏工程的可跳过。希望和各种算法打交道的、CS 科班还是得学。下面是数学相关需要知道的核心点。
- 微积分。导数 = 变化率;积分 = 累积。能算基本求导 / 积分(比如 x³ 积分是 1/4 x⁴)。
- 线性代数。找 3B1B 视频看线性变换。
- 信息论。编码、压缩、通信;信息熵
H(X) = -Σ p(x) log p(x)。 - 图论。无向图、有向图、连通性、最短路、树、环。
- 密码学。对称 / 非对称 / 签名 / 密钥交换。知道公钥私钥和对称加密的区别,不需要自己实现。
- 信号与系统。傅立叶变换基本概念:信号拆成不同频率正弦波叠加。
- 图形学。三角形是渲染最低单位;3D → 2D 是投影。