ACM 前期准备:C++ 环境与 AI 助教

2026-09-09 00:00    #ACM   #C++   #WSL   #VS Code   #AI  

一、先说清楚这门课

这是一门面向零基础大一学生的大学 ACM 算法选修课:一学期 16 周,每次 2 节连堂,期末目标是能打天梯赛和校赛。

我的判断是:这门课真正的门槛不在算法本身,而在两件事——

  1. 环境:能不能在 5 分钟内把一份 main.cpp 编译跑起来;
  2. 提问方式:会不会让 AI 当助教,而不是当枪手。

所以前期准备就两条线:一条是 Linux + g++ 的编译环境,必须在第一周开课前一天全部装完;另一条是约束 AI 的提问方式,贯穿整个学期。


二、最重要的一条:上课前不要现场装环境

我不接受"上课第一周带着学生装环境"。那会耗掉整整两次课,而且一定会有三分之一的人卡在不同的报错里,剩下的时间全在救火。

要求学生在开课前一天就全部准备完成。

Windows 学生统一走这条链:

 1Windows 11
 2    ↓
 3WSL2
 4    ↓
 5Ubuntu
 6    ↓
 7g++ / gdb / git
 8    ↓
 9VS Code
10    ↓
11VS Code Remote/WSL
12    ↓
13AI Agent

有 Linux 实机的学生直接 Ubuntu 即可,不必再套 WSL。

我反而不推荐 Ubuntu 虚拟机作为第一选择。大学生 ACM 编程本质上只需要 Linux terminal + gcc,WSL2 完全够用,而且文件互通、剪贴板共享、VS Code 集成都比虚拟机方便得多;虚拟机带来的性能损耗和显示问题,对零基础学生是纯粹的额外负担。

验收标准

开课前让学生把这三条命令的截图发到群里,能跑通就算过关:

1g++ --version
2git --version
3gdb --version

再让他们提前编译一次这段程序:

1#include <bits/stdc++.h>
2using namespace std;
3
4int main() {
5    cout << "ACM Ready!" << endl;
6    return 0;
7}

统一编译命令可以直接教,整个学期都不变:

1g++ main.cpp -std=c++20 -O2 -Wall -Wextra -o main
2./main

甚至第一周都不需要 CMake。对 ACM 来说单文件编译就是常态,引入构建系统是第二学期的事。


三、AI 工具:只定一个必装,其余可选

市面上的 AI 编程工具每周都在变,但 2026 年的 VS Code 自身已经把 Agent 能力做得非常完整。官方支持 GitHub Copilot、Anthropic Claude、OpenAI Codex 等 agent harness,可以在编辑器里直接做 Plan、Agent、代码编辑、终端执行和测试。VS Code 官方现在也把这种 agent 工作流当作核心开发方式之一。

所以我不建议把一堆聊天软件都列成"必装软件"。工具表我定成这样:

工具定位是否必需
VS Code编程环境必须
VS Code AI Agent / Cline编程 AI二选一必须
Cherry Studio问概念、总结知识、读题可选
Git保存代码 / 比较 AI 修改必须

Git 之所以是必装,不是因为要协作,而是因为:AI 改完你的代码,你得能看到它改了什么。 git diff 是学生唯一能守住"代码是我自己写的"这条底线的工具。

如果让我给学生统一,我现在更倾向于

VS Code + deepseek-v4-for-copilot 插件。

理由有三条:

  1. 成本低:DeepSeek 的 API 价格对一整个班的学生来说几乎可以忽略,充值几十块够用一学期;
  2. 中文语境好:题目是中文的,学生的描述也是中文的,DeepSeek 对中文算法题的理解明显更稳;
  3. 零命令行:它走的是 VS Code Copilot 的插件通道,学生不用装 CLI、不用配代理、不用碰环境变量——装插件、粘 Key、开始聊天,三步结束。

下面就是这三步。


四、安装 deepseek-v4-for-copilot 插件

插件官方使用文档:https://github.com/Vizards/deepseek-v4-for-copilot/blob/main/README.zh-cn.md

第一步:安装 deepseek-v4-for-copilot 插件

在 VS Code 扩展面板里搜索插件名,安装:

SCR-20260925-kfzv

第二步:配置 API Key

注册 DeepSeek,先充值,然后到 API Keys 页面创建一个 Key。

回到 VS Code,用快捷键 Ctrl + Shift + P 打开命令面板:

SCR-20260925-kmaj

在命令面板里找到插件的配置项,粘贴自己的 Key。

第三步:开始聊天

配置完成后打开侧边栏对话,就能直接问问题了:

SCR-20260925-koef


五、用 AGENTS.md 把它变成 ACM 助教

插件装好只是"能聊天"。真正让它变好用的是在项目根目录放一个 AGENTS.md——VS Code 的 agent 会自动读取它,作为这个项目的长期规则。

 1# ACM Learning Rules
 2
 3你是一名 ACM 算法助教。
 4
 5目标不是替学生完成题目,而是帮助学生掌握算法。
 6
 7当学生询问题目时:
 8
 91. 不要直接给出完整代码。
102. 首先询问学生当前的思路。
113. 优先给提示,而不是答案。
124. 提示顺序:
13   - 数据范围
14   - 时间复杂度
15   - 算法方向
16   - 关键性质
17   - 伪代码
185. 只有学生已经写出代码后,才允许帮助 Debug。
196. Debug 时优先指出问题位置,不直接重写完整程序。
207. AC 后帮助学生分析:
21   - 时间复杂度
22   - 空间复杂度
23   - 边界情况
24   - 是否存在更优解法
258. 每道题最后要求学生自己总结算法。

这个文件是整个学期最值得花 10 分钟讲的东西:默认状态下 AI 会给答案,你必须主动把它改成"给提示"。 学生一旦学会写规则文件,这个能力可以迁移到任何工具上。


六、第一个实验:直接让 AI 看整个工程

不要让学生拿 AI 问概念题,那和搜索引擎没区别。第一次实验就让它读整个工程。

创建:

1acm-test/
2└── main.cpp

main.cpp:

 1#include <bits/stdc++.h>
 2using namespace std;
 3
 4int main() {
 5    vector<int> a = {5, 1, 4, 2, 3};
 6
 7    sort(a.begin(), a.end());
 8
 9    for (auto x : a)
10        cout << x << " ";
11
12    return 0;
13}

然后让学生直接在 agent 里问:“这个程序做了什么?时间复杂度是多少?如果数组有一百万个元素会怎样?”

这一步的目的是让学生建立认知:AI 能看到我的文件,不是只能看我粘贴的片段。


七、三个可以直接抄的 Prompt

下面三段话我会直接发给学生,允许他们原样复制。

1. 审题:先自己想,再让 AI 评判

 1你是我的 ACM 助教。
 2
 3请阅读题目和我当前的 main.cpp。
 4
 5不要直接给我完整答案,也不要直接重写代码。
 6
 7请按照下面顺序帮助我:
 8
 91. 根据数据范围判断允许的时间复杂度
102. 判断我的算法思路是否正确
113. 如果错误,只给我一个提示
124. 如果代码有 bug,指出大概位置和原因
135. 等我修改后再继续检查

第 1 条是这段 Prompt 的价值所在——逼学生先读数据范围。绝大多数 WA 和 TLE 都源于没看数据范围就动手。

2. WA 时:让 AI 构造反例,而不是改代码

1我的程序在 OJ 上 WA。
2
3不要直接修改代码。
4
5请:
61. 阅读 main.cpp
72. 分析可能遗漏的边界情况
83. 给我构造一个能 Hack 掉当前程序的数据
94. 告诉我实际输出和正确输出为什么不同

这个用法比"帮我改代码"有教学价值太多:学生拿到的是一个能复现失败的输入,以及一段因果解释,而不是一份改好的代码。

3. 检查代码:只要诊断,不要重写

1不要重写我的代码。
2
3请根据题目检查我的 main.cpp:
41. 判断算法复杂度
52. 找可能的边界情况
63. 如果存在 bug,只告诉我 bug 的位置和原因
74. 不要直接给完整答案

八、Agent 最厉害的地方:可以把多个动作串起来

聊天式 AI 只能看你喂给它的东西。真正的 Coding Agent 能自己动手。

以后学生甚至可以说:

 1阅读当前目录里的题目说明和 main.cpp。
 2
 3先编译程序。
 4
 5然后自己生成 10 组小规模测试数据。
 6
 7如果程序崩溃或者出现明显错误,
 8告诉我失败的测试数据以及原因。
 9
10不要修改代码。

Agent 可以自己形成这样一条链:

 1读取文件
 2   ↓
 3理解代码
 4   ↓
 5调用 Terminal
 6   ↓
 7g++ 编译
 8   ↓
 9运行测试
10   ↓
11分析结果
12   ↓
13回答学生

这才是真正的 Coding Agent,也是它和 Cherry Studio 里普通聊天最大的区别:它不是在描述代码,它是在操作你的工程。


小结

开课前一天要完成的清单,就这四条:

剩下的,交给学期里的一道题一道题。