- PVSM.RU - https://www.pvsm.ru -
Несколько лет назад, я, как и другие начинающие Android-разработчики, решил найти работу в этой области. Если вы начинающий специалист, и не знаете, с чего начать изучение Android, или если вы уже обладаете определёнными знаниями в этой теме и планируете в скором времени устраиваться на работу, то этот материал для вас. По задумке, к данной статье вы будете возвращаться по мере накопления опыта: смотреть на каком этапе в данный момент находитесь и что изучать дальше.
В сфере системного администрирования я успешно проработал более двух лет. Изучив рынок [2] я понял, что мне необходимо идти дальше и что-то менять. Мой интерес к технологиям рос и я остановился на программировании, а именно, на языке Java. Я начал изучение Java SE с нуля. По плану было полное погружение в Java SE , а после в Java EE. Но, на середине изучения Java SE, запустил обычный Hello World проект на Android. И, мои взгляды на будущее сильно поменялись. Весь путь от первого «погружения» в программу до предложения о работе занял 1 год.
Выбор Android нужно хорошо обдумать, так как он шагает семимильными шагами. Каждый год стабильно выходит новая версия, с множеством нововведений. Кроме того, определенный процент уже существующих приложений на новой версии может даже не запуститься. Вам предстоит решать эти задачи.
1. Официально, Google предоставил два варианта
2. Язык Kotlin [4]
Является внуком Java. Некоторые разработчики стали активно использовать его в своих проектах. (Но их не так много, по сравнении с Java)
3. Так же существуют кросс-платформенные инструменты [5].
Возможно вы обратили внимание на кросс-платформенные инструменты или на Kotlin , но спешить не стоит.
C помощью кросс-платформенных инструментов можно разрабатывать сразу и под Android и iOS.
Кросс-платформенные инструменты способны решать определённый спектр задач, но по гибкости они никогда не сравнятся с нативными решениями. Тем более, такие специалисты не сильно востребованы на рынке труда.
Что касается Kotlin, на сегодняшний день нет компаний, у которых абсолютно все Android-проекты написаны на нём. Мне кажется, Kotlin стоит изучать только после трудоустройства.
Я рекомендую начинать обучение с Java. Тем более том случае, если у вас нет опыта в программировании.
Собеседования я проходил именно с этим списком.
На мой взгляд, этого более чем достаточно.
В сети достаточно много хороших ресурсов для изучения Java и Android. Я затрону только те, по которым занимался сам.
1. JavaRush [6]
Самым первым ресурсом для обучения стал JavaRush. Мне кажется, достаточно будет пройти бесплатный курс «Java Syntax», который состоит из 10 уровней.
Сам по себе ресурс явно заслуживает внимания, несмотря на некорректность многих задач и сильно заметную недоработку валидатора. Многие скептично относятся к этому сервису, и считают, что не стоит на него тратить время. Я и хвалю и сильно критикую этот ресурс, как и мои нынешние коллеги, которые начинали вместе со мной. JavaRush даст неплохой старт и неплохо прокачает алгоритмы. Но засиживаться на нём явно не стоит.
2. Java Core от Ивана Головоча [8]
Параллельно с JavaRush так же смотрел видео-лекции Ивана Головоча, которые на мой взгляд являются самыми лучшими по Java в рунете. Мало кто в наше время способен и хорошо программировать и хорошо объяснять. Именно эти лекции закрепляли полученные знания на JavaRush. Лекции по Javа Сore советую смотреть полностью.
Собеседования я проходил без знаний Dialog/DialogFragment и Service
1. Udacity:Android Basics [9]
Пройдя вводный курс по Android, желание программировать сильно увеличилось. В курсе максимально понятно объясняется базовая концепция разработки под Android. После этого курса я написал свое первое приложение — генератор паролей, с сохранением состояния экрана при переворотах.
2. Видео-лекции StartAndroid [10]
Неплохим дополнением к Udacity стали бесплатные лекции от ресурса StartAndroid. Не рекомендую смотреть старые уроки (2012-2013 год), т.к. технологии ушли давно вперед. А вот с начала 2015 года — вполне годно.
3. Блог Александра Климова [11]
Актуально. Отдельные моменты до сих пор просматриваю в данном блоге. Каждая тема осваивается на практическом примере с подробным объяснением.
4. Devcolibri — Full Android Application [12]
После прохождения курса от Udacity, появилась идея начать писать свое первое тестовое приложение. После недолгих поисков, нашёл хороший курс от Devcolibri, где объяснялась концепция разработки на примере написания простейшего таск-менеджера. Смотря этот курс, я параллельно начал делать свое приложение, подхватывая различные фишки из урока.
В сообществе Android-разработчиков в Telegram [13], появился вопрос на эту тему, мой ответ приравняли как к слишком завышенному по требованиям к Junior. (Я описал Retrofit2 в связке с RxJava, так же Dagger2, EventBus, Realm и Picasso). Стоит отметить, что уровень требований к Android Junior почти во всех студиях разный. Кого-то берут на работу и с начальными знаниями Android, без технологий в принципе. Но это редкость, и я не был в числе этих счастливчиков. Чем больше вы знаете — тем выше ваши шансы на трудоустройство.
Итак, поехали:
1. Git [14]
Это система контроля версий кода. Позволяет активно работать в команде, отслеживать изменения в коде и откатываться на предыдущие версии, что очень удобно. Советую пройти хороший курс [15] от GeekBrains [16]. В качестве Git-клиента, рекомендую использовать SourceTree [17], т.к. он полностью бесплатен и удобен, а студии очень любят экономить на ПО.
2. ButterKnife [18]
Удобная библиотека для объявления view-элементов из XML. (И не только). Изучается очень быстро и сокращает определённое количество рутинного кода.
3. Retrofit2 [19], RxJava [20], RxAndroid [21], OkHttp Loging InterCeptor [22]
Retrofit2 — REST-клиент
RxJava— модуль реактивного программирования на Java
RxAndroid— модуль реактивного программирования на Android
OkHttp Loging InterCeptor — модуль для логирования HTTP-запросов (часть библиотеки OkHttp [23])
Достаточно знать основы работы в этой связке. (Например, уметь распарсить JSON с данными)
Не стоит с самого начала копать RxJava глубоко. Значительная часть Android-разработчиков использует её исключительно в связке с Retrofit2.
4. Dagger2 [27]
Библиотека для внедрения зависимостей. Достаточно так же знать основы, а именно — как внедрять самые простые зависимости.
Канал для общения в Telegram: @dagger_2 [31]
5. Realm [32]
База данных. По некоторым параметрам она быстрее чем SQLite. Правда, в продакшн-проектах используется до сих пор не так часто, т.к. stable-версия вышла относительно недавно. Но, на мой взгляд, будущее локального хранения данных на Android именно за Realm. Достаточно посмотреть её на абстрактном уровне — разобрать базовые транзакции.
Сравнительная характеристика ORM и баз данных [33]
6. Picasso [34]
Библиотека для работы с изображениями. Чаще всего, используется для загрузки изображений с сети. Максимально проста в использовании.
7. EventBus [35]
Библиотека для отправки сообщений. Не стоит применять её часто, т.к. код с EventBus очень трудно поддерживать в дальнейшем.
Как правило, у кандидатов с уже имеющимися приложениями на GitHub [36]шансы на трудоустройство выше. (Особенно, если в них применены все технологии, которые я описал).
Для повышения шансов на трудоустройство, я рекомендую написать тестовое приложение, которое закрепит полученные знания. Каким оно должно быть, и что должно делать — решать вам. Лично мне кажется, что неоспоримым преимуществом перед другими кандидатами будет приложение, которое загружает какие-то данные из сети и отображает в удобном формате для пользователя.
При этом, если у пользователя нет интернета — последние актуальные данные загружаются из базы данных. Если вы не нашли подходящую для себя API — не беда, сформируйте несколько JSON-файлов на данном [37] ресурсе и используйте их. Смотреть будут не на полезность вашего приложения для мира, а на то, как вы его реализовали.
Мое приложение загружало из сети список менеджеров компании и показывало график выполнения плана продаж. Уже в процессе его разработки я получил предложение о работе.
Моя самая главная ошибка в процессе разработки этого приложения — я пытался всё сделать идеально. По стандартам, чтобы мой код хорошо оценили. Обладая очень абстрактными знаниями по MVP [38], я попытался встроить его в проект, тем самым, ещё сильнее запутав свой код.
Сделать своё первое приложение идеально не получится, как бы вы не пытались. Мне кажется, что не стоит в своем первом проекте использовать MVP, если не хотите ещё больше запутать самого себя. (В дальнейшем, уже после трудоустройства — однозначно стоит).
Во время разработки, у вас может возникнуть много вопросов. Не беда, если у вас нет знакомых Android-разработчиков. Смело задавайте свои вопросы на StackOverFlow [39] (можно на русском [40] языке). Также, вопросы можно задавать в каналах Telegram.
Если говорить о вопросах на собеседованиях, то в целом, у всех студий свои взгляды на этот счёт.
В большинстве случаев спрашивают и по Java, и по Android SDK и по технологиям. Но иногда встречаются места, где просят просто показать пример своего рабочего кода и спрашивают, а почему вот здесь вы сделали именно вот так. Готовым нужно быть и к первому и ко второму.
В нашей компании, я делю техническую часть первичного интервью с кандидатами на 3 этапа:
1) Вопросы по Java Core и ООП (см. Изучаем Java)
2) Вопросы по Android SDK (см. Изучаем Android)
3) Вопросы по технологиям и инструментам (см. Технологии и инструменты)
На втором этапе собеседования, как правило, даётся небольшое техническое задание, или же анализируется существующий код.
В 80% случаев, интервьюеры задают одни и те же вопросы по Java [49].
На этом все. В следующей статье, мы разберём подробно самые популярные вопросы на собеседованиях по Android SDK и таким технологиям, как Dagger2, Retrofit2, RxJava и Realm.
Автор: NoNews
Источник [50]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android-development/255494
Ссылки в тексте:
[1] Image: https://habrastorage.org/files/0b2/069/898/0b20698983db43489c324b781629d76f.jpg
[2] рынок: https://rabota.yandex.ru/salary?text=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9%20%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80&rid=213
[3] рекомендует : https://developer.android.com/ndk/guides/index.html
[4] Kotlin: https://habrahabr.ru/post/277479/
[5] кросс-платформенные инструменты: http://techmas.ru/blog/instrumentyi-razrabotki-mobilnyih-prilozheniy/
[6] 1. JavaRush: http://javarush.ru/
[7] Image: https://habrastorage.org/web/b6c/be4/4c4/b6cbe44c45264fb3894eaf76ede99bad.PNG
[8] Java Core от Ивана Головоча: https://habrahabr.ru/company/golovachcourses/blog/215275/
[9] 1. Udacity:Android Basics: https://www.udacity.com/course/android-development-for-beginners--ud837
[10] 2. Видео-лекции StartAndroid: https://www.youtube.com/playlist?list=PLyfVjOYzujugap6Rf3ETNKkx4v9ePllNK
[11] 3. Блог Александра Климова: http://developer.alexanderklimov.ru/android/
[12] 4. Devcolibri — Full Android Application: https://www.youtube.com/playlist?list=PLIU76b8Cjem54jkj0XtCAp8JqZooY_eBI
[13] сообществе Android-разработчиков в Telegram: https://t.me/android_ru
[14] 1. Git: https://git-scm.com/
[15] хороший курс: https://geekbrains.ru/gitstart
[16] GeekBrains: https://geekbrains.ru/
[17] SourceTree: https://www.sourcetreeapp.com/
[18] 2. ButterKnife: http://jakewharton.github.io/butterknife/
[19] 3. Retrofit2: https://github.com/square/retrofit
[20] RxJava: https://github.com/ReactiveX/RxJava
[21] RxAndroid: https://github.com/ReactiveX/RxAndroid
[22] OkHttp Loging InterCeptor: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
[23] OkHttp: https://github.com/square/okhttp
[24] Изучаем Retrofit 2: https://habrahabr.ru/post/314028/
[25] Retrofit2: Загружаем файлы на сервер: https://android-school.ru/retrofit-2-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5%D0%BC-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80/
[26] Retrofit2 + RxJava + RxAndroid: https://medium.freecodecamp.com/rxandroid-and-retrofit-2-0-66dc52725fff
[27] 4. Dagger2: https://google.github.io/dagger/
[28] Dagger 2 и структура приложения для Android: https://habrahabr.ru/company/ncloudtech/blog/274025/
[29] Основы Dagger2 : https://habrahabr.ru/post/279125/
[30] Dagger 2. Лечим зависимости по методике Google: https://habrahabr.ru/company/dataart/blog/283018/
[31] @dagger_2: https://t.me/dagger_2
[32] 5. Realm: https://realm.io/news/realm-for-android/
[33] Сравнительная характеристика ORM и баз данных: https://habrahabr.ru/post/281226/
[34] 6. Picasso: http://square.github.io/picasso/
[35] 7. EventBus: https://github.com/greenrobot/EventBus/
[36] GitHub : https://github.com/
[37] данном: http://myjson.com/api
[38] MVP: https://habrahabr.ru/post/278769/
[39] StackOverFlow: http://stackoverflow.com/
[40] русском: http://ru.stackoverflow.com/
[41] @android_ru: https://telegram.me/android_ru
[42] @mobile_jobs: https://telegram.me/mobile_jobs
[43] @Android_Architecture: https://t.me/Android_Architecture
[44] @reactivex: https://t.me/reactivex
[45] @moxy_mvp_library: https://t.me/moxy_mvp_library
[46] @ndk_ru: https://t.me/ndk_ru
[47] @androidarsenal: https://t.me/androidarsenal
[48] @AndrResIdFb: https://t.me/AndrResIdFb
[49] вопросы по Java: http://javastudy.ru/interview/list-of-question-java-interview/
[50] Источник: https://habrahabr.ru/post/328888/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.