The Death of Utilitarian Programming
A clever and witty bash script running on a unix server somewhere is also not utilitarian coding, no human ever directly benefited from it.
Libraries can be somewhat utilitarian, at least more than frameworks. At least they provide some reusable functionality to the user out of the box like logging, scanning a barcode, fetching data from a URL, etc. But again, a lot of indirection and little lasting time, what did *you* learn about implementation and life in that process my friend?
It's my strong belief that our life's purpose isn't just about learning technology but also other non-technical things in life (such as life itself). By compartmentalizing themselves into libraries, frameworks, specifications, package managers, build and tooling, etc, many coders over the last decade have sort of divorced themselves from the intricacies and interaction with life itself.
A decade ago from now (i.e. circa 2014-15) is where I'd say utilitarian coding came to an end. The kind of programming that prevailed until then (mostly desktop programming) was highly utilitarian in nature. You used to develop a Winforms App for the client, with actual textboxes, dropdowns and buttons, tailored to their specific requirements and domain knowledge, what could be more utilitarian than that! You used to gain domain expertise and not just technology expertise.
As things started moving to the cloud, the interaction between the end-user and programmer became less and less, that's when utilitarian coding started dying too. As a new breed of specialists called "Agile Experts", "Scrum Masters", "Tech Advocates", "Thought Leaders", etc. started inserting themselves between the coder and end user, the former's role started morphing as the ostrich policy of dealing only with technology and nothing else. We started losing touch with domain expertise, and became branded as "python coder", "PHP scripter", "web developer", "AI developer", etc. That's how folks started churning out more frameworks, libraries, packages, stencils, helper scripts, etc. instead of worrying about actual problem solving with the stakeholders.
This is how things stand right now for the most part, desktop development and other forms of utilitarian coding have still maintained their small niche somewhere, but they're just a niche. But it's not a healthy development, nor is it sustainable long term. I strongly feel that this bubble is waiting to burst one day soon, and there will be a reversion towards utilitarian coding again. Even the cloud itself needs to be more utilitarian, a lot of needless clutter out there which can be simplified.
What do you think? Let me know in comments.
21 comments
[ 5.0 ms ] story [ 66.7 ms ] threadSoftware has a deeply ingrained craftsman culture, which empathized personal flavor, unique approaches, stylistic debates over engineering. Surprisingly this gets worse in large organizations, where adherence to stylistic choices, specific tools and workflows, supersedes engineering at every point. Software is still full of fads, where every couple of year a new or old flavor is found, which is now the "right" thing to do, which will then be defended and attacked until a new fad is found.
Fortunately, AI-assisted coding seems to be wrestling back coding from developers and re-empowering domain experts and systems analysts. A full recession will probably shake out a lot more of the waste in software development.
No more easy money = no more engineering for engineering’s sake, and companies are increasingly becoming more privy to the fact that architecture astronauts are a liability, and cloud is a 95% distractions meant to absorb time energy and money from IT orgs within large companies.
I’ve personally switched out of devops and to a domain aligned software team within my company. I am absolutely fed up with how wasteful and distracting the state of devops is to the actual business.
Small, sharp tools, my friend.
What is Winforms itself if non "non-utilitarian"? Most of an OS is non-utilitarian. Compilers, libc, databases, web servers, browser APIs, ffmpeg, OpenGL, Unity, etc., etc., etc...
2014 is a wild year to pin the end of "utilitarian" programming on, since all of the things you appear to complain about already existed by then. If anything the beginning of making programs for other programs and programmers was 1951/52 with the invention of the compiler. It's been downhill from there.
Somewhere a bash script on a server might be calculating the interest my bank owes me, I'm directly benefiting from that too.
> A clever and witty bash script running on a unix server somewhere is also not utilitarian coding, no human ever directly benefited from it.
Back around 2010, my friend Mat was doing cloud consulting. He wrote some code to screen-scrape the AWS billing and usage page for an account to determine how much had been spent day-over-day. This was, of course, all orchestrated via a bash script that iterated through clients and emailed the results to them (triggered by cron, of course).
He realized he had startup on his hands when something broke and clients started emailing him asking where their email was. Cloudability was born out of that.
I'd say that both the Ruby and bash code involved count as pretty utilitarian despite running on a server and not having a direct user interface.
Computer ethics will not improve en-masse in the United States in years to come. We will get more privatization of the public good. We will get more protections for the monopolists. Social media manipulation and mass surveillance are just the beginning.
"How I Learned To Stop Worrying And Love The Palantir."
A few decade later, all the obvious, real-world, low hanging fruit applications of technology were filled, and "tech" turned into the weird, more self-contained world of "the internet", social media, advertising, the attention economy, bitcoin, high frequency trading, AI, where it's really just your computer/algorithm fighting someone else's computer/algorithm, and rather detached from the offline world.
Before agile we had waterfall. Developers didn't interact with users, they got handed requirements by people who didn't know what was even possible.
It's true that software has become more abstract over time, as the need to standardise how things work overrides a bespoke approach most of the time.
"Let me know in comments"
I seem to be seeing a lot more submissions to Ask HN that are basically blog posts. I'm not trying to police anyone, and if the mods are happy with this then ok. But I'm curious about whether there's actually a trend here, and whether hn users lack alternative places to post their thoughts. Something to so with twitter going down the drain?
Also, I think it misses a bit where programming came from. The idea of general computation was an abstract mathematical plaything long before it had concrete use cases.
A lot of "academic" code that is pilloried by "real" software engineers is actually a great example of this. Is it the most performant? No. Could a random person off the street make use of this? No. But for those in the field, they know exactly what this tool is conceptually doing even if they don't know how it is made exactly. It is like a very specialized tool for a very specialized tradesman.
What is interesting about the shift away from utilitarian programming is that these "thought leaders" and other middlemen now find themselves in positions to set the narrative essentially thanks to monopolizing the space, change the very meaning of work to suit the software they happen to peddle rather than the other way around. We saw this with enterprise software and now we see this with AI tooling shoehorned into that enterprise software.
The world doesn’t need another generic JavaScript framework, but a lot of people have little annoyances everyday that can be made better with code. This is my favorite code to write. Nothing is that impressive, technically speaking, but it changes how people work and makes their job suck a little less. I find this type of work much more fulfilling than working on some silly integration between 2 systems that will be gone in 3 years.
This take just pushes the notion of utilitarian to an extreme. In this framing, primary industry isn't utilitarian and only some subset of secondary industry is (chiefly B2C industry of products that aren't used as tools or parts of a final product by the consumer: a framemaker isn't utilitarian). The only utilitarian software in this definition is games or other entertainment software since otherwise the "utility" is an means to an end as a tool but that is exactly what a library is.
Making transistors is utilitarian. Making a library is utilitarian.
I am otherwise sympathetic to the pain points but I don't think there is an easy label for the layers of non-essential complexity that have built up and cannot easily be stripped away.