Какому программисту не захочется прокачать свои навыки с ИИ и десятикратно умножить эффективность разработки? Когда мы получили оригинал книги «Modern Python Programming using ChatGPT» (Шивакумар Гопалакришнан), то увидели как плюсы, так и минусы.

Плюсы. Автор предлагает не просто набор промптов, а реально стройную методологию: использовать ИИ на всех этапах разработки — от сбора OKR до мониторинга в Grafana. Да еще подкрепляет это сквозным примером.

Минусы. Оригинальный текст явно был написан с активной помощью самого ChatGPT. Местами «уши» LLM торчали так сильно, что текст было трудно читать из-за воды и повторов.

Возникла главная задача: как сделать так, чтобы русскоязычный читатель получил максимум пользы от применения ИИ в своих разработках, и при этом не забросал нас камнями, обнаружив примитивный перевод текста, сгенерированного тем же самым ИИ?

И тут начинается история о том, как мы перевели и отредактировали книгу, которая сама была частично «сгенерирована», и почему в итоге она стала (по нашему скромному мнению) реальным практическим руководством по работе с ИИ для Python-разработчиков, особенно в условиях современной России.

Мы решили пойти по жесткому пути. Да, автор не скрывал, что для написания книги по ChatGPT он намеренно использовал сам ChatGPT, и это было нормально для 2025 года. Но сегодня, когда первое восхищение от способности ИИ генерировать текст или находить ошибки в коде прошло и сменилось на прагматизм и разумный консерватизм, перед нами встала задача «очеловечить» книгу, сохранив всю ее техническую глубину.

Мы не просто переводили. Мы перерабатывали структуру предложений, убирали «воду», свойственную генерациям ранних версий GPT, и унифицировали терминологию. По сути, мы сделали за ИИ его же работу, но с пониманием контекста. Результат представляем на суд широкой публики.

Почему эта книга — must read (особенно в России)?

Главная фишка книги, которая подчеркивается в предисловии к русскому изданию — она не про ChatGPT. Она про методологию. Автор использует ChatGPT как пример, как популярную модель, но все принципы, все промпты и подходы, описанные в книге, применимы к любому ИИ-ассистенту,  доступному в России. А девиз «Прокачайте навыки с ИИ — десятикратно умножьте эффективность разработки» - не маркетинг. Шивакумар Гопалакришнан, инженер с 25-летним стажем и экс-архитектор в Fortune 100, проводит читателя через полный жизненный цикл разработки (SDLC) на примере сквозного проекта — USB T-Shirt Launcher.

Внутри книги нет примеров, как написать того или иного бота. Путешествие по главам выглядит как путь по этапам разработки продукта в тесном и непосредственном симбиозе программиста и ИИ:

  • Сбор требований. Забудьте про «напиши ТЗ». Книга учит формулировать OKR и цели по SMART, вместе с ИИ создавать персонажей, пользователей и карты эмпатии.

  • Проектирование. Как ИИ помогает не нарушать SOLID еще на этапе архитектуры? Здесь об этом рассказывают.

  • Разработка (Core). Генерация кода, рефакторинг, отладка. Показано на реальных примерах с конкретными промптами. Вы увидите, как ChatGPT помогал писать логику движения для камеры того самого T-Shirt Launcher.

  • Качество кода. Отдельный блок про принципы SOLID (целая глава 8) и написание тестов. Это важно: автор учит не просто просить код, а просить хороший код.

  • DevOps-культура. Настройка CI/CD, описание коммитов, управление PR (Pull Requests) и мониторинг с помощью Grafana Cloud.

Да, купив книгу, местами вы можете почувствовать некоторую «академичность» изложения, но мы постарались вырезать те самые моменты, когда ИИ «льет воду» или ходит по кругу. Особенно ценной с нашей точки зрения получилась глава про ограничения и подводные камни (глава 13) — её автор явно писал сам, потому что она очень честная. Там рассказывается о том, как не стать рабом галлюцинаций нейросети и всегда критически оценивать результат.

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

Отдельное спасибо автору за то, что он выбрал такой «прикольный», но показательный проект, как USB-пусковая установка для футболок. Это доказывает: ИИ поможет управиться даже с «железом», если правильно его попросить.

Как ChatGPT помог спроектировать и реализовать USB-пусковую установку для футболок

Практический материал проекта оказался на удивление крепким. USB T-Shirt Launcher - это реальная «пушка», которая с помощью камеры и распознавания лиц автоматически наводится на цель и стреляет… футболками! Звучит как игрушка, но с инженерной точки зрения здесь есть всё: работа с «железом», компьютерное зрение, реальное время, ограниченные ресурсы (Raspberry Pi) и, конечно, активное использование ChatGPT на всех этапах.

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

1. Что хочет заказчик? (Глава 5)

Представьте: вы должны написать софт для пусковой установки, которая подключается по USB и умеет поворачиваться влево-вправо и наклоняться вверх-вниз. На неё же установлена камера на Raspberry Pi. Задача: автоматически наводить устройство на лицо человека и, если хочется, стрелять в него футболкой. А для разработки и тестирования неплохо бы иметь возможность запускать код без реального железа — в симуляторе.

Все по требованиям (REQ):

  • REQ-4. Интеграция распознавания лиц с движением камеры — система должна идентифицировать лица и удерживать их в центре кадра.

  • REQ-5. Логика движения камеры на основе положения лица — камера двигается в реальном времени.

  • REQ-6. Интеграция движения камеры с наведением пусковой установки — куда смотрит камера, туда целится и пушка.

  • REQ-7. Функции безопасности — защита от случайного выстрела.

  • REQ-8/9. Обработка ошибок — стабильность при сбоях.

Кроме того, есть нефункциональные требования: код должен работать на Raspberry Pi (слабый процессор), быть тестируемым, а также позволять делать отладку без реального USB-устройства.

2. Проектируем архитектуру с ChatGPT

Скармливаем этот список ChatGPT и просим предложить архитектуру, используя принципы SOLID и шаблоны проектирования. Чат-бот предлагает использовать фабричный метод (Factory Method), чтобы во время разработки и тестирования подменять реальное USB-устройство симулятором.

Вот как выглядит диаграмма классов, сгенерированная ботом на языке Mermaid (рис. 5.6 из книги):

Суть решения: есть абстрактный класс Launcher с методом launch_tshirt(). От него наследуются USBLauncher (работа с реальным железом) и SimulatedLauncher (имитация для отладки). А LauncherFactory создаёт экземпляр нужного типа в зависимости от режима. LauncherController получает этот экземпляр через внедрение зависимости и работает с ним, не задумываясь, реальное это устройство или нет.

Фрагмент кода, сгенерированного ChatGPT (сильно сокращён):

class Launcher:
    def launch_tshirt(self): pass

class USBLauncher(Launcher):
    def launch_tshirt(self):
        # ... код отправки команды по USB
        print("Fire in the hole!")

class SimulatedLauncher(Launcher):
    def launch_tshirt(self):
        print("Boom! (simulated)")

class LauncherFactory:
    @staticmethod
    def get_launcher(launcher_type):
        if launcher_type == "USB":
            return USBLauncher()
        elif launcher_type == "Simulated":
            return SimulatedLauncher()
        # ...

Такая архитектура одновременно решает проблему тестирования и делает код гибким.

3. Переходим к реализации: подводные камни (Глава 6)

Итак, архитектура готова. Внешний вид «пушки» впечатляет.

Но дьявол, как всегда, в деталях. Когда мы начинаем писать код для реального устройства, всплывают неучтённые проблемы. Вот лишь некоторые из них:

  • Шаткое крепление. Raspberry Pi с камерой просто прикручен к подвижной части турели. При каждом движении конструкция вибрирует, и координаты лица «пляшут».

  • Неизвестное начальное положение. У дешёвых USB-сервоприводов нет энкодеров. При включении мы не знаем, куда направлена турель — она может смотреть в потолок или в пол.

  • Ограниченная вычислительная мощность. Raspberry Pi 3 еле тянет OpenCV. Сложные алгоритмы с предсказанием движения лица приведут к тормозам.

  • Цель движется. Пока турель поворачивается, человек может сместиться. Нужно постоянно корректировать траекторию.

  • Механические ограничения. Нельзя крутить моторы бесконечно — есть упоры.

4. Придумываем алгоритм (советуемся с  ИИ!)

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

  1. Получить от OpenCV координаты ограничивающей рамки лица.

  2. Вычислить центр лица.

  3. Сравнить с центром кадра.

  4. Если смещение по горизонтали больше допустимого порога — подать команду поворота в нужную сторону на небольшую фиксированную величину.

  5. То же для вертикали.

  6. Повторять цикл, пока лицо не окажется в центре (с допуском).

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

5. Промпт для ChatGPT и полученный код

Теперь формулируем задачу для ChatGPT максимально подробно, с учётом всех ограничений:

«Как главный штатный инженер по Python, дайте мне код на Python для функции, которая будет выдавать команды для запуска на основе идентифицированных координат лица. У меня есть маломощное устройство, такое как Raspberry PI. На нем установлен модуль камеры Raspberry PI. Вся камера и RPI довольно шатко закреплены на панели запуска. Устройство запуска — это устройство, управляемое через USB, которое может выполнять повороты и наклоны. Используя OpenCV, я могу распознавать лица и получать их координаты... У пусковой установки нет команды «определить положение». Её текущее положение невозможно определить при запуске программы. Лица могут перемещаться во время движения пусковой установки...»

ChatGPT выдал код, который оказался очень близок к нашему алгоритму, но добавил важные детали: многопоточность (чтобы распознавание лиц не блокировало отправку команд) и временные интервалы (чтобы не дёргать сервомоторы слишком часто). Ниже — ключевые фрагменты (полный код занимает пару страниц, мы покажем только суть).

import cv2, numpy as np, threading, time

def move_launcher_pan(direction, amount):
    # здесь будет отправка USB-команды
    pass

def move_launcher_tilt(direction, amount):
    pass

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
frame_center = np.array([cap.get(3)/2, cap.get(4)/2])
pan_threshold = frame_center[0] * 0.25
tilt_threshold = frame_center[1] * 0.25
last_command_time = time.time()
command_interval = 0.5

def launcher_control_loop():
    global last_command_time
    while True:
        ret, frame = cap.read()
        if not ret: continue
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.1, 4)
        if len(faces) > 0:
            (x, y, w, h) = faces[0]
            face_center = np.array([x + w/2, y + h/2])
            displacement = face_center - frame_center
            now = time.time()
            if now - last_command_time > command_interval:
                if abs(displacement[0]) > pan_threshold:
                    move_launcher_pan('left' if displacement[0] < 0 else 'right', abs(displacement[0]))
                if abs(displacement[1]) > tilt_threshold:
                    move_launcher_tilt('down' if displacement[1] < 0 else 'up', abs(displacement[1]))
                last_command_time = now

threading.Thread(target=launcher_control_loop, daemon=True).start()

while True:
    ret, frame = cap.read()
    if ret: cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'): break

cap.release()
cv2.destroyAllWindows()

Обратите внимание: ChatGPT не просто скопировал наш алгоритм, но и профессионально организовал асинхронную отправку команд, защиту от слишком частых движений и корректное завершение потоков. Всё это позволяет коду работать на Raspberry Pi без подвисаний.

6. Итоги и выводы

За несколько итераций диалога с ChatGPT мы получили:

  • Чёткую архитектуру, отделяющую логику от железа.

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

  • Возможность тестирования без физического устройства благодаря фабрике и симулятору.

  • Готовую документацию (промпты, диаграммы, комментарии) — её сгенерировал ИИ по ходу дела.

Конечно, финальный код потребовал доработки: пришлось добавить обработку нескольких лиц, более плавное движение (через PID-регулятор) и механизмы безопасности. Но начальный каркас, созданный ChatGPT, позволил сэкономить дни, если не недели.

Проект USB T-Shirt Launcher — отличная песочница для отработки навыков программирования с ИИ. Мы убедились, что ChatGPT способен не только писать отдельные функции, но и предлагать архитектурные решения, учитывающие аппаратные ограничения. Главное — правильно ставить задачу и критически оценивать результат, как это делали авторы при подготовке русского издания книги.

Хотите попробовать сами? Весь код и документация доступны в репозитории. А если захочется больше примеров и разбора каждого этапа — добро пожаловать в книгу.

Мы полагаем, что книга получилась интересной как для начинающих программистов, которые хотят научиться правильно ставить задачи ИИ, чтобы он не генерировал ерунду, так и для продвинутых, которые хотят прокачать навыки рефакторинга и написания чистой архитектуры с минимальными затратами времени.

Если при покупке книги на сайте издательства "БХВ" использовать промокод HABRBHV, вы получите скидку 36%.