Как использовать LLM для эффективного обучения и разработки
Ключевые тезисы:
- LLM не заменяет изучение темы с нуля, но помогает быстро погрузиться в сложные системы и фреймворки.
- Ключ к успеху — осознанный процесс и использование LLM как инструмента, а не полное доверие.
- Снапшот-тестирование и изолированные компоненты — мощные практики для обучения и разработки с LLM.
- Архитектура и проектирование важны даже при работе с AI.
Суть метода: Ускоренное погружение через практику
Автор выбрал для изучения фреймворк Bubble Tea (Go) и поставил задачу: создать в терминале клон своего любимого таск-менеджера Things 3. Метод основан на итеративном подходе с использованием LLM, где каждая итерация приносит новые уроки.
Первая итерация: Полная свобода для AI (и её проблемы)
Автор дал LLM полную свободу в планировании и реализации проекта.
Что получилось хорошо:
Высокая скорость на старте: быстрое добавление фич.
Глубокий анализ предметной области: LLM изучил документацию Things 3, скриншоты, предложил варианты UI.
Хорошее проектирование хранилища данных (на основе Markdown-файлов).
Составление детального плана реализации.
С какими проблемами столкнулся:
Падение скорости: по мере роста кодовой базы AI стал тратить часы на генерацию и правку кода.
Сложность приёмки: приходилось всё проверять вручную, процесс стал муторным.
Плохой UX: LLM предложил мобильный интерфейс, который плохо подошёл для терминала.
Хрупкие тесты: AI использовал базовые, сильно связанные тесты, которые легко ломались.
Путаная архитектура: весь код был в одном пакете с высокой связанностью.
Вторая итерация: Осознанный подход с извлечением уроков
Основные проблемы первой итерации были проанализированы и стали основой для нового, более структурированного подхода.
Ключевые улучшения процесса
- Изолированные компоненты: Компоненты (текстовый ввод, список задач и т.д.) проектировались и тестировались отдельно, а затем интегрировались.
- Снапшот-тестирование (Snapshot Testing):
- Автор адаптировал экспериментальный инструмент Bubble Tea для визуального тестирования UI.
- Тесты фиксируют отрендеренный текст терминала в файл и сравнивают с эталоном.
- Это позволило быстро принимать фичи от AI, просто проверяя снимки экрана, а не запуская приложение вручную.
- Проектирование через тесты: Снапшот-тесты стали «указкой» для AI. Можно было менять эталонный снимок и просить LLM изменить код под него.
- Декомпозиция задач: Разделение на «снизу вверх» (сначала маленький компонент, потом его интеграция) и «сверху вниз» (сначала макет экрана, потом компоненты).
- Переиспользование: Был создан универсальный компонент «список задач», который использовался в разных частях приложения (Inbox, Today, Logbook).
Чему научился автор (технические инсайты)
- Работа с фокусом (focus): В Bubble Tea нет встроенной системы фокуса для обработки ввода, пришлось реализовывать её самостоятельно.
- Синхронизация состояния: При разделении UI на сайдбар и основную панель появилась необходимость синхронизировать их состояния.
- Viewport в терминале: Понял, как работает отображение больших списков (скроллинг) в TUI-приложениях. Именно проблемы с вьюпортом часто вызывают лаги и подёргивания в терминальных редакторах кода.
- Асинхронная природа Bubble Tea: Столкнулся с флакинг-тестами из-за гонки событий. Узнал, что фреймворк обрабатывает события асинхронно, без гарантии порядка.
- Graceful shutdown: Научился правильно останавливать приложение, чтобы завершить все фоновые операции (например, запись в файл) перед выходом (storage quiesce).
Результаты и выводы
- Скорость: За пару дней создано приложение на 30 000 строк кода с покрытием тестами 80%.
- Качество: Архитектура стала чище, компоненты — изолированнее, добавление новых фич — предсказуемее.
- Глубина обучения: Без LLM на подобный уровень погружения в нюансы фреймворка и масштабирования проекта ушли бы недели или месяцы.
Ключевые принципы работы с LLM для обучения
- Не заменяйте мозги, а развивайте их: Используйте AI для быстрого экспериментирования и сравнения разных подходов.
- Архитектура важна: Даже с AI нужно продумывать изоляцию компонентов и форматы их взаимодействия.
- Изолируйте задачи для AI: Не позволяйте ему смешивать фичи с рефакторингом или правкой техдолга. Решайте задачи по отдельности.
- Спроектируйте процесс приёмки: Создайте инструменты (как снапшот-тесты), чтобы быстро и надёжно проверять результат работы AI.
- Формулируйте задачи чётко: И технические, и бизнес-задачи должны быть хорошо оформлены для LLM.