2021 is going to be remembered for many things: it was the year that people had to worry about COVID variants, it was the year that really felt the effects of the worldwide chip shortage. But in a brighter light, it was also the year that Github officially released its Copilot project.
GitHub’s Copilot is an artificial intelligence tool developed by GitHub and OpenAI to assist users of some of the most popular IDE like Visual Studio Code, Neovim, and JetBrains by autocompleting code. It’s like having a senior software developer over your shoulder reviewing your code and making recommendations based on what you’ve written.
If it sounds like something out of a sci-fi novel, it’s because it is, it’s software writing software. It’s not perfect, nothing ever is, but I can see copilot being one of the driving forces of the software development industry in the coming years.
What is Copilot?
GitHub Copilot is an AI tool that provides code suggestions based on comments and the context of the software you are creating.
As mentioned before, it is a joint venture between Github and OpenAI, which is heavily backed by Microsoft. It’s powered by a brand new AI system named Codex, which is based on the GPT-3 model.
Like other pre-trained technology, Copilot was created by training the AI with a dataset, in this case, with billions of lines of code from publicly available repositories hosted on GitHub. If you’ve ever used GitHub with an open license, then part of your code exists inside Copilot.
Reshaping The Way We Develop
I can’t even begin to describe just how complex software development is. From a top-down perspective, you are building a series of interconnecting systems that have to communicate and share information with a limited amount of resources at your disposal.
From a coding perspective, every instruction you are writing is both part of a bigger system and a puzzle unto itself. Translating stories into logical patterns requires knowledge, creativity, and more than a bit of insight.
Sometimes the instructions we write don’t yield the results we expect, other times our code executes, but takes longer and or consumes more resources than what we expected. Sometimes we just can’t find the right set of instructions to get the result we want.
Programming software is a balance between banging your head against a wall and jumping through hoops. When you are in the zone, you feel like the most intelligent person alive, but when you are stuck it can be excruciatingly frustrating.
GitHub’s Copilot is part of a bigger push for making programming less frustrating. IDE’s are a prime example of these kinds of tools, from coloring our code to linting, a good IDE setup is a necessity in modern-day software development.
What Copilot adds to the toolbox is a powerful AI that draws from the context of your code (your own code as well as your comments), to predict what you are trying to accomplish and recommend potential solutions.
For junior software developers, this is a gift from the heavens, a way to code quicker, overcome potential issues, and write reliable code. A friend said jokingly that it was like having the posters from StackOverflow writing your code for you.
You no longer have to spend days stuck thinking of workarounds, just look at what Copilot recommends and build from that. It should be no surprise that at face value Copilot will decrease development time and reduce stress amongst software developers.
Copilot could revolutionize the way we create software, and while it’s already an incredible project, there is still a long way to go…
The Issues with Copilot
Keep in mind that as of the writing of this article Copilot is still a technical demo, a very powerful demo to be certain, but one that definitely needs work.
As it stands right now, the biggest issue with Copilot is speed. The assistant is very slow, if you already have a good idea of what you want to accomplish, then you can probably write the code faster than it takes Copilot to create a recommendation.
On the one hand, we could argue that it’s a non-issue, since if you already know what you are doing, why use Copilot? While that may very well be the case, slow predictions can have an impact on your workflow.
On the other hand, Copilot is a prediction engine, not a magician. It’s to be expected that some of the predictions are wrong, or that the recommendation is a piece of broken code. To be fair, this is something that’s going to become less common as time goes by, but it’s something to keep in mind. You should always manually review Copilot’s recommendations.
But here is perhaps the biggest concern with it: dependency. Software developers grow as they tackle problems and learn from them. In fact, different developers have different styles, a product of their own experiences and lessons.
So, what happens when you take those opportunities away? Are we taking away the possibility of younger developers to grow by experiencing abstract problems? I might be sounding like an alarmist, but hear me out.
A developer is writing code for a project and they have a very tight deadline. After frustratingly banging their heads against the code for hours, they decide to rely on Copilot. In a few minutes, the assistant spits out some code that runs perfectly. There is just one problem, the developer doesn’t understand the code.
Should the developer reject the solution and miss the deadline? Or should they accept it and come back to it later? Let’s be honest, as hectic as software development is, will they have the time or attention to go back and study the code?
Creativity and human ingenuity is the fire that has forged the millions of lines of code that were used to train Copilot. So, it’s obvious that to keep growing and to keep creating we need to force ourselves to tackle the hard problems.
That being said, it’s hard not to be excited by a project like Copilot, being the eternal optimist that I am, I think that in the long run, the benefits of AI-assisted programming will far outstrip the potential issues.
Copilot is still in diapers, but as time goes on and the tool is refined more and more developers may adopt it, pushing for faster and more reliable deliveries.