The Hayden Fang Archive方氏个人归档 Section 04 — Blog第 04 辑 — 文字 Sydney悉尼

Notes & essays随笔与长文

Vibe coding · January 2026Vibe coding · 2026年一月

It'll invent an API
with a straight face
它会一本正经地
发明一个不存在的 API

3 min read约 3 分钟

The thing nobody warns you about isn't that AI gets things wrong.

It's how calm it is when it does.

Ask it for a React component and you get something clean in four seconds. State, hooks, a loading skeleton you didn't even ask for. It's genuinely good. I'm not here to dunk on it.

Then I switch to Swift, ask for the same energy, and it hands me this:

Text("Synced")
    .symbolEffect(.pulse, isActive: store.isSyncing)
    .refreshable(throttle: .seconds(2)) {
        await store.reload()
    }

Looks great. Reads like real SwiftUI. Same shape as a hundred modifiers I've actually used.

That throttle: parameter does not exist. It made it up. And it presented it with the exact same tone it used for the React code that worked perfectly — no asterisk, no "I think," no flicker of doubt.

That's the part that gets you. Same straight face for the true thing and the fake thing.

For a long time I thought the skill here was catching it after the fact. Compiler screams, red squiggle, you go fix the lie. And sure, you do that. But that's just cleanup. By then you've already trusted it.

The real skill is earlier and quieter.

It's a nose.

Here's the mechanism, and once you see it you can't unsee it. The model isn't reasoning about Apple's docs. It's pattern-matching against what it read. And it read oceans of JavaScript. Every blog post, every Stack Overflow thread, every open-source repo on earth. So in web land its map is dense and the roads are real.

But a ton of iOS code never gets published — it lives inside private apps that ship to the App Store and die there. The newest Apple APIs are a year old, barely written about. Your company's internal SDK? It's never seen it. Not once.

So out there, the map gets thin. And when the model hits a blank spot, it doesn't stop. It doesn't say "no road here." It draws one. A plausible one. Same confident pen stroke as everywhere else, because to the model there is no difference — it's pattern-matching all the way down. Confidence isn't a truth signal. It's just the default setting.

Which means you can't read the confidence. It's flat. Useless as a gauge.

What you can learn to read is the terrain. New framework that dropped last fall. A niche library with eleven GitHub stars. Anything Concurrency. The private in-house stuff with zero footprint online. The moment I wander somewhere the open internet is quiet about, a little alarm goes off — we're in the thin part now — and my hands come back to the wheel. I stop skimming. I start checking the actual header.

It's the same instinct I was circling back when I moved from the editor to the terminal — it nails the common case and fakes the rare one with the same confidence.

You don't need it to stop hallucinating. It won't, not soon. You need to know which neighborhood you're standing in.

Dense map: cruise.

Thin map: trust nothing it says with a straight face. Especially then.

Previous: Apple's best habit became its AI problem上一篇:苹果最好的习惯,成了 AI 时代的软肋 Next: Context is the new RAM下一篇:上下文,就是新的内存