Курс на Stepik
Обложка курса «Kotlin Coroutines & Flow для Android: от основ до production» на Stepik
4 090 ₽

Kotlin Coroutines & Flow для Android: от основ до production 4.705

Открыть на
STEPIK.ORG

Kotlin Coroutines и Flow для Android: от первых корутин до production-архитектуры. Вы начнете с простых примеров по принципу быстрого старта и шаг за шагом дойдете до полноценного мобильного приложения с реальным API. Научитесь писать асинхронный код без callback hell, работать с потоками данных, управлять состоянием экрана и строить современную Android-архитектуру.

Показатель Текущие показатели Рост
Значение 🏆 Рейтинг 3 дн 7 дн 30 дн
Количество учеников на курсе «Kotlin Coroutines & Flow для Android: от основ до production»Учеников на курсе 19
Сертификаты, выданные на курсе «Kotlin Coroutines & Flow для Android: от основ до production»Сертификатов выдано 0
Отзывы о курсе «Kotlin Coroutines & Flow для Android: от основ до production»Отзывов получено 13
Рейтинг курса «Kotlin Coroutines & Flow для Android: от основ до production»Рейтинг курса 4.705
Курсы в пакете «Kotlin Coroutines & Flow для Android: от основ до production»Курсов в пакете 2
Уроки в курсе «Kotlin Coroutines & Flow для Android: от основ до production»Количество уроков 90
Тесты в курсе «Kotlin Coroutines & Flow для Android: от основ до production»Количество квизов 161
Задачи с кодом в курсе «Kotlin Coroutines & Flow для Android: от основ до production»Количество задач с кодом 3
Время прохождения курса «Kotlin Coroutines & Flow для Android: от основ до production»Время прохождения курса
Стоимость курса «Kotlin Coroutines & Flow для Android: от основ до production»Стоимость курса 4 090 ₽
Обновления курса «Kotlin Coroutines & Flow для Android: от основ до production»Обновления курса
Дата публикации курса «Kotlin Coroutines & Flow для Android: от основ до production»Дата публикации курса
Последнее обновление курса «Kotlin Coroutines & Flow для Android: от основ до production»Последнее обновление
Сложность normal
4.705
из 5
13 отзывов
★★★★★
11
★★★★
2
★★★
0
★★
0
0
Daniil Golovkin
Daniil Golovkin
3 недели назад

Изложение материалы мне понравилось, все структурировано, темы изложены последовательно, расписаны подробно. Однако в процессе обучения у меня возникли некоторые вопросы, которые пришлось отдельно гуглить (возможно это потому что я какие то моменты невнимательно смотрел). 1) Неочевидно (для меня) выполнение долгих операций в рамках нескольких корутин и одного потока, что получается что код все равно будет последовательный 2) Количество и сложность практических заданий: их не так много и они очень простые, в большинстве своем их решение сводится к копи-пасту кода из предыдущих шагов 3) Нет примеров связанных с более практически применимыми кейса: обращение к сторонним системам, базам данных и тп. 4) Не рассмотрены примеры, где имеет смысл использования корутин и где не имеет

Barmaley
Barmaley
2 месяца назад

Ставлю курсу твердую четверку. Что понравилось: 1) понравились некоторые интересные технические тонкости, которые интересно было "пощупать" через реальный код + вариант реализации паттерна Outbox 2) примеры с VM-фабриками были тоже очень познавательными. 3) примеры с combine да, очень хорошие - в коммерческих приложениях это главная "рабочая лошадка" :) Что не понравилось: 1) В паре мест автор дает идею и тут же отказывается от нее. Если идти по курсу последовательно, то в коде остаются ошибки, которые нужно исправлять самостоятельно. Так, например, было в SyncWorker, где автор попала в тупик собственного подхода - отказа от DI + хранения основных data-классов приложения (репозиториев) в MainActivity. Как мне кажется, курс смотрелся более выигрышно, если бы репозитории, БД и классы сетевого слоя хранились бы в отдельном Application-классе с ленивой инициализацией, а SyncWorker получал бы нужную ссылку через отдельный SyncWorkerFactory, например, так: class SyncWorkerFactory( private val repository: SyncRepository, ) : WorkerFactory() { override fun createWorker( appContext: Context, workerClassName: String, workerParameters: WorkerParameters ): ListenableWorker? { return when (workerClassName) { SyncWorker::class.java.name -> { SyncWorker(appContext, workerParameters, repository) } else -> null } } } а Application-класс определили бы как Configuration.Provider и добавили бы туда код: val syncRepository by lazy { SyncRepository( db = db, api = api, ) } override val workManagerConfiguration: Configuration get() = Configuration.Builder() .setWorkerFactory(SyncWorkerFactory(syncRepository)) .build() Ну и в целом, собирать конгломерат классов с ЖЦ уровня приложения внутри MainActivity - это не очень хороший пример. Учитывая, что курс могут проходить начинающие разработчики, я бы все-таки переработал код курса, чтобы плохие практики не перенимали ученики. 2) В проекте сделана не очень хорошая штука - классы распределяются по пакетам по типам, а не по функциональности. Например, VM-ки - в отдельный пакет "viewModel", dao-классы - в DAO и т.д. В крупных коммерческих приложениях так не делают никогда, потому что: а) Код пишут несколько команд и за каждым пакетом закрепляется свой оунер. Все кодоунеры перечислены в классе CODOWNERS и на код-ревью при изменении кода, закрепленного за отдельной командой, бот будет "тегать" именно того человека, который имеет отношение к измененном пакету в проекте. Если все VM-ки будут в одном пакете, начнется хаос - бот будет тегать всех подряд, включая людей из совсем других команд. б) фича не всегда пишется "на века". Например, сегодня в приложку добавили таблицу "leaderboard", а завтра у менеджмента зачешется левая пятка и скажут, что фича не востребована пользователями и ее нужно выпилить. Конкретно в случае этого проекта весь код удаляемой фичи нужно будет собирать по разным пакетам и удалять. А если фича хранится в отдельном модуле или пакете, то удаление для остальных команд будет максимально простым - просто дропнули нужный каталог и все. 3) В коде в нескольких местах есть ошибки + нет импортов, что делает менее удобным добавление кода - приходится тратить дополнительное время на ненужную работу.

Ответ
автора
Яна Седова
Яна Седова
1 июня 2026

Спасибо за развернутый отзыв! Отвечу тоже по пунктам: 1) От Hilt и подобных фреймворков я отказалась сознательно. Все же у нас учебный проект для новичков, а не продакшен-код. 2) Структура пакетов по типам выбрана осознанно по тем же причинам. Для новичка, который только разбирается в слоях архитектуры, пакет data/db нагляднее, чем пакет feature/lesson. 3) Я просмотрела все ваши комментарии к урокам, где содержатся указания на ошибки. Их всего 4, из которых 2 - где вы пытаетесь использовать шаблонный код IDE вместо кода из урока, 1 - вызвана отсутствием у вас импорта и только последняя, действительно, является ошибкой (спасибо, я ее исправила). Если у вас есть информация еще о каких-то ошибках в коде, прошу писать комментарии под конкретными уроками, чтобы я могла проверить. 4) Импорты намеренно не указаны: они утяжеляют примеры, у большинства настроен автоимпорт, а если нет — то всегда можно нажать Alt+Enter. 5) SyncWorker приведен просто для примера, в качестве лирического отступления. Не думаю, что ради него стоит переписывать весь курс на Hilt/Dagger.

Илья Другов
Илья Другов
2 месяца назад

Рекомендую всем, кто только начинает изучение темы или решил освежить память для подготовки к собеседованию. Понравился курс тем, что материал сконцентрирован, без лишних отступлений. Сама подача доступная, можно начинать проходить всем начинающим. По теме корутин появились новые задачи, что помогает быстрее закрепить/повторить материал. Надеюсь, для работы с Flow тоже будут добавлены задачи.:)

Barmaley
Barmaley
2 месяца назад

Курс понравился. Где-то его сравнивали с курсом Виноградова, но как мне кажется, они удачно дополняют друг друга. Причем, с этого курса лучше начать, а продолжить изучение уже у Виноградова, т.к. его курс более объемный. Материал изложен очень хорошо с интересными аналогиями - чувствуется, как Яна старалась, подбирая максимально наглядные примеры и упражнения. Если курс будет дорабатываться, то хотелось бы пожелать автору расширить блок с Flow, обогатив его дополнительными упражнениями - все-таки это "рабочие лошадки" в реальных коммерческих приложениях, на которых пишутся крупные продукты. В Android, например, combine из нескольких Flow - это ежедневная рутина. А так мне понравилось, своих денег курс однозначно стОит.

Нина Семкина
Нина Семкина
3 месяца назад

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

Анастасия Зенцова
Анастасия Зенцова
3 месяца назад

Здравствуйте! На новом месте работы переучилась с Java на Kotlin разработчика. Язык мне очень нравится, но встречающиеся в коде suspend-ы, контексты и тд постоянно меня пугали. Искала чтобы поизучать для введения и наткнулась на рекомендацию курса в сообществе в телеграмм по языку Kotlin. Порекомендовала курс еще двоим своим коллегам и мы начали проходить теорию и заниматься практикой. Курс содержательный, для первого знакомства подходит. Очень хочу пройти курс второй раз, чтобы более вдумчиво изучить тему, которые не очень уложились. Но мне понравилось, что много примеров, где можно прям писать код и отправлять в систему на проверку. А также есть после теории тесты. Тесты порой бывают запутанные и не очень логичные, но в целом 90% хорошие вопросы для проверки усвояемости материалов курса. В планах еще прочитать главу из книги "Kotlin в действии" (в новом издании добавлена глава по корутинам) Спасибо Яне за создание курса. Теперь при написании промышленно кода я могу более осмысленно использовать корутины и проводить код-ревью качественнее.