Chapter ICS 划重点10 topics

CS 划重点

10 个主题,从命令行到数据库。把「读懂代码、改得动代码、知道程序在跑什么」打牢。

§ 1

提问的智慧

把「提问」放在所有 CS 知识的第一位。读完之后,向 AI 提问、向人提问都会更有章法。

核心原则

通读一遍 GitHub 经典文章《How To Ask Questions The Smart Way》。重点是学会:如何描述问题、如何给上下文、如何展现你已经做过的尝试。

收益不止是技术论坛。AI 时代,提示词和提问本质是同一件事,给足上下文、说清意图、展示你已排查的步骤。

§ 2

环境、工具与命令行

以 MIT Missing Semester 为主,扩展《命令行的艺术》。这是 VibeCoder 从「只会动嘴说」到「能动手做」的第一道门槛:能独立操作终端,AI 报错时你才看得懂它在做什么。

需要掌握的核心模块:

核心技能
  • Git/Version Control。理解分支、merge/rebase、推送、版本回退。能在终端里独立完成常见操作,而不是每次等 AI 帮你点按钮。
  • SSH。理解公钥/私钥原理,能在终端独立连上 Linux 服务器,并知道连接过程中服务器在验证什么。
  • Tmux。终端复用器。能在服务器上跑长进程、用 detach/attach 切换会话,网络断开也不影响任务。
  • Shell。Linux 哲学:每个工具只做一件事,用管道把小事串成大事。能写出 ls | grep epub | wc -l 这样的命令链,并读懂每一段的输出。
  • Vim。兜底编辑器。远程服务器上没 VS Code 时,你至少要会打开文件、编辑、保存、退出:i 进入编辑、esc 退出编辑、:wq 保存退出、:q! 不保存强退。
  • Makefile。知道 target/dependency/command 三个概念,能读懂项目里的构建规则,不需要自己写复杂构建。
  • Docker。理解 image(镜像,只读模板)与 container(容器,运行中的实例)的区别。能跑起容器、能写简单的 Dockerfile。
  • 环境配置。AI 配环境时,看它给出的步骤和推理(CoT),能明白每一条命令在解决什么问题就行。
§ 3

编程语言

C / C++ / Python / Java 等大学基础课会教的内容。目标不是学新语言,是读懂不同范式的代码。

核心概念

知道所有编程语言都有的概念:数组、循环、判断、函数。能读懂常见语法,不需要做到手写无误。

  • Python 是解释型语言。运行前先变成字节码,再由解释器逐条执行,没有直接编译成机器码。优点是写起来快,缺点是执行速度通常不如编译型语言。
  • C / C++ 是编译型语言。直接编译成机器码运行,性能高,但需要你手动管理更多细节(如内存)。
  • OOP(面向对象:类、继承、多态)知道概念即可——这是经典基础,但实际工程里常被过度使用,不要把它当成唯一正确的编程方式。

不用从零开始重学一门新语言。现实里选哪种语言,往往取决于你要用的库和生态,而不是语言本身的语法。

§ 4

数据结构与算法

数据结构与算法是所有写代码的人都会遇到的基础。但如果不是为了应试,目标不是手写 LeetCode 难题,而是:AI 写完你能读懂、能判断它为什么这样写、能发现明显的效率问题。

必须会(数学基础)
  • 模运算。(a * b) % 9 = ((a % 9) * (b % 9)) % 9 这种基本法则,在哈希、密码、循环分组里经常用到。
  • 时间复杂度 / 空间复杂度。必须学会估算。O(n)、O(n²)、O(n log n) 是最常用的三个档位,能帮你判断一段代码跑大数据量时会不会卡死。
  • 摊还分析。了解概念:有些操作单次看起来很贵,但平均到很多次操作里其实很便宜(比如动态数组扩容)。
了解概念即可
  • 线性结构:数组、链表、栈、队列、优先队列。知道它们各自适合什么场景:栈适合'后进先出',队列适合'先进先出',优先队列适合每次取最大/最小。
  • 算法设计思路:贪心(每步选当前最优)、分治(大问题拆成相似的小问题)、动态规划(记住子问题的答案避免重复计算)、搜索(在状态空间里找答案)、排序、树、图。先记住这些名字和核心直觉,遇到具体问题时知道该往哪个方向想,实现可以交给 AI。
补充:找工作的同学

如果你打算面试转行做开发,需要自己刷 LeetCode、上一些难度。如果不转开发,掌握上面的概念就足以配合 AI 工作了——重点是能读懂 AI 写的代码、能判断效率瓶颈,而不是手写实现。

§ 5

软件工程

软件工程要懂的不是实现细节,而是术语和流程。遇到项目里有人提到这些词,你能在 30 秒内讲清楚它是什么、解决什么问题就够了。

核心术语
  • 黑盒/白盒测试。黑盒不关心内部逻辑,只测输入输出;白盒看代码内部来测。
  • Unit Testing。一次只测一个小功能(一个函数、一个模块)。
  • CI/CD。每次提交自动跑测试/自动部署。
  • A/B Testing。同时上线两个版本,看哪个效果更好。
  • Infrastructure as Code。写配置文件告诉服务器该装什么,不手装。

这些概念现在先理解含义和用途,做具体项目时再深入细节。复杂的实现可以交给专业开发,但你得听懂他们在讨论什么、为什么选这个方案。

§ 6

体系结构、操作系统、系统

这一节的核心是:学会用 GDB 跟 AI 一起 debug,理解「每条指令只做一件事」。你不需要成为体系结构专家,但要能跟 AI 一起定位底层问题。

核心概念
  • 体系结构。CPU 只有少量寄存器,每条指令只做一件事(改一个寄存器的值或一块内存)。编译器把高级语言翻译成这些基本指令。
  • 边界意识。知道计算机能做什么和不能做什么。例如,想浇花就得有根线连到机械臂或水泵,计算机自己不会长出物理上的手。
  • 进程 / 线程 / 内存。一个进程有一块独立的内存空间,里面可以跑多个线程。线程共享同一块内存,但各自有独立的寄存器状态。
  • 二进制、电路、汇编。知道它们的存在和作用:二进制是计算机存储信息的方式,电路实现逻辑运算,汇编是接近机器指令的人类可读形式。不需要会手写汇编。
  • 文件系统、IO、死锁。知道文件系统负责持久化存储,IO 是程序与外部设备/网络交换数据,死锁是多线程互相等待导致谁都动不了。
并行与分布式
  • Raft。分布式共识算法。核心要求是:只要超过一半的服务器在线,系统就能继续工作;少于一半就停摆。所以集群通常用奇数节点。
  • 并发编程。理解几个关键概念:deadlock(死锁,互相等待)、lock(锁,保护共享资源)、multithread(多线程,同时执行多个任务)、context switch(上下文切换,CPU 在不同线程间换来换去)。
  • 编译原理。上下文无关语法:你可以从代码里挑出其中一小段,只要这段本身符合语法规则,外面的东西不影响它是否合法。

知道 Raft 的「过半存活」原则、知道并发经典问题。不需要自己实现分布式系统或编译器。

建议
实践方法
写点代码然后用 GDB 跟 AI 一起学,看里面发生了什么。AI 不一定能直接操作 GDB,你操作完截图问它就行。
§ 7

计算机网络

网络是程序之间互相说话的通道。你需要了解基本结构(IP、端口、子网)、常见协议(TCP、UDP)以及延迟/丢包/带宽怎么影响体验。最直观的实践是装一个 Wireshark 抓包,亲眼看到数据是怎么拆成一个个包发出去的。

必须会的核心概念
  • TCP vs UDP。TCP 可靠(有重传),UDP 快速(不保证送达)。
  • 丢包率、延迟、带宽。三个指标知道是什么、怎么影响体验。
  • IPv4、IPv6。知道有两个版本,IPv6 地址更长。
  • 端口号。同一个 IP 上不同服务的区分方式。
  • 子网。把一段 IP 地址划分成一个局域网,子网掩码决定网络部分和主机部分。
  • 局域网地址。10.x.x.x192.168.x.x 是经典段。
实践目标

用 TCP 写一个小聊天程序,能和另一台机器(或同一台机器的另一个端口)建立连接、互相发消息。能通就算过关。

实践方法
装一个 Wireshark,发一个请求抓包看里面发生了什么。一个包通常只有 1000 多字节,而且每个包都可能丢,所以程序要设计得即使丢包也不该直接出问题。
§ 8

数据库系统

数据库是绝大多数应用的「记账本」。VibeCoder 的目标是能用 SQL 完成增删改查、理解索引为什么快、能看懂查询计划。不需要深入数据库引擎实现,但要知道引擎在帮你做什么。

核心操作
  • CRUD。Create(增)、Read(查)、Update(改)、Delete(删)四项基本功。几乎所有的业务操作都可以拆成这四种。
  • 索引。理解为什么有索引查询会变快:把全表扫描 O(n) 变成 B+ 树查找 O(log n) 或哈希查找 O(1)。
  • ORDER BY。排序;多列排序时,先按第一列排,第一列相同的再按第二列排,以此类推。
  • GROUP BY。按某列分组,然后对每组做聚合,比如统计每个部门有多少人、每个分类的总销售额。
  • 聚合函数。COUNT、SUM、AVG、MAX、MIN 等,用来从一组行里算出一个汇总值。

能用 SQLite 写点小练习,知道这些操作在底层大概是怎么执行的。

§ 9

Web 开发

Web 开发的最小可读懂面:HTML 负责结构、CSS 负责样式、JS 负责交互,再加一个前端框架(React 或 Vue)。

核心概念
  • 三件套。CSS / HTML / JS 各自负责什么(结构、样式、交互)。
  • 一个前端框架。把 UI 拆成可复用的组件,用状态驱动页面更新。React 生态大,Vue 更轻量,先挑一个入门。

AI 时代不需要自己从零手写,但要能看懂框架生成的代码,知道组件、状态、路由这些基本概念。

§ 10

数学相关

数学这部分既有研究向也有工程向。微积分、线性代数、信息论是理解算法和机器学习的地基;密码学、图形学、信号与系统则是工程里会直接碰到的工具。如果你主要从事纯业务开发,可以先挑与当前项目相关的看;如果要走算法、机器学习、图形学路线,建议系统补。

先建立直觉
  • 微积分。导数 = 变化率;积分 = 累积。能算基本求导 / 积分(比如 x³ 积分是 1/4 x⁴)。
  • 线性代数。找 3B1B 视频看线性变换。
  • 信息论。编码、压缩、通信;信息熵 H(X) = -Σ p(x) log p(x)
  • 图论。无向图、有向图、连通性、最短路、树、环。
  • 密码学。对称加密用同一把钥匙加解密,速度快但密钥分发困难;非对称加密用一对钥匙——公钥公开给别人用来加密,私钥自己保管用来解密,从而解决密钥分发问题。签名和密钥交换也是基于非对称加密。不需要自己实现算法,但要知道什么时候该用哪种。
  • 信号与系统。傅立叶变换基本概念:信号拆成不同频率正弦波叠加。
  • 图形学。三角形是渲染的最小单位,任何 3D 模型最终都会被拆成三角形来绘制。3D 场景显示到 2D 屏幕的过程叫做投影。