Discover how AI coding assistants like GitHub Copilot and ChatGPT enhance software development without replacing developers. Learn the benefits, risks, and best practices of AI augmented coding.
15-04-2025
AI is here to stay - it’s not just this month's or year's fad! It is a potentially powerful tool in the developer's toolkit.
However, just as many developer platforms that have gone before are not silver bullets, nor a panacea to solve all problems, AI and AI-generated code is not the solution to writing large, complex, maintainable, trustworthy and secure systems.
AI Coding Assistants do not replace software developers and are not something that can just be used to solve any problem by a non-developer. Even Github calls theirs "your AI pair programmer."
In this blog we will look at why AI is a tool you want to be using and looking at, but that it is not a solution with which to knock out your next killer app.
AI Coding Assistants
There are numerous commercial and free coding assistants available - from GitHub Copilot to AskCodi, to tabnine and Codeium and of course tools such as OpenAI’s ChatGPT. Indeed, there seem to be more AI Assistants out there than there are types of editors! All of them claim to simplify the development process and many claim to be 'all the AI coding assistant you will ever need!' ...But what is the reality, and will AI be helpful or a hinderance?
The Problem
There are some who think that the advent of AI Coding Assistants means the death knell for the developer. They could not be more wrong! This perception is in part due to articles such as CNBCs article claiming that some of the start-ups of Y Combinator have had 95% of their code written by AI systems!
It may be that an AI based system, when targeting a well-known and common problem, may be able to pop out a bit of code to help with a given solution; but that is not what we are looking at here. Similar tools with little or no AI in them have been available for years now.
The idea that an AI toolset can be used by a non-programmer to generate a complete system that can be deployed by an organisation and will be reliable, maintainable, stable and extensible over many years is, to be blunt, a fallacy! Current experience shows that such a belief will only lead to problems from deployment, through to long term maintenance and every step in between. It just ain’t happening!
The truth is that AI-generated code can be wrong, erroneous, contain examples of bad coding practices, utilise old libraries, exploit known issues, represent coding "anti-patterns" etc. Remember, these AI systems are only as good as the examples they are trained on and many code examples on the internet are not exemplary. In addition, many of the free versions of these AI assistants will explicitly state that they are only able to reference material prior to a specific date and so may not have access to the latest versions of libraries. As an example see the TechRepublic article on AI-generated code causing outages and security issues. In fact, ChatGPT has been shown to even suggest libraries that do not exist even though it apparently provided code examples to support that library (see ChatGPT hallucinates a software library that doesn't exist).
Also remember that these systems do not possess intelligence, per se, they are merely working on pattern recognition and statistics – very clever though they are they do not have the underlying knowledge that a developer has. This is backed up by academic research. An interesting article on ChatGPT is available via IEEE Spectrum which suggests that these tools lack ‘the critical thinking skills of a human.’
The Solution
Developers use tools everyday of their lives. When yours truly started out, we used editors such as vi, a compiler, a linker and a separate debugger, a version control system and so forth to develop our code.
Every step of the process could be laborious and time-consuming. Today, we mostly use an integrated development environment such as IntelliJs’ IDEA, PyCharm, GoLand or CLion, as well as Visual Studio Code or Visual Studio. These tools incorporate a sophisticated environment allowing for coding, compiler, (linking if appropriate), running, debugging code, viewing dependencies, integrating with source code control systems, CI/CD pipelines...
Although there are some developers who still use Emacs or Vim (which is better? discuss!) most developers use these tools because they make life easier, they help with those tasks which can be easily automated, and which can be tiresome or laborious.
I once heard a speaker say the best developers are the laziest developers – what they meant by this was that the best developers find ways to automate the boring, repetitive tasks so that they can focus on the real problems.
There are many aspects in a software development where essentially template code is used to solve a problem or integrate a technology. By template here we mean that the solution is essentially the same series of steps, but it might well require some modification to integrate into a particular system or be applied to a particular problem.
For a developer who has seen this situation before, they may be able to take what they have previously done and modify their existing solution and use it in the new scenario. Of course, for a developer who has not seen this before, they may need to spend significant time understanding the way to address the current situation even though it is not directly related to the business logic of the solution. In such a situation a more experienced developer might give them a hand or provide some direction.
Both scenarios are time-consuming - even if the developer has seen the problem before, they may need to spend time refreshing their memory and then applying it the new situation. In the second situation it has taken two developers time out from their current work to look at the previous solution or discuss how it might be applied.
This is where AI Augmented Coding comes in.
What is AI-Augmented Coding?
AI-Augmented Coding is the idea that the use of AI Coding tools extends and elevates the work of the developer – it does not replace them. Indeed, if it is done properly the human developer should be reviewing the suggestions or solutions generated by the AI system and verifying whether it meets their requirements – and not just in terms of does it work, but also is it secure, is it maintainable? Is it extensible? Will it scale appropriately? Can we test it? etc.
The way this can work is that the AI Coding Assistant may make a suggestion, just like a fellow developer might make a suggestion. It may generate sample code for the developer and indicate how to integrate it into the existing code base. It is a tool to aid with those repetitive, well-trodden tasks rather than one to use to solve intricate application specific problems.
Notice that this means that the human developer must still have the skills and experience to be able to analyse and potentially refine the solution generated by the AI Assistant. It is absolutely not the case that the developers’ skills will be diminished, rather that they will need to be able to apply their knowledge and skills to the AI systems code just as they would to any other developers work. Indeed, it is perhaps appropriate to consider that AI system to be a junior (and potentially suspect) developer who you need to keep an eye on!
The key here is that the AI system boosts the work of the developer; it does not replace it. The purpose is to improve the quality of the code developed by the human developer rather than just to blindly apply the code generate by the AI system.
Judicious use of AI coding assistants can improve the time taken to develop a solution, help with the creation of appropriate tests, improve the productivity of developers etc. Just as tools such as IntelliJ or Visual Studio can help improve the productivity and code quality of developers compared to very simple basic editors and compilers.
As a simple example, if I go back to using a very basic editor, I doubt I'll get code-colouring of keywords, I almost certainly won’t get code completion facilities and I am unlikely to have an integrated compiler, debugger and runner etc. It might be fun, but it's a big step backwards, productivity-wise.
AI-Augmented Coding and the Developer
Getting used to AI Augmented Coding practices takes time and very deliberate exposure to these tools - literally chatting to the AI agent to describe the problem and modify output (aka Prompt Engineering) - which can fundamentally effect the developers’ workflow.
An Example
Who loves to test? Typically, not developers! We are renowned for not being the best testers in the world, yet we are expected to write our own unit test cases. In fact when Test Driven Development (TDD) is employed we are expected to write the tests first! So maybe this is an area where AI can augment the work of the developer (the Qodo AI coding assistant is particularly good at this_). It has significant test case generation capabilities which can certainly save time and effort by may also help in generating better quality and more reliable tests!
When to trust AI?
Let us be clear here – the developer needs to review the solution proposed by the AI tools and not just blindly accept them. It is already clear that taking such a strategy can lead at best to significant technical debt and at worst to insecure, unstable, and dangerous applications.
Anything proposed by the AI tools such be subject to rigorous review. Chat groups and the web are full of examples of AI systems that proposed solutions that left security holes or used out of date libraries or failed to provide the required operational behaviour. Remember the AI systems making the suggestions is an eager assistant but one with little or no real understanding of what it is suggesting. Its happy to please but just a bit naïve – it’s that junior programmer again!
Anti-AI Brigade
There are of course those who cannot countenance the use of AI coding tools. This may be due to security concerns, copyright issues or just plain lack of trust it the technology. There are others who think that the use of AI tools is a waste of time, an unjustifiable horror which should be banned as only the developer should be trusted to write all the code!
In some ways it is similar to the arguments back in the late 70s and early 80s about lower-level languages and high-level languages. I well remember the suggestion that real programmers don't use high level languages! At the lower level you can write the most efficient code possible, whereas in a high-level language you are subject to the vagaries of the compiler etc...but this missed the point; there were and still are situations where assembler is appropriate; however, for the vast majority of programmers knowing which register a value is in is not the most important thing, rather, being able to express the logic of the application at an appropriate level is far more significant.
A similar argument can be made for automatic memory management systems in languages such as Java and C#. Do you want to focus on allocating and deallocating memory or do you want to focus on the application logic? Of course, there are still situations where manually allocating and deallocating memory will be beneficial but for many applications it is not the highest priority.
AI Mandates
One problem being encountered in the workplace is that on accession, senior managers may not understand the subtle difference between Augmented AI Coding and AI Coding. That is, they may be pressuring their developers to use more and more AI because they think it will solve their [replace with favourite problem here!] ...They may even be simply monitoring or measuring the number of AI-generated suggestions being used within the code developed by a programmer.
This is missing the point; Augmented AI Coding is an aid to the developer allowing the boring, repetitive jobs to be implemented quickly and effectively; leaving the developer to concentrate on those areas of the application that require their expertise such as the fundamental business logic of an application, ensuring that security is sufficient, that the system will be maintainable and extensible etc.
This cannot be measured by how many AI suggestions have been accepted, rather it’s in the style of development being adopted.
Another burning issue is that without bringing on junior developers, you don't get senior developers. Sure, their workflow may look a lot different now, but it's still important for succession planning and ensuring the longevity of your business to nurture new growth, and engender a desire to always be learning across your whole workforce.
Summary
Developers should not be afraid of the onset of AI; presently it isn’t going to replace them; rather it could make their working lives that much better. It is also important for business leaders not to fall for the lie that AI and AI coding systems will be a panacea for all problems and can supplant the developer within the software development lifecycle. In effect AI is redefining what it is to be a developer, and this should mean that the role is more interesting, more challenging and more exciting than ever!
We maintain a robust range of hands-on training courses covering Coding, Data Science, DevOps, Security and more - available for on-site and online delivery as part of a full-stack training programme or as short standalone workshops. We would love to discuss your learning needs - get in touch for a no-obligation scoping chat.
We use cookies on our website to provide you with the best user experience. If you're happy with this please continue to use the site as normal. For more information please see our Privacy Policy.