Skip to content

Посты

5 способов повысить продуктивность программирования с помощью генеративного ИИ

31 января 2025 г. • 7 мин чтения

5 способов повысить продуктивность программирования с помощью генеративного ИИ

Как Software Craftsman с многолетним опытом в этой области, я стал свидетелем влияния генеративного ИИ на разработку программного обеспечения с момента появления ChatGPT в 2023 году. Через практическое применение я выявил пять мощных способов использования этой технологии для повышения продуктивности.

1. Улучшенный поиск кода

Наиболее частый способ использования генеративного ИИ — это поиск технической информации. Традиционные поисковые системы требуют точной терминологии, в то время как генеративный ИИ понимает концепции и контекст. Например, при поиске принципа оптимизации параметров методов я спрашиваю:

Запрос

Как называется концепция программирования, согласно которой следует передавать только те параметры, которые фактически используются методом? Передача параметров методу, которые не используются методом, создает ненужные зависимости.

Генеративный ИИ понимает концепцию, которую я описываю (Закон Деметры), и предоставляет правильный ответ, исключая необходимость множественных поисков.

2. Эффективная генерация кода

Генеративный ИИ превосходно справляется с автоматизацией повторяющихся задач программирования. Недавно мне нужно было преобразовать большой JSON-файл в операторы вставки базы данных. Вместо написания утомительного кода преобразования, я предоставил 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. Беспрепятственный перевод кода

Перевод кода — еще одна область, где генеративный ИИ оказывается неоценимым. Во время недавнего проекта по конвертации C# приложения в Python мы использовали ИИ двумя важными способами:

  1. Прямое преобразование функций из Python в C#

  2. Сложный перевод ORM из Entity Framework в SQLAlchemy

Эта возможность значительно ускорила наш процесс миграции и обеспечила согласованность переводов.

Преобразование 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>
/// Reverses a given string.
/// </summary>
/// <param name="text">The string to be reversed.</param>
/// <returns>The reversed string.</returns>
public static string ReverseString(string text)
{
	return new string(text.Reverse().ToArray());
}

4. Автоматизированная документация кода

Документация необходима, но часто утомительна. Генеративный ИИ упрощает этот процесс двумя способами:

  1. Резюмирование кода: Анализ существующего кода и предоставление четких, кратких резюме

  2. Генерация заголовков документации: Создание всеобъемлющей документации методов, которая поддерживает стандарты качества кода

Например, при документировании алгоритмов сортировки или сложной бизнес-логики, ИИ может генерировать четкую, точную документацию, которая следует командным стандартам и лучшим практикам.

Запрос:

Сгенерируйте заголовок документации для приведенной ниже функции, добавив заголовок и выведя полную функцию с заголовком документации.
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_):
    """
    Sorts a given list using the Bubble Sort algorithm.

    Args:
        list_: The list of elements to be sorted. Elements must be comparable.

    Returns:
        A new list containing all elements from the original list in ascending order.
        
    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. Создание каркаса приложения

Возможно, самое впечатляющее применение генеративного ИИ — это его способность генерировать начальные структуры приложений. При наличии четкой схемы или спецификации ИИ может создать:

  • Скрипты создания базы данных

  • ORM-маппинги

  • Базовые API-эндпоинты

  • Начальные реализации пользовательского интерфейса

Эта возможность значительно сокращает время, потраченное на шаблонный код, и обеспечивает согласованную основу для дальнейшей разработки.

Запрос:

Вы — инженер-программист, работающий в крупной корпорации. Используя следующую схему базы данных, сгенерируйте SQL-скрипты, необходимые для создания этих таблиц в Postgres. Затем сгенерируйте файлы маппинга SQL Alchemy для использования с FastAPI. Наконец, сгенерируйте простой веб-интерфейс, используя FastAPI для отображения списка заказов.
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},
    )

Лучшие практики и соображения

Хотя генеративный ИИ мощен, важно:

  • Проверять и валидировать сгенерированный код
  • Поддерживать согласованность с существующими кодовыми базами
  • Учитывать последствия для безопасности
  • Тщательно тестировать сгенерированный код
  • Использовать ИИ как помощника, а не замену инженерному суждению

Заключение

Генеративный ИИ стал незаменимым инструментом в современной разработке программного обеспечения. Используя эти пять подходов — улучшенный поиск, генерация кода, перевод, документация и создание каркаса приложения — разработчики могут значительно повысить свою продуктивность, сохраняя при этом качество кода.

Ключ заключается в понимании возможностей и ограничений этих инструментов и стратегическом их использовании для улучшения, а не замены человеческой экспертизы. По мере развития этих технологий их интеграция в рабочие процессы разработки будет становиться все более ценной.

Автор: Чак Конвей специализируется на разработке программного обеспечения и генеративном ИИ. Свяжитесь с ним в социальных сетях: X (@chuckconway) или посетите его на YouTube.

↑ Наверх

Вам также может понравиться