AI Coding Assistants Made Me Go Back to School

The introduction of graphing calculators didn’t remove the need to understand math; they removed the need to do rote math and elevated the need to know what to do with it.

AI coding assistants like GitHub Copilot make the highly specialized and until now in-demand skill of code writing cheap and accessible, shifting the skill demand from knowing how to write code to knowing what the code is for and how to evaluate its quality.

In other words your AI coding assistant is only as good as your knowledge of software design and development.

To use AI coding assistants effectively, it’s imperative that you know not only what you want done, but how to do it and how not to do it.

AI coding assistants can quickly conjure up semantically correct code snippets based on their training data, but have no knowledge or understanding of how to actually build code, let alone what the purpose of the code is for.

They are spicy autocomplete for code. Nothing more, nothing less.

With an AI coding assistant at your fingertips, a coding task that previously would take hours to complete can be done in minutes. This has enormous implications for you as a software developer and for anyone getting into the industry today:

It’s no longer enough to learn to code or know how to code well. You need to learn why how to validate and optimize the code, how to ensure the code is up to latest standards and best-practices, etc. But more importantly, you need to learn how to design the software you’re building and then provide the necessary instructions for the AI coding assistant to do the rote work of writing the code for you. It’s a massive step up in skill and scope, and it means many people in the industry need to retrain to avoid becoming obsolete.

I myself am not immune to this. Which is why I, a 20 year industry veteran and senior tech educator, have gone back to school to take basic Data Science classes at the University of British Columbia.

And it’s already paying off:

This past week I was tasked to build an AI-powered app for my colleagues. But before I could even get to the AI part I had to do a metric tonne of data processing. The project involved taking data from several different sources, conforming it to a consistent format, connecting the various data together to reflect their relationships, paring it all down leaving only the pieces I needed, converting it to tidy data, and then generating embeddings from the data.

Six months ago I would not have known where to start or even that I needed to do any of this work. And more importantly for our current context, I would not know how to instruct my AI coding assistant to do these things, because I didn’t have the necessary language and understanding to formulate the correct prompts.

However, thanks to my newly acquired and rapidly developing skills I was able to work with my AI coding assistant to process the data and get to a point where the actual AI work could begin.

That “work with my AI coding assistant” was about 80% telling it what I wanted done, it getting it fundamentally wrong, or going off the rails, me iterating over multiple ideas to narrow down the scope until the assistant finally generated some meaningful code, then running the new code, moving on to the next step, and starting the process over again.

Which sounds like a colossal waste of time but was actually enormously helpful. The AI coding assistant saved me hours of work by eliminating the need to look up specific code syntax and functions and evaluating edge cases. It also enabled me to rapidly experiment and iterate over different approaches, and debug the code as I implemented it.

The process often went like this:

Me: I have [some code/data structure]. I want this [desired output]. Give me only the code.
AI: [Code]
Me: This outputs [incorrect output]
AI: Oh, sorry. My bad. Try this instead [new code]
Me: That works. Now I want to add [new thing]
AI: Here's the same code, with [new thing] added.
Me: This outputs [incorrect output]
AI: Oh, sorry. My bad. Try this instead [new code]

For this to be an effective process, two conditions need to be met:

  1. I need to know what I’m doing
  2. I need to know how to work with the AI system

Condition 1 is met by me upskilling to expand my understanding not only of coding languages (this project required advanced Python for data science) but also higher-level design and thinking about what I’m actually trying to do.

Condition 2 is met by me spending a lot of time working with AI systems to find their fences, cliffs, tracks to nowhere, and inherent biases. For example: If you use ChatGPT or a custom GPT to write large bulks of code and you keep iterating over the same code, the system will start outputting incorrect code. This happens because with every new prompt the system re-ingests its own old (often incorrect) code and starts repeating the bad patterns. To get around this problem, after a few cycles of iteration start a new chat with the latest version of your code. Now the AI “memory” won’t get muddled by past mistakes.

From all of this, take away these three things:

  1. AI coding assistants are here to stay. Learn to use them or be replaced by someone who does.
  2. Invest in upskilling and re-skilling. Your job is now less about coding than managing someone (an AI coding assistant) who does the coding work at a … somewhat passable level.
  3. Learning to code is no longer enough: You also have to learn why to code and how to check the work of your AI coding assistant. That’s a whole new level of skills and expertise.

This is the future, already here in front of us. Join me in upskilling to push humanity and software development forward!

By Morten Rand-Hendriksen

Morten Rand-Hendriksen is a Senior Staff Instructor at LinkedIn Learning (formerly specializing in AI, bleeding edge web technologies, and the intersection between technology and humanity. He also occasionally teaches at Emily Carr University of Art and Design. He is a popular conference and workshop speaker on all things tech ethics, AI, web technologies, and open source.