Несколько лет назад, я, как и другие начинающие 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
Необходимые знания
В сети достаточно много хороших ресурсов для изучения Java и Android. Я затрону только те, по которым занимался сам.
1. JavaRush
Самым первым ресурсом для обучения стал JavaRush. Мне кажется, достаточно будет пройти бесплатный курс «Java Syntax», который состоит из 10 уровней.
Сам по себе ресурс явно заслуживает внимания, несмотря на некорректность многих задач и сильно заметную недоработку валидатора. Многие скептично относятся к этому сервису, и считают, что не стоит на него тратить время. Я и хвалю и сильно критикую этот ресурс, как и мои нынешние коллеги, которые начинали вместе со мной. JavaRush даст неплохой старт и неплохо прокачает алгоритмы. Но засиживаться на нём явно не стоит.
2. Java Core от Ивана Головоча
Параллельно с JavaRush так же смотрел видео-лекции Ивана Головоча, которые на мой взгляд являются самыми лучшими по Java в рунете. Мало кто в наше время способен и хорошо программировать и хорошо объяснять. Именно эти лекции закрепляли полученные знания на JavaRush. Лекции по Javа Сoreсоветую смотреть полностью.
Изучаем Android
Необходимые знания
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
Retrofit2 — REST-клиент
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
Интервью с работодателем и итоги
Если говорить о вопросах на собеседованиях, то в целом, у всех студий свои взгляды на этот счёт.
В большинстве случаев спрашивают и по Java, и по Android SDK и по технологиям. Но иногда встречаются места, где просят просто показать пример своего рабочего кода и спрашивают, а почему вот здесь вы сделали именно вот так. Готовым нужно быть и к первому и ко второму.
В нашей компании, я делю техническую часть первичного интервью с кандидатами на 3 этапа:
1) Вопросы по Java Core и ООП (см. Изучаем Java)
2) Вопросы по Android SDK (см. Изучаем Android)
3) Вопросы по технологиям и инструментам (см. Технологии и инструменты)
На втором этапе собеседования, как правило, даётся небольшое техническое задание, или же анализируется существующий код.
В 80% случаев, интервьюеры задают одни и те же вопросы по Java.
Комментарии
Иииэххххх..
Где мои 17 лет
Где мои ассемблеры бейсики и паскали ((((
Хм. А пацаны то и не знаю что ... (С)
А вы хоть тему-то почитали?
.....Расслабьтесь ребята. Речь идет о самом базовом курсе cs 106 на котором не изучают ничего сложнее циклов и функций и рекурсий. Джава скрипт благодаря своей low ceremony позволяет дать эти начальные базовые знания без всяких классов наследований и меморименеджмент. Этот курс может пройдут какие нить бизнесвуман для баллов в зачетке и потом пойдут юриспруденцию учить а те кто дальше учиться программированию будут те возьмут следующий курс где будет и джава и ассемблер и все остальное.
Речь идет о том, что студентам трудно понять Java. Ну это я и так знаю. Тут многие не поймут. Но Java от этого не проигрывает.
То есть раньше "бизнесвуман для баллов в зачетке" учили с какого-то бодуна Java? - Ваша гипотеза фантастична! Имхо.
Огласите весь список, пожалуйста. :)
Тут многим не светит устроиться на заработки -- имхо так правильнее. :)
Что Доремидонт и подчеркнул. Имхо.
Почему? Выучить язык программирования не труднее чем английский. (С)
Другое дело что его всё же надо учить - а учить что-то это так ... тяжело.
Потому что старые.
Почему не все молодые идут в айти? (С)
Потому, что не могут ничего в этом понять. Через час начинает голова болеть, а через неделю убегают, сказав, что "не туда пришли". Толковых - два на десять, обычно.
Стоп. А что, туда куда молодые попадают вне айти, там что - они всё понимают и голова не болит?
Электрики, сантехники, животноводы, грузчики, продавцы, товароведы, бухгалтера, санитарки, медсёстры, строители, разносчики пиццы, официанты, сторожа, охранники, водители фур, таксисты, токари, фрезеровщики, гальваники, кочегары, плотники, бетонщики, вышибалы, электромонтёры, полотёры, ткачи, кузнецы, чиновники, заправщики, монтажники авто-колёс, жестянщики, маляры, печники, комбайнёры, свиноводы, полеводы, экономисты - там голова не болит?