Now is a great time to become a programmer

2023-04-09

The secret is that programming is a design discipline.

It feels like every day I see allusions to some job being made obsolete by technology. Recently, programmers, by GPT. And designers, by GPT. And CEOs, by GPT. I don’t think it will play out like that.

I can’t speak to the experiences of CEOs, except in the sense that I own and operate a one-employee company, where the employee is me (so I guess I am a CEO? Huh. Neat), but I do not fear for my livelihood in software. At least, not on account of technical advances.

My career to date has mostly been in what we might call research engineering, with a heavy emphasis on applied machine learning, now thoroughly rebranded to AI. (Whatever.) I don’t think my take arises from any special insight into LLMs. Should I be worried about GPT and Copilot coming for my job? How about GPT-Omega coming for my job in a decade? I don’t think so. As a programmer, writing code is part of the job, but literally writing it is not the important part.

Programming, as I see it, is not about writing code. Programming is theory building (see Programming as Theory Building (PDF), Naur, 1985). It’s about modelling some — I am gesturing emphatically — Thing in a way that can be represented and manipulated by a computer, to facilitate some computation that we want to do on or about the Thing. Writing code is incidental. Tests, defining module boundaries, when to cache, the argument order for Python's isinstance (which is like a USB stick in that it always takes me three tries to get correctly oriented)… these things are to creating software what sharpening a plane or using a jig are to making furniture. Part of the craft, but incidental to the artefact produced and the function it serves.

I don’t want to be too woolly here. I’m not saying “programming is just problem solving.” That might be true, but it’s so generic as to be useless. You can claim any professional activity is problem solving if you define the problems right. Nor am I going to take the line that, “it’s all people problems,” which, well, it is, but it’s also all people problems for a marketing director and our jobs look very different, so we clearly don’t hit the essence of a programming job with that description either.

The main thing I am doing when writing code is designing. The literal implementation is less important than the design. The design is a reification of that theory we were building a two paragraphs ago. To be clear, I really care about the code I write. But I mostly care about it being well designed.

Programming is absolutely a design discipline. (Almost the same words appear in Jack Rusher’s 2022 Strangeloop talk Stop Writing Dead Programs, which is where I stole them from. The talk is great, you should watch it, but if for some reason you just want to see the words “PROGRAMMING IS A DESIGN DISCIPLINE” on a slide, it’s around 27 minutes in).

Large language models — the current favourite for eliminating everyone’s job — are a tool, to be wielded by a designer, as appropriate, and with full knowledge of their strengths and limitations. Not a bogeyman to put you out of work.

I don’t dismiss the idea that software eliminates some jobs. Surely it does. There’s a lot to say about that which requires more space than I want to give it here. Treat people with humanity, always.

It seems likely to me that LLMs will change vastly more jobs than they remove. But it also doesn’t seem like a sensible goal to keep all jobs the same forever. We should want to replace some tasks with technology. For what it’s worth, I also think we should replace some current technology with the attention of a human. Notice: replace tasks, not people.

If your work is building completely cookie cutter landing pages, and someone is telling you that GPT will replace you, I have good news and bad news: you’ve already been replaced by any number of no-code site builders. There’s obviously a place for custom made landing pages (indeed, I wish there were more of them: please, create weird, fun stuff and put it on the internet), but there’s also plenty pages that need to look and work pretty much like a lot of other pages, and no-to-low-code can eat swathes of that.

Smart people have realised this, and there are now no-code developers who specialize in using these tools. That’s totally cool! This is why we build software abstractions, so people can do things without thinking about implementation details. (If anyone out there is agitatedly typing “well actually…” because I just called someone who might not code at all a developer, I stand by it, let’s dance.)

If you are interested in software and computing, now is as good a time as there has ever been to pursue that, professionally or otherwise. Your job will change over the years. Maybe as a result of GPT, maybe as a result of some other technology, certainly as a result of your evolving inclinations and a dynamic world. This is par for the course. Build the core skills of software design: abstraction, modularisation, composition, et al.

(Alright, alright, I could have thought more carefully about what I consider those specific skills to be before writing this. I haven’t, there are whole books about it, and it seems unlikely I’ll make a substantial contribution in a footnote thought. Broadly, I think good software design is about ruthlessly reducing system complexity, so that a human can think about the system under question.)

These skills are not going to cease to be useful, even if there is a software-world-altering paradigm shift. That’s good news for you and me, since, if you’re reading this, it’s extremely likely you’re already creating software, and we all know that when I say it’s a good time to become a programmer, I’m just using that as a framing, and not really addressing the people who aren’t yet programmers (but if that's you, I do believe what I say!)

For me, all the fun parts of making software are design, and that kind of design isn’t going anywhere. I’m not a professional visual designer, but I think the same arguments apply there too (I am, excruciatingly slowly, taking a course to get better at it). Figma is not the core skill of a UI designer. It helps to be really, really good with your tools, yes. Being fluent in one or more programming languages matters, if you’re a programmer. But the main thing is design. Always has been, always will be.


Thanks for reading. If you'd like words like these in your inbox, sign up below. Or just check this site occasionally. Or run, now, and never speak of this place. You do you.