Wayne Wei

Learning / Rust

Rust · 01

这一次,我想把底层原理真正搞懂

I can make things run. Now I want to understand why. · 我能让东西跑起来,现在我想知道它为什么能跑。

012026.08.2710 分钟阅读时间Rust 1.90+Edition 2024
Rust · 01Learning in public
01Start, for Real 02First Rust Program 03Guessing Game 04Ownership 05Borrowing 06Structs 07Enums 08Traits 09Lifetimes 10Async

其实我已经学 Rust 一段时间了。

严格来说,从今年 4 月开始,我就已经在接触代码、做项目,也开始大量使用 AI。

所以如果说:

“2026 年 8 月 27 日,我第一次开始学 Rust。”

并不准确。

更准确的说法是:

4 月,我开始学着写代码。

8 月,我决定重新学一遍 Rust。

这两个事情,对我来说不太一样。

前几个月,我更像是在“做东西”。

遇到问题就查。

不会就问 AI。

项目需要什么,就学什么。

能跑起来就继续往下走。

这种方式其实很有效。

至少我真的做出了东西。

但做了一段时间以后,我开始越来越明显地感觉到:

我好像会做东西了,但还不会真正写代码。

这件事情让我有点不舒服。

所以这一次,我想退回来。

从最简单的地方开始。

重新学一遍 Rust。

01

我到底会多少?

如果一定要我现在评价自己的 Rust 水平:

没有多少。

这个答案其实没什么好包装的。

我可以在 AI 的帮助下把一个项目做起来。

可以读一些 Rust 代码,大概知道它在干什么。

遇到编译错误,也知道应该把错误信息拿出来分析。

但如果现在把电脑交给我:

打开一个空的 main.rs。

然后说:

“不用 AI,自己写一个稍微复杂一点的程序。”

我大概率还是会卡住。

而且这种卡住,不只是:

“这个 API 我不知道。”

有时候甚至是:

“我不知道我应该从哪里开始想。”

比如:

为什么这里要用引用?

为什么这个值不能直接拿走?

为什么编译器不让我这么写?

这个类型为什么要这样设计?

这个东西为什么需要 trait?

为什么这里需要异步?

这些问题,如果交给 AI,其实很容易解决。

我可以把错误扔给它。

它告诉我原因。

给我一个修改后的版本。

代码跑起来。

事情结束。

但问题也就在这里。

Thesis · 为什么要退回来

事情结束了,不代表我学会了。

02

AI 帮我走得太快了

我并不想把这件事情说成“AI 不好”。

恰恰相反。

如果没有 AI,我现在可能根本不会走到这里。

以前一个不会写的软件,我可能连第一步都不知道从哪里开始。

现在至少可以先问:

“我想做这个东西,应该怎么拆?”

然后开始做。

不会的地方再问。

报错了再问。

一个项目从零开始,也可以让 AI 帮我搭一个基本结构。

这个效率提升是真的。

而且非常明显。

但问题是:

Line · 跨过,还是绕过?

AI 可以帮我跨过很多门槛,也可以顺便帮我绕过很多本来应该自己理解的东西。

这两个结果看起来很像。

最后都是:

代码能运行

但实际上差得很远。

一种情况是:

我知道为什么这样写,所以它能运行。

另一种情况是:

AI 这么写,我照着做,然后它运行了。

过去几个月,我明显有不少时候属于第二种。

所以我现在不是想“少用 AI”。

而是想换一种使用方式。

03

我为什么还要学 Rust?

其实我不太想再写一篇:

《为什么 Rust 是未来》

这种文章。

因为我现在没有资格说这种话。

我对 Rust 的理解还远没有到可以评价一门语言未来的程度。

我选择它,原因其实没那么复杂。

这段时间我做的东西越来越偏软件和工具。

我也越来越想把自己以前的一些工程经验,真正变成可以运行的软件。

Rust 刚好是我比较想认真学的一门语言。

还有一个原因可能更直接:

它真的会逼着我把一些东西想清楚。

这也是我现在觉得它难的地方。

以前用 AI 写代码,有些问题可以先绕过去。

Rust 往往不太让你这么干。

你写错了。

编译器直接告诉你:

不行。

有时候我看着那个错误,也不知道它为什么不行。

这时候其实挺烦的。

但冷静下来以后,我反而觉得:

这可能正是我现在需要的东西。

因为我不想再因为:

“代码跑起来了。”

就误以为:

“我已经懂了。”

04

所以我选了 TRPL

最后我没有找一个特别花哨的学习方案。

也没有同时开十几个教程。

我选了 Rust 官方的入门书:

The Rust Programming Language

也就是大家经常说的:

TRPL

中文一般叫《Rust 程序设计语言》。

原因其实非常简单:

它是官方的。

我现在是初学者。

这个阶段最容易犯的一个错误,就是到处找资料。

YouTube 看一个。

博客看一个。

AI 问一个。

GitHub 找一个。

然后每个人的讲法都不一样。

看起来好像学了很多。

实际上脑子里越来越乱。

所以这一次,我想先给自己一条主线。

从第一章开始。

一章一章往后走。

看到代码就自己写。

遇到问题再解决。

先不要急着把所有东西都提前搞懂。

05

这次不准备只看

这可能是我这次学习方式里最想改变的一点。

以前看代码的时候,很容易产生一种错觉:

“嗯,这段我看懂了。”

然后关掉 AI。

自己写。

发现:

不会。

这件事情我已经遇到过很多次。

尤其是 AI 给出一段完整代码的时候。

代码写得很漂亮。

解释也很完整。

你看着每一行都认识。

甚至觉得:

“这个我理解了。”

结果真正自己从零写的时候:

不知道第一行应该写什么。

这时候才发现:

看懂和会写,中间隔着一段很长的距离。

所以这一次,我不想只看。

TRPL 里面有代码。

我就自己敲。

出现编译错误。

先自己看。

看不懂了,再问 AI。

AI 可以给我解释:

为什么会报这个错误?

也可以换一种方式解释一个概念。

甚至可以告诉我一个 API 是怎么用的。

但我尽量不让它直接把整道题做完。

至少在学习阶段,我希望自己先挣扎一下。

06

有些东西,现在不懂也没关系

TRPL 后面有很多东西,我现在其实还不知道自己为什么需要。

比如:

所有权。

Trait。

生命周期。

async/await。

我当然可以现在就打开搜索引擎,把它们全部查一遍。

网上有大量解释。

AI 也可以给我解释得非常详细。

但我现在反而不太想这么做。

因为有些东西:

现在看懂了,可能也只是“知道这个词是什么意思”。

等真正写到那个地方,遇到实际问题以后,再回头看。

可能会完全不一样。

所以我现在给自己的原则很简单:

先走到那里。

到了生命周期,就认真学生命周期。

到了 Trait,就认真学 Trait。

到了 async,就认真搞清楚 async 到底解决了什么问题。

不提前把整本书都学完。

07

目前这条路线,其实没那么复杂

第一阶段就是:

TRPL。

从最基础的东西开始。

大概会一路经过:

  • Rust 基础和 Cargo
  • 所有权
  • Struct 和 Enum
  • Match
  • 模块和可见性
  • Vec、String、HashMap
  • 错误处理
  • 泛型、Trait 和生命周期
  • 测试
  • 闭包和迭代器
  • 智能指针
  • 并发
  • async/await
  • 最后做一个简单的 Web Server

看到这里,如果你已经会 Rust,可能会觉得:

“这不就是一本入门书的目录吗?”

对。

就是。

我现在也不需要把它包装得多高级。

我就是准备从入门开始。

因为我真正缺的不是一个更复杂的项目。

而是这些基础东西之间的关系。

08

我为什么想把这个过程写下来?

其实一开始没想这么多。

我就是觉得:

自己应该认真学一下代码了。

后来想想,把这个过程留下来也挺好。

因为我现在的位置其实有点特殊。

我不是计算机科班出身。

也不是一个已经写了十几年代码的软件工程师。

我以前主要做的是 CFD。

现在开始往软件、AI 和 Agent 这些东西走。

所以我遇到的一些问题,可能和一个已经写了很多年代码的人不太一样。

有些东西对程序员来说可能非常普通。

对我来说却是第一次。

比如第一次真正理解一个编译错误。

第一次搞清楚一个类型为什么这么设计。

第一次知道某个语法背后到底在解决什么问题。

我觉得这些东西记录下来,比最后写一句:

“我学会 Rust 了。”

有意思得多。

因为以后回头看,我应该能看到自己到底是怎么走过来的。

09

AI 还是会用

这一点我想提前说清楚。

这个系列不会假装:

“我完全不用 AI,纯手写学习 Rust。”

不会。

我会用。

而且会大量用。

AI 已经是我现在工作方式的一部分。

我不觉得学习一门语言就必须拒绝工具。

真正重要的是:

Line · 给 AI 的位置

这个工具到底在替我做什么。

如果我遇到一个编译错误:

可以问 AI。

如果一个概念看了半天没懂:

可以让 AI 换一种方式讲。

如果一个 API 不知道怎么用:

可以问。

但如果每一次都是:

替我学习 · 不想要的关系
我不会
↓
问 AI
↓
AI 写完
↓
我复制
↓
运行
↓
结束

那我其实只是学会了怎么使用 AI。

而不是学会 Rust。

所以我更希望保持这样的关系:

帮我学习 · 想保持的关系
            AI
  解释 / 提示 / 引导
          ↓
     我自己理解
          ↓
     我自己写代码
          ↓
    编译 / 报错 / 调试
          ↓
       再问 AI

而不是:

我不会 → AI 写完 → 我复制

前者可能慢很多。

但我觉得值得。

10

重新当一个新手

这可能是我最近学 Rust 最大的感受。

重新当一个新手,真的不太舒服。

做了这些年工程以后,你会慢慢习惯一种状态:

很多事情你是有经验的。

看到一个问题,大概知道应该往哪里查。

看到一个结果,大概知道有没有问题。

但换到一个新的领域以后:

这些东西全部消失了。

一个很基础的问题都可能把你卡住。

别人觉得理所当然的东西,你可能完全不知道。

有时候会觉得:

“怎么这么简单的东西,我都不会?”

但后来想想,也没什么。

我第一次做 CFD 的时候,也不知道什么叫网格质量。

不知道边界条件应该怎么设。

不知道一个结果到底算不算合理。

这些东西都是后来一点一点学出来的。

所以现在重新面对 Rust,我也不应该期待自己一开始就会。

不会就是不会。

那就从不会的地方开始。

11

这一次,我不想急着证明自己会了

以前用 AI 做东西的时候,很容易产生一种满足感。

一个功能完成了。

一个项目跑起来了。

页面出来了。

Agent 开始工作了。

然后会觉得:

“我是不是已经会了?”

现在我反而想慢一点。

因为真正掌握一件东西,应该不只是:

它能跑。

而是我能够回答:

它为什么能跑?

如果出了问题:

我知道从哪里查。

如果需要修改:

我知道为什么这么改。

如果 AI 给了我一段代码:

我能判断它是不是合理。

这可能才是我现在真正想补的东西。

12

第一篇,就先到这里

所以这篇其实没有什么技术内容。

没有讲所有权。

没有讲 Trait。

没有讲生命周期。

甚至严格来说:

我还没有真正开始讲 Rust。

它更像是给这个系列留一个起点。

过去几个月,我已经借助 AI 做了不少东西。

现在我想退回来一点。

重新从最基础的地方走一遍。

不是因为 AI 不够好。

恰恰是因为 AI 太好用了。

它让我很容易把东西做出来。

而现在,我想知道:

这些东西到底是怎么工作的。

2026.08.27

这一天不算是我第一次接触 Rust。

但可以算是:

我决定认真从头学 Rust 的一天。

我不知道自己最后会学到什么程度。

也不知道这个系列最后会写多少篇。

可能坚持得很好。

也可能中间又跑去折腾别的东西。

这都很正常。

但至少这一次,我想试试看:

不只是让 AI 帮我把一个项目做出来。

而是真的把这门语言,一点一点学下来。

哪怕慢一点。

下一篇开始真正写代码。

安装 Rust。

Hello World。

认识 Cargo。

然后回答一个我现在其实也很好奇的问题:

一个 .rs 文件,到底是怎么变成一个可以运行的程序的?

从最简单的东西开始。

先把第一步走完。