AI: New Frontiers

Today’s AI can make you better at doing things you do well. That is what AI is for.
This week, I cleaned up a Tinderbox nuisance, one that goes all the way back to 2000. Tinderbox views, like the map view, are filled with geometry. Originally, I used native Points and Rects, but when we started to think about Windows, I abstracted them to SPoints and SRects which have lots of behavior: hit-testing, drawing, and more. That was a big win.
Map view didn’t use objects to distinguish between different coordinate systems. It has the abstract map coordinate system, used for scaling and storing the dimensions of objects. It has the concrete system of local coordinates, in which the drawing is done. It sometimes deals with window coordinates and even raw screen coordinates. It’s easy to get confused. With about 350,000 lines of code, I get plenty confused.
But sorting this out is tricky. There are points everywhere, and it's not always obvious to which coordinate system they belong. You have to go up the line: what does the caller expect? What does it send you? Each change needs you to prove a simple little theorem. It’s not hard to do, but it needs to be done, again and again. That’s exhausting.
But our slaves of steel have nothing better to do, and proving little theorems is right up their alley. So, for the past four days, Claude Code Opus4.6 and I have been teaming up. Claude proves the theorems, I confirm them, and then I fix and test the code. It’s been 3,500 edits in all. Now we have about 70 explicit MapPoints and 225 explicit LocalPoints, and it's no longer possible to accidentally add a MapPoint to a LocalPoint. Along the way, I diagnosed several blunders, some of which have been around for a long time.
This isn’t vibe coding: I hold the knife. (Occasionally, Claude did peek over my shoulder and said I was doing it wrong, and some of the time Claude was right.). The code ends up tidier than when we started. Without Claude, this is the sort of big numbing project that’s hard to justify.
An interesting detail is my use of comments. I bought in to Kent Beck’s argument, back in the 2000s, that comments should seldom if ever explain what the code does. If the code needs to be explained, it should be rewritten more clearly. Though I did not prompt for this, Claude now recognizes comments as an indicator that the code near the comment is suspect. That’s interesting.