И так, давайте начнем с того, что должен знать и уметь человек, чтобы стать 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.
Комментарии (25)
AlexVWill
09.01.2023 17:24+4В самом начале текста ересь написана "Проектов на Java уже не осталось, но на собеседованиях деды все еще любят поспрашивать "А как оно там работает?" Скажите это терабайтам кода на GIT, написанным на Java, и множествам библиотек от туда же. Уровень текста понятен, читать дальше смысла не вижу.
Rusrst
11.01.2023 10:16+1Ну автор был одним из ведущих разработчиков в Сбере, + вел курс андроид академии, так что действительно в теме.
OrlandoFurioso
11.01.2023 16:55По-вашему получается, если я в свой на Котлине написанный проект затянул пару либ в виде бинарников, которые были написаны на Java мой проект станет внезапно Java-проектом? Не думаю.
Понятное дело, автор рано хоронит Java, но, как мне кажется, но в современной андроид-разработке Java постепенно уходит. Естественно, в библиотеке, которая была написана 10 лет назад и с тех пор поддерживается силами энтузиастов, так и будут использовать Java, никто её переписывать на Котлин не будет. Но буквально сегодня нажимать кнопку "New Project" и выбирать в качестве языка Java это как-то странно.
Sesmor
09.01.2023 17:31Большое спасибо, великолепная статья со всеми нужными ссылками для саморазвития!
whoiam_frontend
11.01.2023 10:16Kotlin - упрощённая версия Java. Реально полезные приложения написаны на Java, а их аналоги чуть менее популярные на Kotlin
OrlandoFurioso
11.01.2023 16:45Я могу перечитывать этот комментарий бесконечно. Сударь, продолжайте в том же духе! Вас ждёт отличная карьера. Вы вполне могли бы затмить талантом, к примеру, Роуена Аткинсона, в роли ИТ-обозревателя!
IknowThatIknowNothing
11.01.2023 10:16-1Большое спасибо автору. Полагаю статью и особенно ссылки в ней очень полезными.
alelam
11.01.2023 10:16Я бы уже давно в таких статьях аморфное "Android-разработчик" разделял на две чуть более чёткие категории в плане скиллов, этапов роста и рыночных перспектив. Что-то типа стажёра/трэйни - уровень при котором вы прочитали первую книгу по Kotlin, написали первое самостоятельное приложение Cinema App внутри MainActivity и получили шанс, что вас куда-то возьмут, чтобы чему-то научить и возможно даже что-то будет платить(но не обязательно). И джуна(каноничный с точки зрения соискателей - с 0 коммерческого опыта), при котором у вас появится реальный устроиться полноценно либо через спам своего резюме либо через курсы типа Тинька с Яндексом.
ermolnik Автор
11.01.2023 11:28не совсем понял, в чем по твоему мнению разница intern и джун
в моем понимании тот, кто написал cinema app это стажер, тот кто пару месяцев поработал на реальном проекте это джун
OrlandoFurioso
11.01.2023 16:29Не надо останавливаться. Давайте ещё поделим. Джун, который потрогал Retrofit. Джун, который потрогал адаптер-делегаты. Джун, который умеет в Room. Не надо доводить до абсурда. Стажировки/интернатуры это не работа в принципе, это обучение. Где порой платят. Впрочем, ученикам водителя троллейбуса тоже платят стипендию, так что тут никаких противоречий нет.
Rusrst
11.01.2023 20:06Как тот кто этот путь пройти умудрился, в том числе и благодаря Android academy, я бы не согласился что анимации не стоит рассматривать. Как и тесты. В обычных анимациях особо сложного нет (анимируй property), а помочь могут. А тесты очень хорошо показывают что надо бы вынести наружу, т.е. на практике показывают изъяны кода.
Ну а потоки да, знать бы надо :) иногда полезно, как и принципы синхронизации.
ermolnik Автор
11.01.2023 20:30Знать надо, но за все время моей карьеры про анимации меня спросили только на собесе в ситимобил. Unit тесты попросили написать только в сбере
И все это просили только на синьорские позиции, на джуновских это было бы жирным плюсом, на фоне других кандидатов, но скорее всего на Джуна взяли бы и без этих знаний
Rusrst
11.01.2023 20:46Так учитесь то для себя. Тесты прям понимание архитектуры прокачивают на ура. Да и те же корутины после того как для них тесты попишешь понимаешь лучше. Короче для себя это убер полезно.
Dimon2022
1) А записью обработкой звуковых сигналов с микрофона Котлин умеет работать или это только через ява?
>я помогаю его вам доработать до приемлемого состояния
можете сделать запись звука с микрофона, обработку (хотя бы просто умножить на 1.1) и воспроизведение обработанного сигнала?
Есть ли на Котлин что-то удобное для рисование графиков (не низкоуровневое) типа Plot из Matlab?
ermolnik Автор
Для записи используется MediaRecorder, его вызвать возможно и из Java и из kotlin
Для того ускорить аудиопоток есть в exoplayer есть параметр PlaybackParameters, там это в одну строчку делается
для рисования я всегда использовал mpcharts, уверен есть и что-то другое, но когда я сам писал код, он показался наиболее актуальным
Сам закодить ничего не могу — могу только на основе твоего кода помочь разобраться
Dimon2022
а медиарекордер дает доступ к буферу (в Котлин) потока записи сигнала? Я спрашивал про то, что называет фулдуплекс. то есть поток звукового сигнала направляется в цикркулярный буфер, а из него берутся блоки, умножаются на число, отправляются в буфер на вывод. Это схема работы изменятелей голоса например.
ermolnik Автор
А на сколько это соотносится с темой статьи?
Tarson
для этого лучше аудио рекорд использовать, там идет работа непосредственно с байтовым потоком PCM, можно с ним что угодно делать
Dimon2022
а какова там задержка?
Tarson
думаю минимальная, там забираются данные из микрофонного буфера кусками, хоть по сто байт сделать можно. Может в пределах миллисекунд, точно не скажу, но в любом случае довольно быстро... Как раз сейчас корябаю новый пост про радиотелефон на андроиде, там все это будет. Кроме Котлина...
Dimon2022
А этот mpchart может 60 раз в секунду обновлять график - типа оцилографа?
Rigidus
А акселерометр как заюзать?
Dimon2022
вероятно только через яву - придется ее тоже выучить. хотел еще спросить про управление жизненным циклом активити - но кажется это тоже только через яву.
ermolnik Автор
https://enzoftware.github.io/posts/android-accelerometer