Don’t tell my boss though, but I think it’s for the better. It’s also his fault anyways: the day when I was politely nudged to use the Claude subscription provided by my employer finally came. But nobody told me how to use it, so I started to “experiment” with both, Claude Code and OpenCode, on my own terms. Devil emoji.
I used scary quotes because despite whatever the fandom told me, there isn’t really much room for experimentation here. Both are TUI that by running in your computer have access to your files and tools. So whatever you already know how to do can now be automated in a natural language, that’s it. Plus some randomness sprinkled here and there. Of course, if you don’t know how to do much with the command line to begin with, these tools surely feel like game changer magic.
As I do know how to use the command line, as I do have personal Makefiles as well as a shell history that’s searchable, and more importantly, as I do enjoy programming a lot, I immediately restricted all permissions in both UIs to read only. This is of course at odds with the whole purpose of these things, but I couldn’t care less. I’ll keep holding them wrong. I have some sort of programming philosophy, and I previously described what’s an acceptable LLM workflow according to it. I’m the one that will drive drive the whole creative process, I’m the one that’s going to think! And writing (including writing code) is in my view a tool to get into rigorous thinking. So how can an LLM help me?
Well, I’m a drop out and a dumb ass, and as a consequence understanding and implementing algorithms that everyone else implemented in college is a bottleneck. Turns out an LLM, for obvious reasons, is perfectly capable of vomiting a most likely correct implementation of any algorithm ever taught to CS undergrads.
So I’ve been asking for examples of X, Y, and Z. I’ve read the whole explanations, and (touch) typed the code, while refactoring it, to make it suit my style, and more importantly, to understand it. This is of course nothing new. It is exactly what I have been doing since I learned HTML and CSS and looked at other’s people code. It is what I have been doing since I discovered StackOverflow. This is even recommended as a technique to gain understanding in The programmer’s brain by Felinne Hermans. And here is the first way in which having a TUI for an LLM has made me slower: it’s so easy to get most likely functional alternatives of stuff I don’t know, that I can iterate over them, retype them, jump to the web (often the Wikipedia or official docs) to check and double check the new knowledge I’m acquiring, and suddenly it is time to get lunch. Before I had access on demand to a bunch of alternatives I could study, if something wasn’t clear I would just leave an “I don’t get why this works but it does” comment and move on. That seems impossible now, even irresponsibly.
Weizenbaum observed people getting hooked to his primitive chat interface in the late 60s, so it should’t be a surprise that I am. The natural language interface is a leap somewhere and do make certain things more convenient. Having feedback by typing “look at line X in file Y and tell me if something is off” is addictive. And if something is off I will fix it! All I can say in my defense here is that no matter how great Claude thinks my questions and ideas are, I don’t see it as my boyfriend neither as sentient.
The thing is though, that the James Randi foundation made me an sceptic a long time ago. And once you learn some things by heart you cat just unlearn them. I’ve experienced the rage of being bullshitted by an LLM at least once per day in a wide range of topics, including literature and music since a colleague showed us ChatGPT. Fun fact: if you ask them about stuff you know, you quickly get a sense of their unreliability, and that should be a reminder that you should never trust their output. That’s the other way in which I’m slower now: I’ve become more rigorous when it comes to check the provided information, and the more I check, the more bullshit I find, and the more bullshit I find, the more I want to check. I have now screenshots and saved sessions of the useless stuff I’ve gotten thrown to may face, just because I know I’ll have to justify why I don’t “vibe” at some point.
In fact, there was one instance at the beginning of the year when I blindly trusted an API transformation provided by Claude, from Apple’s Combine to AsyncSequence. It seemed to work, but the QA wasn’t thorough enough because I believed it should have been equivalent. It wasn’t, and I broke our app for several customers. That definitely made me even more weary. As the dumb ass I am I like when tools prevent me from releasing broken stuff. I prefer to deliver slower but with fewer defects and a decent understanding, than to deliver fast and have to stay at work fixing a mess while the costumers complain. I’ve burned out in the past, fixing dynamically typed stuff past midnight. I refuse to burn out because I release stuff hoping, instead of knowing, that it will work.
The final way in which I’m slower now is that I can refactor endlessly. I often get ideas of how to improve what I just did when I’m finishing it, but time pressure makes me add a to do note and move to the next thing. Now the illusion of speed encourages me to try immediately. Show me how this would look like if I extracted the gestures implementation as an extension, I type, and after Claude produces a plan that seems reasonable, I have to carry it over while fixing whatever seems off. So whatever time I saved by letting the tool to generate a prototype of the modification is “lost” anyways by me caring “too much” about code quality. For my own definition of quality.