tl;dr: A breakdown of why I still think LLMs won't take every programming job and Computer Science degrees are still valuable.
I recently was asked by a family member about the future of developer work in the age of large language models, more commonly referred to as "AI" but I dislike that label for misleading people into thinking it can do much more than it can. Her daughter is good at it and is interested, but they've heard a lot of the hype that those jobs won't exist soon because an LLM can do it all. So, can it? Is the hype real? Are developer jobs in danger?
LLMs Are Language Models, Not Thought Models
Here's my general thinking on the matter: being a good developer takes a lot more than just writing semantically correct code. It means being able to think through questions like:
- What are we trying to accomplish? Often the proposed solution by somebody less informed about the technology and big picture is not really the best solution to the actual problem. Good developers will know to zoom out when they hear a request to make sure they know the real problem that they're trying to solve, not just writing code because somebody else said to.
- How does it fit in the context of everything else we're doing, technical systems or otherwise?
- What's the best user experience workflow?
- What are design principles we care about? What looks good?
- Who is excluded by doing it this way? Who is included by doing it more accessibly?
- Are there security risks to consider?
- Will anybody misuse this to harm others?
An LLM is not designed to answer any of those. They may be able to answer some of it by accident, because there were enough similar situations in the training data. But ultimately, a language model is for modeling language, not for any of those questions, so you can't put too much stock in it. An LLM may be a good tool for those who are able to deal with those bigger questions, since they can essentially give you a first draft of code for a problem if you're able to describe it well enough and then continue with refining it from there. Being able to generate that first draft of code is valuable. I've started using that more often. But generating that first draft from a well-defined requirement is not the majority of the job. It simply cannot do the majority of my job in any meaningful way.
Of course, Cory Doctorow has said something to this effect: an LLM can't do your job, but a big tech salesperson might convince your boss that it can. In that case you are still out of a job, at least in the short term until those bosses learn the hard way and then have to return to trying to hire humans again. That sucks, obviously. That's not really a problem inherent to LLMs, though; that's just the nature of short-sighted employers always trying to save a little extra money on payroll.
What About Junior Jobs?
The more common and more nuanced take is to acknowledge my point above, that LLMs may be good at drafting some code but it isn't good at any other part of the job. But then they will still be concerned that LLMs could effectively take over junior dev jobs. If those junior devs don't have a chance to put in their time then they won't have the opportunity to be ready for those other questions.
I'm somewhat conflicted on how true this is. If a junior job really is only about regurgitating semantically accurate code without ever thinking about what it means, yeah, maybe it's true that an LLM can do it instead and that new wannabe developer never gets the skills necessary to get to the more senior jobs.
That's never been my experience. My experience has always been that those junior jobs still want you to be thinking through those other questions. The difference from the senior jobs is simply that there's more acknowledging that you aren't as good at them yet so maybe there should be some more experienced voices in the conversation as well to guide you on the way (and those more experienced voices will get paid more). In case, an LLM still can't do your job.
Maybe that's not the experience for every junior job. Maybe there really are some that only want you to spit out code to a specification defined by somebody else. Maybe they view the junior devs thinking too much about it beyond that as to be a waste of time. That ultimately has the same problem, though: there's no opportunity to learn thinking through those other questions. If those versions of junior dev jobs do exist, maybe they're more replaceable by an LLM, but the part about never having an opportunity to learn the bigger ways of thinking is the same either way.
Conclusion: Degree or No?
That's where I come back to the university degree question. My alma mater, Queen's University, explicitly told us in our orientation week that they were not trying to teach us to memorize syntax of a bunch of languages. They explained that a big part of that was because you would immediately hvae to learn a new language on the job anyway, since there are too many languages to learn them all just in case. They were instead trying to teach us how to think about the problems at that more abstract level which could applied to a lot of different contexts and different languages.
The advent of LLMs have really underscored that point. If you don't learn how to deal with those questions, then yes, that's when you are in some level of danger that you aren't doing much more than an LLM. But if you can think at that level about what you're doing, the kinds of things that university degrees give you, you're not at risk anytime soon of an LLM replacing you.
Maybe a university degree isn't necessary. I am not claiming any inherent superiority here because I got a degree. You certainly can develop those ways of thinking on the job as well. Certainly many employers would have the patience to help you learn that. Some others won't.
If you want the fast-tracked version, when you have the time and money to devote to being as good as you can, without relying on a future employer giving you that time? The university degree can help a lot with that.
Previous: Ecosia Browser and Search