Your software engineering job is fine (seriously)

  • Published: June 25, 2024
  • /
  • Last updated: July 13, 2024

I’ve had enough. Maybe this is controversial, maybe this is a “hot-take”, but let me get it out of my system:

  1. No, Large Language Models (LLMs) are not going to take our Software Engineering jobs.
  2. Yes, you should still pursue a degree in computer science and a career in Software Engineering.
  3. Yes, we still need junior developers and interns.

I should stop here, but I suppose I’ll elaborate.

AI Wonder

It’s hard not to feel a sense of wonder and astonishment when you watch ChatGPT regurgitate a bunch of code for the very first time. I remember my mind was so blown that I barely slept for the next two weeks. I read every single article that I could, I bought and read books on the topic, I read papers. And more importantly - I used it a lot. Not just ChatGPT, but dropping down to the API level in OpenAI’s playground and actually fiddled with the extra knobs and buttons. I also tried other LLMs and platforms.

Once I actually caught up on some sleep I realized: “hey, the code it’s giving me is shit!”.

OK - that’s not fair. These models can generate some rather impressive code - but only in the right contexts.

I’ve yet to see these models:

  • Implement novel algorithms.
  • Really optimize a piece of code for speed, readability, etc.
  • Do anything more than implement a few methods or classes.

“But Greg!” I hear you say. “I’ve asked ChatGPT for X novel thing and it gave me great results!”. I’m sure! No, seriously, I believe you! I’ve seen it too. But we humans have a really hard time grasping very large scales… such as the corpus of data these models have been trained on, the amount of code that exists on GitHub, that so many problems have already been solved or attempted. So yeah - I think you may have seen it generate something that was novel for you, but I bet with some clever “traditional” searching, you can find someone, somewhere, that’s done this thing already. It may not be in the language you asked for - but guess what LLMs are actually really good at? Translation!

But I digress. Let’s focus on my three points at the top of this post…

Your job is fine

LLMs are not capable of taking your job

The people who think that LLMs are going to replace software engineers either:

  • Never tried to use LLMs or LLM-focused products for any real amount of work.
  • Fundamentally do not understand how LLMs work.
  • Do not appreciate what it is that Software Engineers actually do.
  • Have self-confidence issues or imposter syndrome.
  • Are trying to sell you their “AI” product
  • Some combination of the above.

Each of these could be its own section or entire blog post, but there’s so many better sources out there to learn about these topics.

But I do want to focus on one: Self-confidence and imposter syndrome.

Poor mental health and self-confidence issues are endemic in our field. I am hearing far, far too many smart and capable people say “I’m so scared that my field will not exist in a few years”, or “I’m just not smart enough to keep up.”

I empathize. I do. I’ve struggled with anxiety my entire adult life. It’s hard and it sucks. But those statements just aren’t true!

If you find that you’re saying these sorts of things to yourself, I urge you to consider talking to a professional. This is self-generated stress that you do not need to be suffering through. Like with anything meaningful, change won’t happen overnight. It also probably won’t occur on its own. Something like talk therapy may seem scary in itself. Or, you may think it’s stigmatized and it would mean admitting to some sort of failure or shortcoming. Well, it is scary - or can be. But more scary than what you’re already feeling? Probably not. And no, you’re not a failure. The only person telling you that is yourself. If you accept that this is just a self-narrative and actually do something about it? You’re showing that you actually have the strength and the fortitude to grow as a human being. That should be celebrated.

Also recognize that if it weren’t AI causing you this stress and anguish it would likely be something else. The cyclical industry layoffs. A new tool or technology. A perception that someone else on your team is better than you. That you’re not smart enough to do something.

We all experience self-doubt at times. That’s completely normal.

But if that self-doubt is preventing you from achieving your goals or is so frequent that it is making you miserable, that’s when things cross the line into anxiety disorder territory. That doesn’t mean you’re a failure. But it isn’t “normal” and is something you should consider actively working through. With help, you can get through it.

An engineering (or Comp Sci) degree is still worth a lot

It’s true. Not all programs and degrees are created equally. I’m referring here to degrees and programs from well established, traditional 4-5 year schools - not boot camps. If you don’t otherwise have a degree, I would not recommend going the boot camp route as the basis for your secondary education.

To be successful in software engineering, you should (among other things):

  • Seek a well rounded education. Yes, that means signing up for classes that don’t immediately seem relevant. Take creative writing. Take philosophy. Take things that you think would have no bearing on computer science. Exposure to many different ideas and topics will help you relate to customers and others outside the world of technology.
  • Establish a solid theoretical base for how problems are solved. Pay less attention to any specific language or framework. Your school doesn’t teach Javascript, Go, or Rust and only teaches in 1990’s style Java? That’s fine. Trust me, it is. Learn many languages and understand the commonalities and differences between them. Better yet - make sure you take a programming theory and compiler design class. Only learning a specific language or framework this early on will limit what you can do. Learning how all languages and frameworks work will allow you to fit the needs of any organization, project, or challenge.
  • Take the time to truly understand how computers work. I don’t mean “how to use computers” (though that is important). I mean take a computer architecture class or two. Take a class on digital circuits. Try and understand how you can go from a transistor all the way to Tiktok or Fortnite. It is possible to do! (Check out the excellent From Nand to Tetris course.)

A solid foundation like this will allow you to ride through any industry waves rather than run away from them. Software Engineering is still a nascent field. Our tools (and fads) change all of the time. This latest AI hype-cycle (yes, there have been others) is just the most recent example. There will be others that have yet to come.

If you are already in a software engineering job and you feel like you’ve missed out on this, or you need a refresher, take the time to go learn! There are so many ways to do this. You can take night classes, online courses through sites like Coursera, read books, watch YouTube videos, read blogs, etc. The knowledge and help is out there if you make the time for it.

Software engineering is more than just programming (or even Computer Science)

I actually think that most people don’t realize this. Including some software engineers! The only people who may truly understand this are senior engineers, other thought leaders in this space, and people who actually took the time to research software engineering before jumping into a CS/CE/SE degree.

Programming is usually the most enjoyable part of software engineering, at least for me. OK, teaching and sharing my knowledge with others is pretty high up there too… But the act of programming is only part of what a software engineer does.

In my previous positions, I would say only 50%-60% of my time was spent programming. The rest of that time was spent talking to people and translating business requirements into engineering requirements.

Software engineers talk to people!? Yes, actually. At least the good ones do. If you’re a (senior) “software engineer” and you don’t talk to people… I would seriously consider doing some critical self-evaluation.

Translating business requirements? Yes. This is the hardest part of the job. In software, the cliche “the customer is always right” is 100% wrong. The customer has no clue what they want. All they know is that they have a problem that needs to be solved. Most people lack the imagination (through no fault of their own) on how that problem could be solved. This is a skill. And an art. I think any software engineer can learn how to get really good at this. But I think you do need to be a “natural” to be great. It’s the same with music, art, athletics, etc. But in Software Engineering, you don’t necessarily need to be great. Good is often good enough.

Software engineering is just professional problem solving using logic, planning, and computers. Guess what is terrible at solving problems in this way? LLMs.

Junior engineers typically aren’t that good at this either… but the difference here is that a Junior engineer can learn and grow. An LLM cannot. One day, such a self-teaching system may exist, but we’re not there yet. Not even close.

So what should I do?

Don’t panic. Take a deep breath.

There are plenty of things to be concerned about - but this current AI hype cycle is not one of them. LLMs certainly not.

That said - I’m not hating on AI or LLMs. They are useful tools. I use them every day. You just need to use them for the right tasks. Just like you wouldn’t use a saw to nail some wood together, don’t try to use LLMs for everything.

LLMs are great at finding semantic relations, transforming text and images (especially when precision is not required). They’re great at “fuzzy” things: Translation, rewording, summarization, and to a degree structuring unstructured data (again, when absolute precision is not required).

LLMs are terrible about reasoning, logic, precision (math), problem solving. They’re incapable of (permanently) growing through experience. They cannot invent new or novel things in any meaningful or useful way (at least in the context of software engineering). These are where we humans still excel.

If you’re struggling with self-doubt to the point that it’s interfering with your life and your happiness, please talk to someone. Seek out a career coach or a therapist - someone who can help you explore ways to push past this in a healthy way.

And don’t be static like these LLMs. Continue to learn and grow, at least a little bit, each day.

You’ll be fine.