Most of my early exposure to generative AI has been through the digital art sphere, which was rife with outrage over AI. I inherited some pretty hardline views on the appropriate use and function of generative AI just by virtue of the online circles I was spending time in, and I took a lot of these views into the workplace with me. But AI use isn’t a monolith, and neither are human beings. The contexts that we work in can interface with AI in completely different ways. As a hobbyist digital artist and a professional software developer, my opinions on AI use in the workplace have shifted.
Now, I acknowledge this upfront: the conversation around generative AI is relatively controversial, not to mention the legal debates that are flying around. If you’re reading this, you’ve probably heard the same arguments rehashed millions of times. The short version is this: AI exists, and we can’t un-invent it. That doesn’t mean we can’t engage critically and carefully with what is shaping up to be a very powerful, very dangerous tool. And while I acknowledge the critical societal impacts, when I sit down at my computer to work, I’m not thinking about the rampant misinformation or the large legal cases around AI misuse; I’m thinking about how I can best use the tools at my disposal to do my job.
All of that said, I still consider myself an AI skeptic, albeit a more pragmatic one than before. I freely admit I use generative AI to help me in my programming work, but only after I’ve exhausted every other option, up to and including talking to everyone else on my team.
Why wouldn’t I use it?
There are a few reasons I wouldn’t immediately reach for AI to help me code.
First, and perhaps most prominent, is that it takes away valuable learning opportunities that I would otherwise go through while struggling to solve a particular problem. Challenge is how I learn best, and using what is essentially an answer-key would prevent me from experiencing the growing pains that are necessary to learn. Even the process of online research is better as a first-resort than turning to artificial intelligence. Research requires me to be specific in what I am searching for and understand the technical articles I may come across (which is also why AI-generated search summaries are rapidly becoming one of my pet peeves).
Second, generative AI is often simply wrong. It doesn’t always make errors, but it does so often enough that there is a significant chance that the AI assistant’s answer might send me in the wrong direction. I have often received answers that confused my project’s dependencies or left out crucial checks that might break other parts of the code. When you’re dealing with a complex, multi-file repository, prompts are simply not enough to get a holistic answer. A programmer’s gut-feel is often the most reliable way to check whether something is missing.
Finally, when I do use generative AI to help understand a piece of code, it often lacks the ability to explain concepts clearly enough. It can break down individual lines of code, but when it comes to the flow of a program, I need to do a significant amount of granular prompting to understand the full extent of the process. Even then, the understanding comes in disconnected pieces, which require a lot of time and energy to assemble.
Then why ever use it?
Generative AI is excellent for some very specific tasks: writing basic unit tests, for instance, or identifying the flow of certain sections of code (or, to use a completely random example, spell-checking a blog post). Generative AI isn’t even good at identifying the root cause of obscure error messages, which is what I use it most for.
I’m aware that there are so many fancy ways I could be using AI, and even more that are being built as we speak, but I am content with using it for basic needs. Admittedly, it’s a little like using a chainsaw to chop veggies: large, unwieldy, uses up a lot of energy, and there’s probably a better tool for the job, but it still gets it done.
At the moment, I am one of the more conservative programmers in my team regarding using these tools. I do, however, believe that the gap will start to narrow as generative artificial intelligence becomes more ubiquitous.
So how can I tell when to use it?
To determine when I might want to turn to artificial intelligence to supplement my work, I quickly run through a few questions:
1. Does it speed up my work?
The answer to this question is usually “yes,” but in some cases—like trying to understand the flow of a program, for instance—it might leave me more confused, or require a lot of time to achieve enough understanding to modify the code. In these instances, I might be better served trying to parse the code on my own, or going through with a debugger to understand the steps of the process.
2. Does the speed prevent me from assessing crucial or sensitive aspects of my work?
In short, “Am I missing something?” Too often, copy/paste is such an alluring option that I might be tempted to neglect going over the code. However, this could introduce errors or even unnecessary complexity into the codebase. Generative AI makes mistakes too, and sometimes, making sure to take my time with understanding and writing the code can prevent errors that might come from rapid generation.
3. Am I using it for the tedious aspects of my work, or is it taking over the engaging aspects?
This essentially boils down to “are you having fun?” If I’m not having fun, or the artificial intelligence is taking over tasks that I would otherwise find enjoyable, I don’t use it. Doing it myself builds my experience and understanding and gives me more energy for other tasks that I might be less enthusiastic about completing.
4. Most importantly: Is there a real human being available that I can ask my questions to right now?
If there’s a person I can ask for help, I will always turn to them before I reach for artificial intelligence. Humans explain things in a more intuitive way nd can easily tell what parts might be confusing to me. Asking for help also builds valuable connections. Interacting with good people who enjoy what they do makes me happy, and that joy circles right back around to loving what I do.
Don’t let AI prevent connections with people.
There’s a common joke on the internet about how generative AI will never be able to replace a significant portion of human jobs, because that would require the AI to actually understand and work towards a client’s needs. That doesn’t mean the field of computer science and the role of programmer won’t experience a dramatic shift as we re-align our paradigms to fit with the existence of this new tool. That also doesn’t mean we have to let it prevent us from building connections with other people, learning how to research and ask for help, or enjoying the work we do.