New Layer of Abstraction, Not the End of Software Engineering
An optimistic view on how Software Engineering will progress in the upcoming years
In the last few months, I had a couple of discussions with different software engineers about the future of our profession. As an AI-enthusiastic, I was trying to be the optimistic voice between the pessimistic/ignorant views surrounding that topic. In this article, I will share my perspective on how I see our field progress, my arguments for it, and where I think you should focus as a software engineer in this changing world.
TL;DR
AI will not replace but enhance software developers to be more productive and to create products that weren’t possible in the past.
Boost in productivity occurred many times in the past - at higher rates than we currently see with AI tools—E.g. with high-level programming languages, the shift to the cloud, open source culture, etc.
The barrier to writing code will be reduced, and more people will enter the arena.
All of the above is a positive trend as it will boost the industry, not the other way around. It will lead to a new era of growth, products and opportunities for all.
To be part of it, you do need to be active, keep updating your skills, and embrace new tools.
Let’s GO:
It is crucial to begin by acknowledging that the recent boom of AI tools, such as Copilot by Github, Codex by OpenAI, and ChatGPT by OpenAI - have shown us very clearly, that they are capable of enhancing software engineers. Not the potential to, but the already-here usefulness. I'm using ChatGPT daily, and it almost entirely replaced my Stackoverflow-usage. I write code for around ~8 hours a day, including weekends (for work and personal projects), and I’m saving about ~5 hours a week thanks to it (based on an experiment I did).
However, the jump from where those tools are currently at, to the utopian/dystopian world of software engineers being unemployed is far-reaching.
For this argument, I’d refer to the much-beloved Pareto principle - or 80/20 Rule - which states that 80% of the deliverable from a project is achieved with 20% of the effort and that the remaining 20% will require 80% of the effort. In our scenario, this can be thought of in two ways:
The remaining “20%” for Copilot/ChatGPT to automate software engineers entirely will be the difficult 80% effort. Which means we still have a long way to go. This will be the reasoning, debugging, and the “connecting the dots” of different parts of the codes in a codebase (and less about the specific known algorithms, tests, etc).
Copilot automates the 80% “copy-paste” job of engineering, where we, the engineers, are left with closing up the remaining 20% - Yay! (More about it later)
Another way of looking at these tools is in the context of previous technological advances in our field. For example, Github argues that engineers using their Copilot are 55% more productive/fast in completing a specific set of tasks (note that this might not be fair research as the tasks might’ve been part of the model’s training dataset). This sounds like a crazy increase in productivity (and it is), but also not something we haven’t seen before. In the 1960s, with the introduction of High-Level programming languages, we saw more or less the same boost in productivity of engineers writing code in High-level languages compared to low-level languages.
A different concern I’ve heard is that this will make more people go to software, as it will be more accessible, making it much more difficult to find a job, make a living, etc. More people will indeed do software, as it will (and already is) reduce the barrier to becoming a software engineer. But it also opens up a new frontier of potential products, opportunities, and economic growth (As mentioned in my previous articles here and here). “We are at a *very* unique moment—on the cusp of a revolution that will usher in multiple trillion-dollar companies and industries”. Just like when the PC, the Internet, the mobile, and the cloud were introduced and were available for more people, it didn’t make people absolute, but it created so many new opportunities in the form of roles, companies, etc.
It is important to note that we won't be doing what we currently do in 5 years, which is okay. This is what this industry has been doing from day 1 - creating more and more layers of abstractions to enable us to focus on what matters - building stuff. For example, you don’t need to write your own authentication system nowadays. Thanks to companies like Google (Firebase), AWS (Cognito), etc., you can do that in 10 lines of code. Same with the cloud, you don’t need to care much for the scaling of your app, but AWS/Azure/GCP give you many different tools that enable you to scale stuff for millions of users effortlessly. In the past (~10 years ago), you needed to run your own server on your own hardware - you know how difficult it was? Thanks for not having to do that - we’ve experienced the boom of the 2010s with the mobile revolution. AI is another layer of abstraction that will enable you to focus on the business itself, building products faster and better.
Sam (OpenAI CEO) is a bit dystopian for the individual, but remember, he is the merchant trying to make his commodities worth more. The way we will write software in the future is somewhere in the middle. We will all have an AI assistant, some sort of ChatGPT, where it will be back-and-forth of English to code to English. We will be guiding it, and it will be guiding us back to the code. We will need to understand the code it generates and tweak it for the specific app. We will need to understand, at least conceptually, different algorithms and underlying computer science thinking (at a much higher level than today’s CS students, though) to be able to read and approve code (and mainly tests), and to “get under the bonnet” when needed. We will write more application code, connecting different interfaces (like using a 3rd party library or an API today) to form the required business logic. Understanding the code will be needed to do this reliably and at scale. You, as an engineer, will be able to do more stuff by supervising and guiding the tool and jumping in where needed. Think about yourself as a lead/senior engineer working with 5 junior engineers - this will be more like that than “give me an app that does X Y X” and that is it.
So, what should you do today?
All of the optimism above does not come just about, and you will need to be ready to be flexible, to learn, and to adjust. I am far from being an expert, but here are my recommendations on how to best face the changing world:
Start using these tools. I was surprised to hear how many engineers read about Copilot but have yet actually tried to leverage it. This will already boost your productivity and will enable you to do more. Not using those tools is like trying to implement your authentication system or run on your own server home at for production - you can, but why would you? Focus on the important stuff.
Be up-to-date with what is going on. That means reading articles (like this and many others). Follow and engage with relevant people on Twitter (from big names like the ones I embedded in this article to smaller ones like myself and many others). Being part of these discussions will help you form your perspective on the subject and to be in a better place in the changing world.
Learn & Build - Don’t be stuck with your current stack (whoop a rhyme!), keep learning new technologies that are released, learn about ML/AI/LLMs, build small projects and share them online, and be involved in the Open source community.
For software developers without a background in machine learning, I will recommend watching Andrej's playlist here: https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ
Reach out to me here or on Twitter and I’d be happy to share more resources and topics to learn!
Thank you for reading. If you liked my content, don’t hesitate to reach out. I’d love to talk with more people and discuss everything: tech, philosophy, AI, ideas, Lex Fridman, startups, software, science, whatever!
Twitter: https://twitter.com/adamcohenhillel
LinkedIn: https://www.linkedin.com/in/adamcohenhillel
Email: adamcohenhillel@gmail.com
Adam.
Sources:
http://page.mi.fu-berlin.de/prechelt/Biblio//jccpprtTR.pdf
https://arxiv.org/pdf/1409.0252.pdf
https://en.wikipedia.org/wiki/High-level_programming_language#cite_note-kleith-2
very good points! Keep writing stuff like this!
Sidenote, for me copilot was not that impressive, maybe I wasn't aware of some special tricks to get the most out of it though.