Skip to content

Artisanal Coding Is Dead, Long Live Artisanal Coding!

Joel Reymont
Joel Reymont
3 min read
Artisanal Coding Is Dead, Long Live Artisanal Coding!

Discuss on Hacker News or Twitter.

Build your dreams and consider hiring me!

You might also enjoy AI will write your next compiler!

I recently discovered that I possess certain AI-assisted superpowers: I can now implement working features — the ones I actually need and want — far faster than if I coded them artisanally, and with no loss in quality. I literally feel 10× more productive!

Take, for example, command history browsing, editing, and tab completion in ocamldebug, the bytecode debugger in the OCaml ecosystem. I’m talking about navigating through command history with arrow keys, jumping to the start of a line with Ctrl-A and to the end with Ctrl-E, and getting info breakpoints by typing <i><TAB> or <br><TAB>.

These are long-standing features in lldb and gdb, provided by libreadline. And no — using rlwrap does not provide the same experience.

Just last week, I wouldn’t have dreamed of implementing such a feature. But a few days ago, I did exactly that. This PR was entirely AI-generated over the course of 2–3 days. Can you tell?

The code is organized into a series of bite-sized commits. I challenge you to browse it and poke holes in the implementation!

It wasn’t done in one fell swoop. I worked on it carefully — from dusk till dawn — because, honestly, it was fun. Yes, I have enough OCaml experience (and over 30 years of development under my belt) to ensure that the code is basically what I would have written myself.

How I Did It

I used Claude Sonnet 4.5 to write the code and ChatGPT 5 to review it, looping between them until I was satisfied. I started with the web versions of the models, then switched to CLI to refine and polish the work — also because I’m on macOS, and the web models run on Linux x86_64.

At one point, I was almost ready to roll up my sleeves and dive in manually. Claude got stuck on a PTY issue and started making random changes that didn’t fix the problem. ChatGPT wasn’t much help either.

Then I asked Claude to show me the differences between two code paths — yes, you can ask models to describe code! — and that’s when the breakthrough happened.

Claude, all by itself, added debugging printouts to the problematic section of code. Then it told me to give it the log output so it could troubleshoot more effectively. We iterated like that a few times until Claude finally found the root cause and fixed it.

One caveat, though: even if I didn’t type the code myself, I own it — and it’s my responsibility now.

The Feeling

The process takes time — though it’s still faster than coding by hand. It feels a bit like being a principal engineer guiding a team of mid- to junior-level developers. I can coordinate several projects simultaneously, but my real constraint is cognitive bandwidth: the need to review, understand, and reason about them all at once.

Overall, I feel like a coding god. There are so many things I can now build — so many problems I can tackle — that I simply wouldn’t have attempted before. The sky is, quite literally, my coding limit.

I, for one, welcome our new AI overlords. I don’t care who wrote the code — human or machine — as long as it’s clean and it works.

Do you care who built your favorite software features, or just that they shipped fast and worked great?

Let me know on Hacker News, Twitter or the OCaml Forum!

P.S. — Use AI to Learn

Yes, you can and should use AI for learning. I do.

As an autodidact, it suits me perfectly. You can ask AI to explain an unfamiliar codebase — in whole or in part — or to show you variations, optimizations, or tests.

Nothing stands between you and your new learning superpowers!

P.S. — AI will write your next compiler!

I'm working on adding DWARF debugging information to the OCaml compiler. Just for kicks and because I don't necessarily want to use OxCaml the Jane St fork of OCaml that supports DWARF on the Mac.

DWARF is the information you need to see source code in lldb or gdb, inspect variables, stop at lines of code, etc.

It looks like I got it working but I'd like to make absolutely sure before I post about it.