The future of programming

TL;DR: We’re turning more and more into plumbers of code, but this is not a bad thing. It just means the future of programming is more about connecting the dots & understanding overall architecture, rather than doing the grunt work.

LLMs have changed the game

The process to code a given piece of software has changed quite a bit in the past few years. I remember before Copilot & GPT were a thing, I would search on StackOverflow & read documentation. I used to set up code snippets and books were a more significant part of my learning process back then too.

Nowadays I just spin up Cursor (VS code with integrated ChatGPT) and start typing. I move faster when it comes to pretty much everything.

Copilot gives me decent autocompletes and helps me write boilerplate code faster. When I get stuck, I can “rubber duck” ChatGPT. I rarely touch StackOverflow or Google or even documentation, except for more obscure or very new libraries/concepts.

How to use them properly

I know they are not perfect and they hallucinate a lot. Some of the info they provide is outdated. That’s okay if you know how to distinguish between good and bad.

But more importantly you have to know how to pose the problem to the LLM so it spews the correct answer. I like to give very thorough details & provide snippets when I ask questions. I write pseudo-code or thorough function descriptions in comments when I want copilot to do certain things.

In a certain way, you have to baby these things to provide the correct answer just like a senior dev would to a junior one. The benefit here is that the feedback loop is tighter.

I think over time you also learn to recognize the type of situations where the LLMs won’t do a good job and in those cases you drop in and do the grunt work yourself.

The future of programming

To all the people yelling from the top of their lungs “AI will replace engineers”, no it won’t. Not any time soon.

As I said above, the LLMs still need quite some babying and will keep on needing it for the foreseeable future.

They can replace “grunt work”, but someone still needs to make architectural decisions and put everything together. Which is why I like the term “code plumber”.

Now, for a senior I think all this is pretty cool. It makes you faster, but you’re still not replaceable because somebody needs to make architectural decisions, baby the AI, be generally responsible for the software and drop in to fix the problems that LLMs can’t.

But I can’t say I’m not afraid of how this will affect juniors. On one hand, it’s easier than ever to start coding which is great. On the other hand, what’s the value a junior provides now?

I think it could create an interesting dynamic. I don’t think it should stop you from pursuing software engineering.