Skip to content

文章

使用生成式AI提升编程效率的5种方法

2025年1月31日 • 10 分钟阅读

使用生成式AI提升编程效率的5种方法

作为一名在该领域拥有多年经验的软件工匠,自2023年ChatGPT推出以来,我见证了生成式AI对软件开发的影响。通过实际应用,我确定了利用这项技术提高生产力的五种强大方法。

1. 增强代码搜索

我使用生成式AI最频繁的方式是搜索技术信息。传统搜索引擎需要精确的术语,而生成式AI能够理解概念和上下文。例如,当搜索方法参数优化原则时,我会问:

提示

什么是编程概念的名称,即你应该只传递方法实际使用的参数?向方法传递未被该方法使用的参数会创建不必要的依赖关系。

生成式AI理解我描述的概念(迪米特法则)并提供正确答案,消除了多次搜索的需要。

2. 高效代码生成

生成式AI在自动化重复编程任务方面表现出色。最近,我需要将一个大型JSON文件转换为数据库插入语句。我没有编写繁琐的转换代码,而是向AI提供了JSON数据,并给出了生成MS SQL Server插入语句的明确指令。这种方法节省了数小时的手动编码时间,并减少了出错的可能性。

提示:

使用下面提供的JSON数据,生成用于MS SQL Server的插入语句,插入到dbo.Users表中。

[  
{  
"Username": "musiclover87",  
"Lastname": "Smith",  
"Firstname": "Alice",  
"Birthdate": "1987-06-12",  
"Password": "password123",  
"FavoriteIceCream": "Chocolate Chip Cookie Dough",  
"FavoriteSuperhero": "Spider-Man"  
},  
{  
"Username": "bookworm92",  
"Lastname": "Johnson",  
"Firstname": "Bob",  
"Birthdate": "1992-03-21",  
"Password": "securePassword",  
"FavoriteIceCream": "Mint Chocolate Chip",  
"FavoriteSuperhero": "Batman"  
},  
{  
"Username": "gamergirl01",  
"Lastname": "Williams",  
"Firstname": "Carol",  
"Birthdate": "2001-11-05",  
"Password": "gamer4life",  
"FavoriteIceCream": "Strawberry",  
"FavoriteSuperhero": "Wonder Woman"  
},  
{  
"Username": "techieguy95",  
"Lastname": "Brown",  
"Firstname": "David",  
"Birthdate": "1995-08-18",  
"Password": "techmaster",  
"FavoriteIceCream": "Vanilla Bean",  
"FavoriteSuperhero": "Iron Man"  
},  
{  
"Username": "foodiequeen89",  
"Lastname": "Davis",  
"Firstname": "Emily",  
"Birthdate": "1989-04-29",  
"Password": "delicious123",  
"FavoriteIceCream": "Salted Caramel",  
"FavoriteSuperhero": "Captain Marvel"  
},  
{  
"Username": "traveler76",  
"Lastname": "Miller",  
"Firstname": "Frank",  
"Birthdate": "1976-12-02",  
"Password": "adventuretime",  
"FavoriteIceCream": "Coffee",  
"FavoriteSuperhero": "Thor"  
},  
{  
"Username": "fitnessfanatic98",  
"Lastname": "Wilson",  
"Firstname": "Grace",  
"Birthdate": "1998-09-15",  
"Password": "strongandfit",  
"FavoriteIceCream": "Mango Sorbet",  
"FavoriteSuperhero": "Black Widow"  
},  
{  
"Username": "photographylover85",  
"Lastname": "Moore",  
"Firstname": "Henry",  
"Birthdate": "1985-05-23",  
"Password": "pictureperfect",  
"FavoriteIceCream": "Pistachio",  
"FavoriteSuperhero": "Superman"  
},  
{  
"Username": "musicjunkie93",  
"Lastname": "Taylor",  
"Firstname": "Isabella",  
"Birthdate": "1993-02-08",  
"Password": "musicislife",  
"FavoriteIceCream": "Rocky Road",  
"FavoriteSuperhero": "Black Panther"  
},  
{  
"Username": "sportsfanatic88",  
"Lastname": "Anderson",  
"Firstname": "Jack",  
"Birthdate": "1988-10-30",  
"Password": "goteamgo",  
"FavoriteIceCream": "Cookies and Cream",  
"FavoriteSuperhero": "Captain America"  
}  
]

输出:


-- 向dbo.Users表插入记录

INSERT INTO dbo.Users (Username, Lastname, Firstname, Birthdate, Password, FavoriteIceCream, FavoriteSuperhero)
VALUES 
('musiclover87', 'Smith', 'Alice', '1987-06-12', 'password123', 'Chocolate Chip Cookie Dough', 'Spider-Man'),
('bookworm92', 'Johnson', 'Bob', '1992-03-21', 'securePassword', 'Mint Chocolate Chip', 'Batman'),
('gamergirl01', 'Williams', 'Carol', '2001-11-05', 'gamer4life', 'Strawberry', 'Wonder Woman'),
('techieguy95', 'Brown', 'David', '1995-08-18', 'techmaster', 'Vanilla Bean', 'Iron Man'),
('foodiequeen89', 'Davis', 'Emily', '1989-04-29', 'delicious123', 'Salted Caramel', 'Captain Marvel'),
('traveler76', 'Miller', 'Frank', '1976-12-02', 'adventuretime', 'Coffee', 'Thor'),
('fitnessfanatic98', 'Wilson', 'Grace', '1998-09-15', 'strongandfit', 'Mango Sorbet', 'Black Widow'),
('photographylover85', 'Moore', 'Henry', '1985-05-23', 'pictureperfect', 'Pistachio', 'Superman'),
('musicjunkie93', 'Taylor', 'Isabella', '1993-02-08', 'musicislife', 'Rocky Road', 'Black Panther'),
('sportsfanatic88', 'Anderson', 'Jack', '1988-10-30', 'goteamgo', 'Cookies and Cream', 'Captain America');

3. 无缝代码转换

代码转换是生成式AI证明其价值的另一个领域。在最近一个将C#应用程序转换为Python的项目中,我们以两种关键方式利用了AI:

  1. 从Python到C#的直接函数转换

  2. 从Entity Framework到SQLAlchemy的复杂ORM转换

这种能力显著加速了我们的迁移过程,并确保了转换的一致性。

将Python转换为C#:

提示:

将以下Python代码转换为C#。
def reverse_string(text): 
"""
Reverses a given string. 
	Args: text: The string to be reversed. 

Returns: The reversed string.

""" 
return text[::-1]

输出:

/// <summary>
/// 反转给定的字符串。
/// </summary>
/// <param name="text">要反转的字符串。</param>
/// <returns>反转后的字符串。</returns>
public static string ReverseString(string text)
{
	return new string(text.Reverse().ToArray());
}

4. 自动化代码文档

文档是必需的,但往往很繁琐。生成式AI通过两种方式简化了这个过程:

  1. 代码总结:分析现有代码并提供清晰、简洁的摘要

  2. 文档头生成:创建维护代码质量标准的全面方法文档

例如,在记录排序算法或复杂业务逻辑时,AI可以生成遵循团队标准和最佳实践的清晰、准确的文档。

提示:

为下面的函数生成文档头,添加头部并打印带有文档头的完整函数。
def bubble_sort(list_):
  n = len(list_) 
  for i in range(n):
    # Flag to optimize, if no swaps occur, the list is sorted
    swapped = False
    # Last i elements are already in place
    for j in range(0, n-i-1):
      # Swap if the element found is greater than the next element
      if list_[j] > list_[j+1]:
        list_[j], list_[j+1] = list_[j+1], list_[j]
        swapped = True
    # If no two elements were swapped in inner loop, the list is sorted
    if not swapped:
      break
  return list_

输出:

def bubble_sort(list_):
    """
    使用冒泡排序算法对给定列表进行排序。

    Args:
        list_: 要排序的元素列表。元素必须是可比较的。

    Returns:
        包含原始列表中所有元素按升序排列的新列表。
        
    Example:
        >>> bubble_sort([64, 34, 25, 12, 22, 11, 90])
        [11, 12, 22, 25, 34, 64, 90]
    """
    n = len(list_) 
    for i in range(n):
        # Flag to optimize, if no swaps occur, the list is sorted
        swapped = False
        # Last i elements are already in place
        for j in range(0, n-i-1):
            # Swap if the element found is greater than the next element
            if list_[j] > list_[j+1]:
                list_[j], list_[j+1] = list_[j+1], list_[j]
                swapped = True
        # If no two elements were swapped in inner loop, the list is sorted
        if not swapped:
            break
    return list_

5. 应用程序脚手架

生成式AI最令人印象深刻的应用可能是其生成初始应用程序结构的能力。给定清晰的模式或规范,AI可以创建:

  • 数据库创建脚本

  • ORM映射

  • 基本API端点

  • 初始UI实现

这种能力显著减少了在样板代码上花费的时间,并确保了进一步开发的一致基础。

提示:

你是一名在大公司工作的软件工程师。使用以下数据库模式,生成在Postgres中创建这些表所需的SQL脚本。然后,生成用于FastAPI的SQL Alchemy映射文件。最后,使用FastAPI生成一个简单的Web UI来列出订单。
User
- UserId
- FirstName
- LastName
- Address
- Address2
- City
- State
- ZipCode
- Username
- Password
- IsActive

Client
- ClientId
- Name
- Address
- Address2
- City
- State
- ZipCode
- IsActive

Order
- OrderId
- OrderDate
- InvoiceNumber
- DueDate
- ClientId
- UserId

OrderDetail
- OrderDetailId
- OrderId
- Description
- Rate
- Quantity
- LineTotal

Ledger
- TransactionId
- Debit
- Credit
- OrderId
- TransactionDate

输出:

...
我为您省略了输出,但它生成了一个使用FastAPI的完整应用程序。
...

让我们询问可以做什么来改进初始设计。

提示2:

这是一个很好的开始。我们可以做什么来改进应用程序设计?

输出:
实现日志记录以便更好地调试和错误处理。

logging.py (可选)

import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

def log_error(error):
    logger.error(f"An error occurred: {error}")

提示3:

你能实现你的建议使用错误处理并为我生成代码吗?

输出:
如果您想全局处理特定异常,您也可以在main.py文件中定义全局异常处理程序。

main.py

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import app.routers.order_router as order_router
from .exceptions import OrderNotFoundException, InvalidInvoiceNumberException

app = FastAPI()

# Include the router
app.include_router(order_router.router)

@app.exception_handler(OrderNotFoundException)
async def order_not_found_exception_handler(request: Request, exc: OrderNotFoundException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

@app.exception_handler(InvalidInvoiceNumberException)
async def invalid_invoice_number_exception_handler(request: Request, exc: InvalidInvoiceNumberException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

最佳实践和注意事项

虽然生成式AI很强大,但重要的是:

  • 审查和验证生成的代码
  • 与现有代码库保持一致性
  • 考虑安全影响
  • 彻底测试生成的代码
  • 将AI用作助手而不是工程判断的替代品

结论

生成式AI已成为现代软件开发中不可或缺的工具。通过利用这五种方法——增强搜索、代码生成、转换、文档和应用程序脚手架——开发人员可以显著提高他们的生产力,同时保持代码质量。

关键是理解这些工具的能力和局限性,并战略性地使用它们来增强而不是替代人类专业知识。随着这些技术的发展,它们与开发工作流程的集成将变得越来越有价值。

作者:Chuck Conway 专注于软件工程和生成式人工智能。在社交媒体上与他联系:X (@chuckconway) 或访问他的 YouTube

↑ 回到顶部

您可能还喜欢