
Всем привет! Меня зовут Шамиль, и я хочу поделиться историей о том, как обычное желание разобраться в корутинах привело к детальному аудиту проекта Марчином Москалой, по итогам которого архитектурные решения в GeminiAI были отмечены как качественный пример реализации Structured Concurrency.
Все началось с вызова
Я всегда считал, что если что-то делать, то делать это на максимум своих возможностей. Моей целью было показать разработчикам, как устроены AI-агенты под капотом, и реализовать свою версию Gemini. Я поставил перед собой задачу реализовать аналог Gemini, сфокусировавшись на архитектуре взаимодействия нейросетей и бесшовной интеграции AI-функционала в мобильную среду.
Перед стартом я проанализировал GitHub. К моему удивлению, я не нашел ни одной полноценной реализации Gemini-клиента, которая бы демонстрировала реальные возможности модели в связке с современным Android-стеком. Существующие репозитории были либо обрывками кода, либо устаревшими примерами. Это стало дополнительным вызовом: стать первым, кто опубликует в Git полноценную, архитектурно выверенную копию Gemini, доступную для изучения всему комьюнити.
Так появился GeminiAI — умный ассистент на стеке, который только-только становится стандартом: Navigation3, Jetpack Compose и глубочайшая работа с асинхронностью.
До работы над проектом я сталкивался со сложными техническими вопросами на интервью, которые требовали более глубокого понимания архитектуры.
Тогда и было принято решение создать проект, который закроет все мои пробелы. Я стремился реализовать архитектуру, минимизирующую утечки памяти и ошибки в логике. Именно этот драйв после отказов привел меня на воркшоп к Марчину.
Воркшоп у легенды
В декабре 2025 года я попал в "цитадель" практики — на воркшоп к Марчину Москале. Марчин — это человек, чьи книги по Kotlin лежат на столе у каждого второго сеньора.
Это не было похоже на обычные курсы. Это был технический аудит в реальном времени. Марчин проверял буквально каждую строчку кода GeminiAI.
Представьте: вы защищаете архитектуру своего AI-агента перед человеком, который официально сертифицирован JetBrains для обучения профессионалов. Это был тот еще стресс, но именно так рождается инженерное мышление.
Что под капотом GeminiAI?
Я не экономил на архитектуре:
Navigation3: Максимально свежий подход к навигации.
Coroutines & Flow: Вся логика построена на реактивных потоках с обработкой самых сложных состояний. Никакой реализации
init{}в ViewModel, только FlowDI (Dagger-Hilt) и Room: Классика в идеальном исполнении для масштабируемости.
Результат в цифрах и фактах
В итоге проект был доведен до состояния, которое сам Марчин назвал эталонным.
Совместная работа: Марчин официально указан в Contributors репозитория GeminiAI — для меня это лучшая верификация качества.
AI-агент в действии: Я реализовал не просто чат, а систему, которая на лету обрабатывает стриминг ответов от Gemini, грамотно управляет контекстом и мгновенно очищает ресурсы при отмене задач.

Вердикт эксперта
В декабре 2025 года я получил сертификат.

Когда работа была закончена, я получил не просто сертификат о завершении. Марчин написал в своей статье:
Услышать, что твой код — "эталонный пример для изучения", от сертифицированного тренера JetBrains — это тот момент, когда понимаешь: бессонные ночи стоили того.
Наше взаимодействие с Марчином не закончилось финальным коммитом в GeminiAI. Мы продолжаем поддерживать связь и профессионально общаться. Сейчас я уже перешел к следующему этапу — углубленному изучению Jetpack Compose в рамках его новых образовательных программ, чтобы поддерживать планку качества в своих проектах.
Статья An Overview of Structured Concurrency
После реализации проекта Gemini я в соавторстве с Марчином (в рамках рецензирования) подготовил статью, посвященную асинхронному программированию.
Идея статьи — доказать, что современное асинхронное программирование проходит тот же путь эволюции, что и обычное программирование в 60-х годах: от неконтролируемых прыжков (спагетти-код) к строгой структуре. В статье я провожу аналогию между оператором GOTO и "неструктурированной" конкурентностью.
В чем была проблема: В 1950-60-х годах (пример на FLOW-MATIC) логика программы могла прыгать в любое место. Это создавало "спагетти-код", где невозможно было отследить жизненный цикл переменной или логическую цепочку.
Связь с асинхронностью: Запуск корутины или потока без привязки к области видимости (scope) — это тот же
GOTO. Мы "прыгаем" в фоновый поток и теряем над ним контроль.
Ключевой риск: Утечки задач. Если родительский процесс завершен, а "забытая" задача продолжает работать, она потребляет ресурсы впустую.
Манифест Эдсгера Дейкстры
Статья опирается на классическую работу Дейкстры 1968 года "Go To Statement Considered Harmful".
Суть: Программа должна быть предсказуемой.
Решение в конкурентности: Structured Concurrency (структурированный параллелизм) — это концепция, где любая асинхронная операция должна иметь четкие границы входа и выхода.
3. Механика Structured Concurrency в Kotlin
Разбор переходит к практике, выделяя три "золотых правила" родительско-дочерних отношений в Kotlin Coroutines:
Наследование контекста: Дочерние корутины автоматически получают параметры родителя (например, диспетчер).
Ожидание завершения: Родительский
scopeне закроется, пока все запущенные внутри негоlaunchилиasyncне завершат работу.Автоматическая отмена (Cancellation): Если родитель отменяется или падает с ошибкой, дерево дочерних задач "схлопывается" автоматически.
Пример из статьи:
coroutineScope { launch { /* Задача 1 */ } launch { /* Задача 2 */ } } // Код пойдет дальше только тогда, когда обе задачи внутри завершатся
4. Практическое применение в Android
Статья демонстрирует реализацию на примере ViewModel и Repository. Это критически важный момент для Android-разработки:
viewModelScope: Идеальный пример структурированного подхода. Как только экран закрывается иViewModelуничтожается, все запросы к API или базе данных отменяются автоматически.Инкапсуляция: В Gemini реализован
ChatRepository, который выполняет тяжелую работу, но контроль над отменой остается на стороне вызывающего (ViewModel).
После плодотворной работы над статьей вместе с Марчином можно с уверенностью сказать, что статья очень грамотно связывает теорию computer science (Дейкстры) с ежедневной практикой современного разработчика, в том числе и Android-разработчика.
Вместо эпилога
Мы живем в эпоху, когда AI-инструменты становятся повседневностью, но требования к архитектуре остаются прежними: чистота, тестируемость и надежность. Надеюсь, мой разбор связки Gemini + Kotlin Coroutines поможет вам по-новому взглянуть на привычные инструменты Android-стека.
