#171: AI Coding Assistants - the benefits

In this episode, I discusses the expected benefits of using AI Coding Assistants in software development.

These benefits include:

  • increased productivity,
  • code optimization,
  • learning and knowledge enhancement,
  • error detection and debugging,
  • collaboration and coding consistency,
  • code documentation,
  • and code completion and suggestions.

Or listen at:

Published: Wed, 05 Jul 2023 15:00:45 GMT

Transcript

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

Last week I introduced the idea of AI Coding Assistants, the use of large language models like ChatGPT, to assist software developers.

In this week's episode, I want to cover the key benefits that AI coding assistance can provide. I'll be looking at how they can help you with: * increased productivity, * code optimization, * learning and knowledge enhancement, * error detection and debugging, * collaboration and coding consistency, * code documentation, * code completion and suggestions.

Let's take each of these in turn;

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.

Software development is expensive, so the longer it takes, the worse the ROI - be it cost versus benefit or missed opportunity cost. However, the fallacy of simply work faster is counterproductive.

Simply trading speed for quality actually makes the ROI worse, not better. We still need to keep the good practices to produce quality secure code, but the AI coding assistant can help the developer reduce the unnecessary toil.

Code optimization.

AI Coding Assistant 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.

Given the priorities we put onto software developers, making efficient software code is often pushed to one side - unfortunately, a bit like security.

In many ways, delaying optimization is correct. Computer scientist, Michael A. Jackson is credited with saying:

"first, make it work, then make it right. Finally make it fast."

This quote correctly emphasizes the importance of focusing on getting the code functional before optimizing it for performance.

Unfortunately, we normally incentivize our software developers to focus only on getting it functional - then moving on to the next task before making it right, let alone fast.

Making the code right will reduce time taken to fix or amend the code. Making it fast will generally result in lower computing costs and happier users.

Learning and knowledge enhancement.

AI coding assistance can provide real-time feedback, helping developers learn best practice 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.

I've repeated countless times how important I believe learning is to software development. Software development is a continually evolving field - it's still very much in its infancy. What could have been cutting edge yesterday, may have been superseded maybe even multiple times since.

Now, I've worked with developers who seem to have an almost clairvoyant power to know the up to minute changes in the industry, but most developers don't have that power, including myself. I spend more time than anyone else I know trying to keep up to date, so anything that can help is welcomed.

Error detection and debugging.

AI Coding Assistants can assist in identifying and fixing errors in code. By analyzing the code base, they can catch potential bugs and offer suggestions to resolve them, saving developers time and effort in the development process.

Bugs in software development are a fact of life.

They are inevitable.

The important thing is to catch them as close to the developer adding them as possible. The greater distance from when the developer creates the bug and it being spotted, the greater the expense to both the reputation and the remediation.

This is why activities like unit testing, peer review, and small batch sizes are so valuable - they help us to surface bugs while there are a fraction of the impact they could be otherwise. Thus, another method of spotting early can only be welcomed.

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.

Software development is a team sport.

While I've certainly worked in a rockstar environment as a team of one, it's neither healthy for the individual, the software or the organization.

In software development, the team is king, so anything that helps the team work together is a boon.

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.

Few developers really enjoy documentation - and fewer still will insist that it is kept in line with code as it changes - and of those most are being pushed by the organization to be doing "real work".

I certainly have a love-hate relationship with documentation. It can be exceptionally beneficial if done well and kept relevant. It can actually be a huge negative if it's done poorly or is outta date.

And of course, it can feel like a laborious activity when you are preparing it for some future person, possibly even your future self. But it does help to provide and maintain documentation that could be helpful in large teams from onboarding new staff, and even to remind your future self why you did what you did.

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 chance of introducing syntax errors.

This saves the developer time coming out of the tools to look something up. It saves that searching on the internet and having to find the right article or documentation to help them with their work. This helps keep the developer in the zone and productive.

It's another leap forward in reducing the effort needed for the developer to find the answer to a question.

It may seem trivial, but let's consider this by stepping back to the start of my career and how I would've had to have done it then.

If I was stuck, I would have to down tools, I would need to travel into town, go to the bookshop, find an appropriate book on the subject, and hope to find the answer to my question (without the need to actually buy the book). Then I would have to wait until I got back to work to validate if the solution I found actually worked.

So if I was stuck, I could potentially be stuck for days or at least until I had time to go to the bookshop.

The internet was obviously a great improvement on that, cutting it down to minutes or hours for research.

The AI coding assistant can potentially give it to me in seconds without having to leave the development environment - limiting the impact to my cognitive flow.

In this episode, I wanted to go through some of the expected benefits from AI Coding Assistants.

I've talked about how they can help with: * increased productivity, * code optimization, * learning and knowledge enhancement, * error detection and debugging, * collaboration and coding consistency, * code documentation, * code completion and suggestions.

Putting it in another context, imagine you are writing a legal contract between two parties. Without reasonable training experience, starting with a blank page will be daunting, if not unthinkable. An AI assistant could help you draft that legal contract, providing sample text, clarifying legal terms, and avoiding errors in its generation.

And the word "assistant" is key here, and for once, Microsoft's marketing department has done a great job by using the name "CoPilot", the AI is here to assist - but it's still you in charge, still you writing the contract, and still the developer writing the code.

As an aside, software developers are by nature a technologically advanced lot. Thus, their experience with AI Assistants can be seen as a precursor for the use in many other fields.

Thus, don't expect to be too long before Microsoft Word has that AI Assistant helping you with that contract.

In next week's episode, I want to look at the potential negatives of using AI Coding Assistants.

Thank you for taking the time to listen to this podcast, and I 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.


User:

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

ChatGPT:

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.


User:

What negatives could be felt for using ai coding assitants

ChatGPT:

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.


User:

What is the future of ai coding assitants

ChatGPT:

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.


User:

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

ChatGPT:

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.


User:

Explain more about the onboarding benefits

ChatGPT:

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.


User:

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

ChatGPT:

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.


User:

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

ChatGPT:

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.


User:

Summarise IDE auto-completion like IntelliSense

ChatGPT:

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.


User:

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

ChatGPT:

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.