What it's like to write code with GitHub Copilot, and why it's not the end of programming
How does AI fit into my workflow?
I'm a full-stack freelancer for early-stage startups--that means I compete with No-Code tools, agencies, and especially offshore. Every day that I work, I'm expected to deliver significant progress on new features day, since many of my clients are short on funds--therefore, there's quite a bit of pressure.
I'm also "polyglot"--which means I specialize in learning common elements between multiple frameworks and programming languages, and then using that wide understanding to deliver results for my clients--it also means I'm constantly looking stuff up on Google, StackOverflow, and spending huge amounts of time on a spaced repetition system to memorize the important bits of each language/framework.
AI should be able to help me.
GitHub CoPilot: stranded offline
After many breathless software developers exclaiming "the end of programming" on Twitter, I decided to give GitHub Copilot a try, which is an AI plugin you can install in your IDE or text editor to recommend code for you.
In my case, I installed it in Vim, and was quickly disappointed when these outgoing network requests hit my firewall:
You see, GitHub Copilot doesn't ship the model to your computer--it runs the model on a server and then connects a web socket to your local machine, feeding you recommendations--so if you're offline, you're out of luck.
GitHub CoPilot: discovering its helpfulness
After getting the plugin installed and setting up my firewall, I was pleasantly surprised that it gave me useful recommendations that I would actually use in my code:
GitHub CoPilot: awkward workflow for a senior developer
Normally, my workflow looks like this:
- read code and understand it
- write down a plan of what I want to accomplish
- write down the files and functions that needs to be changed to execute the goal
- execute the code change
It's an aggressive workflow where I spend as little time as possible writing code--a lot of time is invested up-front, a lot of work is done outside of my code editor, and then the source code change is all executed at once in a final "render" phase, after I fully understand my goal--Step 4 is where GitHub Copilot could really help me.
I was planning on using Copilot as a really smart auto-complete, that could save a lot of typing time, and save time looking up the exact arguments for the different functions that I use.
The reality was, I type very fast, and there was about a half-second to two-second delay before the recommender returned with a code suggestion--often times I would have already typed out the majority of the code snippet before Copilot would return with a recommendation.
I uninstalled it, and continue to run vanilla Vim with syntax highlighting, a couple Git plugins, and that's it.
GitHub CoPilot verdict
In my own case, as a senior developer with a spaced repetition system supporting my work, where the source code is treated as just a render artifact and not the core of my work, Copilot was not useful--hardly "the end of programming".
There was an alternate workflow, where you write comments and have Copilot write the code for you, but I didn't need this, since I already knew how to program, and it was too slow to be useful anyway.
In the future, I could see an open-source version of Copilot being useful to me, that ran locally.
Our role as software developers isn't going away any time soon
If I really tried, I could make Copilot and AI useful to me--but I don't have time for that. I'm busy solving real problems for real people.
As for junior developers, I could see AI solutions like Copilot both helping them and hurting them:
- helping them by quickly solving errors and problems in code
- hurting them by being a path-of-least-resistance around documentation and actual understanding, leaving them helpless in the long-term
I'm very impressed with the technical accomplishments with ChatGPT, but as with most things in life, my overall outlook is people-focused, not tool-focused.