其实我已经学 Rust 一段时间了。
严格来说,从今年 4 月开始,我就已经在接触代码、做项目,也开始大量使用 AI。
所以如果说:
“2026 年 8 月 27 日,我第一次开始学 Rust。”
并不准确。
更准确的说法是:
4 月,我开始学着写代码。
8 月,我决定重新学一遍 Rust。
这两个事情,对我来说不太一样。
前几个月,我更像是在“做东西”。
遇到问题就查。
不会就问 AI。
项目需要什么,就学什么。
能跑起来就继续往下走。
这种方式其实很有效。
至少我真的做出了东西。
但做了一段时间以后,我开始越来越明显地感觉到:
我好像会做东西了,但还不会真正写代码。
这件事情让我有点不舒服。
所以这一次,我想退回来。
从最简单的地方开始。
重新学一遍 Rust。
我到底会多少?
如果一定要我现在评价自己的 Rust 水平:
没有多少。
这个答案其实没什么好包装的。
我可以在 AI 的帮助下把一个项目做起来。
可以读一些 Rust 代码,大概知道它在干什么。
遇到编译错误,也知道应该把错误信息拿出来分析。
但如果现在把电脑交给我:
打开一个空的 main.rs。
然后说:
“不用 AI,自己写一个稍微复杂一点的程序。”
我大概率还是会卡住。
而且这种卡住,不只是:
“这个 API 我不知道。”
有时候甚至是:
“我不知道我应该从哪里开始想。”
比如:
为什么这里要用引用?
为什么这个值不能直接拿走?
为什么编译器不让我这么写?
这个类型为什么要这样设计?
这个东西为什么需要 trait?
为什么这里需要异步?
这些问题,如果交给 AI,其实很容易解决。
我可以把错误扔给它。
它告诉我原因。
给我一个修改后的版本。
代码跑起来。
事情结束。
但问题也就在这里。
事情结束了,不代表我学会了。
AI 帮我走得太快了
我并不想把这件事情说成“AI 不好”。
恰恰相反。
如果没有 AI,我现在可能根本不会走到这里。
以前一个不会写的软件,我可能连第一步都不知道从哪里开始。
现在至少可以先问:
“我想做这个东西,应该怎么拆?”
然后开始做。
不会的地方再问。
报错了再问。
一个项目从零开始,也可以让 AI 帮我搭一个基本结构。
这个效率提升是真的。
而且非常明显。
但问题是:
AI 可以帮我跨过很多门槛,也可以顺便帮我绕过很多本来应该自己理解的东西。
这两个结果看起来很像。
最后都是:
代码能运行
但实际上差得很远。
一种情况是:
我知道为什么这样写,所以它能运行。
另一种情况是:
AI 这么写,我照着做,然后它运行了。
过去几个月,我明显有不少时候属于第二种。
所以我现在不是想“少用 AI”。
而是想换一种使用方式。
我为什么还要学 Rust?
其实我不太想再写一篇:
《为什么 Rust 是未来》
这种文章。
因为我现在没有资格说这种话。
我对 Rust 的理解还远没有到可以评价一门语言未来的程度。
我选择它,原因其实没那么复杂。
这段时间我做的东西越来越偏软件和工具。
我也越来越想把自己以前的一些工程经验,真正变成可以运行的软件。
Rust 刚好是我比较想认真学的一门语言。
还有一个原因可能更直接:
它真的会逼着我把一些东西想清楚。
这也是我现在觉得它难的地方。
以前用 AI 写代码,有些问题可以先绕过去。
Rust 往往不太让你这么干。
你写错了。
编译器直接告诉你:
不行。
有时候我看着那个错误,也不知道它为什么不行。
这时候其实挺烦的。
但冷静下来以后,我反而觉得:
这可能正是我现在需要的东西。
因为我不想再因为:
“代码跑起来了。”
就误以为:
“我已经懂了。”
所以我选了 TRPL
最后我没有找一个特别花哨的学习方案。
也没有同时开十几个教程。
我选了 Rust 官方的入门书:
The Rust Programming Language
也就是大家经常说的:
TRPL
中文一般叫《Rust 程序设计语言》。
原因其实非常简单:
它是官方的。
我现在是初学者。
这个阶段最容易犯的一个错误,就是到处找资料。
YouTube 看一个。
博客看一个。
AI 问一个。
GitHub 找一个。
然后每个人的讲法都不一样。
看起来好像学了很多。
实际上脑子里越来越乱。
所以这一次,我想先给自己一条主线。
从第一章开始。
一章一章往后走。
看到代码就自己写。
遇到问题再解决。
先不要急着把所有东西都提前搞懂。
这次不准备只看
这可能是我这次学习方式里最想改变的一点。
以前看代码的时候,很容易产生一种错觉:
“嗯,这段我看懂了。”
然后关掉 AI。
自己写。
发现:
不会。
这件事情我已经遇到过很多次。
尤其是 AI 给出一段完整代码的时候。
代码写得很漂亮。
解释也很完整。
你看着每一行都认识。
甚至觉得:
“这个我理解了。”
结果真正自己从零写的时候:
不知道第一行应该写什么。
这时候才发现:
看懂和会写,中间隔着一段很长的距离。
所以这一次,我不想只看。
TRPL 里面有代码。
我就自己敲。
出现编译错误。
先自己看。
看不懂了,再问 AI。
AI 可以给我解释:
为什么会报这个错误?
也可以换一种方式解释一个概念。
甚至可以告诉我一个 API 是怎么用的。
但我尽量不让它直接把整道题做完。
至少在学习阶段,我希望自己先挣扎一下。
有些东西,现在不懂也没关系
TRPL 后面有很多东西,我现在其实还不知道自己为什么需要。
比如:
所有权。
Trait。
生命周期。
async/await。
我当然可以现在就打开搜索引擎,把它们全部查一遍。
网上有大量解释。
AI 也可以给我解释得非常详细。
但我现在反而不太想这么做。
因为有些东西:
现在看懂了,可能也只是“知道这个词是什么意思”。
等真正写到那个地方,遇到实际问题以后,再回头看。
可能会完全不一样。
所以我现在给自己的原则很简单:
先走到那里。
到了生命周期,就认真学生命周期。
到了 Trait,就认真学 Trait。
到了 async,就认真搞清楚 async 到底解决了什么问题。
不提前把整本书都学完。
目前这条路线,其实没那么复杂
第一阶段就是:
TRPL。
从最基础的东西开始。
大概会一路经过:
- Rust 基础和 Cargo
- 所有权
- Struct 和 Enum
- Match
- 模块和可见性
- Vec、String、HashMap
- 错误处理
- 泛型、Trait 和生命周期
- 测试
- 闭包和迭代器
- 智能指针
- 并发
- async/await
- 最后做一个简单的 Web Server
看到这里,如果你已经会 Rust,可能会觉得:
“这不就是一本入门书的目录吗?”
对。
就是。
我现在也不需要把它包装得多高级。
我就是准备从入门开始。
因为我真正缺的不是一个更复杂的项目。
而是这些基础东西之间的关系。
我为什么想把这个过程写下来?
其实一开始没想这么多。
我就是觉得:
自己应该认真学一下代码了。
后来想想,把这个过程留下来也挺好。
因为我现在的位置其实有点特殊。
我不是计算机科班出身。
也不是一个已经写了十几年代码的软件工程师。
我以前主要做的是 CFD。
现在开始往软件、AI 和 Agent 这些东西走。
所以我遇到的一些问题,可能和一个已经写了很多年代码的人不太一样。
有些东西对程序员来说可能非常普通。
对我来说却是第一次。
比如第一次真正理解一个编译错误。
第一次搞清楚一个类型为什么这么设计。
第一次知道某个语法背后到底在解决什么问题。
我觉得这些东西记录下来,比最后写一句:
“我学会 Rust 了。”
有意思得多。
因为以后回头看,我应该能看到自己到底是怎么走过来的。
AI 还是会用
这一点我想提前说清楚。
这个系列不会假装:
“我完全不用 AI,纯手写学习 Rust。”
不会。
我会用。
而且会大量用。
AI 已经是我现在工作方式的一部分。
我不觉得学习一门语言就必须拒绝工具。
真正重要的是:
这个工具到底在替我做什么。
如果我遇到一个编译错误:
可以问 AI。
如果一个概念看了半天没懂:
可以让 AI 换一种方式讲。
如果一个 API 不知道怎么用:
可以问。
但如果每一次都是:
我不会 ↓ 问 AI ↓ AI 写完 ↓ 我复制 ↓ 运行 ↓ 结束
那我其实只是学会了怎么使用 AI。
而不是学会 Rust。
所以我更希望保持这样的关系:
AI
解释 / 提示 / 引导
↓
我自己理解
↓
我自己写代码
↓
编译 / 报错 / 调试
↓
再问 AI 而不是:
我不会 → AI 写完 → 我复制
前者可能慢很多。
但我觉得值得。
重新当一个新手
这可能是我最近学 Rust 最大的感受。
重新当一个新手,真的不太舒服。
做了这些年工程以后,你会慢慢习惯一种状态:
很多事情你是有经验的。
看到一个问题,大概知道应该往哪里查。
看到一个结果,大概知道有没有问题。
但换到一个新的领域以后:
这些东西全部消失了。
一个很基础的问题都可能把你卡住。
别人觉得理所当然的东西,你可能完全不知道。
有时候会觉得:
“怎么这么简单的东西,我都不会?”
但后来想想,也没什么。
我第一次做 CFD 的时候,也不知道什么叫网格质量。
不知道边界条件应该怎么设。
不知道一个结果到底算不算合理。
这些东西都是后来一点一点学出来的。
所以现在重新面对 Rust,我也不应该期待自己一开始就会。
不会就是不会。
那就从不会的地方开始。
这一次,我不想急着证明自己会了
以前用 AI 做东西的时候,很容易产生一种满足感。
一个功能完成了。
一个项目跑起来了。
页面出来了。
Agent 开始工作了。
然后会觉得:
“我是不是已经会了?”
现在我反而想慢一点。
因为真正掌握一件东西,应该不只是:
它能跑。
而是我能够回答:
它为什么能跑?
如果出了问题:
我知道从哪里查。
如果需要修改:
我知道为什么这么改。
如果 AI 给了我一段代码:
我能判断它是不是合理。
这可能才是我现在真正想补的东西。
第一篇,就先到这里
所以这篇其实没有什么技术内容。
没有讲所有权。
没有讲 Trait。
没有讲生命周期。
甚至严格来说:
我还没有真正开始讲 Rust。
它更像是给这个系列留一个起点。
过去几个月,我已经借助 AI 做了不少东西。
现在我想退回来一点。
重新从最基础的地方走一遍。
不是因为 AI 不够好。
恰恰是因为 AI 太好用了。
它让我很容易把东西做出来。
而现在,我想知道:
这些东西到底是怎么工作的。
这一天不算是我第一次接触 Rust。
但可以算是:
我决定认真从头学 Rust 的一天。
我不知道自己最后会学到什么程度。
也不知道这个系列最后会写多少篇。
可能坚持得很好。
也可能中间又跑去折腾别的东西。
这都很正常。
但至少这一次,我想试试看:
不只是让 AI 帮我把一个项目做出来。
而是真的把这门语言,一点一点学下来。
哪怕慢一点。
下一篇开始真正写代码。
安装 Rust。
Hello World。
认识 Cargo。
然后回答一个我现在其实也很好奇的问题:
一个 .rs 文件,到底是怎么变成一个可以运行的程序的?
从最简单的东西开始。
先把第一步走完。