Ставлю курсу твердую четверку. Что понравилось: 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) В коде в нескольких местах есть ошибки + нет импортов, что делает менее удобным добавление кода - приходится тратить дополнительное время на ненужную работу.
Рекомендую всем, кто только начинает изучение темы или решил освежить память для подготовки к собеседованию. Понравился курс тем, что материал сконцентрирован, без лишних отступлений. Сама подача доступная, можно начинать проходить всем начинающим. По теме корутин появились новые задачи, что помогает быстрее закрепить/повторить материал. Надеюсь, для работы с Flow тоже будут добавлены задачи.:)
Курс понравился. Где-то его сравнивали с курсом Виноградова, но как мне кажется, они удачно дополняют друг друга. Причем, с этого курса лучше начать, а продолжить изучение уже у Виноградова, т.к. его курс более объемный. Материал изложен очень хорошо с интересными аналогиями - чувствуется, как Яна старалась, подбирая максимально наглядные примеры и упражнения. Если курс будет дорабатываться, то хотелось бы пожелать автору расширить блок с Flow, обогатив его дополнительными упражнениями - все-таки это "рабочие лошадки" в реальных коммерческих приложениях, на которых пишутся крупные продукты. В Android, например, combine из нескольких Flow - это ежедневная рутина. А так мне понравилось, своих денег курс однозначно стОит.
Курс понравился. Главный плюс в практике, потому что почти к каждой главе есть задания. На них хорошо набиваешь руку и закрепляешь теорию. Примеры для объяснений подобраны очень удачно и наглядно, поэтому всё сразу встает на свои места. Наполнение грамотное: все базовые темы по корутинам разобраны и поданы доступным языком. Для фундамента знаний это самое то
Здравствуйте! На новом месте работы переучилась с Java на Kotlin разработчика. Язык мне очень нравится, но встречающиеся в коде suspend-ы, контексты и тд постоянно меня пугали. Искала чтобы поизучать для введения и наткнулась на рекомендацию курса в сообществе в телеграмм по языку Kotlin. Порекомендовала курс еще двоим своим коллегам и мы начали проходить теорию и заниматься практикой. Курс содержательный, для первого знакомства подходит. Очень хочу пройти курс второй раз, чтобы более вдумчиво изучить тему, которые не очень уложились. Но мне понравилось, что много примеров, где можно прям писать код и отправлять в систему на проверку. А также есть после теории тесты. Тесты порой бывают запутанные и не очень логичные, но в целом 90% хорошие вопросы для проверки усвояемости материалов курса. В планах еще прочитать главу из книги "Kotlin в действии" (в новом издании добавлена глава по корутинам) Спасибо Яне за создание курса. Теперь при написании промышленно кода я могу более осмысленно использовать корутины и проводить код-ревью качественнее.
Хороший курс, на практике пощупали работу с Flow и api слоем
В целом курс не плох. Единственное только вопрос с Dispatches.IO не совсем корректен.
Хороший базовый курс по корутинам. Хотелось бы практических задач, но и задачи в курсе вполне себе окей. Важно! Это не курс о практическом применении, это курс который расскажет о том, какие фичи есть и синтетические примеры их использования. Для обучения этого достаточно. В курсе есть маленькие недочеты, я постарался описать их в комментариях к блоку. В основном, это либо некорректно сформулированные вопросы, либо некритичная ошибка в задании. Но ошибок было крайне мало, за что огромное спасибо.
Спасибо за конструктивную критику, это очень полезно!)