#170: AI Coding Assistants - an introduction

In this episode I discuss the growing use of AI Coding Assistants in software development, particularly large language models like ChatGPT.

I explain how AI Coding Assistants can greatly improve productivity and efficiency for developers, with examples of popular products in the market.

AI Coding Assistants will not replace developers, but rather enhance their work.

Or listen at:

Published: Wed, 28 Jun 2023 15:00:43 GMT



Hello and welcome back to the Better ROI from Software Development Podcast.

Over the last couple of episodes, I've been looking into ChatGPT.

This week I want to start looking at a related subject, the growing use of large language models, like ChatGPT, in helping software development, the AI coding assistance.

While talking about any AI product, we have to think about the impact on people's jobs and livelihoods. But one quote I found while researching this episode struck me as important.

"It's not AI that is going to replace software developers. It's going to be software developers using AI that will replace software developers."

And the more I research this and spend time with tools like ChatGPT, the more that statement rings true.

For example, one of my technical superpowers is an ability to Google search to solve obscure technical problems. For example, if I encount an error message, I have built up the experience and knowledge to use Google and other tools to find related content, correlate it to my context, and distill that down to a workable solution.

This may seem like a simple thing, but trust me, few software developers do it well, or at least at the speed and the success that I manage - and it takes considerable time and experience to be able to make those mental connections filtering in and out the relevant content.

Now, imagine simply being able to ask an AI Coding Assistant to do that for you.

It has been built to understand those connections, and it can find and filter correlations and causation much faster than I can. And the AI Coding Assistant understands context - so even if the initial answer isn't correct, we can provide feedback and help it to course correct to get closer to the right answer - something that Google searching alone is not going to give you.

So while my Google search skills are a superpower, I now need to learn my next superpower, how to use an AI Coding Assistant.

Let's step back a moment, why would we want to have an AI Coding Assistant?

In short, software development is complex and expensive. Thus, anything that can help the developer productivity is a real boon. There is a considerable industry providing tools to software developers ranging from the free to the eye-wateringly expensive, and that industry exists for a reason. Even small productivity increases within software development can provide a game changer for an organization.

One of the closest related features to AI Coding Assistant is the auto-completion feature already provided by many software development tools.

Auto-completion is a feature that assists software developers as they write code. It provides suggestion and completes code statements based on the context of what they are typing. This helps developers write code faster and with fewer errors. The feature understands the programming language and frameworks being used and suggests appropriate code. It can even provide quick documentation to help developers understand how to use these code elements correctly.

This feature is integrated into development tools, so developers do not have to break their flow to use external tools. It improves the coding experience by reducing the need for manual typing and offering manual suggestions that align with best practice.

Auto-completion is already a valuable tool that assists developers by suggesting and completing code as they write, ultimately making the coding process more efficient and less error prone.

It's similar to how most business tools will help with automatic spelling and grammar checks, suggesting improvements, et cetera.

Now, AI coding assistance have the potential to amplify those benefits greatly, and of course, with the potential to greatly improve software developer productivity, the AI Coding Assistants is a rapidly growing sector.

A quick search of AI Coding Assistants will return you what seems to be an ever-growing list with many products clamoring to gain a foothold.

In addition to ChatGPT itself, possibly the most well known is GitHub Copilot from Microsoft. Copilot describes itself as

"GitHub Copilot is an AI pair programmer that offers autocomplete-style suggestions as you code. You can receive suggestions from GitHub Copilot either by starting to write the code you want to use, or by writing a natural language comment describing what you want the code to do. GitHub Copilot analyzes the context in the file you are editing, as well as related files, and offers suggestions from within your text editor. GitHub Copilot is powered by OpenAI Codex, a new AI system created by OpenAI.

GitHub Copilot is trained on all languages that appear in public repositories. For each language, the quality of suggestions you receive may depend on the volume and diversity of training data for that language. For example, JavaScript is well-represented in public repositories and is one of GitHub Copilot's best supported languages. Languages with less representation in public repositories may produce fewer or less robust suggestions."

Then there is Code Whisperer from AWS, which describes itself as:

"Amazon CodeWhisperer is a general purpose, machine learning-powered code generator that provides you with code recommendations in real time. As you write code, CodeWhisperer automatically generates suggestions based on your existing code and comments. Your personalized recommendations can vary in size and scope, ranging from a single line comment to fully formed functions.

CodeWhisperer can also scan your code to highlight and define security issues."

Then there is Tabnine, which describes itself as:

"Tabnine uses generative AI technology to predict and suggests your next lines of code based on context & syntax.

* Whole line code completions
* Full-function code completions
* Natural language to code

Get long, accurate, and advanced code completions to become a superpower 10x developer."

As I say, a quick search for AI Coding Assistants will return you a variety of products entering the market.

In this week's episode, I've introduced the idea of AI Coding Assistants, and why there is a growing market for them.

In next week's episode, I want to take a deeper look into the benefits that AI Coding Assistants can provide.

Thank you for taking the time to listen to this episode and look forward to speaking to you again next week.

ChatGPT transcript

This episode used content generated through conversation with ChatGPT. The below is the full conversation with ChatGPT.


List the advantages to a software developer using an ai coding assistant


Using an AI coding assistant can offer several advantages to software developers:

Increased productivity: An AI coding assistant can help automate repetitive tasks, provide code suggestions, and offer quick fixes for common errors. This accelerates development workflows and allows developers to write code more efficiently.

Code optimization: AI coding assistants often analyze code and provide suggestions for optimization. They can identify areas where code can be refactored or improved, leading to cleaner and more efficient implementations.

Learning and knowledge enhancement: AI coding assistants can provide real-time feedback, helping developers learn best practices and coding conventions. They can also offer insights into new technologies, libraries, and frameworks, keeping developers up to date with the latest advancements in the field.

Error detection and debugging: AI coding assistants can assist in identifying and fixing errors in code. By analyzing the codebase, they can catch potential bugs and offer suggestions to resolve them, saving developers time and effort in the debugging process.

Collaboration and code consistency: AI coding assistants can help maintain code consistency across a team by enforcing coding standards and style guidelines. They can also aid in collaborative coding, suggesting changes or improvements to code written by other team members.

Code documentation: AI coding assistants can generate documentation based on code analysis, making it easier for developers to document their code and keep it up to date. This can be particularly helpful when working on complex projects with multiple contributors.

Code completion and suggestions: AI coding assistants offer intelligent code completion, automatically suggesting code snippets, function signatures, and variable names based on context. This speeds up development and reduces the chances of introducing syntax errors.

Overall, using an AI coding assistant can enhance a developer's productivity, code quality, and learning experience, leading to faster development cycles and improved software outcomes.


What negatives could be felt for using ai coding assitants


While AI coding assistants provide numerous benefits, there are a few potential negatives to consider:

Overreliance and skill degradation: Relying too heavily on AI coding assistants may hinder developers from developing their problem-solving and coding skills. It's important to strike a balance between using the assistant as a tool and actively engaging in the coding process.

Lack of creativity and innovation: AI coding assistants primarily work based on existing patterns and code examples. They might not possess the creativity and innovative thinking that humans bring to the table. Developers might miss out on exploring novel approaches or unique solutions if they solely rely on AI suggestions.

False positives and incorrect suggestions: AI coding assistants may occasionally provide incorrect or misleading suggestions. While they strive to be accurate, they are limited by the data they have been trained on. Developers need to carefully review and validate the suggestions to avoid introducing bugs or errors into their code.

Limitations with domain-specific knowledge: AI coding assistants might not possess deep knowledge of specific domains or industries. They might struggle to understand complex business logic or domain-specific requirements, potentially leading to suboptimal or incorrect suggestions.

Privacy and security concerns: Using AI coding assistants often involves granting them access to the codebase, which may raise privacy and security concerns, especially when dealing with proprietary or sensitive information. It's crucial to carefully evaluate the security measures and data handling policies of the AI coding assistant provider.

Dependency on internet connectivity: Many AI coding assistants require a stable internet connection to function properly. In situations where internet access is limited or unreliable, developers may face disruptions or be unable to utilize the assistant's features fully.

Adoption and learning curve: Introducing an AI coding assistant to a development team requires time for learning and adaptation. Developers need to familiarize themselves with the tool's functionalities, integrate it into their workflow, and adjust their coding practices accordingly. This initial learning curve can temporarily impact productivity.

By understanding these potential negatives and taking appropriate measures, developers can make the most of AI coding assistants while mitigating any drawbacks. It's essential to strike a balance and leverage the assistant's capabilities effectively within the development process.


What is the future of ai coding assitants


The future of AI coding assistants holds great potential for further advancements and improvements. Here are a few aspects that may shape their development:

Enhanced contextual understanding: AI coding assistants will continue to evolve in their ability to understand code context, project requirements, and user intent. This will enable them to provide even more accurate and relevant suggestions, making them increasingly indispensable tools for developers.

Integration with more development tools: AI coding assistants will likely integrate seamlessly with various development environments, IDEs, and code editors, offering real-time assistance within the developer's preferred workflow. This integration will streamline development processes and make AI coding assistants more accessible to a broader range of developers.

Customization and adaptability: Future AI coding assistants may allow developers to customize their behavior and preferences according to their coding style, project requirements, and team conventions. This flexibility will enable developers to tailor the assistant's suggestions to their specific needs, enhancing productivity and code quality.

Deeper understanding of codebase and project context: AI coding assistants may become more proficient in understanding and analyzing entire codebases, enabling them to provide comprehensive suggestions and improvements beyond individual code snippets. They may offer insights into architectural design, code organization, and potential optimizations at a system level.

Collaboration and knowledge sharing: AI coding assistants could facilitate collaborative coding environments by providing real-time suggestions, conflict resolution, and code merging assistance. They may also serve as repositories of collective knowledge, storing and sharing best practices, patterns, and reusable code components across development teams.

Natural language interfaces: AI coding assistants might incorporate natural language processing capabilities, allowing developers to interact with them using more human-like language and commands. This could make the interaction more intuitive and reduce the learning curve for using the assistants effectively.

Smarter debugging and error prevention: Future AI coding assistants may become more adept at identifying and preventing errors at an early stage. They could offer sophisticated debugging support, intelligent error detection, and suggest fixes based on comprehensive code analysis, minimizing the time spent on debugging.

Overall, the future of AI coding assistants looks promising, with the potential to revolutionize software development by increasing productivity, improving code quality, and fostering collaboration among developers. As the technology progresses, developers can expect more powerful and intelligent coding assistants to assist them in their daily work.


Are ai coding assistants likely to support organisational process, concepts, styles, etc


Yes, AI coding assistants are likely to support organizational processes, concepts, styles, and other guidelines. As these assistants evolve, they can be designed to align with specific organizational coding standards, style guides, and development processes.

Here's how AI coding assistants can support organizational aspects:

Coding conventions and style: AI coding assistants can be trained to understand and enforce specific coding conventions and style guidelines followed by an organization. They can provide suggestions and corrections to ensure code consistency across projects and teams.

Project-specific requirements: Organizations often have project-specific requirements or domain-specific conventions. AI coding assistants can be configured to understand and adapt to these requirements, providing suggestions and validations that align with the organization's needs.

Design patterns and architectural principles: AI coding assistants can assist developers in implementing design patterns and adhering to architectural principles. They can recognize patterns in code and suggest appropriate design patterns or architectural improvements based on the organization's preferred approaches.

Quality assurance and code reviews: AI coding assistants can aid in code reviews by automatically detecting potential issues, security vulnerabilities, or performance bottlenecks. They can assess code against organizational quality standards and provide feedback to ensure code quality and adherence to best practices.

Integration with existing tools and workflows: AI coding assistants can be integrated with existing development tools and workflows, ensuring seamless adoption within an organization's software development processes. They can provide suggestions and feedback directly within IDEs, code editors, or version control systems, enabling developers to work efficiently.

Knowledge sharing and onboarding: AI coding assistants can contribute to knowledge sharing within an organization by storing and retrieving code snippets, best practices, and project-specific insights. They can assist in onboarding new developers by providing guidance and context-specific suggestions.

By incorporating organizational processes, concepts, styles, and guidelines into AI coding assistants, organizations can ensure that these tools align with their unique requirements and contribute to consistent and efficient software development practices.


Explain more about the onboarding benefits


Certainly! AI coding assistants can offer several benefits during the onboarding process of new developers in an organization:

Guided learning: AI coding assistants can provide contextual guidance to new developers, helping them understand the organization's coding conventions, best practices, and style guidelines. They can offer real-time suggestions and explanations, aiding in the learning process and reducing the time required for new developers to become familiar with the coding standards.

Code examples and snippets: AI coding assistants can serve as repositories of code examples and snippets specific to the organization's projects and domain. New developers can leverage these examples to understand common patterns, implementations, and approaches followed by the organization. This accelerates their learning and enables them to ramp up quickly.

Error prevention and feedback: AI coding assistants can proactively detect potential coding errors, security vulnerabilities, or performance issues in the code written by new developers. By offering real-time feedback and suggestions for improvement, the assistants help new developers avoid common pitfalls and ensure their code adheres to the organization's quality standards.

Consistency and adherence to standards: AI coding assistants can enforce coding standards and style guidelines during the onboarding process. They can automatically flag deviations and provide suggestions to align code written by new developers with the organization's established practices. This ensures consistency across the codebase and promotes adherence to the organization's coding standards from the start.

Efficient problem-solving: AI coding assistants can assist new developers in problem-solving by offering suggestions and insights based on their understanding of the codebase and existing patterns. This can help new developers navigate through complex codebases and identify potential solutions more efficiently.

Continuous learning and improvement: AI coding assistants can learn from the coding practices and patterns of experienced developers in the organization. As new developers interact with the assistants, their feedback and interactions contribute to improving the assistants' capabilities over time, creating a cycle of continuous learning and improvement.

By leveraging AI coding assistants during the onboarding process, organizations can facilitate the integration of new developers into their development teams more effectively. These assistants provide valuable guidance, promote adherence to coding standards, and foster a culture of learning and collaboration. Ultimately, this leads to faster onboarding, improved code quality, and enhanced productivity within the organization.


Do we expect ai coding assistants to be an essential tool for any software developer? If not not yet, when?


While AI coding assistants offer significant benefits, it's not guaranteed that they will become an essential tool for every software developer in the immediate future. The adoption and necessity of AI coding assistants can vary depending on factors such as the developer's preferences, project complexity, development environment, and available resources.

However, as AI coding assistants continue to evolve and improve, there is a possibility that they will become increasingly essential tools for software developers. The advancements in natural language processing, code understanding, and machine learning techniques will enhance the capabilities of AI coding assistants, making them more valuable in various scenarios.

The point at which AI coding assistants become indispensable tools for all software developers will depend on several factors, including:

Advancements in AI technology: Continued advancements in AI, particularly in natural language processing, code analysis, and context understanding, will contribute to the effectiveness and reliability of AI coding assistants. As these technologies mature, the assistants will become more capable and reliable in assisting developers across different programming languages and development environments.

Integration and compatibility: Seamless integration of AI coding assistants into popular development environments, IDEs, and code editors will play a crucial role in their widespread adoption. When developers can easily incorporate the assistants into their existing workflows without significant disruptions, the barrier to entry will be lowered, making them more accessible and likely to be adopted widely.

Trust and reliability: Developers need to trust the suggestions and assistance provided by AI coding assistants. As the assistants demonstrate higher accuracy, better understanding of code context, and reduced false positives, developers will rely on them more confidently. Building trust will be essential for wider acceptance and adoption.

Industry support and best practices: Widespread adoption of AI coding assistants may also depend on the support and endorsement of influential organizations, industry leaders, and established coding standards bodies. When these entities recognize the value and benefits of AI coding assistants and endorse their use, it can accelerate their adoption across the software development community.

While it is challenging to predict the exact timeframe, it is conceivable that AI coding assistants could become an essential tool for many software developers within the next several years. As the technology continues to advance and address current limitations, AI coding assistants have the potential to significantly enhance developer productivity, code quality, and collaboration in the software development process.


Compare the ai coding experience to IDE auto completion like visual studio's intillisense


AI coding assistants and IDE auto-completion, such as Visual Studio's IntelliSense, serve similar purposes of assisting developers in their coding tasks. However, there are notable differences between the two:

Contextual Understanding: While IDE auto-completion like IntelliSense provides suggestions based on the current context within the code editor, AI coding assistants leverage machine learning algorithms to analyze a broader context. They consider patterns from vast codebases and take into account code semantics, coding conventions, and best practices to offer more comprehensive and intelligent suggestions.

Code Quality and Refactoring: AI coding assistants often go beyond simple code completion and offer suggestions for code refactoring, optimizations, and error prevention. They can identify potential code smells, performance bottlenecks, and security vulnerabilities, providing valuable feedback to improve code quality. IDE auto-completion typically focuses on providing suggestions based on existing code within the project.

Learning and Adaptability: AI coding assistants continuously learn from the code they analyze and interactions with developers. They can adapt to specific coding styles, project requirements, and evolving best practices. IDE auto-completion, while customizable to some extent, primarily relies on predefined code patterns and rules.

Integration with Development Workflow: IDE auto-completion tools like IntelliSense are tightly integrated into the IDE and provide suggestions within the coding environment. AI coding assistants, on the other hand, can be integrated with various development environments, IDEs, or code editors, extending their functionality beyond a specific tool and offering cross-platform support.

Language Support: IDE auto-completion tools are typically designed to support specific programming languages or frameworks within a specific IDE. AI coding assistants, depending on their design, can potentially offer support for multiple programming languages and frameworks, making them more versatile in multi-language or diverse development environments.

Autonomy and Assistance: AI coding assistants can provide more proactive assistance, offering suggestions and guidance as developers write code. They can detect potential issues and provide recommendations even before the developer initiates a request. IDE auto-completion, on the other hand, primarily responds to triggers or manual requests from the developer.

In summary, AI coding assistants provide a more advanced and intelligent coding experience compared to IDE auto-completion like IntelliSense. They leverage machine learning algorithms, analyze broader code contexts, offer suggestions beyond simple completion, and continuously learn and adapt. While IDE auto-completion is still a valuable and widely used feature, AI coding assistants have the potential to revolutionize the coding experience by enhancing productivity, code quality, and error prevention.


Summarise IDE auto-completion like IntelliSense


IDE auto-completion, exemplified by IntelliSense in Visual Studio, is a feature that suggests code completions and provides context-aware suggestions as developers write code. It offers the following key characteristics:

Contextual suggestions: IntelliSense analyzes the code context, including variables, functions, and available libraries, to provide relevant suggestions as developers type. It assists in completing code statements, method signatures, and property names.

Quick documentation: IntelliSense often displays tooltips or brief documentation for suggested items, offering information on function parameters, return types, and available options. This helps developers understand the usage and purpose of code elements.

Customizable behavior: Developers can often customize IntelliSense preferences, including the order and type of suggestions, enabling them to tailor the auto-completion experience to their preferences and coding style.

Language and framework support: IntelliSense is typically designed to support specific programming languages and frameworks. It provides language-specific suggestions and understands language-specific constructs, making it more effective for code completion within those languages.

Trigger-based suggestions: IntelliSense suggestions are typically triggered by specific keystrokes or symbols, such as typing a period (".") to access member suggestions or pressing Ctrl+Space to invoke suggestions explicitly.

Integration within IDE: IntelliSense is tightly integrated into the IDE, providing suggestions directly within the code editor. It ensures a seamless coding experience without the need for external tools or plugins.

Overall, IDE auto-completion like IntelliSense enhances developer productivity by reducing manual typing and offering relevant suggestions in real-time. It provides contextual assistance, improves code accuracy, and helps developers explore available options and code elements within the integrated development environment.


Summarise IDE auto-completion like IntelliSense for a non technical managerial audience


IDE auto-completion, such as IntelliSense in Visual Studio, is a feature that assists software developers as they write code. It provides suggestions and completes code statements based on the context of what they are typing. This helps developers write code faster and with fewer errors.

IntelliSense understands the programming language and frameworks being used and suggests appropriate code elements like functions, variables, and properties. It even provides quick documentation to help developers understand how to use these code elements correctly.

This feature is seamlessly integrated into the development environment, so developers don't need to use external tools. It improves the coding experience by reducing the need for manual typing and offering helpful suggestions that align with best practices.

In summary, IDE auto-completion like IntelliSense is a valuable tool that assists developers by suggesting and completing code as they write, ultimately making the coding process more efficient and less error-prone.