拒绝AI代写代码:我做了个Rust教练

基于 Claude 的 Rust 编程教练 rustcoach,用结构化课程与真实沙箱逼你自己写出通过的代码。
rustcoach 是基于 Claude 构建的 Rust AI 编程教练,核心理念是教学而非代劳——教练永不给作业答案,代码必须由学习者自己写到 cargo test 通过。它提供 609 道经验证的真实代码题库、五门结构化课程(Core Rust、Async、Macros、Concurrency、Advanced Types)、以及浏览器中运行真实 cargo/clippy/rustfmt 的沙箱作业环境。每节课根据学习者掌握度笔记个性化生成,包含快速检查、分级提示、报错白话解释、lint 教学和 Trace 逐行调试。通过间隔重复复习卡与掌握度追踪,教练会记忆并重测薄弱环节。定价为一次性课程包(49 美元/50 积分),新账号 5 个免费积分,技能测试免费。
把Rust编译器报错复制到AI聊天框,拿回一段解释和能跑的代码,构建变绿——这种"效率感"很多人体验过。但一周后遇到同样的借用检查错误,你还是得回到那个聊天窗口,从头问一遍。
问题不在解释的质量,而在于聊天框里缺了几样东西:一个按顺序学习的大纲,一个记得你上次错在哪里的角色,以及一条硬性规则——代码必须由你自己写到真正通过为止。
开发者社区dev.to上有一位作者分享了他构建的rustcoach,一个基于Claude的AI编程教练。它的核心主张很明确:不让AI替你写代码,而是用结构化教学逼你自己学会。
先测出你的真实水平
任何课程开始前,你可以先做一个免费的Rust技能测试,不需要注册账号。测试分为两种:综合测试覆盖五大领域共30题,约需十分钟;模块测试针对异步、宏、并发或类型系统中某一个方向,20题。
题目从易到难排列,绝大多数会展示真实的Rust代码片段——这段代码打印什么、能否编译、哪一行会panic。每题作答后立刻给出正确答案和推理过程,测试本身就在教学。
这个题库有609道题,其中446道包含Rust代码片段。每个片段都附带一个声明(能编译/以特定错误失败/打印特定输出/会panic),并且有一个工具会实际编译运行每个片段来验证声明是否成立。一道声称"这段代码打印X"的题目,是真的运行过后打印出X的。
测试结束后你会得到一个等级(初级、中级、高级或专家)、各领域的得分柱状图、最强和最弱的主题、所有错题及正确答案,以及建议接下来学哪个模块。如果之后注册账号,你可以选择是否把测试结果分享给教练——默认关闭。开启后,教练会知道你在哪些主题上答对答错,据此规划第一节课。
关于 Rust 借用检查(Borrow Checker):文章开头提到的"借用检查错误"是 Rust 编译器在编译期执行的静态分析,用于强制执行所有权规则——每个值有且只有一个所有者,引用必须始终有效,且同一时刻不能同时存在可变引用和不可变引用。它让 Rust 无需垃圾回收即可保证内存安全,但也因为"编译器直言不讳"成为初学者最大的门槛。典型报错如 cannot borrow x as mutable more than once 或 value borrowed here after move。理解这些错误的根本原因,比记住修法更重要——这正是 rustcoach 坚持"不代写代码"的原因之一。
有顺序的大纲,而不是等你提问
聊天机器人等待你知道该问什么。rustcoach提供了五门课程,各有章节、主题和进度追踪:
| 模块 | 章节数 | 主题数 |
|---|---|---|
| Core Rust | 16 | 50 |
| Async & Tokio | 12 | 51 |
| Macros | 11 | 50 |
| Concurrency & Atomics | 12 | 52 |
| Advanced Types & Traits | 11 | 50 |
Core Rust从变量绑定、所有权和借用讲起,涵盖trait、生命周期、迭代器、智能指针、线程、宏、unsafe和异步。每个深入模块以简短的"基础"章节开头,如果某些主题你在Core Rust中学过,会自动标记为已完成。
每个主题都有掌握度评分和教练对你的笔记。答对时评分上升,答错时下降。
每节课都是为你现写的
不存在"第7课"这种所有人都上的内容。教练先阅读关于你的笔记,重新测试上次出错的地方,然后用可运行的代码教一个概念。
每两三次讲解之后,它会停下来检查你是否理解:一道题,几个选项,一次点击。右侧边栏保持上下文可见:该主题的掌握度、教练对你的笔记、待复习卡片、以及本节课的快速检查得分。
关键环节:你自己写代码,直到正确
这是真正产生差异的部分。每节课最终导向一个作业:一个真实的cargo crate,带有集成测试,起始代码会让测试失败,正确解答会让测试通过。你在浏览器中写代码,测试在锁定的沙箱中运行真实的cargo test(无网络、内存和CPU受限、文件系统只读)。
在一节课中,作业是一个自动售货机:restock必须把零数量视为bug(用assert!),而buy必须把"钱不够"视为预期失败(返回Err)。起始代码的测试全部飘红。
如果第一次尝试编译不通过,每个rustc错误都会被列出,对应的行会被高亮。"用教练解释"功能把错误翻译成白话:哪里错了,该尝试什么。但它不会替你写修复代码。
不知道用什么API?提示功能会在每个函数旁边放一条教练笔记:该用什么API、要避免什么陷阱,但绝不给答案。
构建通过时,每次运行还会执行cargo clippy。每个lint在侧边栏显示为一根扫帚图标,附带消息、帮助和链接。有位作者的解答通过了全部五个测试,但仍然收到了一个clippy警告。
Trace功能可以在一个测试中追踪函数执行,逐行展示每个变量的值。对于还没配置调试器的学习者来说,这相当于一个内置调试器。
关于 cargo test 与 cargo clippy:cargo test 是 Rust 官方构建工具 Cargo 内置的测试运行器,会自动发现并执行标注了 #[test] 的函数、tests/ 目录下的集成测试,以及文档示例中的测试,输出通过/失败统计。cargo clippy 则是官方的静态 lint 工具,基于编译器插件提供了数百条惯用法与潜在 bug 检查(如不必要的克隆、可简化的迭代器写法)。两者跑的是真实的编译器与官方 lint 规则,而非模拟环境——因此学习者遇到的报错与工业项目中所见的完全一致,这也是 rustcoach 宣称"你看到的是编译器本身的"技术依据。
代码审查:绿色测试不是终点
提交后,教练像审查pull request一样审查代码:正确性优先,然后是惯用法、风格和理解程度。Clippy的提示也会传给教练,它会讲解其中一个背后的惯用法。
说个细节它的记忆能力。在作者的案例中,教练指出:"这是连续第二节课出现这个lint了。"它还记得。它也指出了作者没有刻意做对的地方:每个u32减法都位于不会下溢的分支上。
被接受的作业可以获得一个可选的进阶挑战,比如让当前版本更符合惯用法。作者尝试了一个显而易见的做法,教练说"不行",解释了原因,并把任务拆解成带有不同数据示例的步骤,让你无法直接粘贴。
这是核心规则:教练永远不会替你写作业的解答,即使你请求或说放弃也不行。你可以问任意多的问题,获得任意多的提示、解释和示例,但你提交的代码永远是你自己写的。
关于间隔重复(Spaced Repetition):这是一种基于遗忘曲线理论的学习方法,核心思想是在即将遗忘的临界点进行复习,从而最大化长期记忆效率。经典实现是 Anki 等工具的 SM-2 算法。rustcoach 采用的是更简单固定的复习间隔序列(1、3、7、14、30、60 天),答错则重置回起点。这种做法承认了"写对一次不等于掌握"——编码技能不仅涉及理解,还涉及记忆检索速度,间隔重复正是把短期编码经验固化为长期肌肉记忆的核心机制。
用间隔重复让知识留下来
写一次代码不够。当一节课被签收后,教练会为它覆盖的每个主题写两张复习卡。它们会在1、3、7、14、30和60天后回来,答错会把卡片重置到起点,明天再来。
每节课都保留在历史记录中,附有教练对教学内容的总结、你的表现、需要回顾的内容,以及完整对话记录。任何学过的主题都可以重做。重做会暂停当前课程并保留你的编辑器代码,之后回到原处。
面向开发者的细节
如果你来自Python、JavaScript或Java,这些细节让它更像开发工具而不是课程:
- 真实工具链:代码经过cargo test、cargo clippy和rustfmt,你看到的错误和lint是编译器本身的,不是模拟的。
- 键盘优先:⌘↵运行测试,⌘⇧F格式化,⌘⇧↵提交,?列出所有快捷键。
- scratch.rs:作业旁边的一个一次性二进制crate,用于"等等,这到底做什么?"的时刻。
- 解释选中代码:选中任意代码(或把光标放在函数中),点击Explain,它会作为问题发给教练。
- 薄弱点追踪:每个主题保持掌握度评分和教练笔记,教练在教新内容前会重新测试你出错的地方。
- 连续学习天数和里程碑:它们很小,但确实有效。
定价
没有订阅制。新账号有5个免费积分,最多可用5节课,不需要绑卡。之后,课程包一次性49美元(税前)购买50积分。对于已经会另一门语言的典型学习者,这足够覆盖一个完整模块。充值从10美元起。技能测试免费且不需要账号。
免费测试Rust水平:rustcoach.dev/test 开始学习:rustcoach.dev
相关推荐

Cursor能控制你的电脑了:AI代理可驱动桌面应用测试
Cursor 新增桌面控制能力,AI 代理可驱动 iOS 模拟器等桌面应用测试自己构建的功能。本文分析这一更新对开发工作流的影响、技术实现可能路径及可靠性考量。

Vibecoding自研推理引擎:理想丰满,现实骨感
Reddit开发者分享Vibecoding自研推理引擎的真实经历:用WebGL2和GLSL在浏览器跑GGUF Q4模型,却陷入tokenizer调试地狱。本文分析浏览器端LLM推理的工程难点,以及为何直接clone llama.cpp是更理性的选择。

Anthropic IPO前,早期投资人账面回报有多高?
Anthropic IPO前早期投资人账面回报引发关注。本文分析其纸面收益来源、资本结构、IPO预期下的博弈与风险,以及对AI创业生态的启示。