A grumpy screed about AI in software engineering(sam.sutch.net) |
A grumpy screed about AI in software engineering(sam.sutch.net) |
25 years in my case, by the way, and I have found this to be the most liberating and creativity-boosting period of my career. And it’s not even close. I’ve written code in more languages in the past few years than in any other period. I’m finishing more projects than ever before. I’m learning faster than ever before. I’m enjoying programming more than ever before.
And to be clear, I don’t use AI for anything other than as a pair programming partner, or to build single-use scripts. I agree that full-blindfold vibe coding is unpleasant, it’s like getting into a debate with a forgetful and emotionless monkey paw. Skip the vibe coding, just let AI be a helper.
“Wholly” was too strong a word now that I think about it.
But I’ll give two main things I find unpleasant.
One: Normally I like working with other people. There is nothing more satisfying than collaborating on a complex problem with smart and conscientious colleagues. However, the bad experiences are now amplified:
- a random colleague gets sent down a wild gooose chase of an LLM claiming there is an issue with something I wrote. It’s a full blown hallucination because it found a confluence page which mentioned me and just decided to connect things together.
- another colleague is suddenly empowered with being able to vibe code websites and is now copying and pasting my replies into an LLM and pasting the LLM back at me over Slack.
- a colleague gives a quick drive by vibe coded PR to add a feature into something I own. It reimplements the same business logic that is already done elsewhere. It takes me more energy to explain all this than just do it myself.
There are dozens more examples. In isolation I can shrug each of these off, but it’s draining. Large organisations have become more “agile” with local optimisations and missing the bigger picture.
Two: while I agree that everything is getting done faster and I do get satisfaction out of that, I’m a deep in the weeds technical person. I don’t have it in me to be a big picture person or a people leader. I love having to think about algorithms, data structures, schemas, etc. While I can use AI has a pair programmer, it’s doing a lot of the thinking for me and it’s usually faster. So yes it makes me a better engineer, no I don’t enjoy not thinking as much. I don’t enjoy shifting solely to a higher level of abstraction. Maybe that makes me a bad engineer, but I cannot change how I feel about it.
This I think will explain the differences in experience in industry. As pressures increase, control and power moves away from developers who have historically had a pretty strong position to dictate how they work.
Not everyone is going to be able to use AI as just a tool. The reality I have seen is that AI has sped the time-to-pr up for those who don't care what they ship, so that gets baked into estimates and expectations.
Eventually those working carefully with AI will be like the carpenter still using hand tools while the shop is operating CNC machines. The business can't afford the craftsmanship, no matter how right the craftsman is to point out that their work is better.
This is why I love AI as an enabler for myself personally, but still think it's going to ruin the experience of being in the industry.
Vs ordering delivery.
Cooking for you and your friends is satisfying as a craft and labor of love, as well as being experience. There is enjoyment to be gained from the process.
Compared to delivery, You may get the food quicker/easier. But for most people who cook it was never about that. There are certain people that enjoy generating as much food as possible. Some might call that gluttony or greed, over-indulgence, or in it for the wrong reasons. Perhaps these two groups of people have fundamentally different motivations. Try telling a chef that he should stop cooking and just order the food as delivery.
Now it's software people's turn to feel the pain of being a starving artist and watch as your attractive friends with no skills and a social media presence "make it" with their genius.
We haven't even begun to feel the weight of it yet.
Slop has always been cheap. Now it's even cheaper. But software that actually fucking works AND does what you want is still expensive as hell.
Skilled craftsmen said the same thing, and yet everyone seems to prefer $1 Temu slop that breaks in a year.
If neither gambit pay out then I'll just go find some other career and keep software as my hobby. I'm not going to let this billion dollar industry ruin the thing I enjoy.
They've changed our job titles from 'Engineer' to 'Developer'.
Power (in the form of talking to business owners, organizing work, setting engineering direction) has been centralized. We had 6 engineering managers now we have one 'Director'.
I don't think I've solved a real problem in 8 months.
Start one?
There's definitely a market for software that doesn't give off the corporate, mass-produced, one-size-fits-all energy. 37signals famously made quite a business out of it.
Give AI a few years and see how you feel after people have made the AI and the tools to use AI even better.
I've got senior engineers (20+ yoe) who have never been having more fun and then some who feel like OP here.
Why is it so decisive? There's no other tool (not even emacs) that's caused this sort of division.
But, the sentiment about drowning in slop, well. Yeah kind of. I am not sure the polite way to tell people they should be thinking for themselves rather than just repeating what an LLM told them.
I absolutely use LLMs to assist in reviewing my own code as well as others, but I am always using my own judgment and speaking in my own voice. I will never copy-paste an LLM comment as if I wrote it, and I don't think even with a proper disclaimer that I'll ever copy-paste an LLM comment that I don't understand enough to confirm and rephrase on my own - instead, I use the LLM insights as a starting point. If I don't understand them, I dig deeper. If I disagree with the comment, I disregard it. And finally, if I understand it fully and agree with it, then I bring it up in code review, in my own voice.
I'm a little more lax when it comes to LLM generated code. A lot of test suites are already kind of a bit pointless thanks to the flawed prioritization of code coverage as a metric (it isn't a bad one generally, but there are cases where it is tragically bad, like when the code you are testing is effectively a DSL and the assertions are restatements of the DSL's contents...) and even when it's not, LLMs are often useful for generating decent test suites. Still a good idea to read them, but I give LLM-generated tests less attention and manually exercising code more attention: it seems like a good tradeoff to get a productivity improvement from LLMs.
To me the biggest sin is using LLMs or generative AI and pretending it is your own human expression. Please use your own words. If that's too much effort, I'm afraid I don't really want you working where I work or posting where I post, just for the sake of everyone's sanity. All of your LLM-assisted blog posts read like absolute shit and I'm tired of all of the excuses for it.
We're at that awkward time where there is still an expectation to fill out JIRA tickets, but it is possible to ship multiple features at once in less time than the planning meeting takes.
As the models improve, the slop will reduce. As the humans improve, the processes and procedures will change to match the new paradigm, whatever it becomes.
If you zoom out and look at other industries, we've seen this before many many times: Fast food completely commoditized the food industry. There are still extremely skilled people making the "highest quality" food. For example those at michelin star restaurants, these businesses typically don't make money by selling food anymore, they stay around for other reasons (hotel needs a fancy restaurant with a famous chef). We've seen the same when it comes to many other products: toys, furniture, most electronics, etc.
Nobody can swim against the forces of capitalism here, just not enough people care about high quality hand crafted software (the only people that really do are people right here in this thread hand crafting software). Sure there will be some corners of the economy where people doing everything by hand will keep their head above the water.
Think of it this way: back when people were sending letters to each others and responses took weeks, people (non professional writers) put a lot of thought into writing these letters. I'm sure if you show these people the average (non AI) emails we've been sending each other the last few decades they will complain about all the slop too (including how we all converse to each other right here). But you can definitely argue that this exponentially increased communication and sharing of ideas has outweighed our decreased ability to write properly (in self defense: I'm not a native english speaker).
This obviously sucks for those who care about high quality hand crafted software, but this is going to open the floodgates in terms of the accessibility of software development. And it's yet to be seen whether this is going to take all our jobs away or not. What's very much true (like the article says) is that the future job of software dev is going to look different, and the change is coming fast.
This was written sarcastically, but I'm optimistic. The more crap that's out there, the more refereshing and noticeable it is when something is good.
SQLite is the most popular database in the world. It's maintained by 3 people. There's hope. AI is a great tool that's here to help you if you want, but at the end of the day, the output matters and it's quality not quantity. Don't work for people who don't agree.
Before it needed you to jailbreak a console. Today point frontier at a console, and it could also figure it out. The console folks also can do that before release and ensure it's unbreakable.
Now that software is solved, we are faced with the philsophical necessity of our vocation.
And it's unclear which direction this will tip things for jailbreaks, it's always been a two-player game. It will still be people like me doing the jailbreaks, they will just have harder problems to solve and better tools to help solve them.
Eventually "coding" will simply be prompting skill with the wisdom of architectural decisions.
That's also one way to describe what it's like to code with React et al these days, anyway. Component/hook selection skill with the wisdom of architectural decisions.
Software hasn't been about "real code" (asm) for a long time; yes, this was a common opinion when HLL's and compilers were starting.
You meant actual bytecode?
Assembly doesn’t exactly map to in 1:1. x86’s mov eax, ebx is the classic example that has two ways of being encoded. Not to mention sections, labels and all the other fancies.
> While I may use AI for work, my website, and all the content on it, is entirely written by hand.
I mean, if you're tired of the slop and what AI is doing to the industry, why do you need to use it for a simple personal website?
now couple that with the wide range of variety (and dysfunction) that come from the business and organization. being a dev for a company which sells software is a whole different beast than being an in-house dev for a company which sells other products. startup, big org, old org, new org, strike team, the list goes on.
finally, engineers enjoy different aspects of building software more than others. the puzzle, the crafting, the api, the data structure, the architecture, solving end user needs, so many facets to what makes it enjoyable as a career.
this is a big reason why ai discourse online is so uneven and often unhelpful. were all assuming too much about what being a software engineer is; forgetting that my day-to-day can be wildly different than yours.
a lot of ai speedup comes from effective delegation of work. i do it, but i don't like it. it actively makes me feel tired in a way i don't feel when i do the work myself, or when i mentor and grow my team to do the work.
many other devs don't feel the way i do. some suddenly have these ai tools that make them feel more empowered and energized and excited.
llm's are genuinely a new computing paradigm because of their nature: plain human language as the interface. this is different enough that mapping our past computing concepts (like the evolution from assembly to C) may not hold as well as seem they should.
this all digs deep into who we are as individuals with specific desires, career history, goals, a specific role at a specific company. the part that's fucking beautiful and unique and human.
But if the aggressive industry-wide layoffs aren't enough of a clue, these giant ass companies (and the ai gatekeepers driving this shift) are not compatible with individual humans.
i dont mind llms as a tool, but im done with the perverse level of greed and inhumanity they seem to inspire in corporate leaders.
Unlimited lives and the ability to walk through walls is great fun for a bit. But also, you never actually played the game and it kinda ruined it for you, for all time.
You’ve seen the outcome, you solved nothing, learned nothing, and there’s zero reason for you to ever be proud of it.
The outcome isn’t yours, it’s the chatbots. Maybe you lie to yourself a bit… but you were barely necessary.
> Why do some software engineers love AI and some hate it?
n=1 but i'd say 3 aspects for me:1. its forced on me at $job; its just a tool so let me use it when i need it and stop making my work-life miserable with childish tokenmaxing leaderboards
2. co-workers who send low-effort low-quality pr's that introduce tons of complexity and waste everyone's time and that they cant answer basic questions about because they no longer know how it works
3. the absolute cult-like manic behavior with some people around "ai"... yes its fun and interesting and cool tech so please stop treating it like a religion ffs
just my 3c
1. Too many people think that having lots of text makes something impressive, really it's just inconsiderate and nobody is reading it all.
2. Helping people often feels pointless because I can tell I'm just getting a cut/paste AI response back.
My own enthusiasm varies wildly day to day. I've been sick of squinting at punctuation marks and opening sequences of of tabs to trace through annoying abstraction layers for a long time; so I'm really excited to see those activities effectively automated away. But the same tools enable some really bad behavior (in myself and others), which really gets me down.
2. AI allows people to 10x things. If your organization has a healthy engineering culture then I assume people don't send for review shit like "change constant into hardcoded value" and AI-generated PRs are checked to fit the broader design, but if your organization was already full of idiots, then they produce 10x the output. Good luck trying to survive that.
That's not to say that there aren't problems in this world and that some gnashing of teeth isn't warranted - there really are issues, even with AI, but the malcontents have never been louder in my life. Outside of tech in the rest of society, many people haven't realized that the world has basically broken since 2016 and a lot of people are finally mourning the revolution in politics that we've lived through too. It really hasn't hit how tumultuous the last decade has been for most people yet.
I was "fortunate" in that I went through a life altering tragedy about that time so I got a little bit of perspective about how replaceable I was a bit before all these guys did. I realized how short life was, and how messed up things can get and how "the system" doesn't give a rats ass about you if you can't produce. I learned that viscerally, so perhaps to my detriment, I'm like the guy in the meme, "first time?" But these doomers and ai-haters and malcontents are mourning I think. In order to feel important and special again they rail against their replacement. I get it, I am still mourning the death of my old career. Some of these guys are realizing that they can be outdone by a machine for the first time in their lives. White collar worker types who thought "knowledge work" was safe and uniquely human are mourning at their own new found mediocrity. They say they can "do it better!" and maybe they can, but that doesn't matter - they're realizing that "doing it better" is not what is required. The people who don't want to use the new tools will be like people opposing the steam engine. They may not remember that John Henry died trying to beat the steam engine - I think that's the part they may have forgotten.
No, the loud irritation and frustration is a blend of a lot of things in my mind. But largely, what I see is a bunch of people who thought they were special and smart and unreplaceable are realizing that they're just as replaceable as the rest of people. They're mourning. Marxists call this alienation if I remember my Marx.
GitHub's exponential growth in number of commits and PRs answers your question.
Before AI, if you wanted to contribute to OSS, you had to have _some_ idea of what the code did. At least enough of an idea to compile it so that you could test your changes.
That was the bar. Sure, lots of low quality PRs existed, but that gate kept the influx somewhat manageable.
Also, the diffs were a lot smaller, as bigger diffs meant bigger effort, a risky gamble for a PR that might not get merged. You've lived that life, so you get it.
Post AI (post Opus, really), any hooligan with $200/mo to burn can "land" a Heisenberg sized PR into any project with green tests without having the slightest bloomin' clue what their diff does or how the codebase they're integrating into works. That's impossible for humans to keep up with.
For every SQLite cathedral, there are a hundred corporate projects whose employers are mandating 100% AI generation with manual PR/MR merges.
Even though the concept of doing what you love has only really existed for a few decades, a lot of people take it for granted. That's just how fast humans get used to things, and AI is no different. It takes a decade or two for a new generation to grow up with the new normal, and then it's just waiting a few generations for the old farts to die off.
"While I may use AI for work, my website and all the content on it is entirely written by hand."
I don't think the original syntax is incorrect exactly, but too many commas in a sentence can make it harder to parse, which is why style guides often warn about it and advise thinking of certain commas as "optional."
Our brains’ initial parse of that sentence, while sensible and probable, is incorrect. That is, the mind really wants to interpret “...for work, my website, and all...” as a list, but that leaves a dangling clause!
The sentence is grammatical but confusing.
For me, at least (with probably half the experience) the trivialities are important for making me understand the design, so I can improve it.
If there's a lot of boilerplate, then we should condense that to something else.
Unfortunately, with the way these models are currently trained, they default to solving the same problem in multiple ways depending on the position of Jupiter and the Moon (apparently).
I would also take your comment with a grain of salt. If the people you are talking about are javascript developers or people who do leetcode in interviews but never write that kind of code on the job, they are probably delusional. Ive seen many people call it a “craft” and what they produce is nothing of the sort.
If you really are good, you’ll still be in demand where it matters.
The truth may just be that you're wasting time and energy engaging with a non-productive coworker's poor outputs.
If a new tool makes you classify as "unworthy to worth with" a really high percentage of humans in a really high percentage of situations for not being up to your standard, so you can be a bit more productive, I think the tool itself might be at fault.
AI has made me more productive, yes. I can also see myself start loathing the job I used to love, and hating the people interactions that I used to like. I would trade my extra productivity anytime.
I don't think so. I don't think it's about being "unworthy to work with" (your quote not mine).
I think the uncomfortable truth is that AI is making it harder for all of us to prove that we're productive.
I strictly avoid allowing AI to change the level of abstraction I program in. Defining and orchestrating the architecture of an application is the most fun part anyway — quite apart from being the most important when others are touching your code, whether meat bags or LLMs.
> Eventually those working carefully with AI will be like the carpenter still using hand tools while the shop is operating CNC machines. The business can't afford the craftsmanship, no matter how right the craftsman is to point out that their work is better.
The analogy doesn't work. CNC machines can be faster and better than a guy with hand tools. AI isn't like that.
What you need is some other race-to-the-bottom situation, because that's what AI is.
At some point LLMs will be used like CNC machines. Prompt in, output shipped to the customer after minimum wage QC oops a sticker on it.
It's a very tiny project, but I dived straight into a new project in a new language completely by hand this month, precisely because I'm miserable and exhausted from my job requiring me to drive a bullshit machine instead of solving problems by thinking.
Getting a few minutes in the evening to actually program, and learn new things as I do it, has been crucial to maintaining any sanity at all in this brave new world of unending heaps of slop.
Learning any language involves internalising a massive pile of arbitrary syntax / core library knowledge. I find it flow-destroying and demotivating to be continually hampered by having to look up silly little things like how to get the length of a string, or how to work with dates. Being able to use AI to instantly turn a line of pseudo-code into a line of real code is not just great for productivity, it teaches me the language faster than any way I've experienced before.
My pre-AI coding style has always been to write terse pseudo-code first, just so I can map out core logic, what I'm iterating over, and what the meat of the routine will do. I formatted this pseudo-code as comments, and then treat them like headers, where I write the real code underneath. AI tab completion has made this way of coding insanely more productive, and gives me an incentive to write better pseudo.
(I also don't mind getting AI to write a whole page at a time, especially when it's a slab of uncreative boilerplate or glue code. AI routinely does a perfect job of smashing that out. But I will always pick through it line by line, renaming and rewriting in my personal style.)
I could be wrong, but AFAIK, switchboards^W patch panels were the OG programming method.
And we're seeing the early signs of same in Math as well.
Whatever's done to chess, the same is now done to software.
It is definitely not effortless - it's a battle. https://en.wikipedia.org/wiki/The_War_of_Art_(book)
Over the decades, it's become one I love, and I can see how the struggle has helped me become a better musician, writer, programmer, and person.
Being compelled to use genAI by my employers has largely removed that struggle from my day-to-day, and I hate it passionately.
The replacement of careful thought and fighting to create something compact, elegant, and robust with reading thousands of lines of mediocre generated code, slogging through page after page of uninspired just-good-enough dreck in order to catch the LLM's inevitable moments of absolute failure is mind-deadening and tedious.
I am figuring out what other careers I can swap to if this becomes the new normal.
This will shift and eventually programming will look like chess, but the goal of chess is so obvious it doesn't need to be talked about. The goal of programming isn't. The new tools are so much fun to use to amplify your power!
And chess isn't solved at all, it's just superhuman. Programming is even more complex.