Software application development engineers have clearly been thinking about the impact of generative artificial intelligence on their coding environments. After all, the developers thinking about the impact of AI are often the ones building the AI models and machine learning (ML) engines that we are now applying to enterprise software environments. There is a growing consensus to move AI coding towards testing and debugging (rather than creating and creating), but the field still has more questions than answers. Perhaps the key now is to listen to multiple “expert” sources, multiple schools of thought, and multiple broader communities.
One vocal voice on the issue is Roman Khavronenko, engineer and co-founder of VictoriaMetrics, known for its time series database and monitoring solutions. Khavronenko agrees that generative AI paves the way for automated code generation, potentially improving developer productivity and reducing project turnaround times, but there are still caveats and concerns. Beneath the surface, there are pitfalls that could impact code quality and security, and even the future skillset of the software engineering workforce.
AI is not smart enough yet
“One of the main concerns with code generated by generative AI is the inherent lack of understanding on the part of the AI model. Unlike a human developer who knows the project’s objectives and various nuances, generative AI may end up generating a lot of irrelevant or inefficient code snippets that don’t understand the project’s objectives. The resulting inefficient or incorrect code requires close review and potential rewrites by the developer, negating the intended time-saving benefits.”
In addition to generative AI generating potentially worthless code, Khavronenko said there are growing concerns about copyrighted material, just as academic institutions have banned the use of some AI, particularly generative ones, due to the risk of plagiarism, meaning the possibility of copyrighted code raises concerns about intellectual property infringement.
Kavronenko pointed out how large language models (LLMs) depend on high-quality, unique code that is likely to be found in copyrighted works, and said excluding this code from training hampers the models’ ability to learn and produce efficient solutions.
“The question then arises of whether to exclude this content from the training process or use code snippets from open source projects with non-permissive licenses without the owner’s consent,” he says. “Copilot epitomizes this challenge: it trains on large datasets but uses post-generation filters to ensure that code from projects with non-permissive licenses is not suggested. This prevents piracy, but also sacrifices the quality of the output.”
Brain power or AI power?
As we work to combat growing concerns among industry, governments, and consumers about over-reliance on generative AI, where should we look for clues next? And should we always keep in mind the need to leverage human brainpower as the ultimate decision-making force? Rather than going back to the pre-generative AI era, think about ChatGPT’s failure and the fact that people stopped working.
“With this [outage incident] “With the uproar in mind, introducing generative AI into engineering could pose a threat to the skills development of junior engineers,” advises Khavronenko. “The ability to learn core coding concepts and problem-solving techniques is crucial, so over-reliance on AI-generated solutions could hinder this process. Additionally, junior developers may struggle to maintain code they didn’t write, potentially leading to knowledge gaps and future problems.”
But like most things, there’s good and bad: instead of turning to platforms like GitHub or Reddit to ask a colleague a question, and not knowing if they’ll get an answer, junior engineers can simply ask a generative AI and get an instant answer.
“In theory, this can be a productivity booster, as engineers will spend significantly less time waiting for a response and be able to continue with the project they were working on. For novice developers, AI can serve as a starting point for understanding code structures and functions, serving as a stepping stone to independent development. In addition, experienced developers will benefit from code completion suggestions and generation of basic functions, accelerating the development process,” Khavronenko noted.
Human and AI collaboration
The VictoriaMetrics team argues that to unlock the true potential of generative (and predictive, reactive, and other) AI in software engineering, a focus on human-AI collaboration is paramount. These tools should prioritize explaining the rationale for proposed code, facilitating developer understanding, and improving the maintainability of the generated codebase.
“Future iterations of AI should seamlessly integrate with developer environments and offer customization options to address specific project needs,” Khavronenko said. “Generative AI poses both opportunities and challenges for the software development industry. By recognizing the limitations of this technology and fostering a collaborative approach, we can harness its power to build software that is safe, efficient, and maintainable while ensuring human expertise remains at the forefront of the development process. However, engineers should not rely solely on AI for code generation.”
Many of Kavronenko’s thoughts are echoed by Dan Faulkner, chief product officer at SmartBear. Commenting on the coding assistant’s potential to accelerate and democratize the development of functional, resilient software, Faulkner believes the case will soon become compelling.
But Faulkner says that while the world is still “adjusting to coding assistants,” the assistants themselves are changing rapidly. With two moving targets, a final assessment is hard to make. Someone who is great at writing code may not be great at editing the assistant’s code, he says. In other words, they are different skills, and you should expect different results (and enthusiasm).
Human involvement
“The coding assistant is great for enriching your unit tests and increasing your test coverage,” Faulkner said. “These are [assistants are] It helps explain complex code or code written in languages unfamiliar to developers. And while the output of a coding assistant may be functionally correct, it’s still not good code (it’s buggy, unsafe, doesn’t follow guidelines, prevents reuse). Maintaining quality and security requires a skilled and diligent human in the loop.”
Faulkner points out that a lot of poor quality code is accepted into the world’s repositories due to lack of time, attention, experience, and confidence. He believes the total cost of ownership of this substandard code needs to be weighed against the up-front speed improvements that the world is (too?) focused on.
“The sudden increase in code velocity and the relative decline in code quality will require a new approach to software quality and security,” Faulkner said. “We at SmartBear use GitHub Copilot and believe it will provide a net benefit. We are doing this carefully, and have diligently and objectively considered the pros and cons.”
Computer programming, programming by computers? Well, to an extent, but for now it seems we have to take it one cautious step at a time, a Zen-like brick-by-brick approach to this journey.