Lost in Translation: Software Development in the Age of AI

Lost in Translation: Software Development in the Age of AI

Stefan Hodges-Kluck

by Stefan Hodges-Kluck on June 12, 2024

Since the release of ChatGPT in early 2023, generative AI has exploded into the apps we use on a daily basis. LLMs are summarizing our internet searches for us, guiding us through shopping, and creating audio/video content. In my world, I see AI-driven productivity tools that either facilitate or replicate (allegedly) almost every part of a software developer's day-to-day tasks, from writing code to testing, debugging, reviewing, and deploying it.

I'm not particularly worried (yet) about a Skynet-type robopocalypse, or a fully functional AI engineer who can replace everything I do on a daily basis. I am, however, concerned about a wider trend in software--really, a broader societal trend--towards (supposed) quick and easy solutions in app development. In an interview with NPR, Microsoft CEO Satya Natella stated that with AI,

"You can build an application by just [speaking to a computer in English rather than coding]. If you're in health care, or you are in retail, as somebody who's in the frontline with domain expertise, you can essentially do IT class jobs that may have better wage support."

This promise sounds appealing, and follows the message of low-code and no-code solutions, which market themselves as ways that people with little to no knowledge of code can design and write their own applications. Now, the argument goes, you don't need any of that highfalutin technical code that only supernerds and tech wizards understand--all you have to do is tell the computer in plain English what you want it to do. The gates are now open for "regular” folks to hit it big in the tech gold rush now.

I love the idea of democratizing software development. With my non-CS background, I wouldn't even be in this line of work if it weren't for the openness of employers to hire people based on their talent and experience more than their on-paper credentials. But I worry about marketing surrounding generative AI oversimplifying the reality. From design to deployment, the world of building software is far more complicated than most superficial demos of generated shopping carts and todo lists tend to let on.  While I like the idea of seeing more people getting into software, I'm concerned about people (myself even included) finding themselves on the bad part of the Dunning Kruger curve, confident they can easily whip up a million-dollar app in a few weeks, without enough knowledge (or humility?) to know that there's so much more to learn.

It's important to remember that all of the development solutions that offer, or promise to offer, application development without coding still use code under the hood. The same way that serverless cloud development is just development where other people manage the servers, no-code development is development where other people manage the code. This is a double-edged sword: while letting other people manage your code means you don't have to worry about writing it, you also have less control over your solution. What if you suddenly get an increase in traffic and need to manage server levels/types? What if you want to integrate a new feature into your app that isn’t supported by your platform of choice? What if a major release causes a critical bug in production? What if your do-it-all code platform fails to support a key change in the language/framework/libraries it uses under the hood? Generative AI services can create lots of code, but you have to know the broader context of why you need the code and how it should work in the complex array of real-time situations that highly-used apps need to cover. 

The question of what parts of an application to build yourself and what to offload to other services, packages, and libraries is always going to be part of software development. This site is no exception. I am using Butter CMS and a Dart Frog backend to provide blog content, relying on Flutter web rendering to display the pages instead of writing the page logic in Javascript, and using a Flutter package to handle more complicated features like rendering HTML into Flutter widgets. Changes in any of these tools (not to mention changes in AWS, which hosts the site) can potentially affect what (if anything) is displayed on this site. The question that I always struggle with is what to offload and what to maintain myself. In the case of this site, I sought to have something to allow me to dive into full-stack Dart and AWS services. Building my own CMS or HTML-Flutter renderer was not particularly relevant. If your goal is  "just telling the computer" to magically build your app, however, the entire structure of the application is out of your control. It's important to be aware of what your dependencies are and how they might change as part of the tumultuous and constantly-shifting tech landscape. 

The rise of shiny AI-driven coding solutions reminds me a little of reading texts in translation. I don't think anyone would (or at least, should) argue that translating a text into a different language to make it more accessible is a bad thing. Christians around the world would be blocked from their texts if the Bible was still exclusively written in Hebrew and Greek. Epics like Gilgamesh and the works of Homer and Vergil, treatises by philosophers like Plato and Aristotle, and historical sources by authors from all over the world would be entirely inaccessible to modern readers if scholars hadn't translated them from the ancient languages in which they were written (to say nothing of the process of collecting and evaluating manuscripts, which is itself a major endeavor).

Yet while translation makes texts more accessible, it's important to remember two things. First off, the availability of texts in translation depends on a society that will train and support translators. Every translated text we have access to today is the fruit of a past scholar's labor. If they had no access to the basic resources of life they needed to feed, clothe, and shelter themselves while they learned languages, collected sources, interpreted past scholars’ work, and wrote translations they found suitable enough to publish, we would not have access to nearly as much knowledge as we do today. If we continue to neglect humanities disciplines like history, literature, philosophy, and foreign languages, we will be unable to build on this knowledge for future generations. Likewise, I fear that neglecting these disciplines will harm the tech world, as more and more people will value quantity over quality, and quick solutions over thorough analysis. 

Perhaps you're thinking that this doesn't matter, now that we have so much knowledge translated. If we have Plato in English, why do we still need to read Greek? I myself have heard this argument while a grad student studying Greek and Latin authors. Or if we need updated translations, why not just feed the entire works of Plato to an LLM and ask it to translate it all into English? With the increased computing power that most LLMs are supporting, it's not unreasonable to feed it such a large corpus of text. Maybe AI can translate Greek texts into English just as well as it can translate technical code into English.

This, however, brings me to my second point about translation: it is never neutral. There is no such thing as a one-to-one translation from any language to any other language. Languages are embedded into the societies in which they are spoken, and every translator must balance making their works accessible to their audiences while staying reasonably honest to the original language. Translated texts carry with them the decisions and assumptions, both conscious and unconscious, that their translators have made. Such baggage often results in translations that gloss over biases and inequalities, similar to the kinds of biases and inequalities AI has already been revealed to introduce

I see developing software, at its heart, as an exercise in translation. Unless you know machine code, coding in any programming language involves bridging the gap between business requirements that humans understand and translating them into commands that a computer can decipher. There are several programming languages around this day that combine human readability and computer performance to deliver high-quality products. My concern with "magical" AI development tools is that they are simply adding an additional layer on top of what several languages already do quite well. In essence, they are translations of translations. While there is certainly use in translating something that has already been translated (the New Testament, after all, made it into English via Latin), it requires taking on more assumptions and putting more trust into other people's assumptions and biases. 

Indeed, I have no doubt AI can translate Greek texts into English just as well as it can translate technical code into English. That's what I'm afraid of. Generative AI has already shown its ability to spout out wrong answers with utmost confidence. I worry that many people, when presented with a flashy view of ready-made application development solutions, will be only too willing to accept them without attention to potential pitfalls and blind spots.

I would love it if generative AI really did help to make tech more democratized by offering an entry point for people interested in app development to delve deeper into how to construct great software. My fear, however, is that without broader societal changes, it will just end up becoming another barrier, another thing to learn that looks like it works great out of the box and then causes endless headaches trying to figure out production bugs that exist somewhere between users' expectations, shiny products with “AI” in their titles, and the underlying code that they use.

Instead of seeing computers as these ultra-fancy magical boxes that will one day solve all of our problems in one go, we need to think about what those problems actually are, and allow people the resources, time, and skills to learn how to consider, evaluate, and solve them in ways that will address their needs now and support future growth. In other words, if we want to democratize application development, we need to democratize the material and educational resources necessary to learn. We need to democratize society.