Ниже представлен roadmap от Android-разработчиков Контура. Этот roadmap не претендует на абсолютную правду и является субъективным мнением авторов. По такому пути мы шли сами и хотели бы видеть таких коллег рядом.
Здесь представлены популярные маршруты знаний от разных авторов. Их цель – дать представление об Android-разработке и помочь сориентироваться в умениях и навыках.
- Android Developer Roadmap for beginners
- Android Developer Roadmap 2
- Android Developer Roadmap 3
- Android Developer Roadmap 4
Стажер должен обладать знаниями, чтобы пройти порог входа в профессию программиста и в промышленную разработку. Эти материалы помогут попасть на твою первую стажировку в компанию, пройти испытательный срок и получить опыт в Android-разработке.
Почему Kotlin, а не Java?
В 2021 году уже нет большого смысла учить Java как первый язык программирования (ЯП). Если сравнить ЯП с ездой на машине, то Java – это отечественный УАЗ на механике. Проедет везде, но удовольствия мало. Kotlin – иномарка на автомате. Идеальный вариант, чтобы учиться и ездить с комфортом в большом городе. Но это не значит, что не нужно учить JVM (Java Virtual Machine)
- Объявление переменных, типы данных. Понимать разницу между
valиvar. - Логические выражения:
if/else,when,while,for - Базовые коллекции:
ArrayList,LinkedList,HashMap,LinkedHashMap,HashSet,ArrayDeque - Модификаторы доступа. Определяют откуда функция будет доступна для вызова. Например, некоторые функции можно скрыть для всех классов кроме того, в котором она объявлена. Это помогает в соблюдении принципа инкапсуляции.
Функции, классы, интерфейсы и объекты
- Классы: обычные, data, sealed и enum.
- Интерфейсы
- Объекты
- Официальная документация RUS | ENG
- Playground, чтобы попробовать Kotlin
- CodeWars или CodinGames, чтобы порешать задачки и держать себя в форме
-
Activity и Fragments.
Это специальные классы, которые позволяют управлять экранами приложения. Активити – это один из базовых компонентов android-приложения, который предоставляет экран, с которым пользователи могут взаимодействовать, чтобы что-то делать. Фрагмент представляет поведение или часть пользовательского интерфейса в Активити. -
The Activity lifecycle и Fragment lifecycle.
У приложения в целом, и у каждого экрана в отдельности есть свой жизненный цикл. С его помощью разработчики могут управлять поведением приложения, когда пользователь его открывает, закрывает, или переворачивает телефон -
Xml разметка.
Файл, описывающий внешний вид экрана -
Context.
C помощью этого класса можно взаимодействовать с системой Android -
SharedPreferences.
Самый простой способ постоянно хранить данные в памяти. Данные хранятся по принципу «ключ - значение» -
AndroidManifest.xml.
Файл, в котором указываются название приложения, его иконка, версия, разрешения, стартовая Activity и другие базовый компоненты приложения. -
Gradle.
Это система сборки проекта. В файлах gradle можно указать минимально поддерживаемую версию Android, подключить сторонние библиотеки, настроить правила, по которым будет собираться проект -
RecyclerView.
Компонент для оптимизированной работы со списками данных -
Паттерн MVVM.
Один из самых популярных презентационных паттернов в Android, который позволяет отделить бизнес логику от пользовательского интерфейса.
Работа с сетью
Базы данных
-
Библиотека Room.
Самая распространенная библиотека базы данных на Android. В ней есть методы для самых распространенных запросов. Если нужного метода нет - запрос придется писать самому. Для этого нужно знать как составлять запросы на языке SQL
- Официальная документация
- Канал Start Android, курс Kotlin. Уроки по основам разработки android-приложений
Курсы на Pluralsight
- Курс Android Fundamentals
- Android Apps with Kotlin: Build Your First App
- Android Data Binding: Getting Started
- Android Apps with Kotlin: ViewModel and Lifecycle
- Android Fundamentals: Implementing Effective Navigation
- Android Apps with Kotlin: Tools and Testing
- Android: Room Fundamentals
- Android: Getting Started with Retrofit
Git – это одна из популярных систем контроля версий.
Нужно уметь в базовые команды
git initgit clonegit remote addgit addgit commitgit resetgit branchgit checkoutgit mergegit rebasegit pushgit fetchgit pull
Принципы объектно-ориентированного программирования (ООП) помогают разделить код, дробя его на сущности, объединенные общей функциональностью.
Если следовать этим принципам, повторяющегося кода будет меньше, добавлять новые функции станет проще.
Junior-разработчик – полноценный член команды разработки. Он пишет понятный, читаемый код. Хорошо знает язык, легко использует его стандартные методы и конструкции. Может самостоятельно проектировать задачи средней сложности.
Функции
extension fun,infix fun,inline fun,operator funGenerics
Синтаксический сахар
Так называют приятные мелочи языка, которые позволяют писать более простой и красивый код:
- Функции для работы с коллекциями:
forEach,map,flatMap,filter,sort,reduce,groupBy,orEmpty,getOrElse - Именованные аргументы
Single abstract method- Высокоуровневые функции и лямбды
Destructive declarationLabelslet,apply,also,with
Разделение зон ответственности между разными компонентами приложения
- Изучил архитектурные паттерны MVP, MVVM, MVI
Паттерны проектирования
- Factory
- Singleton
- Decorator
- Facade
- Command
- State
- Srategy
- Observer
- Работа с сетью
- Иметь представление в каком виде приходят данные с сервера. Как проходит сериализация и десериализация
- Библиотека OkHttp (встроена в Retrofit)
- Навигация между фрагментами/активити Cicerone, Jetpack navigation
- Многопоточность
- Kotlin coroutines
- RxJava
- DI
Dependency injection – внедрение зависимостей. Помогает писать менее зависимый код, значительно упрощает написание тестов.
Самые популярные библиотеки для внедрения зависимостей на Android это Toothpick, Dagger2, Koin, Hilt
- Service Locator Service Locator - паттерн, используемый для получения зависимостей из общего хранилища. Отличается от DI тем, что самостоятельно не создает компонент, то есть не вызывает его конструктор.
- Single Activity (дописать) Отличная статья про Single Activity
- Clean Architecture (Чистая архитектура). В ее основе чистое ядро и доменные сущности, независимые от платформы и фреймворков
- Тестирование приложения
- Unit-тесты Тестируют отдельные классы и методы. Самые популярные библиотеки – JUnit, Mockito.
- UI-тесты. Тестируют работу приложения в целом, имитируя действия реального пользователя. Библиотеки для UI тестов - Espresso, Kaspresso, Kakao
- Material Design - дизайн нативных android-интерфейсов, разработанный Google
- Debug-меню. Инструмент в Android Studio, упрощающий нахождение багов в приложении
- Отладка приложений
- Flipper
- Proxyman
- Stetho
- Hotkey - с их помощью можно быстро переименовывать файлы, названия переменных, классов или методов. Можно увидеть все использования функции или класса, и много чего еще - ссылка
- Эмуляторы - эмулирует Android на компьютере. Это полезно, если нужно проверить работу приложения на определенной версии системы, или на устройстве с большим/маленьким размером экрана. Позволяет задавать практически любую конфигурацию - менять версию Android, размер экрана, эмулировать камеру, местоположение.
- SOLID Принципы SOLID помогут лучше понять ООП и применять его правильно
- Нужно уметь использовать консоль и\или UI-клиент Fork
- Нужно уметь работать с удаленным git-репозиторием
- Уметь подключать к проекту хостинги git-репозиториев, например GitHub или GitLab
- Умеет делать
merge requestи решатьmerge conflict, знает проstashиcherry-pick.
Телеграм-каналы
Книги
- Bruce Eckel, Svetlana Isakova. Atomic Kotlin
- Chet Haase. Androids: The Team That Built the Android Operating System
- Дмитрий Жемеров. Kotlin в действии
- Thomas Nield. Learning RxJava
- Джошуа Блох. Java. Эффективное программирование
- John Ousterhout. A Philosophy of Software Design
- Marcin Moskala. Effective Kotlin
- Роберт Мартин. Чистый код. Создание, анализ и рефакторинг
- Чад Фаулер. Программист-фанатик
Курсы
Middle-разработчик может сам спроектировать приложение, настроить среду и CI/CD. Имеет не только основные, но и смежные знания. Обучает стажеров.
- Умеет ставить задачи
- Умеет аргументировать свою позицию
- Адекватно воспринимает критику, исправляет ошибки
- Умеет давать обратную связь
Работа с устройством
- GPS
- Камера
- Гироскоп
- NFC
- Микрофон
- Датчик света
- otg-порт
Сервисы Google
- Firebase
- Google Maps
- Google Play
- Google Pay
Безопасность
- Proguard, D8, R8
- Keystore
Android Jetpack
- Databinding
- Compose
- CameraX
Сервисы Google
- Firebase
- Google maps
- Google Play
- Google Pay
Kotlin Multiplatform (KMP)
Kotlin Native Targets/Source sets Compose Multiplatform
- Работа с HTTP/S — OkHttp, Retrofit
- Работа с WebSockets — Scarlet, nv-websocket-client
- Работа с БД — Room, Realm, SQLDelight
- Логирование — Timber
- Работа с датами — ThreeTenABP
- Навигация — Cicerone, Navigation Component
- Dependency Injection — Toothpick, Koin, Dagger2, Hilt
- Посмотреть утечки — LeakCanary
- Тесты — Mockito, Mockk, AssertJ, Kakao, Kaspresso
- Анализ кода — ktlint, detekt
- Обработка потока данных — RxJava, Kotlin coroutines
- Работа с изображениями — Picasso, Glide, Fresco
- Debug — Stetho, Chucker, Flipper, Proxyman
- Проверка орфографии — yaspeller
- Оптимизация и обфускация кода — Proguard, D8, R8
- Большой список книг, каналов, библиотек
- Блог Android developer на Medium
- Блог Pro Android Dev
- Android Developers Blog
- TeamLead Roadmap – как развиваться самому в качестве TeamLead. Roadmap от Егора Толстого.