GENERATIVE AI
Software Engineering of the Future
Speculations about the future of my profession and why writing will be a key skill in it
The initial public release of ChatGPT is coming up on two years in November — yes, it’s only been two years, and the software world has transformed quite a lot since then. Very competitive LLMs (Large Language Models) have been open-sourced, generative AI code editors and companions have propped up, and the most important thing, in my opinion, is that the Turing test has been broken.
With these improvements in generative AI, a software engineer's job has already changed quite a bit. While visiting StackOverflow and other community forums used to be of real value a few years ago, you can now ask a well-trained coding assistant to help you with your query. Meanwhile, various well-funded startups are working on AIs that will find bugs in your codebase, search for a fix, and deploy the fix, too.
This means the change isn’t coming soon; it’s here. However, it will probably take years for most organizations to leverage generative AI for code in a real sense. There are a few reasons for that.
Despite generative AI's exponential improvements, organizations will need to navigate limitations around cost, infrastructure availability, code safety, governance, and sovereignty, among other things. These limitations will hamper organizations that are not engineering-driven. This is why, while generative AI should, by its design and philosophy, democratize coding, at least for the first few years, it might not have that effect. In fact, it might actually end up having a sort of Reverse Robinhood effect, where everyone in the software engineering world is passively working towards bettering the models for people and organizations that are already good at software engineering.
There’s also a general hesitation to adopt these new generative AI-based tools as so much of the landscape is constantly changing. While the constant change isn’t a complete shock to software engineers, the rate of change with generative AI models hasn’t been seen before with any other software technology. The fact that organizations are slowing down spending on AI learning and development doesn’t help either.
While there is a broad acceptance of AI's benefits, many software engineers revolt at the idea of AI replacing their jobs. This makes me think that we, as a society, have seen this movie before. During the Industrial Revolution, the workforce violently rallied against the automation of the mills for a prolonged period, eventually landing in jails. Hopefully, it won’t come to that. At the same time, it is important to raise social, legal, and ethical concerns around AI to promote a constructive dialogue that informs its governance framework.
Organizations will overcome these issues before the wider society does. While these things get resolved, organizations will see pockets of generative AI adoption, if not across the board. There are obvious things where it will have a tremendous boost in productivity — a tool for automation more than anything else.
Tools like Ansible did that with configuration management, Terraform with cloud and on-premises infrastructure management, and Kubernetes with deploying scalable services in a platform-agnostic world. These are all, at an elementary level, tools for automation. Generative AI is a new category of automation tools that will work with all existing software tools, including the ones mentioned above. It will help you write software configuration, infrastructure orchestration, data pipelines, and frontends, among other things.
Writing software has always been about instructions to the electrical magic underneath the silicon. These instructions were first written in FORTRAN, BASIC, and C++. More recently, they have been written in languages like Python, Go, and Rust. Writing code has been getting easier all these years with the simple goal of abstracting machine complexity. Well, now, with English (or quite likely your native language) as the ultimate layer of abstraction is going to be your first layer of instruction. Before generative AI, it never was. But it was definitely given serious thought over seven decades ago when Turing wrote his seminal paper — Computing Machinery and Intelligence.
The New Programming Skill
Now that it’s becoming increasingly clear that natural language will be the medium of instruction for writing software in the near future, the question is: What will be the key skill for a software engineer of the future?
My speculation is that though understanding the internals of hardware and all the abstractions that bring us to the natural language interface will remain important, the most important skill will be writing, that is, writing in your natural language.
To the reader who’s thinking — well, isn’t that obvious ?— I’d say it’s true that writing efficient, performant software, finding the right constructs, applying the right order of instructions, and choosing the correct level of abstraction make a good software engineer. In a similar vein, in the future, writing good natural language instructions (or prompts) and structuring them so that the underlying model responds the way you intend it to respond will make a good natural-language software engineer. Still, it seems unclear how much of the job will be just plain old writing. Probably a lot. But writing alone won’t be enough.
A software engineer's job will become an amalgamation of product and engineering, among other things. It will entail thinking about software, product, user experience, and more and putting all those ideas into words, the importance of which Paul Graham highlights in one of his essays:
Putting ideas into words doesn’t have to mean writing, of course. You can also do it the old way, by talking. But in my experience, writing is the stricter test. You have to commit to a single, optimal sequence of words. Less can go unsaid when you don’t have tone of voice to carry meaning.
This applies to software, too—the search for a single, optimal sequence of words. If you think about it, it is similar to how software is done now, but not in natural language. A software engineer's job is to find the right constructs, the right order of execution, and the right balance between CPU, database, network, and cache, among other things.
Similarly, software engineering in the future will become the art of finding the right word or sequence of words to communicate an idea to the machine or an AI agent, the essence of the Flaubertian idea of le mot juste. Who would have thought that Gustave Flaubert would also contribute, in his own little way, to the field of software engineering? Probably Alan Turing!
Thanks to Soumya, Corin Lawson, Matt Dudley, Hannah Ryan, Emerald Leung, Nishant Virmani, and Jatin Malik for reviewing the draft of this post.