Coding, to me, has been like an arranged marriage.
It was a relationship born and nurtured by necessity. She had the family fortune that would make up for my comically indolent and over-excitable youth; I had just enough wit, charm, and potential to convince her parents that I was suitable, if not choice. Money for potential. We've been bargaining and budgeting our relationship ever since.
They say familiarity breeds contempt; it also breeds plain, old familiarity. You see, I was a dutiful husband, not a bad one. I learned the JavaScript frameworks that made her smile and the design patterns that satisfied. She would present me with problems and I would solve them. When she needed me to work late, I would, and when she asked for something extravagant and pointless, I'd shirk. It was never about devotion or passion, only the tepid gray of tolerable necessity.
Then one day I looked up and thought, "Damn, she's kinda cute." I don't know what changed about her or within me. She was the same Active Record query and I was the same Active Record querier. It must have been that slow accumulation of experience, like the transfer of heat into a pot of water. Every degree warmed my interest a little more and then bam: quantity becomes quality and I'm boiling over trying to figure out what the C10K problem is and how epoll works.
But there's a problem I didn't expect - the Machine. You know the one. Mr. Steel Yo Girl. I'm told that with the Machine's arrival I should file for divorce. Dario, Sam, and half of Twitter are all convinced of it. Maybe I can hang out in a room of Machines whom I vicariously interface with her through (the analogy is breaking down; what kind of polygamy horror is this?). But I don't want to; I just fell in love!
But the Machine can't be ignored, so I'll need some heuristics to guide this ménage à trois between the Code, the Machine, and moi.
Does it make me better or worse?
This is the most important question. I have great contempt for people who barbarize themselves for short-term gain. Yes, humans have always used tools to solve problems, but the question is: what tools for what ends? I'm interested in using tools that increase my understanding of the world and my ability to act within it. Generative AI can clearly harm or help this goal, and my use of it will be heavily conditioned on this question.
Does it increase or decrease my independence?
An only slightly less important question. One thing I've noticed about many software developers is that their ideas on software are entirely conditioned on capital-rich environments. Performance problem? More compute. Roadmap bottleneck? More engineers. Any process slowdown anywhere? More tokens. This creates a reliance on the bountiful resources around them, which may or may not continue to be available. I don't want to be in a situation where my access to a third-party API is the difference between me being able to perform my job or not. What if the price of inference goes up dramatically? What if companies start pushing the cost of tokens onto engineers? I want to be able to choose to use or to stop using any tool, especially one with a cost model like Generative AI.
Does it enable me to make things that are useful and/or beautiful?
It's the Wild West out there. Emergent technologies are always going to have unscrupulous people massively abusing them to make a quick buck. I'm sure that there are many engineers quietly working away with the use of LLMs that have nothing to do with the high-volume hype cycle we're subjected to. That being said, I'm still waiting for the marvelous software that Generative AI is promising. There are many other bottlenecks besides writing code to producing a great product, and it seems that Generative AI is making things worse for many of its users. Rather than use the tool to ideate, iterate, and refine, it's a race to see who can generate the most LOC for another LLM web interface. The Machine must be used in service of making beautiful things that solve real problems.
If the Machine makes me better, can be used while maintaining my independence, and enables me to make useful and beautiful things, then I will use it. If not, then I must course correct.
As of right now, I want to continue to type characters into Neovim and make my brain go "brrrrrrr." Because the "brrrrr" is the important part and many uses of the Machine (especially agentic ones) stops the "brrrrrrr." The Machine is purely for feedback and research at this juncture, but that may change. I have a Mac Studio on the way to start experimenting with local hosting and I'll post updates here as I make progress.
I'm a bad software engineer. I want to be a good software engineer. Hopefully that will continue to matter!