What AI-assisted programming can do for programmers

Posted on Sat 09 November 2024 in Journal

Abstract what does AI-assisted programming can help programmer
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2024-11-09
License CC-BY-NC-ND 4.0

最近一段时间,使用了一些 AI 编程工具, 在我的 VSC 上安装了 Codeium, Tongyi, 以及试用了一段时间的 Cursor

这些 AI 工具, 的确是程序员的好帮手,不仅能提高生产力、减少重复劳动,还能帮忙解决烧脑的问题, 在写代码的时候, 有时候它的提示比我的脑子转得还快, 虽然有时有点过于勤快, 自以为是的给出了一些错误提示。

以前是 "内事不决定问度娘, 外事不决问谷哥", 现在都问 ChatGPT 了, 我也写了一些小工具, 通过程序构建自己的 prompt, 调用 ChatGPT 的接口, 得到更准确详细的建议。现在大模型接口 API 的调用费用很便宜, 象我常用的 DeepSeek, 十块钱用到现在还没花完.

自从用了这些 AI 辅助工具, 我写注释也比以前勤快多了, AI 能根据我定义的接口和写的注释, 快速生成代码, 我主要是把握大方向, 关注关键的细节, 效率翻倍.

总结一下, AI可以通过以下方式帮助咱们程序员:

方式

1) 代码生成和自动补全

AI工具(比如GitHub Copilot和ChatGPT)能根据你的注释或半截代码生成代码片段、补全代码行,甚至直接给出整段函数。写代码速度快得飞起,还能更准确哦!

2) 调试和错误检测

AI能帮忙找Bug,还能给出修复建议,经常发现那些“难以察觉”的问题。像DeepCode和GitHub的CodeQL这类工具可以分析代码中的潜在漏洞并提出改进方案,让代码更安全更牢靠!

3) 自动化测试

AI可以根据代码分析生成测试用例,覆盖更多测试场景,增加代码覆盖率。这样可以更早发现Bug,确保代码质量,真是节省开发人员的时间和精力。

4) 文档生成助手

AI能自动生成函数、类和模块的文档,再也不用手动去写繁琐的注释了!这让代码库更易维护,也更容易让其他开发人员理解。

5) 代码重构和优化

AI工具会提出代码重构建议,提高代码的可读性、性能和可维护性。这样能保持代码库整洁、统一,还特别适合大型项目,省心省力。

6) 学习和知识共享

AI工具能为复杂算法或不熟悉的库和框架提供解释,让开发人员在工作中边学边做。对新手和专家来说,这都是宝贵的学习资源。

7) 快速原型开发

AI可以根据高层描述快速生成原型,团队能在正式实现前尝试不同的想法,想试就试,灵活度满分。

8) 特定场景支持

针对Web开发、数据科学和机器学习领域的AI工具,能在数据预处理、模型选择和API集成等专业任务中提供帮助。再也不怕应对专业场景啦!

9) 代码评审助手

AI在代码评审中可以提出改进建议、检查编码标准并提供优化意见,让代码审查变得又快又彻底!

总的来说,AI辅助编程让我们更多地关注创造性和高层次任务,减少重复的体力活,确保更高的开发质量和效率。

示例

  1. 代码生成和自动补全

  2. 示例:开发者正在编写一个用于处理用户注册的函数。他在 Python 中键入 def register_user(username, password): 并注释“检查用户名是否已存在,如果不存在,则将用户添加到数据库”。AI 编程助手可以自动生成以下代码片段:

def register_user(username, password):
    if user_exists(username):
        return "User already exists"
    else:
        add_user_to_db(username, password)
        return "User registered successfully"

def user_exists(username):
    # 检查数据库中是否存在用户名
    pass

def add_user_to_db(username, password):
    # 将用户添加到数据库
    pass

这样,AI 辅助编程工具可以快速生成函数的基础结构,使得开发更高效。

  1. 调试和错误检测

  2. 示例:在一个 Python 项目中,开发者遇到了一个 IndexError: list index out of range 错误。AI 工具可以分析代码并指出错误的位置,同时建议可能的修复。例如,它可能提示:“检查 list 的长度是否大于所需的索引”。并提供修改示例:

if index < len(my_list):
    print(my_list[index])
else:
    print("Index out of range")

这帮助开发者迅速定位并修复错误,减少调试时间。

  1. 自动化测试

  2. 示例:开发者刚刚编写了一个函数 calculate_discount(price, discount) 来计算折扣价。AI 工具会根据函数自动生成多个测试用例:

import unittest

class TestDiscountCalculation(unittest.TestCase):
    def test_positive_discount(self):
        self.assertEqual(calculate_discount(100, 10), 90)

    def test_zero_discount(self):
        self.assertEqual(calculate_discount(100, 0), 100)

    def test_full_discount(self):
        self.assertEqual(calculate_discount(100, 100), 0)

    def test_negative_price(self):
        with self.assertRaises(ValueError):
            calculate_discount(-100, 10)

if __name__ == "__main__":
    unittest.main()

AI 自动生成的测试覆盖了各种常见情况,帮助确保函数的可靠性。

  1. 文档协助

  2. 示例:开发者编写了一个函数 fetch_data_from_api(api_url) 来从 API 获取数据。AI 工具可以自动为该函数生成文档字符串,帮助其他人理解该函数的用途:

def fetch_data_from_api(api_url):
    """
    从指定的 API URL 获取数据。

    参数:
    api_url (str): API 的 URL。

    返回:
    dict: JSON 格式的响应数据。

    抛出:
    ValueError: 如果 URL 格式不正确。
    """
    # 函数体

生成的文档使代码更具可读性,方便他人使用和维护。

  1. 代码重构和优化

  2. 示例:开发者写了以下函数来检查列表中的重复项,但代码效率不高。

def check_duplicates(items):
    for i in range(len(items)):
        for j in range(i + 1, len(items)):
            if items[i] == items[j]:
                return True
    return False

AI 工具建议将其重构为更高效的方式,使用集合提高速度:

def check_duplicates(items):
    return len(items) != len(set(items))

重构后的代码效率更高,特别是在处理大量数据时。

  1. 学习和知识共享

  2. 示例:开发者希望理解如何使用递归来实现阶乘计算。AI 编程助手可以提供递归实现的示例代码,并解释递归的概念:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

解释:递归函数 factorial 通过不断调用自身,直到 n 等于 0 时停止递归。AI 工具可以用这种方式帮助开发者学习新概念。

  1. 快速原型开发

  2. 示例:开发者正在构思一个基本的电子商务平台的产品展示页面。AI 工具可以生成一个简单的 HTML 和 CSS 模板,展示产品图片、名称和价格。

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .product {
            border: 1px solid #ddd;
            padding: 16px;
            text-align: center;
        }
        .product img {
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="product">
        <img src="product.jpg" alt="Product Image">
        <h2>Product Name</h2>
        <p>$19.99</p>
    </div>
</body>
</html>

这样开发者可以快速构建页面雏形,便于后续改进和测试。

  1. 特定用例支持

  2. 示例:在数据科学项目中,开发者需要处理大量的文本数据。AI 工具可以帮助开发者预处理文本,例如去除停用词、进行分词和词干提取:

from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
from nltk.stem import PorterStemmer
import re

def preprocess_text(text):
    text = re.sub(r'\W', ' ', text)  # 移除非字母字符
    words = text.lower().split()
    stemmer = PorterStemmer()
    return [stemmer.stem(word) for word in words if word not in ENGLISH_STOP_WORDS]

AI 工具生成了整个预处理函数代码,简化了复杂的文本处理任务。

  1. 代码审查协助

  2. 示例:在代码审查中,AI 工具检测到以下 JavaScript 代码中没有处理用户输入的安全性问题:

function greetUser(input) {
    return "Hello, " + input + "!";
}

AI 工具建议使用适当的转义来防止 XSS 攻击,并生成改进后的代码:

function greetUser(input) {
    const sanitizedInput = input.replace(/</g, "<").replace(/>/g, ">");
    return "Hello, " + sanitizedInput + "!";
}

AI 工具不仅识别出潜在的漏洞,还提供了解决方法,有助于提高代码的安全性和可靠性。

这些示例展示了 AI 在不同编程环节中如何为开发者提供支持。无论是加速开发、提高代码质量,还是帮助理解新概念,AI 工具都可以帮助开发者专注于更具创造性的工作,提升编程效率。


本作品采用 AI 辅助创作。