Wayne Wei
Engineering Field Notes

从 CFD 到写代码

从算风的到写代码的:做了十年 CFD,我又变成了一个新手。

ENG · 022026.06READING · 14 MINUPDATED · 2026.06.27

两个月前,如果有人告诉我:

「你以后会自己做 AI Agent。」

我大概会笑一下。

不是因为我觉得 AI Agent 没什么。

恰恰相反。

而是因为那个时候的我,连代码都写不好。

我做了十年 CFD。

每天面对的是汽车、网格、流场、边界条件、收敛、结果后处理,还有各种各样的工程问题。

这些东西我已经做得很久了。

久到很多时候不需要特别想,就知道一个结果大概有没有问题。

但如果你把我扔到一个 Rust 项目里,让我从零开始写一个功能……

我还是会卡住。

而且经常卡在一些现在看起来非常基础的地方。

所以这篇文章不是一篇「从 CFD 工程师成功转型 AI 工程师」的故事。

因为我根本还没有转型成功。

我只是刚刚开始学。

01三十多岁了,又开始不会写代码

2026 年 4 月,我开始认真学 Rust。

说「认真」其实还有点不好意思。

因为刚开始的时候,我真的挺狼狈的。

我以前当然接触过代码。

也看得懂一些脚本。

做 CFD 的时候也会处理数据、自动化一些工作。

但那和真正做软件完全是两回事。

以前我更多是在解决:

「这个东西怎么计算?」

现在开始遇到:

「这个东西到底应该怎么组织?」

这两个问题差别非常大。

第一次看到 Rust 的时候,ownership、borrow、trait、lifetime 这些词一起出现。

我知道它们肯定很重要。

但知道「这个东西很重要」,和真正理解它,是两回事。

有时候一个看起来特别小的问题,我能折腾很久。

Terminal · 常见于我的两个月 示意 · 非真实输出
error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
 --> src/main.rs:24:9
  |
24 |     v.push(x);
  |     ^
   = note: this error originates in the borrow checker
# 又卡住了 → 回到文档 → 发现还是没懂基本概念

最后发现不是 Rust 太复杂。

而是:

我连这里的基础概念都没搞明白。

这种感觉其实挺奇怪。

因为工作这么多年以后,你已经习惯了自己是一个「有经验的人」。

结果换一个领域。

经验突然没了。

02但 AI 确实让我开始做东西了

如果没有 AI,我现在可能还停留在学 Rust 的阶段。

这句话我觉得没必要谦虚。

我现在做项目,会大量使用 AI。

我会先把自己想做的东西说出来。

让 AI 帮我拆问题。

让它写一部分代码。

然后我拿回来跑。

报错。

再问。

改。

再跑。

有时候一个下午就在:

写 → 编译 → 报错 → 问 AI → 修改 → 再编译

这个循环里过去了。

但有一件事情以前确实很难做到:

一个完全不会系统写软件的人,现在可以真的把一个东西跑起来。

这件事对我的冲击其实挺大的。

以前我看到一个软件项目,会觉得:

「这个东西至少要懂很多代码才能做。」

现在不完全是这样了。

AI 可以帮你跨过最开始的那道门槛。

你甚至可以在还没完全掌握编程的情况下,先做出一个能工作的东西。

但这里也藏着一个很大的坑。

03最麻烦的,往往不是让它跑起来

我现在越来越觉得:

AI 帮你把一个项目做到 80%,可能比以前容易很多。

真正麻烦的是剩下的部分。

SELF-ASSESSMENT作者自评 · 非精确数据
BUILD · 把它做出来 80–90%
UNDERSTANDING · 把它讲清楚 ~35%
Build 在 AI 帮助下可以走得很远;Understanding 还差得远。

项目能跑起来以后,你开始遇到一些很烦的问题。

What Broke能跑之后,开始回答不了的问题

为什么这里的数据没有更新?

这个状态到底是谁改的?

为什么改了 A,B 又坏了?

这个错误到底应该在哪一层处理?

为什么这个 API 有时候成功,有时候失败?

为什么一个地方看着没问题,整个系统跑起来却不对?

这个时候,如果你完全不知道代码在做什么,就会很难受。

因为 AI 当然还是可以帮你。

你可以把错误贴给它。

它也可能马上给你一个修改方案。

问题是:

你不知道这个方案到底是不是对的。

甚至你改完以后,项目真的跑起来了。

但你不知道自己到底修好了什么。

这才是我现在最警惕的一件事情。

不是 AI 会不会写代码。

而是:

The Worry

我会不会慢慢变成一个只能让 AI 帮我修代码,却说不清楚代码为什么这样工作的「使用者」。

Will I slowly become someone who can only have AI fix my code — but can't explain how it works?

所以我最近反而越来越认真地补 Rust。

不是因为 AI 没用了。

恰恰是因为 AI 太有用了。

它让我太快地走到了「东西能跑」的地方。

然后我才发现:

真正需要自己补上的,是理解。

04做了十年 CFD,多少还是留下了一点东西

这也是我最近比较有意思的一个发现。

刚开始学代码的时候,我一直觉得:

「我以前做 CFD 的经验,对写软件应该没什么帮助。」

这句话其实只对了一半。

CFD 当然不会让我突然会 Rust。

不会因为我算过十年流场,就自动知道 trait 怎么设计。

也不会因为我会调湍流模型,就知道 async/await 到底是怎么回事。

这些东西都得重新学。

但是有一些习惯,好像确实留下来了。

比如:

我不太相信第一个结果。

以前 CFD 算完一个 case,我不会因为软件给出了一个数字,就觉得事情结束了。

Cd 变了。

压力分布变了。

流场看起来不一样了。

第一反应通常是:

为什么?

边界条件是不是有问题?

网格是不是有问题?

模型是不是有问题?

是不是哪里设置错了?

甚至如果我改了一个东西,结果变好了,我也会想:

真的是这个修改带来的?

还是刚好还有别的东西一起发生了变化?

这些习惯做久了以后,已经不像什么「方法论」。

更像条件反射。

05我第一次做 Agent 的时候,突然觉得这套习惯又出现了

刚开始接触 AI Agent,我其实没觉得它和 CFD 有什么关系。

网上讲 Agent,经常会出现一些很漂亮的描述:

Planning → Tool Use → Feedback → Next Action

看起来很完整。

但真正自己做的时候,事情没有那么漂亮。

一个 Agent 跑起来以后,你不能只看最后的答案。

你得看它中间到底干了什么。

为什么调用这个工具?

工具返回了什么?

它为什么决定下一步这么做?

是不是一直在重复?

什么时候应该停?

如果结果错了,到底是哪一步开始错的?

Agent Loop FIG. 01
Plan →Execute →Observe →Judge ↺ 为什么调用这个工具 · 工具返回了什么 · 下一步为什么这么判断 · 是不是一直在重复 · 什么时候应该结束
注 不能只看最后一句回答 —— 得看它中间做了什么。

这时候我发现:

我以前做 CFD 的那套「查问题」的习惯又回来了。

我开始看过程,而不是只看最终结果。

开始找问题发生在哪里。

开始尝试一次只改一个关键因素。

开始重新跑。

然后比较。

这其实一点都不 AI。

甚至可以说很土。

但我做工程做了这么多年,已经习惯这样了。

现在只是把对象从:

流场

换成了:

代码和 Agent 的运行过程。

06也别把这件事情想得太浪漫

这可能是我现在越来越想说清楚的一点。

我以前做 CFD 十年,确实积累了一些工程经验。

但这些经验不能直接兑换成软件工程能力。

我可以凭经验感觉一个 CFD case 哪里可能有问题。

但到了 Rust:

我不知道 borrow checker 为什么这么设计。

不知道 trait 到底什么时候应该用。

不知道 lifetime 为什么需要存在。

不知道一个模块应该怎么拆。

不知道一个大型项目怎样组织才不会越来越乱。

Transfer Map 什么能迁移 · 什么不能
Can Transfer可以迁移
CFD ENGINEERING · 十年
  • → Problem decomposition · 拆解问题
  • → Verification · 验证结果
  • → Debugging · 定位问题
  • → Hypothesis testing · 假设检验
  • → One-variable-at-a-time · 一次只改一个变量
↓
AI ENGINEERING
Cannot Transfer不能直接迁移
CFD EXPERIENCE
  • × Rust ownership
  • × Borrowing
  • × Traits
  • × Lifetimes
  • × Async
  • × Software architecture
↓
LEARN · 只能学

工程经验可以迁移,但技术知识不能凭经验凭空生成。

Engineering habits transfer. Technical knowledge does not.

这些东西没有捷径。

就是不会。

不会就去学。

所以我最近的状态其实一直在这两边来回。

今天为了项目遇到一个 Rust 问题,就去学 Rust。

学着学着发现,这个问题背后还有一个更基础的概念,再去补。

补完以后回到项目,然后又遇到新的问题。

Learning Loop FIG. 02
项目 →遇到 Rust 问题 →去学 Rust →发现更基础的概念 →补 →回到项目 ↺ 然后遇到新的问题 —— 循环继续

有时候挺烦。

尤其是那种:

折腾两个小时。

最后发现只是自己少写了一点东西。

这种时候真的会有点想骂人。

但也只能继续。

07现在让我说自己是「AI 工程师」,我反而觉得有点早

我甚至不太喜欢「转型」这个词。

因为我现在还没有完成什么转型。

我只是:

开始学 Rust。

开始认真写代码。

开始用 AI 做软件。

开始理解 Agent。

开始尝试把以前的工程经验带进新的东西里。

就这些。

现在让我完全不用 AI,从零开始写一个复杂软件,我还是做不到。

很多 Rust 概念我还在学。

软件工程很多东西我也还没真正经历过。

所以如果有人问:

「你现在算程序员了吗?」

我可能还是会犹豫一下。

但如果问:

「你现在是不是已经开始写软件了?」

那我可以回答:

是。

而且是真的在写。

这两个答案,对我来说差别很大。

08AI 真正改变我的地方,不是让我变成程序员

以前我会觉得:

一个不会代码的人,很难做软件。

这个判断以前基本没什么问题。

但现在已经开始发生变化。

AI 确实把门槛降低了。

你可以先描述。

先做。

先看到一个能跑的东西。

甚至可以在还没有完全理解代码的时候,就把第一版做出来。

对我这种没有系统学过编程的人来说,这个变化非常大。

但另外一面也越来越明显:

AI 越强,越容易让你产生一种「我已经懂了」的错觉。

代码是 AI 写的。

错误是 AI 帮你修的。

架构是 AI 给你的。

最后项目还能跑。

于是你很容易觉得:

「好像也没那么难。」

直到某一天系统出了一个 AI 解释不清楚的问题。

这时候你才发现:

原来真正缺的东西,一直在那里。

理解。

所以我现在给自己定的目标其实很简单:

不是不用 AI。

也不是证明自己可以不靠 AI 写代码。

而是:

Explain

AI 可以帮我做,但最后我希望自己能够解释。

AI can do it for me. But in the end, I want to be able to explain it myself.

解释这段代码在干什么。

解释为什么这么设计。

解释数据从哪里来。

解释错误为什么发生。

解释为什么这个方案比另一个方案更合适。

如果这些事情做不到,我就不算真正掌握它。

09可能不是 CFD,而是做工程的习惯

如果现在让我重新回答这个问题:

「做十年 CFD,对现在学 AI 有没有帮助?」

我的答案会比较谨慎。

没有那么神奇。

它不会让你突然会编程。

不会让你自动成为 AI 工程师。

该学的东西还是得学。

Rust 还是 Rust。

软件工程还是软件工程。

AI 还是 AI。

但十年的工程工作,确实会留下点什么。

What Carried Over FIG. 03
  • 看到结果以后,先问一句:合理吗?
  • 出了问题以后,不急着把错误盖掉,而是先问:到底哪里出了问题?
  • 面对一个很复杂的问题,知道可以先拆开
  • 做了一次修改,知道最好重新验证
注 这些东西以前属于 CFD 工作。现在,它们开始慢慢进入我的代码里。

这些以前都是我做 CFD 时每天都在做的事情。

现在换了一个对象。

以前研究的是:

「为什么这个流场变成这样?」

现在开始研究:

「为什么这个程序变成这样?」

看起来完全是两回事。

但解决问题的时候,某些习惯确实很像。

10这可能是我现在最真实的状态

做了十年 CFD 以后,我已经很久没有认真体验过「新手」是什么感觉了。

现在重新学代码,我又体验到了。

一个编译错误可以卡我半天。

一个很基础的概念,我可能要看好几遍。

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

有时候甚至会觉得:

我怎么又什么都不会了。

但仔细想想,好像也没什么。

我第一次做 CFD 的时候,不也是这样吗?

第一次打开软件。

第一次建模型。

第一次划网格。

第一次跑算例。

第一次看到一个自己完全不知道该怎么解释的结果。

当时也不会想到:

后来我会在这个领域做十年。

所以现在重新面对 Rust、AI、Agent 和软件工程,我也没必要急着证明自己已经会了。

我现在就是一个新手。

这件事情没什么丢人的。

Apr — Aug 2026 · 还在继续
APR 2026
开始学 Rust。第一次意识到「会解决问题」和「会写代码」是两回事。
MAY
开始做 AI-assisted 项目:先描述想法 → AI 拆解 → 运行 → 再问。
JUN
开始接触 Agent。发现不能只看结果,得观察它中间做了什么。
JUL
架构问题开始出现。能跑,但「为什么这样设计」说不清。
AUG
回到 Rust 基础。承认技术知识只能学,不能凭经验变出来。
Status

Still Learning · 项目仍在进行,没有完成什么「转型」

Field Note Status

STATUS: STILL LEARNING

这不是一篇「转型成功」的总结。这是一份正在进行的工程现场记录。

11最后

所以这篇文章如果一定要有一个结论,我现在反而不想写得特别漂亮。

我还不知道这条路最后会走到哪里。

可能两年以后,我会真的做成一个软件。

可能只是学会了一些代码,然后继续做我的工程。

也可能走到一个完全没想到的方向。

我不知道。

但至少现在,我已经开始了。

以前我花了十年时间,学着怎么把一个复杂的流场问题一点一点搞明白。

现在又重新开始。

学 Rust。

学软件。

学 AI。

学 Agent。

继续踩坑。

继续犯错。

继续让 AI 帮我。

也继续想办法搞明白 AI 到底帮我做了什么。

三十多岁重新当一个新手,确实有点狼狈。

但好像也挺有意思。

毕竟十年前,我也不知道自己最后会走到 CFD。

现在也一样。

Forward

先走再说。

看看这一次,会走到哪里。

Keep walking first. See where this leads.