Skip to content

Посты

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

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

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

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

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

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

Подсказка

What's the name of the programming concept where you should only pass parameters that are actually used by the method? Passing parameters to a method that aren't used by the method creates unneeded dependencies. 

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

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

Генеративный ИИ отлично справляется с автоматизацией повторяющихся задач кодирования. Недавно мне нужно было преобразовать большой JSON-файл в операторы вставки в базу данных. Вместо написания утомительного кода преобразования я предоставил данные JSON ИИ с четкими инструкциями по генерации операторов вставки MS SQL Server. Этот подход сэкономил часы ручного кодирования и снизил вероятность ошибок.

Подсказка:

Use the JSON data provided below and generate insert statements for MS SQL Server to be inserted into the dbo.Users table.

[  
{  
"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"  
}  
]

Результат:


-- Inserting records into dbo.Users table

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#:

Подсказка:

Convert the following Python code to 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. Генерация заголовков документации: создание комплексной документации методов, которая поддерживает стандарты качества кода

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

Подсказка:

Generate a doc header for the below function adding the header and printing the complete function with the doc header.
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

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

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

Подсказка:

You are a Software Engineer working at a large corporation. Using the following database schema, generate the SQL scripts necessary to create these tables in Postgres. Then, generate the SQL Alchemy mapping files to use with FastAPI. Lastly, generate a simple web UI using FastAPI to list the orders.
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

Результат:

...
I'm saving you from the output, but it generated an entire application using FastAPI.
...

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

Подсказка 2:

That's a great start. What can we do to improve the application design?

Результат:
Реализуйте логирование для лучшей отладки и обработки ошибок.

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:

Can you implement your suggestion to use Error Handling and generate the code for me?

Результат:
Вы также можете определить глобальные обработчики исключений в файле 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},
    )

Лучшие практики и рекомендации

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

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

Заключение

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

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

Автор: Chuck Conway — инженер AI с почти 30-летним опытом разработки программного обеспечения. Он создает практические системы AI — конвейеры контента, агенты инфраструктуры и инструменты, которые решают реальные проблемы — и делится тем, что он узнает на этом пути. Свяжитесь с ним в социальных сетях: X (@chuckconway) или посетите его на YouTube и на SubStack.

↑ Вернуться в начало

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