Is Software Engineering Dead?

Cover Image for Is Software Engineering Dead?
Scott Werner
Scott Werner

The question I get asked the most about Sublayer is “so do you think we won’t need programmers anymore?”

There’s a lot baked into this question depending on who is asking. For the purposes of this post, I’ll focus on the software engineer, wondering what role they have to play when LLMs can write code faster and cheaper than any human possibly could.

For askers who are asking because they want to build products without all those expensive programmers, I don’t have great news for you. The “good news” is that yes, the engineering cost of building your product is going to fall close to $0. The bad news is that it falls close to $0 for the rest of the world as well. A few screenshots and prompts copied from X or Reddit or LinkedIn are all it will take for thousands of competitors to spring up in a day. If you thought there were a lot of Groupon clones, just wait.

But back to programmers. If LLMs are able to write code lightning fast, what place do we have in this new world?

The answer lies in developing and honing your sense of taste.

First, Some Background

It can be instructive to look at other creative fields where something very similar has happened: Music and Photography.

Synthesizers have been available since the 70s. GarageBand is available for free on your Mac. You can buy Fruity Loops for $150. If you want to take it further you can download incredible software-defined instruments from Native Instruments. 

None of these have stopped people from creating music. If anything it has opened music creation up to more people – you no longer have to spend years practicing the same scales and drills over and over to be able to create the music that is in your head. The only thing to really develop is a sense of taste for what sounds good.

Will Suno be the end of humans creating music? No, the same way that Native Instruments wasn’t. But I am pretty excited to hear the new genres that talented musicians create now that the tool is available, the same way Fruity Loops did with dubstep.

Have digital cameras or Photoshop killed photography? Not even close. What they have ended is the mechanical skill barrier to entry. You don’t have to fuss around with lenses or mixing the chemicals in a darkroom to develop your film anymore if you don’t want to.

You can focus on the medium and tell a story, focus on capturing unique perspectives and interesting compositions and subjects. None of the other things have to get in the way anymore.

What all of these technologies have done is shrink what Ira Glass calls “The Gap”. The gap between your taste and your ability to make things that you think are any good. For some, who have put the time and effort into learning the mechanics of a particular discipline there may be a sense of the newcomers having it too easy and not paying their dues learning the intricacies of the tools before being able to make great art. But the flipside is that more people than ever before are going to be able to participate in that art form and take it in brand new directions with new perspectives that have never been seen before.

To me that’s very exciting.

But What is “taste” in Software Engineering?

When I was entering undergrad for computer science I distinctly remember the conversation at the time: Java had won, it was going to take over the industry, and all the US software engineer jobs were going to be outsourced. If there were going to be jobs for us when we graduated, the best we could hope for was working for a place like Initech with Bill Lumbergh and our other managers coming around asking us to file TPS reports.

That happened for some, but by and large the future didn’t end up looking like that. Why not?

Software engineering can be broken down into two core activities: building abstractions and using abstractions. Few professions have the capabilities (much less the mandate) to build tools to make them more efficient at their jobs. Even fewer have done it as quickly and as widespread and recursively as the programming world. [Aside: I have a Moore’s Law like analogy in my head that I can’t exactly get to a place I like. Software is not only eating the world, but it also constantly eats and re-eats itself]

Programmers are constantly becoming more and more capable of building bigger and more complex programs with the same or even less effort than before. Building new abstractions for you and others to use is what makes this all possible—and each one makes it possible to go even further. This is what the people in the early 2000’s got wrong about Java – the idea that “now that we’ve found The One True Abstraction, that’s the end of things”. We all know how that played out.

Building simple, powerful abstractions has always been a core aspect of software engineering, but like Richard Gabriel notes in Patterns of Software, this aspect has mostly been the domain of expert “programmer poets” inventing new words for concepts for the rest of us to use. The very best abstractions enable us to operate on larger and larger chunks of functionality without needing to concern ourselves with the implementation details. It is really nice to be able to operate on a string as a string and not have to think about it as a character array.

Where do LLMs Fit?

Which brings us to LLMs and how they fit into all of this. LLMs are great users of abstractions. They will mostly accept the state of the world you create for them, and then operate inside of it. You can invent anything you’d like and they’ll try to work with it.

This is the same thing that drives the conversation every time “the end of programming” comes up. The abstractions from Java were straightforward to *teach*. And so large numbers of people were taught Java, its idiomatic abstractions, and how to apply them in a systematic way to business use cases. We saw a similar phenomenon around the end of the last decade  with the rise of coding bootcamps, teaching great numbers of people how to apply the abstractions from Ruby on Rails or React. 

Don’t get me wrong – this is a good thing! It’s just not an end state. For a long time now, the economy has desperately demanded more users of abstractions than the available supply—and every so often a new abstraction is created that is so powerful that it unlocks even *more* demand than before. This has led to the massive growth in the industry, and what LLMs are positioned to solve: the economy will finally be able to match the supply of users of abstraction to the demand (it just won’t be with people).

What Now?

So, programmer asking whether “software engineering” is dead: if you’re currently comfortable as an abstraction user, yes that side of programming is going to be taken over by generative AI. LLMs are cheaper, faster, and have more energy to apply abstraction after abstraction than you do.

But there’s still hope! Your taste and ability to create good, usable abstractions will still be in demand and—crucially—take on an even greater importance. Luckily, the feedback loop has also been shortened to almost instant now as well. Previously, you had to just believe that certain principles for good code would be rewarded. Now, you will be able to know almost immediately whether your abstractions hold up, because your LLM will either give you working code or it won’t.

I’m sure there will be all new types of patterns and abstractions coming out as more people explore programming with LLMs, and like the new genres of music that technology has enabled, I couldn’t be more excited for them.

More Posts

Cover Image for Waste Inferences!

Waste Inferences!

Back in the 1970’s, Caltech professor Carver Mead suggested that, given the implications of Moore’s Law (which he coined!), we should embrace the growing abundance of transistors and “waste” them. Computing power was becoming cheaper at an exponential rate, and what that meant was that we should work to create more powerful, flexible, and innovative …

Scott Werner
Scott Werner
Cover Image for Introducing Blueprints: A New Approach to AI-Assisted Coding

Introducing Blueprints: A New Approach to AI-Assisted Coding

Today, we’re excited to officially announce the release of Blueprints! A new, open-source, (and soon, model-agnostic!) approach to AI-assisted coding that helps you leverage patterns in your existing codebase for code generation. Personalized to you and your team’s unique style. Introduction There is a lot of excitement these days around AI programming assistants like Github …

Scott Werner
Scott Werner