On writing code myself
Years ago I visited Mystic Seaport in Connecticut, where wooden sailing ships were built to go out on the Atlantic. The hull had to be as strong as possible, so beside making the internal structure from dense hardwoods like oak, shipwrights also used the natural shape of trees to the ship's advantage. Most notably they constructed the arched ribs from the bends in a tree where the trunk joined a root or a branch. The curved grain was far stronger than a man-made joint between two pieces of straight lumber.
In the previous post I described a small game and some friction I encountered implementing a basic game loop. The problem was minor, and it would have been easy to ask an LLM to churn out the code. But I didn't, because my goal wasn't really to make a game, it was to learn. The friction created by my approach was instructive. I was cutting against the grain of the problem, rather than working with the grain. I could have forced my way through the quagmire, either myself or with the help of an AI sledgehammer, but I was making the game for fun, and part of the fun is exploring new approaches and adding new tools to my toolbox.
Experiences like that are why I continue to write code more by hand than by AI. When I do ask an LLM to code, it's so I can learn, not to outsource the effort. I have a relationship with the problem and the potential solutions I've collected, not so different from the way a woodworker has a relationship with the material and his tools. A relationship can't be delegated to a machine, even a thinking machine.
The craftsman mindset may become a luxury. Code written by hand may be considered "artisanal". But I love doing more with less, like using curved sections of a tree to make curves in a ship's ribs stronger with less work, and while LLMs are often billed as saving us work, the total amount of work done is usually more. I value craftsmanship, and I still believe technique matters, even when it's slower.
So while I use AI, I don't use it as a substitute for learning. Notation is a tool of thought, and working hands-on with the code is a form of thinking. I write code myself because, beyond crafting software, I'm also crafting myself.