Software is a medium of setbacks, but a medium's limitations don't define the artist
Much of the time, progress in software development comes coupled with a matching regression.
“We’ve made it better.”
(Whispered) “But we’ve also made it worse.”
The evolution of Apple’s computing devices makes for a decent example.
The original Mac? Huge leap in the usability and effectiveness of the desktop computer. Also didn’t come with a programming language and, initially, software for it had to be developed on an entirely different, much more expensive system (the Apple Lisa).
Over time that situation improved with Hypercard and various forms of scripting and automation, as well as a decent set of tools for making software with Pascal and later C++.
MacOS X arrived, and we got the power of the unix-compatible ecosystem finally coupled with a usable desktop environment.
We also lost many of the scripting capabilities that were unique to Mac “Classic”, but that was sorta-kinda offset by the wealth of new command-line tools and built-in support for popular scripting languages such as Python.
Sucked if you were all-in on AppleScript, but great for the rest of us.
Swift is a modern programming language designed for the development of complex but reliable systems. But when it was first launched it both was substantially less capable than Objective-C, and it sucked all the air out of the room for the entire Objective-C ecosystem. Apple had to spend years both maintaining an old language, one it was clearly trying to get rid of, and evolving a new language to the point where it could replace the old. The innovation came with a built-in setback that took years of effort to overcome.
Not that Swift is a true replacement for Objective-C. Its goals are clearly very different from Objective-C which leaned heavily into late binding and runtime dynamism. Swift leans the other way, focusing instead on correctness and performance. The differences between the two languages that most end-users or even developers notice are more down to the framework and environment and not the languages, per se, but there is a flavour difference – that vague sensation that both spoken and programming languages leave you with, an added dimension of meaning that hangs around it like a meal’s smell in a kitchen.
Progress is an ongoing act of myth-making. Most of the time the true story is a mixed one. Things are lost. Others gained. A happy ending is when you come out ahead. A story full of setbacks is a tragedy.
It feels like we’re experiencing more setbacks than progress in software and tech at the moment.
Lay-offs are having a noticeable effect on the software the tech industry is shipping. I know I’m finding buggy updates to be more common than they were a couple of years ago. (Setback.) The decline in search engines over only a few months is as undeniable as a sack hammers swung at your face. (Setback.)
And that brings up the other setback. In studies LLM-aided coding is not having a great effect on the quality or safety of the code. (Setback.) Sure, they’re more “productive” in that they’re writing more lines of code, but the industry discovered decades ago that measuring coding productivity this way is a very bad idea as it inherently promotes poor coding. (Setback.)
Defenders say that in actual practice nobody actually commits LLM-generated code directly so this is all just scare-mongering, except – because we, as an industry, is so utterly foolish as to commit completely to a Microsoft-owned development environment through and through (Setback) – Microsoft can track the code generated by Copilot, through Visual Studio Code, all the way to being committed in a GitHub repository, and it turns out that at least 40% of the code generated is committed unmodified.
That was a year ago. That ratio is almost certainly higher today. (Setback.)
Now we have Apple’s shenanigans with Progressive Web Apps in the EU and, no matter whether you’re gullible enough to buy Apple’s line or whether you’re a rabid everything-Apple-sucks hater who is incapable of seeing the good that Apple occasionally does, losing such an important capability only a few months after they first managed to make it truly usable is, well, a setback. A dispiriting one at that.
Between the obvious cycle triggered by the lay-offs and the generally inhospitable environment that the software industry has evolved into, it’s hard to feel excited or motivated by software development.
And we do need to feel motivated, at least in part. The word “passion” is almost always a red flag for any given industry, but software development is a creative business. You may all go around cosplaying engineers, but your average coder is about as close to being an engineer as a fan cosplaying as Hugh Laurie playing House is to being a medical doctor.
Software is a creative industry with more in common with media production industries than housebuilding.
As such, a baseline intrinsically-motivated curiosity about the form is one of the most powerful assets you can have when doing your job. It helps you solve problems and come up with new ideas.
The current cycle of decline and disinvestment in people makes that hard – probably next to impossible – but we can try to find our own ways forward where we can.
The weekend before I wrote this, I was feeling lost – unsure about my place and future in the industry.
A walk helped. Doing something creative like photographing what I saw around town helped as well.
But what reminded me of how much fun you can have with software was having a go at porting this excellent implementation of the Atkinson Dithering algorithm to use the sharp
node.js library and then playing around with processing and laying my photos into what you see in this essay. The image at the beginning is of the one wall that remains of the old wool factory by the waterfall in Varmá.
Villikettir Suðurlands specialise in rescuing cats, both feral and abandoned housecats, here in the south of Iceland. The picture below is of the house where they keep some of the cats waiting for somebody to adopt them. They’re in from the cold.
Not everything is a setback.