AI-Assisted Coding

Written by
8 minutes read

Ever since tools like Cursor became popular, I started seeing more posts about LLM-generated code from the following groups of developers:

  • Those who panic because they think these tools are competition
  • Those who dismiss the capability of these tools
  • Those who say developers who use it aren't "real" developers
  • Those who tried it and realised that it can be useful in some cases

As I said in one of my previous posts, I hated AI and after using it for some time, I realised that it can actually be a useful tool but just like every tool, you must know how to properly use it. Do I still prefer a world without it? Absolutely. But it's here and I don't see it going away. I was watching a video of a developer saying, "If you say that AI can write code faster than you then that's a skill issue." He referred to it as outsourcing your software engineering skill issues to an AI and that developers who use it deserve to be replaced by AI.

Ironically, I think it's exactly developers who think like this who would struggle to get a job in the future. It's not about the refusal to use AI, I think it definitely still has a long way to go before it becomes useful for most people. It's the arrogance and the purist attitude. The refusal to adapt or even see how some people can benefit from using a new tool even if you decide that the tool isn't for you. Adaptation is important in every career but even more so in the tech field.

I chuckled when I read all the comments in the video:

  • "Why do carpenters outsource their regular saws to electric saws? If electric saws are faster than you, you could always improve." Apparently, using an electric saw to do your job faster is a skill issue.
  • "Why use an electric drill when you can do it by hand?"
  • "It's useless to re-write blocks of boilerplate anymore. If someone wants to memorise the syntax for everything then be my guest." Boilerplate code can be configurations, templates, or repetitive code that just had to be there but requires little to no deep software engineering thinking.

I know he didn't mean just literally typing the code but implementing it but I still think it misses the point. I know I can develop software. I've been in this field before tools like Cursor or Copilot existed. I know how to implement something and it's for that exact reason why I benefit from using these tools. I can take this implementation idea and write it as a prompt. You can bet your ass that Cursor will write that code faster than I can type all the code and prompt combined. The best part is I can also ask it to write unit tests. A very simple example is data validation. If I had several fields to check, I know how to check them, what test scenarios to write but writing all of the syntax down is definitely slower than asking AI to do it. I can do it but why should I when there's a tool that can do it for me faster and let me focus on other things that actually require deeper thinking? I will then review the tests and add anything that's missing.

It Requires A Different Skill

I mentioned that AI is a tool but you must know how to use it. While this tool definitely has its flaws, I find that a lot (not all) who struggle with it simply do not know how to give concrete guidelines or proper instructions. When people started talking about AI replacing software engineers, we joked about how it would never happen because clients never know or cannot communicate clearly what they want. The same is true in AI-assisted coding. You cannot give this tool a vague instruction and expect it to fill in all the holes.

Unfortunately, a lot of developers lack the skill of writing instructions clearly. I've met so many developers who actively avoid writing documentation or even simple comments. I've also met many developers who don't like writing tests which could serve as documentation itself. This is even harder for developers who are not fluent English-speakers since most LLMs are trained on a lot of data that are in English so while you would still get a response in other languages, you might get more accurate and efficient results when your prompt is in English.

It's The Same But Different

For the longest time, there's this encouragement for everyone to learn how to code so they can build their own applications and have fun with it. There were even applications that allow you to drag and drop blocks, turn them into flowcharts, and generate code from that. When I used to hang out with electronics engineers, they often used this app called "Flowcode". There's also "Scratch" which is mostly used to teach children programming concepts. I remember watching tutorials on how to make a game using RPG Maker by a guy who said he's glad he barely had to touch code. I've seen some really good RPG Maker games either by playing them or watching streams and it makes me happy that not knowing how to code is not a hindrance to someone who just wants to make a game. Of course, depending on the game you want to make, you might reach a point where you will have to learn how to code. Tools that allow you to make applications without knowing how to code has existed before the LLMs we know today became popular. Surely, when these tools came out, there were also a lot of people who hated it.

Your Job Is Not Just To Write Code

You may say, "But that's different. Those people aren't software engineers. Software engineers should write every piece of code, not have it generated for them." I've seen plenty of developers stutter when the code completion on their code editor stop working. It's not something to judge them for. We had to learn so much in this field that forgetting something trivial is commonplace. So, no, a lot of developers haven't been writing every single piece of code. Yes, I know, code completion isn't exactly the same as an LLM generating blocks of code for an app but this one is for the purists who believe that the role of a software engineer begins and ends in writing code. That having to write code less means you have no more work to do. I don't see accountants still whining about the existence of calculators although apparently, people also had those worries back then.

While there is no question that the job market is shit and there are a lot of truly qualified developers out there who can't get a job, this specific view on AI makes me wonder if some of those who don't get hired are the ones who assume that just writing and memorising code could get them a job. Every job interview I had in the previous years focus on the "how's":

  • How would you design and implement this?
  • If you encountered this issue, how would you go about solving it?
  • What tools will you use and how will you use them?

Questions that cannot be answered by someone who "only" writes code but can be answered by someone who would probably benefit from AI-assisted coding because they know the "how's" provided that they know how to write clear instructions as well.

It's Not The Same As Vibe Coding

People started using the term "vibe coding" for any kind of development that makes use of LLMs. Vibe coding is when you blindly accept the code that tools like Cursor provide. This is common for a lot of people who want to build an app but don't know how to code. A portion of these vibe coders brag online about how we don't need developers anymore and then backtrack when they hit a roadblock that an LLM can no longer help them with or face bugs that the LLM-generated code produced. THAT is vibe coding. AI-assisted coding involves reviewing the code and setting up guard rails so that the LLM doesn't just wander off to some random place. It also requires knowledge of the LLM's limitations and applying it where it could actually be useful. This where a lot of AI users fail. They type something out and complain that it didn't do what they wanted to do. They are not human, they cannot deduce your intention by their years of personal experience with you. And they are definitely not mind readers.

When I first introduced Cursor to my colleague who is a very talented developer who (just like me before I ever tried it) disliked LLMs, he described it as "Like a mediocre young developer that is eager to overcomplicate things." I laughed because I understood what he meant. This is not to throw shade at all junior developers, we've all been there and some of us never really got out of there. You're fresh out of college, you studied a lot, learned all these concepts, got your degree, and maybe even graduated top of your class. You got your first job and your first task. They gave you a very simple task because you're just starting out. You felt the need to apply every complex algorithm you learned in school because that's what you knew.

Then came your first code review. Your senior thinks your code is overkill, unnecessary, and inefficient. Sometimes they say it nicely, sometimes not but regardless, you receive your first humbling experience and there will be more of that in the future. If you receive proper coaching, you learn even more things you weren't taught in school and things start making sense. You start working on larger and more complex systems that in order to work smoothly together requires seeing these systems as a whole. This is the limit of LLMs and what some, especially non-technical people, fail to understand. LLMs or what we call "AI" these days are predictive models. They do not "think" like humans do. They have a context window that once reached, some of the previous information is "forgotten". They cannot map out a large complex system but they can work on smaller portions of it. You take this into account whenever you ask it to do something.

You Are Not Disabled Without It

Some say that if these tools stop working or if there are server issues, people who use it cannot work anymore. This doesn't have to be true. Before LLMs, we often made this same joke about Stackoverflow. When Stackoverflow is down, some developers joke about not being able to work. Where do you think did some of the data that were used to train LLMs came from? Local documentations exist. Some of the companies I worked for block internet access for browsing. This is a tool that's supposed to make things easier. If the tool stops working, you still know what to do and will find ways to do it. You are a human, not a tool. Think.

It Might Replace Developers Who Can’t Adapt

It will not replace developers but it might replace those who can't adapt. I don't know when and I'm not gonna pretend to know every programming language or applications but I'm seeing more and more job posts requiring someone who knows how to use AI. I hear stories about developers being encouraged by their employers to start using AI. Whether this is a good thing or a bad thing, all that matters is that it will probably be here to stay. As more developers learn how to properly use it to make themselves more productive, it will only push companies to seek out people who have this skill. It might be the same as putting "English" and "Java" along with other skills and tools as job requirements.

Remember that comment my colleague made when he first tried Cursor? "Like a mediocre young developer that is eager to overcomplicate things." He followed it up with, "I will try to start using it more. If it's part of the future and it helps, why not? Might as well give it a shot." Months later, he was very productive with it and so far, we have not produced bugs in production. There was also not a single error while testing in lower environments that we couldn't track down due to spaghetti code. We review our own code and we review each other's code. We both know the language so anything that looks fishy stands out easily. I don't expect everyone to have the same experience but I see no harm in trying.

Share this article
The link has been copied!

Member comments