И так, давайте начнем с того, что должен знать и уметь человек, чтобы стать Android разработчиком? Скиллсет будем смотреть по вот этому Roadmap
Язык. Kotlin
Основные компоненты Android
Верстка
Работа с сетью
Работа с БД
Работа с многопоточностью
Работа в фоне
Виды архитектур
DI
Анимации
Тестирование
GIT
Agile, таск-треккеры, документация
Далее будет разбор каждого из пунктов с курсами/книгами/материалами для изучения. Это будет моя личная субъективная подборка, не является рекламой)
Kotlin
Каждый год я делал подобные статьи и всегда писал, что нужно изучать Kotlin, с оговоркой, что есть Java и начинать нужно с нее и, кажется в 2023 году Java уже практически полностью потеряла актуальность в Android разработке. Проектов на Java уже не осталось, но на собеседованиях деды все еще любят поспрашивать "А как оно там работает?". Практической пользы в изучении Java стало меньше, но это все еще очень полезно для общего понимания.
И так, как изучать Kotlin? Есть два основных ресурса https://kotlinlang.org/ и его аналог на русском https://kotlinlang.ru/ . Для того чтобы изучать язык даже не потребуется компьютер, потому что у языка есть отличный Playground, который позволяет запускать программы в браузере и оттачивать свои навыки даже с мобильного телефона. Вам необходимо полностью проштудировать эти ресурсы.
Так же очень полезно будет просмотреть этот видео-урок про Kotlin.
В формате книги наиболее актуален "Kotlin in action" Дмитрий Жемеров, Светлана Исакова.
Основные компоненты Android
Основных компонентов в Android 4 -- это Activity, Service, Broadcast Receiver, Content Provider. Называются они основными, поскольку они могут являться точками входа в ваше будущее приложение. Нам нужно разобраться что они делают и для чего они нужны.
Про работу Activity и прочих UI компонентов рекомендую это видео.
Про работу Service -- видео.
Content Provider -- урок на StartAndroid и официальная документация.
BroadcastReceiver -- урок на Fandroid.
Со всеми компонентами нужно попрактиковаться и посмотреть как они работают.
Верстка
Сейчас переломный момент -- существуют два подхода к верстке: XML и Compose. В моменте, практически все проекты все еще написаны на XML и Compose сейчас можно встретить довольно редко в коммерческой разработке, но тут все динамично меняется и, думаю, к концу года уже большое количество компаний будет использовать оба подхода либо уже полностью перейдут на верстку через Jetpack Compose
Для изучения подхода к верстке через XML отлично подойдет это видео.
Для изучения Compose лучше всего подойдут официальные туториалы от Google, Видео-курс Алексея Гладкова, а так же вот такой репозиторий с кучей полезных ссылок для изучения Compose.
Работа с сетью
Существует несколько подходов к построению сетевого взаимодействия: REST, SOAP, RPC, GraphQL. В вашем проекте может использоваться любой, но чаще всего это будет REST. Обязательно нужно изучить базовые концепции этого подхода. Исчерпывающей статьи на эту тему у меня нет, поэтому тут придется погуглить и почитать все подряд для того, чтобы сформировались общие знания. Для более базового понимания как все это работает советую изучить Сетевую модель OSI.
И так, на проекте у вас скорее всего будет REST и одна из основных Android-библиотек: либо Okhttp+Retrofit, либо Ktor.
Так же вам нужно будет изучить как работает сериализация в Android. В чем разница Serializable от Parcelable и попрактиковаться с одной из библиотек, которая позволяет сериализовать Json в Kotlin и наоборот. Библиотек много, но по факту все делают примерно одно и тоже, но с разной степенью эффективности. Названия библиотек -- Kotlin Serialization, Gson, Jackson. В целом, для изучения особой разницы нет -- берите любую
Работа с базой данных
В андроид есть две основные БД: Sqlite (Room), Realm. Google продвигает библиотеку Room, а значит скорее всего на своей потенциальной работе вы скорее всего будете использовать именно его.
Видео урок по базовым концепциям SQL и работе с Room
Серия уроков по работе с Room от Start Android
Базово этих знаний будет достаточно для разработки, если вы хотите понять как все это работает значительно глубже советую отложить себе в закладки книжку с кабанчиком. Небольшой спойлер - для новичка она будет неподъемной, и вы будете возвращаться к ней и перечитывать еще несколько лет подряд, после того как найдете работу.
Работа с многопоточностью
В Android есть три основных подхода к многопоточности: нативные Thread, RxJava, Kotlin Coroutines. Здесь вам нужно обязательно выучить базовые концепции многопоточности. Выбор между RxJava и Kotlin Coroutines довольно сложный, в идеале надо на базовом уровне уметь пользоваться обеими библиотеками, поскольку компании все еще используют разные подходы, и универсального решения тут нет.
Видео по базовым концепциям многопоточности и корутинам
Курс по корутинам от Кирилла Розова
Книга для изучения базовых концепций:
Работа в фоне
Важно изучить способы запуска задач фоново через Service и Workmanager, методы обмена данными между этими задачами и основным приложением, а так же ограничения, которые есть в системе Android. Видео-урок на эти темы.
Виды архитектур
Это самая холиварная тема, архитектур довольно много, универсального и правильного решения нет -- каждый развлекается как он хочет. Вам важно разобраться в базовых концепциях MVC/MVP/MVVM/MVI, понять как они работают и попрактиковаться в реализации. Видео-урок об основных архитектурах. После просмотра рекомендую зайти на Github и в просто скачать основные реализации по поисковым запросам MVP Android, MVVM Android, MVI Android etc. Так же нужно разобраться с основными концепциями SOLID, DRY, KISS, Clean Architecture и основными паттернами программирования.
DI
В Android довольно много реализаций Dependency Injection: Dagger, Hilt, Koin, Toothpick, ручное создание DI через фабрики. Я считаю, что правильнее всего разобраться с Dagger, это наиболее сложная реализация, но если вы поймете эти концепции, разобраться как работают другие библиотеки -- труда не составит.
Ссылочки -- Обзорное видео по основным DI библиотекам, Курс по Dagger 2, Видео об внутреннем устройстве Dagger 2.
Анимации
Чаще всего эту тему опускают, потому что в большинстве компаний нет времени на укарашалки в виде анимаций и, скорее всего, для старта можно эту тему изучать и вернуться к ней чуть позже, но, в любом случае, моя задача предоставить материалы для изучения.
Видео по анимациям Android c XML
Видео по анимациям Android с Jetpack Compose
Тестирование
Аналогично предыдущей теме, с написанием Unit/UI тестов вы стоклнетесь только, если придете в достаточно крутую компанию, которая уделяет время качеству приложений. В небольших командах на 2-5 разработчика, чаще всего написание тестов экономически нецелесообразно, поэтому в очень многих компаниях тесты практически не пишут
Видео урок про тестирование в двух частях Part 1 и Part 2
GIT
Обычно для начала работы достаточно разобраться с базовыми операциями -- clone, pull, checkout, add, commit, push, cherry-pick. Просто заводим приватный репозиторий на Github и пробуем выполнять все команды
У Git-a есть прекрасная документация, где есть абсолютно все, что нужно
Agile, таск трекеры, докментация и тд
Чаще всего у компаний свое представление и реализация Agile/Scrum, поэтому об этом вам скорее всего уже расскажут, после того как вы устроитесь на работу. Базовые концепции Scrum можно прочитать вот в этой книжке:
Либо в более короткой версии Scrum guide.
Таск треккеры, сервисы документации -- некоторые компании требуют чтобы у вас был опыт работы с Jira, Confluence, Trello и тд. Какой в этом практический смысл -- не знаю, вся задача разработчика при работе с таск-трекером это своевременно двигать задачки из колонки слева в колонки справа. Какие-то более сложные настройки на старте вам все равно не доверят, поэтому советую просто запустить любую демо версию таск-трекера и посмотреть какие функции у него есть. По сервисам документации -- аналогично, вести в них документацию не сложнее, чем писать ее в Word.
Практика
И теперь самое важное, мы изучили все теоретические материалы и теперь нам нужно отточить практические навыки. Работодатель будет требовать от вас примеры работ, но где их взять? Начать стоит с разработки стандартных приложений -- Cinema App, Weather App, Currency Converter etc. Для этого идем на Behance (либо любой другой сервис с дизайн макетами), вводим там одно из вышеперечисленных названий и ищем макеты. Находим открытую API платформу, ссылок тут уже не будет -- если вы изучили все вышеперечисленное и дошли до этого момента, то скорее всего вы справитесь с этой задачей без моей помощи :)
Берем API, берем макеты и начинаем кодить! Пробуем реализовывать разные подходы, все это оставляем в своем портфолио на Github, когда вы пойдете на собеседование и вас попросят реализовать тестовое задание, то у вас скорее всего уже будет готовая реализация на их задачу и вы сразу же будете в более выгодном положении на фоне других кандидатов.
По ходу изучения всего этого материала, вы, однозначно, столкнетесь с кучей разнообразных проблем -- это нормально, все мы когда-то сидели и тупили над элементарными вещами. Главное делать, практиковаться и не останавливаться
Для тех, кто дочитал до конца, хотел бы запустить небольшой эксперимент: вы делаете любой тестовый проект -- я помогаю его вам доработать до приемлемого состояния. Не знаю какой будет спрос, но на всякий случай ограничиваю первыми пятью, кто разработает приложение и напишет мне в Telegram.