Советы для начинающих Android-разработчиков
Если ты не боишься рефакторинга, коммуникаций с дизайнерами и тестировщиками, готов к внедрению новых библиотек и реализации сложных задач — будем рады тебе в команде на позиции Android - разработчика!

На этой странице ты найдешь советы по развитию в направлении Android-разработки.
Грейды Android-разработчиков
Что нужно знать?
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием

Architecture
  • Делегирование

Network
  • Уметь работать с сетью любым способом
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process

Tools
  • Уметь пользоваться логами
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
Language


Java & Kotlin
  • Знать синтаксис
  • Соблюдать code style
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции

Programming Principles
  • DRY
  • KISS

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием

Architecture
  • Делегирование
  • MVC

Network
  • Уметь работать с сетью любым способом
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process

Test
  • Уметь писать простые unit тесты

Tools
  • Уметь пользоваться логами
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
Language


Java & Kotlin
  • Знать синтаксис
  • Соблюдать code style
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность

Test
  • Уметь писать простые unit тесты

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором

Memory Leaks
  • Иметь базовые знания про утечки памяти
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing

Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание
  • Следовать принципам I и D
  • Уметь находить их нарушения на ревью

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование
  • Понимать все принципы ООП
  • Знать зачем нужен каждый из принципов
  • Знать плюсы и минусы каждого принципа
  • Понимать композицию

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
Android Platform


Android SDK

  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options
  • Писать compound views
  • Уметь верстать адаптивный дизайн под разные устройства
  • Углубленные знания RecyclerView
  • Знать про 60fps (16ms)

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность
  • Уметь писать многопоточный код разными инструментами
  • Знать классические проблемы многопоточности
  • Знать основы синхронизации

Test
  • Уметь писать простые unit тесты
  • На постоянной основе пиcать unit тесты
  • Писать parameterized тесты
  • Знать виды тестов: unit, functional, integration, ui test
  • Уметь пользоваться Mockito
  • Знать базовые антипаттерны тестирования

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
  • Android profiler
  • Leak canary
  • ADB
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack
  • Знать модель памяти Java

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором
Memory Leaks
  • Иметь базовые знания про утечки памяти
  • Знать об утечках памяти и что к ним приводит
  • Уметь их находить и чинить
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing
  • Пользоваться Generics
  • Anonymous/Inner classes
  • Implicit/Explicit links
Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
  • Extension
  • Object, companion object
  • Sealed class
  • val vs var vs const
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику
  • Знать как работают внутри менее распространенные коллекции

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание
  • Следовать принципам I и D
  • Уметь находить их нарушения на ревью
  • Знать все принципы SOLID и следовать им
  • Знать другие принципы ООП, помимо SOLID
  • Уметь распознавать на ревью нарушения принципов SOLID (или других принципов)

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование
  • Понимать все принципы ООП
  • Знать зачем нужен каждый из принципов
  • Знать плюсы и минусы каждого принципа
  • Понимать композицию
  • Иметь глубокие знания ООП
  • В ревью предлагать оптимальные решения с помощью принципов ООП
  • Понимать связь между принципами ООП
  • Знать агрегирование

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов
  • Знать более сложные паттерны
  • Понимать какие паттерны помогают соблюдать принципы SOLID
  • Понимать различия схожих паттернов
  • Знать и уметь находить в ревью различные антипаттерны разработки

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
  • Знать криптографические протоколы данных
  • Знать протоколы для передачи данных в реальном времени
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)
  • Сериализация/Десериализация данных
  • Context activity vs Application context
  • Знать альтернативные методы сохранения состояния
  • Базовые знания Android ndk: зачем это нужно, преимущества и недостатки
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver
  • Практические навыки в работе с Service и Broadcast Receiver

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options
  • Писать compound views
  • Уметь верстать адаптивный дизайн под разные устройства
  • Углубленные знания RecyclerView
  • Знать про 60fps (16ms)

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность
  • Уметь писать многопоточный код разными инструментами
  • Знать классические проблемы многопоточности
  • Знать основы синхронизации

Test
  • Уметь писать простые unit тесты
  • На постоянной основе пиcать unit тесты
  • Писать parameterized тесты
  • Знать виды тестов: unit, functional, integration, ui test
  • Уметь пользоваться Mockito
  • Знать базовые антипаттерны тестирования

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
  • Android profiler
  • Leak canary
  • ADB
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack
  • Знать модель памяти Java

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором
  • Иметь базовые знания про GC
  • Знать простые алгоритмы сборки мусора
Memory Leaks
  • Иметь базовые знания про утечки памяти
  • Знать об утечках памяти и что к ним приводит
  • Уметь их находить и чинить
  • Уметь находить в pull request утечки памяти
  • Знать про работу Reference
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing
  • Пользоваться Generics
  • Anonymous/Inner classes
  • Implicit/Explicit links
  • Error
  • Transient modifier
  • Final, finally, finalize
  • String buffer/String builder
  • Fail-fast/fail-safe iterators
  • Глубокие знания generics
Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
  • Extension
  • Object, companion object
  • Sealed class
  • val vs var vs const
  • FP
  • let/run/with/also/apply
  • Inline/noninline/crossinline
  • DSL
  • Infix
  • Invoke
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику
  • Знать как работают внутри менее распространенные коллекции
  • Знать потокобезопасные коллекции

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание
  • Следовать принципам I и D
  • Уметь находить их нарушения на ревью
  • Знать все принципы SOLID и следовать им
  • Знать другие принципы ООП, помимо SOLID
  • Уметь распознавать на ревью нарушения принципов SOLID (или других принципов)

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование
  • Понимать все принципы ООП
  • Знать зачем нужен каждый из принципов
  • Знать плюсы и минусы каждого принципа
  • Понимать композицию
  • Иметь глубокие знания ООП
  • В ревью предлагать оптимальные решения с помощью принципов ООП
  • Понимать связь между принципами ООП
  • Знать агрегирование

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов
  • Знать более сложные паттерны
  • Понимать какие паттерны помогают соблюдать принципы SOLID
  • Понимать различия схожих паттернов
  • Знать и уметь находить в ревью различные антипаттерны разработки

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга
  • Clean arch
  • UDF (unidirectional data flow)
  • Применять техники рефакторинга и предлагать их решения на ревью

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
  • Знать криптографические протоколы данных
  • Знать протоколы для передачи данных в реальном времени
  • TCP/UDP Socket
  • SOAP
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)
  • Сериализация/Десериализация данных
  • Context activity vs Application context
  • Знать альтернативные методы сохранения состояния
  • Базовые знания Android ndk: зачем это нужно, преимущества и недостатки
  • android.app Notification
  • android.webkit
  • android.database
  • Permissions
  • Jetpack
  • Планировщики задач
  • Следить за новыми технологиями, подходами и библиотеками, предлагать новые решения

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver
  • Практические навыки в работе с Service и Broadcast Receiver
  • Content provider
  • Content resolver
  • Углебленные знания Service

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options
  • Писать compound views
  • Уметь верстать адаптивный дизайн под разные устройства
  • Углубленные знания RecyclerView
  • Знать про 60fps (16ms)
  • Уметь писать custom view
  • Знать цикл прорисовки view
  • android.animation

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность
  • Уметь писать многопоточный код разными инструментами
  • Знать классические проблемы многопоточности
  • Знать основы синхронизации
  • Знать как работает MainThread Thread, ThreadLocal, ThreadGroup
  • Handler и looper
  • java.util.concurrent
  • Иметь более глубокие знания о проблемах многопоточности

Test
  • Уметь писать простые unit тесты
  • На постоянной основе пиcать unit тесты
  • Писать parameterized тесты
  • Знать виды тестов: unit, functional, integration, ui test
  • Уметь пользоваться Mockito
  • Знать базовые антипаттерны тестирования
  • Писать UI тесты
  • Знать Espresso
  • Выделять время во время планирование задачи на тесты
  • Писать негативные кейсы для тестов
  • Знать антипаттерны тестирования

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
  • Android profiler
  • Leak canary
  • ADB
  • Уметь пользоваться дампом памяти и находить утечки в системе
  • Shell
  • Shrink
  • Obfuscate
  • Optimize app
  • R8
  • App bundle
  • gradle
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack
  • Знать модель памяти Java
  • Знать стековую и регистровую архитектуру
  • Знать JVM, Dalvik и ART

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором
  • Иметь базовые знания про GC
  • Знать простые алгоритмы сборки мусора
  • Знать основные алгоритмы сборки мусора
  • Знать основные сборщики мусора
  • Знать методы уменьшения STW

Memory Leaks
  • Иметь базовые знания про утечки памяти
  • Знать об утечках памяти и что к ним приводит
  • Уметь их находить и чинить
  • Уметь находить в pull request утечки памяти
  • Знать про работу Reference
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing
  • Пользоваться Generics
  • Anonymous/Inner classes
  • Implicit/Explicit links
  • Error
  • Transient modifier
  • Final, finally, finalize
  • String buffer/String builder
  • Fail-fast/fail-safe iterators
  • Глубокие знания generics

Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
  • Extension
  • Object, companion object
  • Sealed class
  • val vs var vs const
  • FP
  • let/run/with/also/apply
  • Inline/noninline/crossinline
  • DSL
  • Infix
  • Invoke
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику
  • Знать как работают внутри менее распространенные коллекции
  • Знать потокобезопасные коллекции
  • Deque
  • Queue
  • Tree
  • Graph (алгоритмы)

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание
  • Следовать принципам I и D
  • Уметь находить их нарушения на ревью
  • Знать все принципы SOLID и следовать им
  • Знать другие принципы ООП, помимо SOLID
  • Уметь распознавать на ревью нарушения принципов SOLID (или других принципов)

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование
  • Понимать все принципы ООП
  • Знать зачем нужен каждый из принципов
  • Знать плюсы и минусы каждого принципа
  • Понимать композицию
  • Иметь глубокие знания ООП
  • В ревью предлагать оптимальные решения с помощью принципов ООП
  • Понимать связь между принципами ООП
  • Знать агрегирование

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов
  • Знать более сложные паттерны
  • Понимать какие паттерны помогают соблюдать принципы SOLID
  • Понимать различия схожих паттернов
  • Знать и уметь находить в ревью различные антипаттерны разработки
  • Знать паттерны за пределами refactoring guru
  • Знать антипаттерны разработки за пределами sourcemaking

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга
  • Clean arch
  • UDF (unidirectional data flow)
  • Применять техники рефакторинга и предлагать их решения на ревью
  • MVI и др

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
  • Знать криптографические протоколы данных
  • Знать протоколы для передачи данных в реальном времени
  • TCP/UDP Socket
  • SOAP
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)
  • Сериализация/Десериализация данных
  • Context activity vs Application context
  • Знать альтернативные методы сохранения состояния
  • Базовые знания Android ndk: зачем это нужно, преимущества и недостатки
  • android.app Notification
  • android.webkit
  • android.database
  • Permissions
  • Jetpack
  • Планировщики задач
  • Следить за новыми технологиями, подходами и библиотеками, предлагать новые решения
  • android.content
  • android.net
  • android.hardware
  • Content stream: TextureView, SurfaceView

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver
  • Практические навыки в работе с Service и Broadcast Receiver
  • Content provider
  • Content resolver
  • Углубленные знания Service

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options
  • Писать compound views
  • Уметь верстать адаптивный дизайн под разные устройства
  • Углубленные знания RecyclerView
  • Знать про 60fps (16ms)
  • Уметь писать custom view
  • Знать цикл прорисовки view
  • android.animation

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность
  • Уметь писать многопоточный код разными инструментами
  • Знать классические проблемы многопоточности
  • Знать основы синхронизации
  • Знать как работает MainThread Thread, ThreadLocal, ThreadGroup
  • Handler и looper
  • java.util.concurrent
  • Иметь более глубокие знания о проблемах многопоточности
  • Иметь более глубокие знания об инструменте с которым работаешь
  • Знать разновидности Executor
  • Знать работу потоков на уровне процессора и компилятора
  • Знать спецификацию (JSR133)
  • Опыт работы с IPC

Test
  • Уметь писать простые unit тесты
  • На постоянной основе пиcать unit тесты
  • Писать parameterized тесты
  • Знать виды тестов: unit, functional, integration, ui test
  • Уметь пользоваться Mockito
  • Знать базовые антипаттерны тестирования
  • Писать UI тесты
  • Знать Espresso
  • Выделять время во время планирование задачи на тесты
  • Писать негативные кейсы для тестов
  • Знать антипаттерны тестирования
  • Уметь настраивать тесты в Bamboo (CI)
  • Оптимизировать тесты
  • TDD

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
  • Android profiler
  • Leak canary
  • ADB
  • Уметь пользоваться дампом памяти и находить утечки в системе
  • Shell
  • Shrink
  • Obfuscate
  • Optimize app
  • R8
  • App bundle
  • gradle
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack
  • Знать модель памяти Java
  • Знать стековую и регистровую архитектуру
  • Знать JVM, Dalvik и ART

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором
  • Иметь базовые знания про GC
  • Знать простые алгоритмы сборки мусора
  • Знать основные алгоритмы сборки мусора
  • Знать основные сборщики мусора
  • Знать методы уменьшения STW
  • Иметь глубокие знания по алгоритмам сборки мусора
  • Знать про работу G1 и разновидности сборщиков в Android системе

Memory Leaks
  • Иметь базовые знания про утечки памяти
  • Знать об утечках памяти и что к ним приводит
  • Уметь их находить и чинить
  • Уметь находить в pull request утечки памяти
  • Знать про работу Reference
  • Производить постоянный анализ кода в проекте на наличие проблемных мест и оптимизировать код
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing
  • Пользоваться Generics
  • Anonymous/Inner classes
  • Implicit/Explicit links
  • Error
  • Transient modifier
  • Final, finally, finalize
  • String buffer/String builder
  • Fail-fast/fail-safe iterators
  • Глубокие знания generics
  • Reflection
  • Meta-programming
  • Annotation processing
  • Class loader
  • java.io
  • java.nio
  • Future

Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
  • Extension
  • Object, companion object
  • Sealed class
  • val vs var vs const
  • FP
  • let/run/with/also/apply
  • Inline/noninline/crossinline
  • DSL
  • Infix
  • Invoke
Computer Science


Data Structures
  • Знать Collections и Map
  • Знать распространенные реализации
  • Понимать в каких случаях нужны коллекции
  • Знать как работают внутри самые распространенные коллекции
  • Знать их асимптотику
  • Знать как работают внутри менее распространенные коллекции
  • Знать потокобезопасные коллекции
  • Deque
  • Queue
  • Tree
  • Graph (алгоритмы)

Programming Principles
  • DRY
  • KISS
  • Уметь перечислить все принципы SOLID и давать им краткое описание
  • Следовать принципам I и D
  • Уметь находить их нарушения на ревью
  • Знать все принципы SOLID и следовать им
  • Знать другие принципы ООП, помимо SOLID
  • Уметь распознавать на ревью нарушения принципов SOLID (или других принципов)
  • GRASP

OOP
  • Знать основную идею ООП
  • Уметь перечислять все принципы с кратким описанием
  • Знать отличия интерфейса от абстрактного класса
  • Хорошо понимать икапсуляцию и наследование
  • Понимать все принципы ООП
  • Знать зачем нужен каждый из принципов
  • Знать плюсы и минусы каждого принципа
  • Понимать композицию
  • Иметь глубокие знания ООП
  • В ревью предлагать оптимальные решения с помощью принципов ООП
  • Понимать связь между принципами ООП
  • Знать агрегирование
  • Знать более одной парадигмы программирования (Императивная, функциональная, декларативная)

Design Patterns
  • Знать о существовании паттернов
  • Различать типы паттернов
  • Знать и использовать на постоянной основе простые паттерны
  • Знать про существование распространенных антипаттернов
  • Знать более сложные паттерны
  • Понимать какие паттерны помогают соблюдать принципы SOLID
  • Понимать различия схожих паттернов
  • Знать и уметь находить в ревью различные антипаттерны разработки
  • Знать паттерны за пределами refactoring guru
  • Знать антипаттерны разработки за пределами sourcemaking

Architecture
  • Делегирование
  • MVC
  • MVP
  • MVVM
  • Знать техники рефакторинга
  • Clean arch
  • UDF (unidirectional data flow)
  • Применять техники рефакторинга и предлагать их решения на ревью
  • MVI и др

Network
  • Уметь работать с сетью любым способом
  • Знать протоколы передачи данных
  • Знать архитектуру взаимодействия REST
  • Знать коды ответов от сервера
  • Знать Multipart
  • Знать криптографические протоколы данных
  • Знать протоколы для передачи данных в реальном времени
  • TCP/UDP Socket
  • SOAP
  • OSI Layers
  • Handshaking
  • IPV4/IPV6
Android Platform


Android SDK
  • Знать структуру проекта
  • Знать как открывать экраны и взаимодействовать с пользовательским интерфейсом
  • Знать Manifest и компоненты которые там перечисляются
  • Знать как пользоваться ресурсами и стилями
  • Уметь пользоваться сохранением состояния через saveInstanceState и Bundle
  • Launch modes, Intent (ACTION_*, PendingIntent, Implicit, Explicit, Flags)
  • Сериализация/Десериализация данных
  • Context activity vs Application context
  • Знать альтернативные методы сохранения состояния
  • Базовые знания Android ndk: зачем это нужно, преимущества и недостатки
  • android.app Notification
  • android.webkit
  • android.database
  • Permissions
  • Jetpack
  • Планировщики задач
  • Следить за новыми технологиями, подходами и библиотеками, предлагать новые решения
  • android.content
  • android.net
  • android.hardware
  • Content stream: TextureView, SurfaceView

Android Component
  • Знать Activity и Fragment
  • Знать lifecycle и особенности использования
  • В теории знать про Service и BroadcastReceiver
  • Практические навыки в работе с Service и Broadcast Receiver
  • Content provider
  • Content resolver
  • Углубленные знания Service
  • Практика по всем компонентам

UI
  • Уметь верстать простой дизайн в xml
  • Знать ресурсы
  • Знать отличия различных ViewGroup
  • Работать с RecyclerView
  • Уметь пользоваться Developer options
  • Писать compound views
  • Уметь верстать адаптивный дизайн под разные устройства
  • Углубленные знания RecyclerView
  • Знать про 60fps (16ms)
  • Уметь писать custom view
  • Знать цикл прорисовки view
  • android.animation
  • Углубленные знания: android.animation, android.view.animation
  • Понимание гайдлайнов

Threading
  • Знать про существование многопоточного кода
  • Thread vs Process
  • Уметь писать простой многопоточный код
  • Понимать синхронность и асинхронность
  • Уметь писать многопоточный код разными инструментами
  • Знать классические проблемы многопоточности
  • Знать основы синхронизации
  • Знать как работает MainThread Thread, ThreadLocal, ThreadGroup
  • Handler и looper
  • java.util.concurrent
  • Иметь более глубокие знания о проблемах многопоточности
  • Иметь более глубокие знания об инструменте с которым работаешь
  • Знать разновидности Executor
  • Знать работу потоков на уровне процессора и компилятора
  • Знать спецификацию (JSR133)
  • Опыт работы с IPC

Test
  • Уметь писать простые unit тесты
  • На постоянной основе пиcать unit тесты
  • Писать parameterized тесты
  • Знать виды тестов: unit, functional, integration, ui test
  • Уметь пользоваться Mockito
  • Знать базовые антипаттерны тестирования
  • Писать UI тесты
  • Знать Espresso
  • Выделять время во время планирование задачи на тесты
  • Писать негативные кейсы для тестов
  • Знать антипаттерны тестирования
  • Уметь настраивать тесты в Bamboo (CI)
  • Оптимизировать тесты
  • TDD

Tools
  • Уметь пользоваться логами
  • Debug mode
  • Уметь работать с запросами (Postman etc)
  • Базовые знания git
  • Android profiler
  • Leak canary
  • ADB
  • Уметь пользоваться дампом памяти и находить утечки в системе
  • Shell
  • Shrink
  • Obfuscate
  • Optimize app
  • R8
  • App bundle
  • gradle
  • Linter
  • Android studio plugins
  • Template
Memory Management


Memory structure
  • Знать отличия между типами памяти (оперативная и постоянная)
  • Знать heap и stack
  • Знать модель памяти Java
  • Знать стековую и регистровую архитектуру
  • Знать JVM, Dalvik и ART
  • Иметь глубокие знания по модели памяти Java
  • Понимать как работает bytecode

GC
  • Знать что в Java не надо руками собирать мусор и всё на этом :)
  • Знать определение GC
  • Знать что система считает мусором
  • Иметь базовые знания про GC
  • Знать простые алгоритмы сборки мусора
  • Знать основные алгоритмы сборки мусора
  • Знать основные сборщики мусора
  • Знать методы уменьшения STW
  • Иметь глубокие знания по алгоритмам сборки мусора
  • Знать про работу G1 и разновидности сборщиков в Android системе

Memory Leaks
  • Иметь базовые знания про утечки памяти
  • Знать об утечках памяти и что к ним приводит
  • Уметь их находить и чинить
  • Уметь находить в pull request утечки памяти
  • Знать про работу Reference
  • Производить постоянный анализ кода в проекте на наличие проблемных мест и оптимизировать код
Language


Java
  • Знать синтаксис
  • Соблюдать code style
  • Final
  • Static
  • Модификаторы доступа
  • Autoboxing и Unboxing
  • Пользоваться Generics
  • Anonymous/Inner classes
  • Implicit/Explicit links
  • Error
  • Transient modifier
  • Final, finally, finalize
  • String buffer/String builder
  • Fail-fast/fail-safe iterators
  • Глубокие знания generics
  • Reflection
  • Meta-programming
  • Annotation processing
  • Class loader
  • java.io
  • java.nio
  • Future

Kotlin
  • Знать синтаксис
  • Соблюдать code style
  • Collections
  • Data class vs Class vs Open class
  • Extension
  • Object, companion object
  • Sealed class
  • val vs var vs const
  • FP
  • let/run/with/also/apply
  • Inline/noninline/crossinline
  • DSL
  • Infix
  • Invoke
Книги для развития­ в программировании
Роберт Мартин
Чистый код. Создание, анализ и рефакторинг
Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес
Приемы объектно-ориентированного проектирования. Паттерны проектирования
Э. Хант, Д. Томас
Программист-прагматик. Путь от подмастерья к мастеру
Мартин Фаулер
Рефакторинг
Р. С. Мартин, М. Мартин
Принципы, паттерны и методики гибкой разработки на языке C#
Маклафлин Бретт
Объектно-ориентированный анализ и проектирование
Джошуа Блох
Java. Эффективное программирование
Полезные сайты
Блог Рона Джеффриса
Коротко о Simple Design
Особенности платформы Android
Официальный сайт для Android-разработчиков. Есть все — документации, туториалы, новости и многое другое
Личный блог одного из известнейших Android-разработчиков и автора популярных библиотек
Официальная документация по Kotlin для Android-разработчиков
Для дальнейшего развития в Android