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 Perhaps. But even games have bugs and updates, etc. My reticence is mostly from a security viewpoint: even tightly-scoped libraries, etc., might have to be updated due to newly-discovered threats (either within their own code bases or the greater environment in which they operate).

And, of course, the alternative to evolution is replacement or abandonment where library A is retired and replaced with library B. Or the game gets a separate sequel, or the author halts further fixes and makes the next game…

@aral Bugs and exploits give a sjngle-player game charm, and a sequel is a different game, not a replacement. Riven wasn't a replacement for Myst!

You could argue that games can be ported to new platforms, but I'm wary of any thinking that lets old platforms get away with shifting out from under the feet of an already ported game. Someday the author will die, and not every game is FOSS! A platform that relies on a living author is a lousy platform!

Anyway this is a big niche but important! IMO