It’s Mourning in Technology
About the Title#
It’s taken from the Ronald Regan campaign ad It’s Morning Again in America. Over the last few days, I realized the odd sensation in the back of my mind was of mourning. It took me a while to see it. Which is strange, given I’ve mourned the passing of one parent. I should know that emotion well. And yet it sat there, souring my mood. I think I’ve finally uncloaked it, and I think I know from whence it comes.
This is a Great Time to be Alive#
I started programming as a snot-nosed teenager when Regan was president. It was cool back then, playing with BASIC, assembler, and Pascal. But today has never been a better time to be a developer. For example, I’m editing this using emacs. Way back when, I was told to avoid emacs because it consumed too many resources. If everyone used it, the server we shared over telnet would slow down under the load. The very expensive server had Unix and the licensed tools we used for class assignments. For $75 I can get a computer running a Unix like operating system with orders of magnitude more capacity. Better compilers, more compilers, and I can run all the emacs I want. It is a happy-happy joy-joy time, but I can’t help escape the feeling we’re coming to the end.
By every measure the tools, hardware, teaching materials, and their availability is much better than the 1980s. It’s like looking back at the pre-printing press world. The internet was an amazing accelerant. Clearly, I should be happy.
And Yet?#
So what am I mourning? Although I enjoy retro computing, I don’t miss that world. A ZX81 or Commodore 64 is a very limited machine. You can start doing interesting things when you get to an 8088/8086 IBM PC or clone. I don’t miss almost constantly rebooting my computer while debugging code. From the early internet, I miss was the feeling of building something new. But the languages we have today are much better. And what you could do on the Web back then was fairly limited. Although it did feal more experimental. Now it’s just corporate and bland.
These are things I miss. I miss having a machine I could pretty much understand. I miss the relative quiet of being able to learn a language by working examples from books. I miss being amazed by a clever or interesting web page. There is a sesne of nostalgia. I don’t love the current, loud intrusive world of Social Media driven software development. I think a lot of “if you’re not doing it like this trillion dollar company” is largely stupid. But I can set it aside and ignore the noise. But those aren’t what I’m mourning.
So what on God’s green earth am I mourning?
Something is Dying#
[It’s actually the self satisfaction and cred that comes from having deep understanding].
This was not my belief six months ago. What made me change that belief? Yes, the (large language) models have improved. But it is not the improvement in the models. Even with better models, many of the code-completion suggestions are very wrong. The stochastic parrot (which is what spits out those quick suggestions) continues to do a mediocre job. Wading through those is a decelerant during my day. For the most part, my observation that there is no ’there’ there still holds. The LMM generates code but it has no internal model of what you’re trying to do. It is just predicting text, given the text and context.
What has changed my opinion is running those models iteratively. It is the willingness to expends huge amounts of compute to run the model as an “agent.” The mode d’emploi isn’t a one-shot, context augmented, stochastic parrot. It is a series of stochastic parrots. A problem gets broken into steps or chunks with inferencing run on each step. The process can even correct itself, if it makes a mistake. It sometimes does strange or unwanted tasks during its multi-stage execution. But nothing so bad as to make it unusable. Often it just needs a little clean-up. But I’m not mourning the end of my career.
What is it That’s Dying?#
What did it take to become a computer programmer? It isn’t memorization, although a good memory helps. It is partly a thought process. You can tackle a big problem by top-down and bottom-up strategies, but that isn’t all of it. But that’s not all of it, by far. Learning to program is in large part, a craft. You memorize a language and its forms, you learn to think in that language, and your produce code. The first code you produce is awful. Over time you make mistakes, you learn, and you go from barely capable to having genuine insights. Becoming a good computer programmer is a combination of intellectual journey and mastering a craft. This is definitely part of what’s dying.
I say this is dying because of how coding agents speed up my work. It is not a threat to me in the core languages I use on a regular basis. But I sometimes have to use tools and languages with which I’m not familiar. In the past it would have taken me time to get ‘up to speed’ enough to perform more than simple tasks. It is not mastery but the necessary the first part of that intellectual journey. After days or weeks, what took me half a day at the beginning, might take half an hour. In six months I might arrive at a completely different way to do the same thing. Informed by six months of mistakes, rethinking, experience, and deeper knowledge.
I short cut all of that If I use an LLM agent. Generating the code takes a few minutes and it doesn’t take me weeks to learn. On my core languages, where I already have depth, it isn’t as helpful. But on these one-shot, out of swim-lane tasks, it can be an accelerant. And on these tasks, I have a different role. It’s no longer to move toward proficiency. My role is to create specifications, guide the agent, and evaluate its output. I might not be a master of that language, but I can spot what might be problem areas.
But along with that path to mastery comes both a sense of personal accomplishment and recognition. You recognize the change in yourself. It might even have changed how you approach problems in languages you already knew. And co-workers and others validate that by seeking your expertise. After a couple of years with a language, you see it deeply. It’s no longer about the tactical decisions you make while coding. It informs strategic decisions you make before you start designing. That is what validates you.
Is There Art in Programming?#
Automation in furniture making did not destroy becoming a high-end furniture craftsman. What it did mean is that a craftperson wasn’t the only way to get a new chest of drawers. Unlike furniture, however, there is no such thing as artisinal software. A chest of drawers from IKEA is made of laminated particle board. It might be less desirable than a solid walnut chest from a high end furniture store. That high end furniture store needs people who have a lot more skill than running sheet goods through a computerized cutter. Skills that took years, and sometimes decades, to fully hone. But there will be no market for the artisan programs. In part because software is more like an iron water pipe than a fine piece of furniture. User interfaces aside, which are easily copied, it’s plumbing.
When I come to a new tool, there is no longer a need for the path to capable craftperson. I have the LLM put something together in a fraction of the time it would take me. (Although maybe not if I were already highly proficient in that language). Is it the best structure? Maybe or maybe not, but I’m not enough of an expert to judge. And if I need a critque of the code, the LLM can critique and apply fixes. I just need to set some parameters in files that describe what I want. If I were to use this all day, every day, how much would it cost me? Certainly not the $20 a month plan I have now. And probably not the $200 a month plan. Whether or not the same employers that balk at $500 for a best in class IDE will pay $1,000 or $2,000 a month for AI remains to be seen.
Where does the LLM fall down? When there’s a breaking change in the tools. For example, some JavaScript tools required me to manually go in and fix the LLM generated configuration. Because it’s been five minutes since they last had a breaking change. I also don’t dare run it on anything larger than a single source file or module at a time. Keep it simple, short, and keep the prompts clear. Make sure it’s not pulling in old dependencies with ancient version numbers. Iteratively build up the prompt and fix the “dot files” that have the injected prompts. Do not try to do anything big at one time. The more source code you have, the more it’s likely to generate something acceptable.
I may never become an artisan in a new language, if I keep using the LLM. What happens if that code breaks or needs some change? If it’s simple enough, I can do it, quickly. Larger changes may be done with more prompts or just regenerating the code. It’s possible the new version will be better, given the tools and models are better. It is likely I will never achieve an expert craftperson’s level of proficiency. And that makes me sad.
Conclusion#
The software development job is changing. Thankfully I’m at the back end of my career. I feel more for the developer in their early or mid fourties that has twenty more years to go. They will have to make the painful adjustment from being skilled producers to almost full time code reviewers. The job description I know is coming to an end. What’s coming will be very different. Will being a Java expert who knows the ins and outs of the garbage collector be a worthy goal any more? With so much good code for training, the LLMs will produce decent code. What will produce the motivation to create deep understanding? Will expertise be different? Maybe it won’t be about the language but about how to structure LLM friendly projects? There may be a level of craftsmanship, but it will not be what defines it today. And having lived in that world for 30 years, I must now take a little time to mourn its passing.
A Political Aside
The world of 1984 was much better than the world of 1980, the year in which Regan beat Carter. Unemployment was, in fact, down. As was inflation. Despite the fact Regan’s stimulative policies ran counter to the Fed’s interest rate policy to stop inflation. The stock market (after the lost decade of the 1970s) was showing signs of life. Everything about 1984 was better (in some sense) than 1980. And yet something was lost. It was a Republican president in the 1970s that gave us an EPA. The good vibes of the 1970s gave way to the frenetic 1980s, which were louder, brighter, but not as happy.