17 мая в 15:03

Как я перешёл из системного администрирования в Android-разработку из песочницы


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

С чего всё началось


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

Быть или не быть?


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

На каком языке можно разрабатывать под Android


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

  • Android SDK. Официальные языки — Java и Kotlin.
    Большинство существующих проектов написаны на Java.
    Kotlin является внуком Java. Некоторые разработчики стали активно использовать его в своих проектах. (Но их не так много, по сравнении с Java)
    Android официально стал поддерживать Kotlin с 17.05.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
После окончания вводного курса по Android, желание программировать сильно увеличилось. В курсе максимально понятно объясняется базовая концепция разработки под Android. После этого курса я написал свое первое приложение — генератор паролей, с сохранением состояния экрана при переворотах.

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

Не рекомендую смотреть старые уроки (2012-2013 год), т.к. технологии ушли давно вперед. А вот с начала 2015 года — вполне годно.
Так же существуют в текстовом формате.

Чат и канал StartAndroid в Telegram



3. Блог Александра Климова
Актуально. Отдельные моменты до сих пор просматриваю в данном блоге. Каждая тема осваивается на практическом примере с подробным объяснением.

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

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


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

Итак, поехали:

1. 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.


4. Dagger2
Библиотека для внедрения зависимостей. Достаточно так же знать основы, а именно — как внедрять самые простые зависимости.


Чат в Telegram: @dagger_2

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

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

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

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

Практика


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

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

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

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

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

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

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

Полезные чаты каналы в 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 SDK и таким технологиям, как Dagger2, Retrofit2, RxJava и Realm.
Alex Bykov @NoNews
карма
12,0
рейтинг 27,2
Android developer
Похожие публикации
Самое читаемое Разработка

Комментарии (41)

  • 0
    Я конечно понимаю что вопрос с зарплатой — это вопрос который решается индивидуально, но все таки вот с таким набором знаний как у Вас какой разброс зарплат?
    • 0
      Здравствуйте.
      Если говорить о Junior-разработчике, со знанием стека технологий, который я описал в статье, но, без опыта разработки в команде и без наличия завершённых коммерческих проектов — Московские студии по разному оценивают этот набор, но, в целом от ~ 50 000 на испытательный срок.

      А если говорить в общем — то, статистика от яндекса не врёт.
      • 0
        Я конечно понимаю что вопрос с зарплатой — это вопрос который решается индивидуально

        Вы правы — данный вопрос решается в индивидуальном порядке, и зависит не только от технических результатов интервью, но и от характера, подхода к разработке и способности постоянно изучать что-то новое.
      • 0
        Статистика от яндекса не много странная. Если посмотреть там вакансии «Программист SQL» число вакансий в разы меньше чем требуемое число программистов для Android. При этом на hh.ru требуемое число программистов под SQL в разы больше чем программистов под Android. Но тем не менее за ссылку спасибо, интересный инструмент — я о нем не знал.
  • +5
    Помимо видео уроков StartAndroid есть еще и сайт http://startandroid.ru с уроками в текстовом виде.
    Как по мне, так уроки на сайте StartAndroid будут по лучше чем блог Александра Климова. По крайней мере так было когда я только начинал изучать Android.
    • +3
      Кстати да, странно, что этого сайта нет в статье. Конечно некоторые статьи устарели, нов целом это отличнейшие уроки для начинающих.

      Пишу приложения исключительно для себя и это был первый сайт с которого я начал изучение.
    • 0
      Здравствуйте.
      Спасибо, добавил данный сайт.
      Сам по нему не занимался(именно на сайте), но, сейчас вижу его конкретно так обновили.
  • +1
    В сфере системного администрирования я успешно проработал более двух лет.

    Так Вы и такие же мышкофтыкатели, соглашающиеся для старта поработать за еду и которых вдруг почему-то вместо хелпдеска\эникея начали называть админами и демпинганули рынок.
    У меня дико прям бомбит от этого — прям новомодный стандартный путь:
    Этап 1 — мышкофтыкатель за еду, админить не умеет в принципе, только демпингует — 1-3 года
    Этап 2 — нееее, не джуниор кодеманки, а прям вот сразу разработчик и шоб минимум 80-100к на старте, но при этом демпингуя на мировом рынке
    • +5
      А Вам-то что? Пусть демпингуют, Вы же профессионал, и так неплохо зарабатываете
      • +3
        А вот это самая стандартная ошибка о том, что это не влияет — всякие-разные сотрудники (особенно HR) то тоже ротируются и уходят на повышение в большие компании.
        И потом начинается(утрированно, но не особо далеко от истины): И зп бы надо порезать, все равно он же ничего не делает кроме каких-то там ферм да контейнеров которых никто не видит, а вот, да туже бумагу в принтер не закладывает и картриджи не заряжает, а вот на прошлом месте там такооой мальчик был, и провода тянул и в принтерах печки менял и Светочке в экселе за нее формулы вставлял и даже микроволновку чинил и все за 25к, умничка прям.
        Все связано на самом деле.
    • 0
      Автор всего лишь вовремя расставил приоритеты и переквалифицировался. С 10-летним опытом идти на джуниорские позиции сложнее.
      • 0
        Это да. Более 10 лет опыта, широкий кругозор, ентерпрайз: серверы, схд, виртуализация vmware vsphere, hyper-v, всякие службы windows, и… тот же программист например по 1С получает чуть ли не в 2 раза больше. Даже программист со стажем 2-3 года и то получает больше. 1С на начальном этапе программировал, вообще на первый взгляд ничего сложного. Правда скучно. Почему такая разница в оплате не понятно. И переквалифицироваться уже как-бы сложно, по сути теряется этот стаж. Но с другой стороны он получается и не нужен никому.
  • 0
    Лично я качестве клиента Git использую GitHub Desktop (в связке с приватными репозиториями на Bitbucket). Когда-то пробовал SourceTree, но у него был очень неудобный интерфейс.

    Из библиотек могу еще посоветовать MaterialDrawer (главное меню приложения) и Fresco (аналог Picasso).

    • –1

      В качестве клиента git, нужно использовать git. Остальное — профанация.

    • 0
      Здравствуйте.
      Тут уже кому как удобно. В целом, в SourceTree нельзя сделать многие вещи, которые можно сделать в консоли, но, для повседневных реалий его вполне хватает. С интерфейсом согласен, он мог бы быть лучше.

      По-поводу MaterialDrawer — отличная библиотека, которую стоит иметь в арсенале.
      Но, в основном хватает возможностей стандартного NavigationView. (по крайней мере в моих проектах)
      Кстати, есть неплохой пост на StackOverflow на тему Image-лоадеров.

  • 0

    Спасибо большое за набор различных полезных ссылок по андроид, возможно когда-нибудь они пригодятся.
    Статья заставила ностальгически улыбнуться — сам полтора года назад начинал свои потуги в программировании на JavaRush'e и смотрел лекции Головача(Действительно, он очень хорош). Можно еще отметить канал DevColibri. Андроид разраб, который так же делает ролики по котлину, мне он в свое время помог)

    • 0
      Здравствуйте.
      Да, Головач стал уже классикой)
      Про Devcolibri: cогласен, хороший канал)
      Особенно, курс по созданию полноценного клиент-серверного приложения.
      Кстати, ребята недавно начали ещё один подобный курс.
  • 0
    Адекватно указан стек библиотек.

    Но следует добавить раздел «архитектуры MVP, MVC, VIPER», так как по ним спрашивают на собеседованиях сейчас практически всегда (термин VIPER используется при разработке под iOS, но в Андроиде недостающие компоненты в MVP (роутер, интерактор) в хороших проектах все равно реализуются, хотя и не называются именно так — поэтому понимание и нужно)

    • 0
      Здравствуйте.
      Про Сlean Architecture и MVP обязательно напишу в следующей статье.
      Мне кажется, для пользователей, которые только-только знакомятся с программированием, для стартового арсенала это слишком, т.к. может запутать.
  • 0
    Что еще очень важно для начинающего? Как он сам пишет код.

    Можно дать такой совет
    — Скачайте код проектов от известных компаний. Посмотрите примеры проектов для библиотеки Moxy, примеры проектов для API от крутых вендоров (Яндекс, Гугль). Посмотрите, как называются внутренние поля объекта, аргументы функций, сами объекты и классы. Обратите внимание на размер методов, на размер классов. Особое внимание — на то, на какие классы разбиваются разные задачи.

    Подумайте, почему сделано так. Если не можете понять, почему — попробуйте просто повторить, попробуйте просто начать кодировать в таком стиле.

    Идеальнее всего, конечно, применять такой совет на примерах от той компании, в которую хотите устроиться. Но можете брать примеры от лучших и известных разработчиков на GitHub.
  • –1
    Вместо ButterKnife лучше использовать «нативный» DataBinding.
  • 0
    Realm
    База данных. По некоторым параметрам она быстрее чем SQLite. Правда, в продакшн-проектах используется до сих пор не так часто, т.к. stable-версия вышла относительно недавно. Но, на мой взгляд, будущее локального хранения данных на Android именно за Realm. Достаточно посмотреть её на абстрактном уровне — разобрать базовые транзакции.

    А также советую обратит внимание на /. По производительности она должна обойти даже Realm. ИМХО у реалма много лишнего функционала, Например конвертирование с сериализация и десириализация, а также накладывает ограничения на использование потоков. Хотя может кому-нибудь это и нужно.
    • 0
      А также советую обратит внимание на /.

      На что не дописали или я чего-то не понял)
      • 0

        А также советую обратить внимание на http://greenrobot.org/objectbox/ По производительности она должна обойти даже Realm. ИМХО у реалма много лишнего функционала, Например конвертирование с сериализация и десириализация, а также накладывает ограничения на использование потоков. Хотя может кому-нибудь это и нужно.

  • 0
    Канал для общения в Telegram: @startandroidchat

    Это чат

    А канал здесь — https://t.me/startandroid
  • 0
    Здравствуйте.
    Спасибо, поправил.
    Так же спасибо за интересные и доступные уроки!
  • 0

    А лично я считаю, что не нужно новичкам сразу показывать библиотеки, а то забудутся и не будут знать как, например, формируется сетевой запрос или загружается картинка. Для начала пусть познают жизу (HttpURLConnection + AsyncTask), а уже потом всякие модные штучки. А то на собеседованиях трудновато будет...

    • 0
      Здравствуйте.
      Возможно Вы правы, но, на собеседованиях (по крайней мере на тех, которые проходил я) упор всегда делался на то, как глубоко человек знаком с теорией Http и знает Retrofit. (Если говорить о Http-запросах).
      Но в любом случае, это лишним не будет.

      С AsyncTask согласен, его обязательно нужно знать.
    • 0

      AsyncTask — это не то, что следует использовать для запросов в сеть. Потому что мало кто умеет их правильно готовить для этого. И уж лучше сразу использовать нормальные библиотеки, а на собеседовании бежать от вопрошающих такое.

  • 0
    > 3. Так же существуют кросс-платформенные инструменты.
    Нигде не упомянут фреймворк kivy. А жаль.
  • 0
    1. Официально, Google предоставил два варианта


    Android SDK. Официальный язык — Java.
    Большинство существующих проектов написаны именно на Java.

    Android NDK. Официальные языки — C/C++.
    Сам Google рекомендует использовать NDK в тех случаях, когда требуется максимальная производительность. (В одном из наших проектов мы использовали NDK для организации голосовой связи)
    1. Язык Kotlin

    Вчера 2 добавилось в 1:)
    https://developer.android.com/kotlin/index.html

    • 0
      Ждем Android Studio 3 :)
    • 0
      Здравствуйте.
      Обновил, спасибо)
  • +3
    Пройдя вводный курс по Android, желание программировать сильно увеличилось.

    Какое самостоятельное желание — и курсы прошло, и увеличилось.
    • 0
      Здравствуйте.
      Спасибо, исправил данный момент.
  • 0
    Picasso уже не так часто используется, т.к. разработчики почти не поддерживают библиотеку. Сейчас в основном используется Glide, в нем более широкий функционал (загрузка гифок и т.д). К тому же он быстрее.
  • 0
    Хорошая статья. Было бы интересно найти такие же инструкции по Java EE, C/C++, Rython/Django, Ruby on Rails
  • 0
    Спасибо, было интересно читать.
    По поводу кросс-платформенные инструменты, а конкретно про Xamarin. Он дает два подхода для разработки:
    1. Xamarin Forms — пишем код который работает на двух платформах одинаково, но имеет ограничения
    2. Xamarin Native — пишем отдельный код для каждой платформы. Результат ни чем не отличается от нативного кода Java/Swift… Для тех кто знает C# и хочет написать нативные приложения.
  • 0
    Имеет ли смысл изучать Android ради работы на фрилансе, а не студии?
    • 0
      Имеет смысл изучать Android ради публикации приложений на маркете. А уже потом как повезет, или ваше приложение на маркете выстрелит (я знаю пару живых удачных примеров), или это самое приложение на маркете будет частью вашего портфолио когда вы будете предлагать свои услуги на фрилансе.
    • 0
      Здравствуйте.
      Мне кажется, чтобы стать хорошим фрилансером, который качественно и быстро пишет код, стоит поработать несколько лет в студии. Подход к самой разработке изменится.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.