How to keep enjoying programming in a world of LLMs(discourse.haskell.org) |
How to keep enjoying programming in a world of LLMs(discourse.haskell.org) |
Same people that make clothes for fun usually do not work at sweatshops.
Some bakers started baking as a hobby, got really good at it, and then better tools and profit margins came about. Now they were forced to make low quality bread at work for 8 hours straight every day and seeing 90% of their colleagues that they considered pretty good bakers actually be fine with it.
How exciting do you think those bakers are to bake more bread at home after they go though slopping bread at work? How enthusiastic are they still about their hobby after a few years or a decade?
1. Because they're genuinely better quality. Usually.
2. There's a human connection (way more important than people think. I.e commodity fetishism)
3. Less people can do it.
-- all of these properties will apply to software in the near future. The person that can hand code the thing an llm does poorly, or because an llm cant be trusted will be extremely valuable, especially as this category of people begins to shrink, as peoppe atrophy their skills with llms.
The rest of y'all are excited about handing over the value of your labor to some billionaires thinking machine because that same billionaire has convinced you that you're going to be able to create your own startup or something stupid.
Nah, you're going to become a (underpaid/poor) conveyor belt operator making mass manufactured slop. Some smart ones will become the swiss watchmakers of software. Rare and in demand.
I also remembered the sheer joy of forking enterprise codebases like that of cal.com and highlight.io - just to study and try to understand how large teams worked. I followed issues, I read through PRs and related comments, looked at how some of the comments were resolved. I studied the various moving parts of the app - highlight especially being effectively a log ingestion and aggregation platform, had some rather large infrastructure requirements - kafka, redis, postgresql, clickhouse. It was hard to run with infrastructure directly on your computer. You had to use their docker containers.
I also remembered reading through a tutorial for an sqlite clone in C. It was interesting. I particularly enjoyed typing out the C code and even trying alternate implementation of b-tree operations.
I remember back in 2022 - after I was unemployed for a while - I discovered open source bounties on algora.io (LLMs have since made this platform go bust). I was able to earn roughly $300 per month for a while working on open source issues ranging from $50 to $350. Now most $50 bounties can be one-shot with frontier models. So of course, no one posts open source bounties anymore. If you do, you may just end up with 50 slopped PRs.
Just random thoughts.
Who likes typing code, writing boilerplate, reading bad documentation for nights looking for that small thing, asking around in forums, reading dependency source code, writing trivial unit/ui tests.
And who likes planning, architecting, directing a team, steering and giving advice, reviewing code, designing interfaces and APIs. Coding became more mentally exciting.
LLMs truly took the worst of this trade, and left all the enjoyable things (which they will be unable to do until AGI = for a long time if ever).
Me? I enjoy that stuff for what it is. Reviewing code is definitely not the truly enjoyable thing. Writing code, expressing my logic in code. That is enjoyable to me.
/yes I know a coding language is 100% better at expressing algorithmical logic, but it is definitely harder for humans to comprehend and express cleanly at a consistent rate. machines do that way better/
These posts are about saying "fuck you" to software developers. They're having fun making people scared but really they're just trying to reduce your market value.
I love these parts. But in my experience, LLMs break much of that.
Planning/architecting? Great. So far, I haven't found any agent that actually follows the plans set out, though. They get something wrong, and it snowballs from here.
Directing a team, steering and giving advice? Absolutely. Some of my greatest achievements involve mentoring. But human teams learn from their mistakes, grow up and contribute insights. Agents don't.
Reviewing code? Well, maybe not so much fun, but it's usually a good way to understand what's going on, and to share experience. Except with agents, you need to spend most of your brainpower seeing through the misleading comments and documentation and choices and sycophancy, and the agent never learns from its mistakes.
Designing interfaces and APIs? Absolutely. Yet every time I look at code modified by my agent, I see that the contracts (internal or public) have been broken by the latest edits.
In my experience, LLMs can be very useful, for refactorings and as learning and review assistants, and sometimes as replacement for missing documentation. But codegen is the worst way to use them.
I feel like coding will be dead soon, and what will be left are project management / team lead / product owner kind of jobs where you craft specs and steer AI agents on very high level. I would hardly call that "coding" anymore.
What I dislike of the status quo is being stuck between traditional programmer, and such project management role. With AI coding I can't really get into a flow state anymore, and without flow state it's hard to focus on the details.
People other than you, I guess. I think your first chunk is a bit of an unfavorable perspective, but still I would take that over the second every time.
It really does seem like the target audience of LLM users are people who never learned to use Vim.
> And who likes planning, architecting, directing a team, steering and giving advice, reviewing code, designing interfaces and APIs.
Why would anyone pay you to work for them if you aren't willing to do these things? This is the entire job.
[0] Okay, I am going to comment on it some more: For me, it also depends on whether I’m “forced” to do the code writing (or reading) because I just want the resulting output or need to modify the program to my wishes; or whether I want to do it because it fulfills me, is interesting, teaches me something new, etc. Both can be true for one person at different times/in different contexts.
But it's clear that many people feel otherwise. Software engineering has many classes of tasks and the difference in opinions about AI seem to exist because different people like different aspects of it.
I come out of it intellectually stimulated, with a sense of achievement and improvement and increased understanding; with also a bit of human connection, and creativity. And of course I also get a working program, so I feel productive too.
If you don't understand this you never enjoyed programming per se. It's fine, people like different things. But I think you might be mistaken calling whatever your job is "coding" or "the trade" because I get the impression it just isn't.
I, for one, liked it. I decided to pursue a career as a software engineer because, for all the downsides, I actually enjoyed working with code so closely. It really allowed me to learn and know the code that I wrote.
Whenever I'm using LLMs for code generation, the one huge downside I notice, is that even if I review everything line by line, I don't get the same "I know precisely how it works, because I wrote it" feeling.
I really wonder what the implications of this will be. For instance, if the young devs who are just entering the field will actually be able to write code on their own? Or maybe it will truly not be needed a few years from now?
It doesn't exist yet, but you could easily create it.
Here's my advice, based on what I have done: implement a programming language yourself, from scratch, without using an LLM, and then program in that. Don't release your implementation, or any code you've written in it.
Most (almost all) of my programming at home has been done in a Lisp dialect I designed and wrote myself, which is superficially similar to Common Lisp, but with subtle differences, including some deficiencies that I have to work around. And in my Lisp dialect, I implemented a visual dataflow language. Code samples are on my web site, but they're PNG images, so are safe from LLMs (I think). The language was designed to run on MIMD hardware, which doesn't exist in the real world. I've also implemented a Prolog which doesn't use Edinburgh syntax, which I use for type checking, and for parsing a controlled English implementation. So the temptation, and also the option, of using an LLM was never there.
In the course of doing all this, I've learned a lot along the way, which I wouldn't have if I'd used an LLM.
Also, LLMs are first and foremost excellent at reading ultra fast. Makes it excellent for summarizing and re-representing modules of your code
Frenetic multitasking is for suckers.
For me, writing the code (literally typing), shifting files around, renaming things is slow. So I’ve been using small models + much stronger grasp on the reins. Similar to what this post mentions. It’s been great, the decisions come from me. I tell it to make a domain class with these fields and these invariants. It does it in a split second, I look it over, tweak it and move to the next part of implementation.
When I experimented with swarms it would spend an hour just having agents adversarially review to decide some pretty trivial details. This way, when someone asks me a question during review, I can answer it. When I need to dive back in, I know what to look for and where to look for it. I have way more connection to my work, than a few months prior.
And that's not a criticism, that's what I've come back to myself.
It uses a Chinese sage to illustrate the fight against using machines:
"I have heard my teacher say that whoever uses machines does all his work like a machine. He who does his work like a machine grows a heart like a machine, and he who carries the heart of a machine in his breast loses his simplicity. He who has lost his simplicity becomes unsure in the strivings of his soul. Uncertainty in the strivings of the soul is something which does not agree with honest sense. It is not that I do not know of such things; I am ashamed to use them."
It resonates with me similarly as the post.
A lot of these AI guys seem pretty simple to me...
What has made me enjoy it less, is having to deal with colleagues' use of it. Sorry to say, but I don't enjoy talking to meat proxies, or getting huge PRs that solve the wrong problem. It's like half the people have turned off their brain. We produce faster, but we don't produce the right stuff.
Same here...
We commit bad decision, then in the next PR, workaround the bad decision (instead of undoing it), then in the next PR we have to workaround (aka deal with) the initial bad decision + work around...so on and so forth...
And at any point, manually reviewing the changes becomes impossible because you have to reason about the changes keeping all the workarounds and special cases in your mind...
In fairness though I never really enjoyed programming for the sake of it, I was always about what you’re getting at the end.
The correct response to "I feel I have been promoted (without a corresponding title or pay change)" is to be pissed off, not excited
LLMs are for people who want to turn off their brain. If you want your team to improve, you should lead by example and stop using LLMs. You need to create an environment where it is unacceptable to turn off your brain. Your underlings will never use LLM tools the way you want them to. LLM tools are designed to be used the way your underlings use them.
Now humans operate at a higher level of abstraction. Our focus area is now ensuring the high-level architecture will accommodate future needs well, ensuring the final product meets requirements, and most importantly, ensuring the final product has been validated. It’s important to use every strategy in the book to test the output via unit tests, smoke tests, integration tests, and end to end tests. On our team, we’ve been investing a lot in setting up full test environments that include the entire stack at a level simply unachievable before AI. Now we can merge code changes at an unprecedented velocity without losing confidence in the system.
It's very clear they dont. Maybe they will one day. That day isnt today.
1. Compare the code against production data with MCP. We use a read only platform called Metabase which reads one of the MySQL replicas. I tell the agent to fetch production data and make a static pass (it doesn't run the code) in which it compares shapes and inputs, and oh boy it has caught a few misnomers.
2. To debug production data and create graphs. It connects to datadog (where we store the logs), checks the history of the commits, and many times suggest fixes. These are for low-medium impact like validations that didn't need to go through, or a step check that it was missing
3. Creating tickets on the board (we use linear). Now PRs are more detailed and can be understood.
And for coding? I've been spending the last 4 weeks scrutinizing EVERY output and decision from frontier models, and pushed back in many decisions.
You still needed to know how to operate those machines. Where to begin, when to do what. Know what’s right and what’s wrong. They are just tools.
Something like claude desktop can help regular people build, a fully functioning, scalable and maintainable program on any platform contrary to popular opinion. These harnesses are getting that good.
Only reason people don’t do that is because they are intimidated. Regular people don’t even understand file systems. As soon as an Apple-like version of claude code exists that intimidation will be gone.
I have been writing code for 14 years now and everything I learned from my failures and successes someone else can get for free. Even newer paradigms these LLM’s can dream up.
Its the democratisation, of that foundation people put so much effort building is what pissed off everyone here. Including myself I’ll admit.
Results of all these years of hard earned knowledge are accessible to any random person off the street without any effort.
I use claude code at work, even for architectural decisions it can iterate small prototypes to validate. I still read code because I am old school but it can replace most people.
Isn't this like saying "any one can paint now because every one have a camera?"..
But to be honest, an llm can also be the world’s most patient teacher who can conjure multiple examples if they ask it what was just written. I have seen people out of my field use terms only someone actively working in it would know.
Most people live without knowing how their cars, fuels, medicine, phones work anyways.
For tasks you enjoy, write them yourself.
An LLM can go and pull files off NFS, and write and run verification scripts in less time than I can even think of a testing strategy or locate the files.
Sometimes they'll do it unprompted
For writing unit tests, which are often repetative and verbose, they are another godsend.
Overall they're freeing up a lot more time for nice things like thoughtful API design, refactoring, system architecture and design work etc.
For exploring massive codebases they are another godsend
The previous time I had this kind of break from hands-on imperative programming was in… 1987.
I was seven years old when I started doing BASIC, and though interests came and went (at one point I went to film school), I never stopped coding entirely. Until now.
The amount of code I’m producing today is higher than before. I’m now also middle-managing a team and doing what’s effectively customer-facing product management, a combination that has become bearable thanks to AI. But it’s hard to shake the feeling that something is permanently gone from my life.
Writing code is like trying to build a house without powertools. Could you do it? Sure. But no one ever will, for most values of no one.
Afraid of loosing your job to someone with little programming skills, no aspirations to quality, and a huge Claude account?I use AI like StackOverflow on steroids. And like using stackoverflow, I do it in a browser and I don't let the LLM touch my code.
I, personally, love programming more than ever!
I write software because I am interested in the final outcomes, not because I enjoy the journey, which is often infuriating because of the mistakes you make, or the crap you depend on to get your work done.
Whether people will still have jobs in three years, or thirty, only time will tell, but I feel people are kidding themselves if they think LLMs won't have an impact. We were fine with using machines to automate physical labor as we now balk at the same thing happening to the intellectual side of things.
I, personally, have done a complete volte-face as far as my views on the subject are concerned over the past year or so as I use LLMs more and more for coding and other tasks.
---
[1] There is this idea I have had of an Excel replacement: simple, purely functional, TSV-based spreadsheet with zero backward compatibility with styles as purely optional sidecar material that I have always wanted to do but lacked the time. Brainstormed a spec with Claude today. Might work on it in the near future.
I used to enjoy the journey more. I feel like the explosion of insane complexity and layers and the mess of dependencies and all the rest ruined the fun of the journey long before AI came along.
Take user interfaces. Making one wasn’t so bad in the 90s or 2000s. Now it’s a hellscape of either bloated Electron or the shifting sands of native APIs that are all complex and special.
All of it imposes cognitive load that has nothing to do with the problem I want to solve and it foists ugliness on you. Before you can touch your problem you have to create all this boilerplate.
I can just have the bot do that crap now.
If I want to code for fun I can code only the parts that are fun.
Thank you.
Power tools cannot "produce any house in hours"
I guess just blow my brains out? Just.. Thanks for trying man, but you picked the wrong thing to specialize in, now you're completely redundant and worthless to society. Here's your cyanide pill?
God damn I'm so bitter about all of this. I was doing so well for a bit now I feel like I've completely wasted my life.
We'll already see the hype to start cooling down. If you're okay with cleaning up messes you need not be so pessimistic.
But an LLM will generate you two completely different things today and tomorrow. Heck, even if you stash its changes and redo the same prompt.
They are NOT comparable at all.
In that sense it's a lot closer to translating Italian to English than what LLMs are doing.
I trust LLMs a lot more if I have a complete Go program I want them to rewrite in Rust.
Part of the skill and joy of programming is to constantly work on improving my ability 'to comprehend and express cleanly' my intent in code.
I'd argue LLMs are anything but consistent.
Not really? In my experience, to get anything precise done, you have to fight the LLM every step of the way. And then when you come back after a few days, you realize that it has overwritten the carefully crafted code or data structures.
Skill issue.
Sounds more like a fantasy than reality...
But filling in the blanks can still involve a lot of grindy, time consuming work where you iterate through collections, build parameters for other APIs, check invariants etc. All of that stuff is boring to me.
What I'm trying to say is that most coding tasks require "senior level thinking" and "intern level thinking". The latter can sometimes be the majority of the work and I don't want to do that anymore.
This is exactly the value of a person in all capitalistic systems. If we want to change this we need widespread socialism / UBI. Maybe Georgism.
The fact that you're a good friend or partner to someone definitely has value, but not something anyone cares about.
https://github.com/enterprisequalitycoding/fizzbuzzenterpris...
Assuming the code is produced to serve human needs there will be humans in the loop somewhere. Not nearly as many as before and not in the same roles but they will be there
The advent of the Spinning Jenny, water frame and power loom (etc.) changed textile manufacturing for good and made the end result so cheap that it is now seen as disposable. There are still some people in the loop controlling the machines but not nearly as many as before and also not really the same people since it takes a different skill set to keep a textile production line running than it takes to spin and weave.
The same is true for the advent of the phototypesetting machine (Linotype etc.) and the offset press which irreversibly changed print production. There are still people in the loop but not nearly as many and with a different skill set.
Now what about the "Coding Johnny"?
Generative models are now doing the same to coders, irreversibly changing the software production process. There will be far fewer people involved and those people will have a different skill set. Software will become disposable, more like RNA then DNA, if the specifications change the Coding Johnny will churn out a new version.
The difference is scale. Letting LLMs go out of hand is like the movie Fantasia. Sure people can make a mess on their own but with LLMs can do so much worse in such a short amount of time.
> Generative models are now doing the same to coders
Programming involves quite a bit more than just typing. However, typing the code does help with understanding. Once we stop understanding code because it's just generated AI slop good luck fixing the mess.
Now that even Anthropic and OpenAI called for slowing down. It's obvious that we're past peak hype and realization of the cost of LLMs will set in.