If you don’t have the resources to write and understand the code yourself, you don’t have the resources to maintain it either.

Any monkey with a keyboard can write code. Writing code has never been hard. People were churning out crappy code en masse way before generative AI and LLMs. I know because I’ve seen it, I’ve had to work with it, and I no doubt wrote (and continue to write) my share of it.

What’s never been easy, and what remains difficult, is figuring out the right problem to solve, solving it elegantly, and doing so in a way that’s maintainable and sustainable given your means.

Code is not an artefact, code is a machine. Code is either a living thing or it is dead and decaying. You don’t just write code and you’re done. It’s a perpetual first draft that you constantly iterate on, and, depending on what it does and how much of that has to do with meeting the evolving needs of the people it serves, it may never be done. With occasional exceptions (perhaps? maybe?) for well-defined and narrowly-scoped tools, done code is dead code.

So much of what we call “writing” code is actually changing, iterating on, investigating issues with, fixing, and improving code. And to do that you must not only understand the problem you’re solving but also how you’re solving it (or how you thought you were solving it) through the code you’ve already written and the code you still have to write.

So it should come as no surprise that one of the hardest things in development is understanding someone else’s code, let alone fixing it when something doesn’t work as it should. Because it’s not about knowing this programming language or that (learning a programming language is the easiest part of coding), or this framework or that, or even knowing this design pattern or that (although all of these are important prerequisites for comprehension) but understanding what was going on in someone else’s head when they wrote the code the way they wrote it to solve a particular problem.

It frankly boggles my mind that some people are advocating for automating the easy part (writing code) by exponentially scaling the difficult part (understanding how exactly someone else – in this case, a junior dev who knows all the hows of things but none of the whys – decided to solve the problem). It is, to borrow a technical term, ass-backwards.

They might as well call vibe coding duct-tape-driven development or technical debt as a service.

🤷‍♂️

#AI #LLMs #vibeCoding #softwareDevelopment #design #craft

@aral I think this applies to tools, but I also think one of those "narrowly-scoped" fields is games, as far as "done code" goes... Sometimes software is done: it's all it needs to be, and that's OK. Games don't need to evolve forever. They're often an artistic vision that just needs to continue to be supported by the OS.

Saying code needs to evolve forever is throwing the baby out with the bathwater and leads to Apple not being able to run PPC games and having even Steam be basically broken.

@indigoparadox @aral I have (as in own, play) several 10+ year old games on Steam that still get updates, so it doesn't even apply to (all) games.

@mrotteveel @aral 10 years is not that old... unless you're on a Mac, I guess. SimFarm and SimAnt are two masterpieces that are several times that. Of course, in Steam's case, this rot is really more evident on the Mac where they dropped 32-bit support and emulation so a lot of recent stuff is just not usable, and I think that's a major danger if update-brain is pervasive.

In an ideal world, folks would restrain themselves from adding features and just fix bugs until their code is perfect.