База знаний Android-разработчика

Автор статьи: Алексей Быков, Android-разработчик компании Techmas.

Если Вы начинающий специалист в области Android-разработки, обладаете определенными знаниями и планируете в скором времени устраиваться на работу, то этот материал для вас. К данной статье вы будете возвращаться по мере накопления опыта, смотреть на каком этапе в данный момент находитесь и что необходимо изучать дальше.

 

Начало пути

Мне довелось поработать в сфере системного администрирования более двух лет, после чего я понял, что мне необходимо сделать акцент на профессиональном развитии и идти дальше. Мой интерес к технологиям рос и я остановился на программировании, а именно, на языке Java. Я начал изучение Java SE с нуля. По плану было полное погружение в Java SE , а после в Java EE. После запуска обычного проекта на Android «Hello World» в середине изучения Java SE, мои взгляды на будущее сильно поменялись. Весь путь от первого «погружения» в программу до предложения о работе занял 1 год.

На чем остановить свой выбор?

К выбору Android нужно подойти с полной осознанностью, поскольку эта область развивается стремительно — с каждым годом выходит новая версия, определенный процент уже существующих приложений на новой версии без доработок может даже не запуститься. Вам необходимо быть готовым решать такие задачи.

Языки программирования для Android

1. Официально Google предоставил два варианта:

  • Android SDK. Официальные языки — Java и Kotlin.
    Большинство существующих проектов написаны на Java.
    Kotlin является внуком Java. Некоторые разработчики стали активно использовать его в своих проектах. Но их не так много, по сравнению с Java.
    Android официально стал поддерживать Kotlin с мая 2017 года, возможности языка будут встроены в Android Studio 3.0.
  • Android NDK. Официальные языки C/C++.
    Сам Google рекомендует использовать NDK в тех случаях, когда требуется максимальная производительность. Для примера: в одном из наших проектов мы использовали NDK для организации голосовой связи.

2. Кросс-платформенные инструменты. Их использование является менее популярным, чем нативная разработка.

Начало изучения Android

Не стоит спешить с выбором, касающегося кросс-платформенных инструментов или Kotlin.

C помощью кросс-платформенных инструментов можно разрабатывать сразу и под Android и iOS. Они способны решать определённый спектр задач, но по гибкости никогда не сравнятся с нативными решениями. Более того, такие специалисты не сильно востребованы на рынке труда.

Что касается Kotlin, на сегодняшний день нет компаний, у которых абсолютно все Android-проекты написаны на нём. Я думаю, Kotlin стоит изучать только после трудоустройства.

Рекомендую начинать обучение с Java, особенно в том случае, если у вас нет опыта в программировании.

Изучение Java

  • Типы данных. (Примитивные и ссылочные)
  • Циклы(for/while/for each)
  • Устройство памяти в Java(Stack, Heap). Так же важно понимать, как и на каком уровне работает Garbarage collector
  • Методы — возвращаемые/не возвращаемые
  • Массивы и коллекции, а так же операции с ними (Сортировки)
  • ООП (Полиморфизм, Наследование, Инкапсуляция, Абстракция)
  • Comparator и Comparable (для сортировки объектов)
  • Threads и Runnable, для понимания, как устроена многопоточность в Java.
  • Exceptions (try/catch/finnaly) — для «отлова» ошибок
  • Generics (Обобщенные типы)

Собеседования я проходил именно с этим списком.
На мой взгляд, этого более чем достаточно.

В сети есть множество хороших ресурсов для изучения Java и Android. Я затрону только те, по которым занимался сам.

1. JavaRush

Самым первым ресурсом для обучения стал JavaRush. Мне кажется, достаточно будет пройти бесплатный курс «Java Syntax», который состоит из 10 уровней.

Сам по себе ресурс явно заслуживает внимания, несмотря на некорректность многих задач и сильно заметную недоработку валидатора. Многие скептично относятся к этому сервису, и считают, что не стоит на него тратить время. Я же, как и многие из коих коллег отмечаю в нем и достоинства, и недостатки, но не стану отрицать тот факт, что JavaRush даст неплохой старт и неплохо прокачает алгоритмы. Рекомендую ресурс для тех, кто только начал изучение, однако долго заострять внимание не нам не стоит.

2. Java Core от Ивана Головоча

Параллельно с JavaRush также смотрел видео-лекции Ивана Головоча, которые на мой взгляд являются самыми лучшими по Java в рунете. Мало кто в наше время способен делать хорошо одновременно две вещи: программировать, и объяснять, как программировать. Именно эти лекции помогут закрепить полученные знания на JavaRush. Лекции по Javа Сore советую смотреть полностью.

Изучаем Android

  • XML — верстать интерфейсы придется именно на нем
  • Activity/Fragments — «формы» для расположения UI. Необходимо знать их отличия, жизненные циклы, манипуляции с данными (onActivityresult)
  • Intents — передача данных между Activity, открытие сторонних приложений
  • Bundle — передача данных между Fragments, сохранение состояния экрана
  • Базовые адаптеры для ViewPager, RecyclerView, Spinner
  • NavigationView — Навигационное меню «Шторка»
  • Dialog, DialogFragment— Диалоговые окна (например, с текстом и кнопками «Да», «Нет»)
  • AsyncTask — Многопоточность в Android
  • SharedPreferenses — Для сохранения настроек и небольших данных
  • Service — Выполнение длительных операций в фоновом режиме
  • SQLite — База данных. Теряет свою популярность, так же почти во всех новых проектах используют ORM. Но в старых проектах точно будете встречать
  • Работа с ресурсами: string, color, styles, dimens, animations
  • Manifest файл, permissions — Описание компонентов приложения и разрешения

Собеседования я проходил без знаний Dialog/DialogFragment и Service

1. Udacity:Android Basics

1
После окончания вводного курса по Android, желание программировать сильно увеличилось. В курсе максимально понятно объясняется базовая концепция разработки под Android. После этого курса я написал свое первое приложение — генератор паролей, с сохранением состояния экрана при переворотах.

2. Видео-лекции StartAndroid
Неплохим дополнением к Udacity стали бесплатные видео-лекции от ресурса StartAndroid.

Не рекомендую смотреть старые уроки (2012-2013 год), так как сейчас эта информация уже не актуальна, а технологии ушли далеко вперед. С начала 2015 года информация включает в себя все нововведения и технологии за последние несколько лет. Кроме этого уроки есть в текстовом формате.

3. Блог Александра Климова

Актуален в настоящий момент. Некоторые материалы до сих пор просматриваю в данном блоге. Каждая тема осваивается на практическом примере с подробным объяснением.

4. Devcolibri — Full Android Application
После прохождения курса от Udacity, появилась идея начать писать свое первое тестовое приложение. После недолгих поисков, нашёл хороший курс от Devcolibri, где объяснялась концепция разработки на примере написания простейшего таск-менеджера. Смотря этот курс, я параллельно начал делать свое приложение, подхватывая различные полезные советы из урока.

Технологии и инструменты для Android Junior

В сообществе Android-разработчиков в Telegram, появился вопрос на эту тему. Мой ответ оценили как слишком завышенный по требованиям к Junior. (Я описал Retrofit2 в связке с RxJava, так же Dagger2, EventBus, Realm и Picasso). Стоит отметить, что уровень требований к Android Junior почти во всех студиях разный. Кого-то берут на работу и с начальными знаниями Android, без технологий в принципе. Но это редкость, и я не был в числе этих счастливчиков. Чем больше вы знаете — тем выше ваши шансы на трудоустройство.

Обо всем по порядку:

1. Git

git
Это система контроля версий кода. Позволяет активно работать в команде, отслеживать изменения в коде и откатываться на предыдущие версии, что очень удобно. Советую пройти хороший курс от GeekBrains. В качестве Git-клиента, рекомендую использовать SourceTree, т.к. он полностью бесплатен и удобен, а студии очень любят экономить на ПО.

2. ButterKnife
Удобная библиотека для объявления view-элементов из XML. (И не только). Изучается очень быстро и сокращает определённое количество рутинного кода.

3. Retrofit2, RxJava, RxAndroid, OkHttp Loging InterCeptor
Retrofit2REST-клиент
RxJava модуль реактивного программирования на Java
RxAndroid модуль реактивного программирования на Android
OkHttp Loging InterCeptor модуль для логирования HTTP-запросов (часть библиотеки OkHttp)
Достаточно знать основы работы в этой связке. (Например, уметь распарсить JSON с данными)

Не стоит с самого начала копать RxJava глубоко. Значительная часть Android-разработчиков использует её исключительно в связке с Retrofit2.

1. Изучаем Retrofit 2
2. Retrofit2: Загружаем файлы на сервер
3. Retrofit2 + RxJava + RxAndroidRetrofit2 + RxJava + RxAndroid
4. Dagger2
Библиотека для внедрения зависимостей. Достаточно так же знать основы, а именно — как внедрять самые простые зависимости.

1. Dagger 2 и структура приложения для Android
2. Основы Dagger2
3. Dagger 2. Лечим зависимости по методике Google

Чат в Telegram: @dagger_2

5. Realm

realm
База данных. По некоторым параметрам она быстрее чем SQLite. Правда, в продакшн-проектах используется до сих пор не так часто, т.к. stable-версия вышла относительно недавно. Но, на мой взгляд, будущее локального хранения данных на Android именно за Realm. Достаточно посмотреть её на абстрактном уровне — разобрать базовые транзакции.

Сравнительная характеристика ORM и баз данных

6. Picasso
Библиотека для работы с изображениями. Чаще всего, используется для загрузки изображений с сети. Максимально проста в использовании.

7. EventBus
Библиотека для отправки сообщений. Не стоит применять её часто, т.к. код с EventBus очень трудно поддерживать в дальнейшем.

Практика

Как правило, у кандидатов с уже имеющимися приложениями на GitHub шансы на трудоустройство выше. (Особенно, если в них применены все технологии, которые я описал).

Для повышения шансов на трудоустройство, я рекомендую написать тестовое приложение, которое закрепит полученные знания. Каким оно должно быть, и что должно делать — решать вам. Лично мне кажется, что неоспоримым преимуществом перед другими кандидатами будет приложение, которое загружает какие-то данные из сети и отображает в удобном формате для пользователя.

При этом, если у пользователя нет интернета — последние актуальные данные загружаются из базы данных. Если вы не нашли подходящую для себя API — не беда, сформируйте несколько JSON-файлов на данном ресурсе и используйте их. Смотреть будут не на полезность вашего приложения для мира, а на то, как вы его реализовали.

Мое приложение загружало из сети список менеджеров компании и показывало график выполнения плана продаж. Уже в процессе его разработки я получил предложение о работе.

Моя самая главная ошибка в процессе разработки этого приложения — я пытался всё сделать идеально. По стандартам, чтобы мой код хорошо оценили. Обладая очень абстрактными знаниями по MVP, я попытался встроить его в проект, тем самым, ещё сильнее запутав свой код.

Сделать своё первое приложение идеально не получится, как бы вы не пытались. Мне кажется, что не стоит в своем первом проекте использовать MVP, если не хотите ещё больше запутать самого себя. (В дальнейшем, уже после трудоустройства — однозначно стоит).

Во время разработки, у вас может возникнуть много вопросов. Не беда, если у вас нет знакомых Android-разработчиков. Смело задавайте свои вопросы на StackOverFlow (можно на русском языке). Также, вопросы можно задавать в каналах Telegram.

  • Start Android Ru Chat
    @startandroidchat
  • Start Android Ru Channel
    @startandroid
  • Android Developers — русскоговорящее сообщество
    @android_ru
  • Mobile Dev Jobs — вакансии и аналитика
    @mobile_jobs
  • Android Architecture — обсуждение архитектуры приложений
    @Android_Architecture
  • Android Architecture — Summary (Сводка обсуждений с чата Android Architecture)
    @Android_Architecture_Summary
  • Dagger2
    @dagger_2
  • ReactiveX — русскоговорящее сообщество (Rx)
    @reactivex
  • Moxy – MVP библиотека под Android (рекомендую читать только после трудоустройства)
    @moxy_ru
  • Android NDK (C++) — русскоговорящее сообщество
    @ndk_ru
  • Android Arsenal (библиотеки для Android)
    @androidarsenal
  • Android ResId (новости и ресурсы по Android)
    @AndrResIdFb.

Интервью с работодателем и итоги

Если говорить о вопросах на собеседованиях, то в целом, у всех студий свои взгляды на этот счёт.
В большинстве случаев спрашивают и по Java, и по Android SDK и по технологиям. Но иногда встречаются места, где просят просто показать пример своего рабочего кода и спрашивают, а почему вот здесь вы сделали именно вот так. Готовым нужно быть и к первому и ко второму.

В нашей компании, я делю техническую часть первичного интервью с кандидатами на 3 этапа:

1) Вопросы по Java Core и ООП (см. Изучаем Java)
2) Вопросы по Android SDK (см. Изучаем Android)
3) Вопросы по технологиям и инструментам (см. Технологии и инструменты)

На втором этапе собеседования, как правило, даётся небольшое техническое задание, или же анализируется существующий код.

В 80% случаев, интервьюеры задают одни и те же вопросы по Java.

Надеюсь, мой личный опыт и наблюдения могут быть полезными для начинающих Android-разработчиков. В следующей статье, мы разберём подробно самые популярные вопросы на собеседованиях по Android SDK и таким технологиям, как Dagger2, Retrofit2, RxJava и Realm.

| 31.05.2017