Разыскивается Junior Android разработчик
«Что требуется от Android Dev?» – вопрос из категории FAQ. Я работодатель и в этой статье расскажу, каким должен быть Junior Android разработчик.
Хотите устроиться в качестве Junior? Есть несколько вещей, которые я от вас жду. Разумеется, требовать особенно углубленных знаний по ним я не буду, но хочу видеть, что вы заинтересованы в этой области и учитесь, совершенствуя уже имеющиеся навыки.
В Android без этого не обойтись. Данные события крайне важны для разработки приложений, которые не должны крашиться при обычном повороте экрана просто потому, что вы решили поработать с программой в постели.
На первый взгляд алгоритм кажется сложным:
Но я и не жду, что Junior Android разработчик знает все наизусть. Важно лишь, чтобы вы понимали, за что отвечают методы onCreate, onPause, onResume и onDestroy, что их вызывает и каков результат работы. В противном случае рекомендую ознакомиться с официальной документацией. Если же вы приведете пример того, как жизненный цикл может привести к утечке памяти, я буду действительно впечатлен.
Фундамент любого приложения. Существует 4 основных компонента:
- BroadcastReceiver;
- Service;
- Activity;
- Content Provider.
Каждая из этих составляющих играет важную роль в создании Android-приложений. Зачастую вам даже не придется использовать все компоненты в одном ПО (например, я за всю свою профессиональную карьеру ни разу не написал ContentProvider), но мне бы хотелось, чтобы кандидат на должность понимал их назначение и знал, где они необходимы.
Не забывайте и об идее: ваша работа должна выделяться.
Есть несколько вариантов сохранения данных в программировании на Андроид, и в каждом из них есть свои плюсы и минусы. На сайте Android Developer вы найдете полезное руководство, в котором подробно изложен принцип работы каждого типа сохранения, и я хочу видеть, что вы помните их и хотя бы в общих чертах понимаете, для чего используется тот или иной вариант.
Это большая тема, из которой можно много чего «выцепить», но будущему Junior-девелоперу достаточно знать лишь несколько вещей, которые я считаю существенными.
Базовые знания о REST обязательны, и если вы не умеете делать простые GET и POST запросы из Android-приложения, следует вернуться к базису. Почти любое приложение, которое приходит мне на ум, способно делать REST-запросы, и это является главным в выборе специалиста. Volley для Android станет отличным началом для тех, кто хочет изучить основы, вот только вы очень быстро поймете, что данный способ взаимодействия с сетью уже устарел.
Таким образом, если вы отдадите предпочтение альтернативному варианту в виде Retrofit, вы значительно увеличите свои шансы получить должность. Также есть другие варианты создания сетей на Android, однако все они довольно узконаправленные. Retrofit же необычайно прост в использовании, хорошо сочетается с гибкостью OkHttp и регулярно получает обновления в виде замечательных функций от команды Square.
Кроме того, знания о сереализации оказались бы весомым плюсом. Опыт работы с Moshi, Gson, Jackson и аналогичными библиотеками действительно важен, поскольку в 2017 году пора забыть о том, чтобы вручную вытаскивать данные из JSON.
Данная IDE преодолела большой путь, учитывая, что первый запуск был осуществлен несколько лет назад, в те времена, когда все активно юзали Eclipse. Даже в Junior-разработчике я бы хотел видеть доказательства того, что он знаком со средой программирования Android Studio. Исключительно ручной ввод данных – признак скудного опыта. К тому же, это занимает уйму времени, а потому неэффективно. Мне нравится, когда люди используют горячие клавиши для быстрого ввода. В перечне моих тем для собеседования есть и вопрос о том, какие комбинации клавиш наиболее часто использует кандидат.
Говоря простым языком, я не ожидаю от вас уровня гуру, но ориентировка в инструментарии Android Studio на должном уровне продемонстрирует ваш неподдельный интерес к работе. Знание же хотя бы нескольких комбинаций из этого перечня сделает вас особенно продуктивным, а парное программирование – максимально легким.
Ничего страшного, если вы все еще используете IntelliJ IDEA, но если вы до сих пор работаете с Eclipse… Скажем, мне было бы любопытно узнать, почему вы предпочитаете именно эту среду разработки.
Еще один важный момент. Для меня удивительно, что в наши дни некоторые кодеры работают без использования VCS. Если вы не используете Git прямо сейчас, пора начинать. И хоть изучить эту систему контроля версий непросто, результат приложенных усилий не заставит себя ждать. Да, сложно оценить все преимущества системы, если вы до этого времени работали самостоятельно. Но вы их обязательно увидите, когда в процессе разработки приложения допустите существенную ошибку и захотите вернуться к тому состоянию программы, когда она еще работала. Вам нужно просто начать, и вы непременно освоите Git.
Разумеется, существуют и другие системы контроля версий, и знание принципов их работы не менее значительно. Однако наиболее широкое распространение получила именно система Git, поэтому понимание данной VCS приоритетно.
Шаблоны проектирования не так важны, и, уверен, многие их используют, даже не догадываясь, что это и есть те самые паттерны. Но если вы знаете Builders, Singletons и Factory Methods, а также хорошо осведомлены, где их можно использовать (и даже знаете, где найти пример в Android SDK) – это огромный плюс для вашего резюме.
Даже если вы только слышали о «Банде четырех» (GoF) и «Effective Java» Джошуа Блоха, это также дополнительные баллы для вас. Кстати, говоря о баллах:
- модульное тестирование и понимание, почему тесты на Android могут быть настолько сложными;
- наличие хотя бы одной из классических книг по программированию;
- вы «играли» с другими языками, в том числе с Kotlin;
- в Play Store загружено хотя бы одно ваше приложение.
Конечно, есть и другие навыки, которые мне хотелось бы видеть в практике кандидата на такую должность, как Junior Android разработчик.
На мой взгляд, роль этой категории программистов заключается в том, чтобы выучить как можно больше и как можно быстрее для качественного вклада в разрабатываемый продукт. Грубо говоря, Junior выполняет изначально простую работу, которая постепенно погружает его все глубже и глубже в «тему», взращивает уверенность и навыки профессионального разработчика.
Сам факт, что вы читаете и черпаете новые знания о программировании – ваше преимущество, даже если вы осведомлены лишь о некоторых библиотеках, функциях, методах и общих сложностях. Надеюсь, что вы подписаны на Android Weekly , можете назвать хотя бы пару влиятельных людей в своей отрасли, следите за их блогами и учетными записями в Twitter.
И самое главное: вам должно это нравиться. Моя профессиональная деятельность включает 6 лет, а я до сих пор словно впервые волнуюсь, когда вижу обновление от команды Android. И всякий раз устанавливаю далеко не идеальную альфу, чтобы просто поковыряться в ней и узнать обо всех плюсах обновления.
Android – это новое слово в современном мире, и я просто счастлив, что могу участвовать в развитии данной отрасли. Если вы также в этом заинтересованы и можете поставить немало галочек напротив перечисленных мною пунктов – будьте уверены, любой адекватный работодатель будет рад взять вас на такую должность, как Junior Android разработчик.
как прокачать знания junior Android
В рубрике «Советы сеньоров» опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске говорим об Android-разработчиках.
Никита Кравцов, Senior Android-разработчик в Depositphotos
9 лет опыта
Для достижения успеха в любой профессии необходимо тяжело работать, иметь терпение и получать удовольствие от процесса. Поэтому, к сожалению, у меня нет для вас рецепта быстрой «прокачки» ваших навыков. Как Android-разработчик, я решил поделиться своими мыслями, которые могут помочь вам в профессиональном развитии.
Не пренебрегайте возможностью изучать внутренний код фреймворка. К примеру, в процессе разработки собственного класса FlowLayout разработчик первоначально хотел реализовать данную задачу на RelativeLayout. После изучения исходников FrameLayout/LinearLayout/RelativeLayout разработчик реализовал задачу на классе ViewGroup.
Начните читать код других разработчиков. Большинство начинающих разработчиков пренебрегают чтением чужого кода и фокусируются на решении задач в рамках приобретенных знаний. Если вы хотите стать лучше и писать более эффективный код, вам просто необходимо читать код других разработчиков.
Начните писать свои приложения. Помимо чтения кода, начните писать и развивать собственные продукты. Ставьте себе невыполнимые задачи и решайте их.
В споре рождается истина. Хорошим плюсом будет возможность опубликовать свои разработки и дать возможность другим разработчикам прокомментировать ваш код.
Всегда будьте up-to-date. Подпишитесь на рассылку новостей или официальный канал и получайте обновления о новых библиотеках и продуктах, следите за выходом новых версий прошивки.
Начните с малого. Невозможно изучить все за короткий промежуток времени, поэтому вам необходимо научиться выделять важное из большого объема информации, а не стараться запомнить все и сразу. Начните с малого и медленно расширяйте свой кругозор. Старайтесь разбивать большие задачи на более мелкие.
Разделяй и властвуй. Большинство начинающих разработчиков стараются держать всю логику и код в Activity или Fragment, превращая данные классы в огромные объекты, которые тяжело читать и поддерживать. Если вы хотите писать более эффективный код, вам необходимо понимать, что такое архитектурные паттерны (MVP, MVVM) и дизайн-паттерны.
Дьявол кроется в деталях. Часто разработчики теряют интерес к задаче после реализации ее сложной части. Обращайте внимание и выделяйте больше времени на реализацию деталей при выполнении сложных задач.
В процессе разработки программного обеспечения я руководствуюсь документацией или вспомогательными ресурсами, которыми хотел бы с вами поделиться:
- Java. Для начала вам необходимо досконально изучить язык и все его тонкости. Учитывая направленность этой статьи, я не буду углубляться в подробности, но как минимум, помимо базовых знаний, вам необходимо понимать и применять «Software Design Patterns». В процессе своей работы я пользуюсь ресурсами Javatpoint, Sourcemaking и Tutorialspoint.
- Google’s official Android Developer site. Отправная точка для любого Android-разработчика. Является наиболее полным пособием при разработке Android-приложений. Это один из лучших и самых актуальных ресурсов.
- Official Android Developers Youtube channel. Официальный видеоресурс с новостями, лучшими практиками и руководствами, который постоянно пополняется новыми материалами. Достаточно часто выход новой feature (к примеру, Architecture components) сопровождается выходом видео. Одно из преимуществ ресурса — возможность повышения знаний во время проезда в городском транспорте.
- The Busy Coder’s Guide to Android Development. Достаточно обширный ресурс-шпаргалка для разработчиков. Оформлен в виде книги и обладает большим количеством примеров по разработке Android-приложений. Примеры из книги вы сможете найти здесь.
- Stack Overflow. Один из самых популярных ресурсов для разработчиков многих направлений. Stack Overflow не содержит документации для обучения или целенаправленных инструкций, но является наиболее популярным местом, где разработчик сможет найти решение специфических проблем, возникающих при разработке программного обеспечения.
- AndroidWeekly. Еженедельная рассылка новостей. Рассылка представляет собой набор статей, инструкций, примеров кода, подкастов, презентаций и видео на Android-тематику.
- Google Material Guidelines. Официальный ресурс с рекомендациями к дизайну пользовательских интерфейсов.
15 лет опыта в IT, из них 8 лет на Android
Android не дает скучать. Он держит в тонусе разработчиков, которые постоянно изучают много новых идей и приемов. Хочу порекомендовать проверенные на своем опыте подходы и ресурсы для прокачки скиллов. Ни для кого не секрет, что делать это нужно постоянно. Также не забывайте следить за новинками и максимально тестируйте все, что появляется. Собственный опыт и ошибки приносят результат. Итак, перейдем к конкретике.
Следите за новинками индустрии. Android — это динамично развивающаяся операционная система. Ежегодно Google проводит конференцию Google I/O, где презентуются новые вещи, которые будут включены в платформу. Кроме этого, на мероприятии есть возможность для общения, дискуссий и обмена опытом. Ближайшая конференция состоится 8-10 мая 2018 года. Следить за событиями можно на Youtube-канале Google Developers.
Читайте тематические ресурсы — именно на них можно почерпнуть интересующую вас информацию. Например, Habrahabr. В свою бытность начинающего разработчика я практически жил на этом ресурсе. Поглощал все, что связано с программированием, тестированием и работой напрямую с «железом». Обратите внимание на специализированный хаб Разработка под Android — это кладезь полезной информации. И, конечно же, не забываем про наш родной DOU.
Регулярно проходите онлайн-курсы. Очень рекомендую ресурс Udacity. Это бесплатная платформа дистанционного обучения. Она возникла в результате расширения программы по информатике Стэнфордского университета в 2012 году. Сможете абсолютно бесплатно пройти курсы и тренинги, которые позволяют получить теоретические знания и набить руку на практике, выполняя задачи в онлайне за определенное время. Можно сделать несколько разных приложений, которые помогут развить определенные скилы в Android-разработке и попробовать себя в этом деле.
Погрузитесь в сайт Developer Android. Он содержит много полезной информации (в том числе на русском языке). Там же можно пройти все обучение для разработчиков, начиная с того, что вообще из себя представляет Android-платформа, ее основные компоненты, как с ними взаимодействовать, как их правильно использовать, что не нужно делать. Я с удовольствием читаю блог на этом ресурсе. Он регулярно пополняется практическими материалами.
Не забывайте, что Android — это своя особенная культура. Вы должны жить и чувствовать эту культуру, в которой масса различных мобильных устройств: начиная от часов и телефонов, заканчивая приставками и телевизорами. Очень часто при разработке приложений важно иметь разные скиллы в тестировании из других сфер, потому что нужно провести хотя бы базовую автоматизацию, проверить работоспособность приложения и т. д. Важно не только писать для Android, но и понимать, что ты пишешь.
8 лет опыта разработки под Android
Раз уж ты здесь и читаешь советы Senior Android-разработчиков, то ты таки решил погрузиться в мир боли и страдания виртуальных Java-машин. На самом деле нет, но иногда тебе будет так казаться, когда твой код замечательно работает на эталонном Nexus, а на топовом Samsung Galaxy у заказчика лезут баги. Решить эту проблему поможет сила убеждения. Да-да, нужно убедить заказчика купить нормальный Nexus-смартфон, и баги исчезнут! Звучит довольно просто, вот только для этого тебе нужно хорошо знать английский язык. Да уж, но без него никуда.
Прошли те времена, когда РМ, как любящая мама, ограждал(а) разработчиков от вредных и приставучих заказчиков. Увы, система так больше не работает. Знания английского на уровне чтения документации уже недостаточно, тут нужен крепкий Intermediate, а лучше Upper-Intermediate. В общем, пункт номер раз — английский язык. It’s a must, period. И да, тебе нужен не просто разговорный английский, но и «технический разговорный» — собеседования на английском никто не отменял.
Хм… заказчик все еще не хочет менять телефон?! Тогда копнем глубже… возможно, курсы по НЛП? Нет, это не пойдет — компания отказывается их оплачивать! Вернемся во времени и посмотрим, с чего все начиналось…
Пункт номер два. Ты решил изучать программирование, а с чего начинается любое обучение? Правильно — с книг, со чтения документации. Если я в свое время учил Android исключительно по книгам, то сейчас книги точно отошли на второй, если не на третий план. Книга долго пишется, а SDK быстро меняется. А вот в официальной документации обычно все up-to-date! И вот здесь я бы рекомендовал зайти в раздел гайдов на Developer Android и пройти/изучить все интересующие тебя разделы.
Ты — дитя современности и не любишь читать, а предпочитаешь смотреть/слушать? Тогда Udacity (или любые другие онлайн-курсы) — это твой выбор. Вот здесь — отличная подборка видеокурсов различного плана, и самое главное — они бесплатные. Но без пункта номер раз (это который про английский язык) тебе к ним дорога закрыта.
Пункт номер три. Кроме Android-специфичных техник, ты обязан владеть базовыми, основополагающими знаниями по программированию: ООП и ООД, работа с сетью, Web, шаблоны проектирования ПО, структуры данных и алгоритмы, построение баз данных.
Пункт номер четыре. Очень желательно изученный материал закреплять каким-то заданием. Придумай для себя проект твоей мечты и постепенно иди к нему. И здесь в твоих пытках (да-да, я не опечатался) и попытках тебе всегда поможет Stack Overflow — без него никуда. Зарегистрируйся на биржах фриланса и попытайся найти того несчастного, кто будет отдавать свои кровные за твои баги! Ты научишься планированию, декомпозиции, самодисциплине, возможно, возненавидишь программирование и узнаешь много новых английских (и не только) слов, сказанных заказчиком в твой адрес.
Пункт номер пять. Хорошо, доки читаешь, видео обучающие смотришь, пытаешься подрабатывать… Что же дальше? А дальше нужно погружаться в среду, в информационное поле, следить за тенденциями. Необязательно все знать досконально, но быть в теме — важно. И в этом тебе помогут:
- Видео с конференций Google I/O, DroidCon. Выбери наиболее тебя интересующие и просто скачай их с YouTube на телефон/ноут и смотри, когда хочешь. Это и плюс к карме разработчика, и плюс к прокачке английского языка.
- Заходи на Android Developers Blog — там публикуются анонсы, гайды, релизы.
- Подпишись на рассылку самого «вкусного» за неделю — AndroidWeekly.
- Зарегистрируйся в Medium и подпишись на интересующих тебя публицистов/сообщества, к примеру ProAndroidDev.
- Подпишись на тематические Youtube-каналы, к примеру Android Developers, Google Developers.
- Общайся с другими разработчиками, получай знания/информацию из соседних областей.
Пункт номер шесть. Та-а-акссс, ну теперь ты загружен по полной и каша в голове! Отличненько! Иногда много информации — это хуже, чем отсутствие информации, согласись. Поэтому заведи свою базу знаний — Knowledge Base (KB). Лично у меня это Evernote, где я по тегам раскидываю интересные статьи, куски кода. Изучая новую (для себя) технологию/фичу/либу, старайся получить информацию о ней больше, чем из одного источника. Лучшие материалы можно сохранить в свою KB, чтобы потом не рыскать по интернетам в поисках той самой статьи, где очень хорошо и подробно с примерами все было написано.
Пункт номер семь. Если ты в программирование всерьез и надолго, то очень важно, чтобы оно не стало рутиной, а было любимым хобби. Это ж круто целыми днями (а может и ночами) заниматься хобби и получать за это деньги! Уму не постижимо! А чтобы хобби не стало рутиной:
- Учи то, что тебе интересно. Если тебе нравятся алгоритмы, то прокачивай этот скилл. Интересует создание игр — изучи OpenGL и все, что связано с созданием игр. Это огромный пласт информации и не только из IT-сферы.
- Важно регулярно (а вот как регулярно — у всех индивидуально) делать level-up умений: выучить и применить (помнишь проект своей мечты?) что-то кардинально новое, технологию или новый язык программирования, который ну прямо-таки меняет фсьо! К примеру: RxJava, Dagger, новые Architecture Components by Google. Это и зарядка для ума, и пунктики в твое резюме.
- Найди IT-спеца/публициста/блогера, который бы тебе импонировал, и подпишись на него. Для меня в свое время такими людьми стали: Reto Meier (архитектура, компоненты приложения), Chet Haase (GUI, анимации), Colt McAnlis (алгоритмы, сжатие данных).
Итак, теперь ты хорошо кодишь на Java… молодец! Можешь ее забыть (шучу! старушка Java всегда пригодится на каком-нибудь проекте на саппорте) и начать учить Kotlin. Если год-полтора назад он скромно стучался в домик к зеленому человечку, то сейчас это инструмент, поддерживаемый Google и уверенно вытесняющий Java. Нужно знать Kotlin. Что тебе теперь надо сделать? Правильно — подписаться на Kotlin Weekly (ты уже смышленый, знаешь, как это делается ;)). И дальше по уже знакомому тебе списку: официальная документация (она там отличная), видео на Youtube, чуток саморекламы, Medium-подписки и прочее.
Вернемся туда, откуда мы начали… Ух ты, а приложение-то твое работает как нужно и на православном Nexus`е и на корейском Samsung`е! Ой, да ты уже и не в захудалой конторке работаешь, которая снимала подвальное помещение, где не было отопления зимой, а в солидной компании. И рутинный код ты пишешь все реже, а по большей части — самые важные/вкусные куски приложения. Achievement Unlocked: «Ты — Senior!».
И напоследок парочка life-tips:
- Не хватайся за Android Wear/TV/Auto, как бы ни хотелось. Вот только если ну совсем уже нечего делать, а хочется погрызть гранит науки.
- «Ты ж программист» — не диагноз, будь разносторонней личностью! Социализируйся, ходи в кино/театры/тусовки/музеи — где еще ты встретишь свою половинку? 🙂 Хороших умных людей должно быть много!
- После английского начни учить еще какой-нибудь иностранный язык, но только такой, чтобы не был похож на английский и ломал мозг. Рекомендую японский/китайский.
- Дерзай! Нет, не дерзи своему тимлиду, а дерзай…
7 років досвіду у Software Development, з них понад 5 — у мобільній розробці
У світі Android-розробки сьогодні дуже легко розгубитися: постійно виходять нові статті, відкриті бібліотеки, круті анонси та рекомендації для розробки під Android від Google. До цього всього додайте ще Kotlin — нову мову програмування, яка стрімко перетворюється на стандарт для написання Android-застосунків. У такому потоці інформації важливо вміти відфільтровувати цікаві і потрібні для вас речі: для того, щоб стати справді кращим спеціалістом, не обов’язково перечитувати усі можливі статті по MVP, MVVM, MVI, Clean/Reactive/etc architecture. Швидше навпаки, важливо розуміти основи, без яких буде дуже важко рухатися вперед.
Необхідна умова
Відштовхуємось від того, що ви добре знаєте мову програмування Java, розумієте базові алгоритми, знаєте Java Collection Framework та можете пояснити, як працювати з багатопотоковістю. Крім того, дуже важливим є розуміння платформи та мобільного контексту.
Отже, нижче я наведу список ключових для фокусування сфер.
1. Розуміння та знання компонентів Android SDK
Важливими є життєві цикли Activity та Fragment, а також як працювати з Service, Intent’s. Це такі поняття, які не змінюються, проте недостатнє їх розуміння може спричинити чимало проблем у майбутньому.
Ще дуже класно розібратися в механізмі роботи та можливостях RecycleView — компоненту системи, що використовується майже в кожному застосунку. Дуже хороше відео на цю тему: Yigit Boyar: Pro RecyclerView.
2. Робота з Android UI
Сюди входить робота з XML Layout, ConstraintLayout, Animation. В деяких випадках доведеться писати CustomView, тому добре наперед підготуватися і зрозуміти, як працюють методи OnMeashure()
, OnLayout()
, onDraw()
.
Якщо вам ще не випадало нагоди багато працювати з UI, добрим тренуванням буде взяти свою улюблену програму та спробувати відтворити її в Android Studio. Є серія туторіалів про те, як побудувати інтерфейс Instagram’у на базі компонентів Material design.
3. Unit-тестування, архітектурні компоненти
Ніколи не писали Unit-тести на проекті? Не проблема, 120 хвилин з CodeLab — і у вас вже є базові навички. Ще 110 хвилин — і ви вмієте користуватися архітектурними компонентами (принаймні це зрозуміліше, ніж просто документація).
4. Kotlin
Ну і звичайно, Kotlin. Як я вже згадував раніше, це must have. Раджу не зволікати і починати писати частини коду на Kotlin. Насправді це дуже зручно і вам не доведеться чекати на проект, що є/буде повністю написаний на Kotlin.
Google зараз активно працює над документацією, та для початку буде достатньо таких ресурсів: Android Developer, Android Kotlin Guides.
5. Цикл розробки проекту
Більш загальною, проте не менш важливою, метою є розуміння повного циклу розробки програми: від написання фічі або програми і до релізу в Google Play Store; навики аналізу крешів і причин їх виникнення.
6. Практика
Ну і звісно, що, крім різноманітних туторіалів, найефективнішим шляхом розвитку є участь у складному різноплановому проекті та взаємодія з колегами, які готові ділитися своїм досвідом.
Корисні ресурси
Тематичні портали:
Твіттер-блоги:
Книжки:
5 лет опыта разработки под Android
Итак, ты, мой юный друг, решил шагнуть во тьму неизвестности, не так ли? Давай разберемся, что тебе как начинающему программисту в направлении Android стоит знать, на что стоит обратить внимание, а чем можно пренебречь.
Что нужно знать
Нужно начать с основ. Любой язык программирования имеет в себе ряд конструкций и особенностей, которые необходимо знать. В случае с Java это работа с памятью, коллекции и пакет потока безопасных аналогов из java.util.concurrent.*. Раз уж речь зашла о многопоточности, нельзя забывать о том, как в целом она устроена в Java и Android в частности (один из самых избитых вопросов на собеседованиях). Кроме языка, каждая экосистема, в которой работает та или иная программа, тоже обладает своей спецификацией и требованиями. Так как нам предстоит работать с зоопарком устройств экосистемы Android, нужно знать особенности некоторых брендов, потому как не всегда поведение программы в одной ОС будет одинаковым на разных девайсах, к примеру, от Xiaomi или Meizu.
Что может помочь в повышении уровня знаний и качества кода? В случае с первым, нам достаточно читать грамотные книги, практиковаться по ним и не упускать возможности почитать блоги известных программистов и их профили на GitHub. В случае со вторым — мы должны постоянно следить за обновлением функционала в экосистеме, где мы работаем, смотреть подкасты от Google, следить за трендами и новыми фишками, которые несут в себе обновленные ОС у производителей.
На что стоит обратить внимание
В первую очередь, на свой код! 😉 Старайся использовать проверенные практики в построении своих программ, не придумывай колесо. Начинай с малого, а именно сo структурирования проекта. Когда увидишь, что просто разделять классы по принципам ООП — мало, почитай, что такое SOLID и как можно и нужно проектировать программы, какие для этого есть архитектурные и проектные шаблоны.
Используй практику ревью кода. Например, у нас в Nullgravity на каждом проекте используется кросс-ревью, к тому же тимлиды команд смотрят еще pull request’ы соседних проектов. Если практика code review еще не используется у тебя на проекте, будь первым, кто о ней заговорит. Времени на разработку новой фичи будет уходить больше, но код станет гораздо чище.
Что еще? Можно сказать про то, что у нас есть огромный спектр фреймворков и библиотек для всех наших потребностей! Но не стоит бездумно брать в работу первый попавшийся. Рекомендую ознакомиться с самыми популярными: Dagger2, RxJava2, Retrofit2, Google API (Maps, Firebase и т. д.), Room (или любое другое популярное ORM решение), LiveData, Crashlytics — это одни из основных, с которыми частенько приходится работать. Все остальное ищется по принципу количества звездочек и проблем на GitHub. Всегда нужно взвешивать то, насколько конкретную задачу стоит делать с нуля, и сможешь ли ты решить ее лучше, чем это сделали другие за то же время.
И напоследок по этому вопросу. Очень рекомендую начинать практиковать Kotlin. Этот язык программирования уже прошел этап «молодого и неопытного» и сейчас быстро взрослеет. В нем есть множество вещей, которых нам могло не хватать в Java — null safety, coroutines, bind views, data class, sealed class, и многое другое.
Пренебречь — не пренебречь
Для результата на первых порах можно обойтись работой с виртуальной машиной, но чем дальше, тем нужнее будут устройства от разных вендоров, чтобы исключить возможные проблемы. Android Studio всегда нас радует новыми плюшками, поэтому нужно регулярно ее обновлять, использовать ее возможности на полную и знать карту hotkey в лицо. Нужно быть в тренде последних фреймворков и обновлений системы. Посещай митапы, общайся с коллегами по «цеху». Я более чем уверен, что если будут вопросы, то тебе смогут помочь.
Чтобы вырасти из junior’а, нужно понимать, насколько хорошо ты смог/-ла усвоить для себя какую-то тему, нужно постоянно заниматься саморазвитием. Потому даже если ты уже на проектe, то далеко не все, что было описано выше, может встретиться в работе. Всегда старайся автоматизировать то, что поддается этому волшебному слову — темплейты, CI, CD. Всегда пробуй что-то новое на pet-проектах. Выделяй время для планирования, чтобы появлялось понимание того, сколько уходит времени на задачи. Подтягивай знание английского, потому что документация по сложным фреймворкам в основном англоязычная.
5 лет опыта
Система Android охватывает огромное количество разнообразных устройств и позволяет разрабатывать приложения для мобильных телефонов, планшетов, умных часов, автомобилей и IoT. Далее приведу список ресурсов в интернете и книг, которые необходимо изучить для разработки стабильных и производительных мобильных приложений.
Java. Идеальным фундаментом для знаний Android-разработчика будет четкое понимание языка программирования. Для этого необходимо прочитать:
Kotlin. Google в прошлом году официально объявил о поддержке данного языка программирования, поэтому стоит обратить на него внимание. Для изучения воспользуйтесь такими источниками:
Android Framework. Необходимо понимать, какие компоненты включены в систему, как они взаимодействуют между собой и со сторонними сервисами. Эти процессы детально описаны в Developer Guides. После этого стоит прочитать книги:
Также стоит пройти курсы от Google на Udacity:
Что дальше? Дальше необходимо читать статьи, периодически добавляемые на Android Resources, и просматривать видео с конференций Google I/O и DroidCon (Italy 2017, Berlin 2017, NYC 2017, SF 2017).
Олег Козак, Mobile Team Lead в Sigma Software
4 года опыта
Перше питання, яке виникає перед абсолютно всіма Android-початківцями: «Kotlin or Java?». Загалом непогано знати і те, і інше. Проте на початку кар’єри варто сконцентруватися на чомусь одному. Моя порада без вагань — Kotlin. Після того як Google навесні 2017 року анонсував Kotlin як офіційну мову для ОС Android, доля комерційних проектів на Java стрімко падає. Динаміку можна прослідкувати тут.
Для тих, хто має Java-бекграуд, рекомендую почитати цикл статей:
Найкраще джерело Android-знань — Google. Нещодавно компанія запустила програму «Google Developers Training». Тут можна знайти тренінг як для початківців, так і для більш прокачаних девелоперів. Ці тренінги безкоштовні. Також можна пройти тести та отримати Android Developer Certificate, проте це вже платна опція.
Ще один важливий інструмент, на який хочу звернути вашу увагу, — Google Material Design. Дуже корисна збірка правил, де описано, як правильно будувати UI. Ці стандарти настільки круті, що ними керуються не лише в Android-розробці. Наприклад, знаю багатьох iOS-девелоперів, які використовують Material Design теж.
Але слід пам’ятати, що у всіх, навіть дуже авторитетних компаній, можуть бути недогляди. Нещодавно натрапив на проблему з BLE connection через boolean параметр в Android SDK методі. А саме — autoreconnect
в методі connectGatt(context, false, сallback)
. Android-девайси з версією блютусу 5.0 не під’єднуються до BLE-девайсів, якщо autoreconnect true
, і в той же час працюють без проблем, коли autoreconnect false
. Таких огріхів, на жаль, вистачає. Однак не лише з технічними труднощами стикаються початківці.
Найпоширеніша проблема джуніор девелопера — практично будь-яка задача виглядає як «mission impossible». Але не варто впадати у відчай 🙂 Коли не зрозуміло як вирішити задачу, не потрібно битись головою об стіну і намагатись самому знайти рішення. Найкращий вихід — просто спитати в команди. Можливо, хтось стикався вже з такою задачею. Як показує практика, в 95% випадків хтось або вже вирішував таку задачу, або знає, як її вирішити.
Ще один варіант — розбити задачу на маленькі частини і вирішувати глобальну задачу step by step. Потім, скоріш за все, доведеться трохи порефакторити після складання всього пазла, але вирішення задачі кількома способами ще нікому не зашкодило 🙂
І наостанок пораджу навчитися сприймати критику, адже аналіз прийнятих рішень, як хороших, так і не дуже, дозволяє вийти на новий рівень і не робити безглуздих помилок у майбутньому.
Подписывайтесь на наш Telegram-канал для джуниоров, чтобы не пропустить интересные вакансии, стажировки, курсы, статьи.
Похожие статьи:
П’ята конференція PyCon Ukraine 2016 відбудеться 23-24 квітня на стадіоні Арена Львів. На сьогоднішній день, ми вже можемо анонсувати участь…
Около года назад мы анонсировали рейтинг работодателей на jobs.dou.ua. Сегодня опять приглашаем принять в нем участие. Рейтинг…
Это устройство, которое в данный момент активно развивается на рынке электроники, уже стало неотъемлемой вещью для людей,…
В выпуске: ИИ-гиганты объединяются в своей работе над искусственным интеллектом, предсказания человеческих действий,…
На эту тему как на просторах украинских (ссылка 1, ссылка 2), так и зарубежных ресурсов (ссылка 3, ссылка 4) были…
Советы сеньоров: как прокачать знания junior Android
В рубрике «Советы сеньоров» опытные специалисты делятся практическими советами с джуниорами — общие лайфхаки по обучению, какие книги и ресурсы читать, какие навыки осваивать и многое другое. В этом выпуске говорим об Android-разработчиках.
Никита Кравцов, Senior Android-разработчик в Depositphotos
9 лет опыта
Для достижения успеха в любой профессии необходимо тяжело работать, иметь терпение и получать удовольствие от процесса. Поэтому, к сожалению, у меня нет для вас рецепта быстрой «прокачки» ваших навыков. Как Android-разработчик, я решил поделиться своими мыслями, которые могут помочь вам в профессиональном развитии.
Не пренебрегайте возможностью изучать внутренний код фреймворка. К примеру, в процессе разработки собственного класса FlowLayout разработчик первоначально хотел реализовать данную задачу на RelativeLayout. После изучения исходников FrameLayout/LinearLayout/RelativeLayout разработчик реализовал задачу на классе ViewGroup.
Начните читать код других разработчиков. Большинство начинающих разработчиков пренебрегают чтением чужого кода и фокусируются на решении задач в рамках приобретенных знаний. Если вы хотите стать лучше и писать более эффективный код, вам просто необходимо читать код других разработчиков.
Начните писать свои приложения. Помимо чтения кода, начните писать и развивать собственные продукты. Ставьте себе невыполнимые задачи и решайте их.
В споре рождается истина. Хорошим плюсом будет возможность опубликовать свои разработки и дать возможность другим разработчикам прокомментировать ваш код.
Всегда будьте up-to-date. Подпишитесь на рассылку новостей или официальный канал и получайте обновления о новых библиотеках и продуктах, следите за выходом новых версий прошивки.
Начните с малого. Невозможно изучить все за короткий промежуток времени, поэтому вам необходимо научиться выделять важное из большого объема информации, а не стараться запомнить все и сразу. Начните с малого и медленно расширяйте свой кругозор. Старайтесь разбивать большие задачи на более мелкие.
Разделяй и властвуй. Большинство начинающих разработчиков стараются держать всю логику и код в Activity или Fragment, превращая данные классы в огромные объекты, которые тяжело читать и поддерживать. Если вы хотите писать более эффективный код, вам необходимо понимать, что такое архитектурные паттерны (MVP, MVVM) и дизайн-паттерны.
Дьявол кроется в деталях. Часто разработчики теряют интерес к задаче после реализации ее сложной части. Обращайте внимание и выделяйте больше времени на реализацию деталей при выполнении сложных задач.
В процессе разработки программного обеспечения я руководствуюсь документацией или вспомогательными ресурсами, которыми хотел бы с вами поделиться:
- Java. Для начала вам необходимо досконально изучить язык и все его тонкости. Учитывая направленность этой статьи, я не буду углубляться в подробности, но как минимум, помимо базовых знаний, вам необходимо понимать и применять «Software Design Patterns». В процессе своей работы я пользуюсь ресурсами Javatpoint, Sourcemaking и Tutorialspoint.
- Google’s official Android Developer site. Отправная точка для любого Android-разработчика. Является наиболее полным пособием при разработке Android-приложений. Это один из лучших и самых актуальных ресурсов.
- Official Android Developers Youtube channel. Официальный видеоресурс с новостями, лучшими практиками и руководствами, который постоянно пополняется новыми материалами. Достаточно часто выход новой feature (к примеру, Architecture components) сопровождается выходом видео. Одно из преимуществ ресурса — возможность повышения знаний во время проезда в городском транспорте.
- The Busy Coder’s Guide to Android Development. Достаточно обширный ресурс-шпаргалка для разработчиков. Оформлен в виде книги и обладает большим количеством примеров по разработке Android-приложений. Примеры из книги вы сможете найти здесь.
- Stack Overflow. Один из самых популярных ресурсов для разработчиков многих направлений. Stack Overflow не содержит документации для обучения или целенаправленных инструкций, но является наиболее популярным местом, где разработчик сможет найти решение специфических проблем, возникающих при разработке программного обеспечения.
- AndroidWeekly. Еженедельная рассылка новостей. Рассылка представляет собой набор статей, инструкций, примеров кода, подкастов, презентаций и видео на Android-тематику.
- Google Material Guidelines. Официальный ресурс с рекомендациями к дизайну пользовательских интерфейсов.
15 лет опыта в IT, из них 8 лет на Android
Android не дает скучать. Он держит в тонусе разработчиков, которые постоянно изучают много новых идей и приемов. Хочу порекомендовать проверенные на своем опыте подходы и ресурсы для прокачки скиллов. Ни для кого не секрет, что делать это нужно постоянно. Также не забывайте следить за новинками и максимально тестируйте все, что появляется. Собственный опыт и ошибки приносят результат. Итак, перейдем к конкретике.
Следите за новинками индустрии. Android — это динамично развивающаяся операционная система. Ежегодно Google проводит конференцию Google I/O, где презентуются новые вещи, которые будут включены в платформу. Кроме этого, на мероприятии есть возможность для общения, дискуссий и обмена опытом. Ближайшая конференция состоится 8-10 мая 2018 года. Следить за событиями можно на Youtube-канале Google Developers.
Читайте тематические ресурсы — именно на них можно почерпнуть интересующую вас информацию. Например, Habrahabr. В свою бытность начинающего разработчика я практически жил на этом ресурсе. Поглощал все, что связано с программированием, тестированием и работой напрямую с «железом». Обратите внимание на специализированный хаб Разработка под Android — это кладезь полезной информации. И, конечно же, не забываем про наш родной DOU.
Регулярно проходите онлайн-курсы. Очень рекомендую ресурс Udacity. Это бесплатная платформа дистанционного обучения. Она возникла в результате расширения программы по информатике Стэнфордского университета в 2012 году. Сможете абсолютно бесплатно пройти курсы и тренинги, которые позволяют получить теоретические знания и набить руку на практике, выполняя задачи в онлайне за определенное время. Можно сделать несколько разных приложений, которые помогут развить определенные скилы в Android-разработке и попробовать себя в этом деле.
Погрузитесь в сайт Developer Android. Он содержит много полезной информации (в том числе на русском языке). Там же можно пройти все обучение для разработчиков, начиная с того, что вообще из себя представляет Android-платформа, ее основные компоненты, как с ними взаимодействовать, как их правильно использовать, что не нужно делать. Я с удовольствием читаю блог на этом ресурсе. Он регулярно пополняется практическими материалами.
Не забывайте, что Android — это своя особенная культура. Вы должны жить и чувствовать эту культуру, в которой масса различных мобильных устройств: начиная от часов и телефонов, заканчивая приставками и телевизорами. Очень часто при разработке приложений важно иметь разные скиллы в тестировании из других сфер, потому что нужно провести хотя бы базовую автоматизацию, проверить работоспособность приложения и т. д. Важно не только писать для Android, но и понимать, что ты пишешь.
8 лет опыта разработки под Android
Раз уж ты здесь и читаешь советы Senior Android-разработчиков, то ты таки решил погрузиться в мир боли и страдания виртуальных Java-машин. На самом деле нет, но иногда тебе будет так казаться, когда твой код замечательно работает на эталонном Nexus, а на топовом Samsung Galaxy у заказчика лезут баги. Решить эту проблему поможет сила убеждения. Да-да, нужно убедить заказчика купить нормальный Nexus-смартфон, и баги исчезнут! Звучит довольно просто, вот только для этого тебе нужно хорошо знать английский язык. Да уж, но без него никуда.
Прошли те времена, когда РМ, как любящая мама, ограждал(а) разработчиков от вредных и приставучих заказчиков. Увы, система так больше не работает. Знания английского на уровне чтения документации уже недостаточно, тут нужен крепкий Intermediate, а лучше Upper-Intermediate. В общем, пункт номер раз — английский язык. It’s a must, period. И да, тебе нужен не просто разговорный английский, но и «технический разговорный» — собеседования на английском никто не отменял.
Хм… заказчик все еще не хочет менять телефон?! Тогда копнем глубже… возможно, курсы по НЛП? Нет, это не пойдет — компания отказывается их оплачивать! Вернемся во времени и посмотрим, с чего все начиналось…
Пункт номер два. Ты решил изучать программирование, а с чего начинается любое обучение? Правильно — с книг, со чтения документации. Если я в свое время учил Android исключительно по книгам, то сейчас книги точно отошли на второй, если не на третий план. Книга долго пишется, а SDK быстро меняется. А вот в официальной документации обычно все up-to-date! И вот здесь я бы рекомендовал зайти в раздел гайдов на Developer Android и пройти/изучить все интересующие тебя разделы.
Ты — дитя современности и не любишь читать, а предпочитаешь смотреть/слушать? Тогда Udacity (или любые другие онлайн-курсы) — это твой выбор. Вот здесь — отличная подборка видеокурсов различного плана, и самое главное — они бесплатные. Но без пункта номер раз (это который про английский язык) тебе к ним дорога закрыта.
Пункт номер три. Кроме Android-специфичных техник, ты обязан владеть базовыми, основополагающими знаниями по программированию: ООП и ООД, работа с сетью, Web, шаблоны проектирования ПО, структуры данных и алгоритмы, построение баз данных.
Пункт номер четыре. Очень желательно изученный материал закреплять каким-то заданием. Придумай для себя проект твоей мечты и постепенно иди к нему. И здесь в твоих пытках (да-да, я не опечатался) и попытках тебе всегда поможет Stack Overflow — без него никуда. Зарегистрируйся на биржах фриланса и попытайся найти того несчастного, кто будет отдавать свои кровные за твои баги! Ты научишься планированию, декомпозиции, самодисциплине, возможно, возненавидишь программирование и узнаешь много новых английских (и не только) слов, сказанных заказчиком в твой адрес.
Пункт номер пять. Хорошо, доки читаешь, видео обучающие смотришь, пытаешься подрабатывать… Что же дальше? А дальше нужно погружаться в среду, в информационное поле, следить за тенденциями. Необязательно все знать досконально, но быть в теме — важно. И в этом тебе помогут:
- Видео с конференций Google I/O, DroidCon. Выбери наиболее тебя интересующие и просто скачай их с YouTube на телефон/ноут и смотри, когда хочешь. Это и плюс к карме разработчика, и плюс к прокачке английского языка.
- Заходи на Android Developers Blog — там публикуются анонсы, гайды, релизы.
- Подпишись на рассылку самого «вкусного» за неделю — AndroidWeekly.
- Зарегистрируйся в Medium и подпишись на интересующих тебя публицистов/сообщества, к примеру ProAndroidDev.
- Подпишись на тематические Youtube-каналы, к примеру Android Developers, Google Developers.
- Общайся с другими разработчиками, получай знания/информацию из соседних областей.
Пункт номер шесть. Та-а-акссс, ну теперь ты загружен по полной и каша в голове! Отличненько! Иногда много информации — это хуже, чем отсутствие информации, согласись. Поэтому заведи свою базу знаний — Knowledge Base (KB). Лично у меня это Evernote, где я по тегам раскидываю интересные статьи, куски кода. Изучая новую (для себя) технологию/фичу/либу, старайся получить информацию о ней больше, чем из одного источника. Лучшие материалы можно сохранить в свою KB, чтобы потом не рыскать по интернетам в поисках той самой статьи, где очень хорошо и подробно с примерами все было написано.
Пункт номер семь. Если ты в программирование всерьез и надолго, то очень важно, чтобы оно не стало рутиной, а было любимым хобби. Это ж круто целыми днями (а может и ночами) заниматься хобби и получать за это деньги! Уму не постижимо! А чтобы хобби не стало рутиной:
- Учи то, что тебе интересно. Если тебе нравятся алгоритмы, то прокачивай этот скилл. Интересует создание игр — изучи OpenGL и все, что связано с созданием игр. Это огромный пласт информации и не только из IT-сферы.
- Важно регулярно (а вот как регулярно — у всех индивидуально) делать level-up умений: выучить и применить (помнишь проект своей мечты?) что-то кардинально новое, технологию или новый язык программирования, который ну прямо-таки меняет фсьо! К примеру: RxJava, Dagger, новые Architecture Components by Google. Это и зарядка для ума, и пунктики в твое резюме.
- Найди IT-спеца/публициста/блогера, который бы тебе импонировал, и подпишись на него. Для меня в свое время такими людьми стали: Reto Meier (архитектура, компоненты приложения), Chet Haase (GUI, анимации), Colt McAnlis (алгоритмы, сжатие данных).
Итак, теперь ты хорошо кодишь на Java… молодец! Можешь ее забыть (шучу! старушка Java всегда пригодится на каком-нибудь проекте на саппорте) и начать учить Kotlin. Если год-полтора назад он скромно стучался в домик к зеленому человечку, то сейчас это инструмент, поддерживаемый Google и уверенно вытесняющий Java. Нужно знать Kotlin. Что тебе теперь надо сделать? Правильно — подписаться на Kotlin Weekly (ты уже смышленый, знаешь, как это делается ;)). И дальше по уже знакомому тебе списку: официальная документация (она там отличная), видео на Youtube, чуток саморекламы, Medium-подписки и прочее.
Вернемся туда, откуда мы начали… Ух ты, а приложение-то твое работает как нужно и на православном Nexus`е и на корейском Samsung`е! Ой, да ты уже и не в захудалой конторке работаешь, которая снимала подвальное помещение, где не было отопления зимой, а в солидной компании. И рутинный код ты пишешь все реже, а по большей части — самые важные/вкусные куски приложения. Achievement Unlocked: «Ты — Senior!».
И напоследок парочка life-tips:
- Не хватайся за Android Wear/TV/Auto, как бы ни хотелось. Вот только если ну совсем уже нечего делать, а хочется погрызть гранит науки.
- «Ты ж программист» — не диагноз, будь разносторонней личностью! Социализируйся, ходи в кино/театры/тусовки/музеи — где еще ты встретишь свою половинку? 🙂 Хороших умных людей должно быть много!
- После английского начни учить еще какой-нибудь иностранный язык, но только такой, чтобы не был похож на английский и ломал мозг. Рекомендую японский/китайский.
- Дерзай! Нет, не дерзи своему тимлиду, а дерзай…
7 років досвіду у Software Development, з них понад 5 — у мобільній розробці
У світі Android-розробки сьогодні дуже легко розгубитися: постійно виходять нові статті, відкриті бібліотеки, круті анонси та рекомендації для розробки під Android від Google. До цього всього додайте ще Kotlin — нову мову програмування, яка стрімко перетворюється на стандарт для написання Android-застосунків. У такому потоці інформації важливо вміти відфільтровувати цікаві і потрібні для вас речі: для того, щоб стати справді кращим спеціалістом, не обов’язково перечитувати усі можливі статті по MVP, MVVM, MVI, Clean/Reactive/etc architecture. Швидше навпаки, важливо розуміти основи, без яких буде дуже важко рухатися вперед.
Необхідна умова
Відштовхуємось від того, що ви добре знаєте мову програмування Java, розумієте базові алгоритми, знаєте Java Collection Framework та можете пояснити, як працювати з багатопотоковістю. Крім того, дуже важливим є розуміння платформи та мобільного контексту.
Отже, нижче я наведу список ключових для фокусування сфер.
1. Розуміння та знання компонентів Android SDK
Важливими є життєві цикли Activity та Fragment, а також як працювати з Service, Intent’s. Це такі поняття, які не змінюються, проте недостатнє їх розуміння може спричинити чимало проблем у майбутньому.
Ще дуже класно розібратися в механізмі роботи та можливостях RecycleView — компоненту системи, що використовується майже в кожному застосунку. Дуже хороше відео на цю тему: Yigit Boyar: Pro RecyclerView.
2. Робота з Android UI
Сюди входить робота з XML Layout, ConstraintLayout, Animation. В деяких випадках доведеться писати CustomView, тому добре наперед підготуватися і зрозуміти, як працюють методи OnMeashure()
, OnLayout()
, onDraw()
.
Якщо вам ще не випадало нагоди багато працювати з UI, добрим тренуванням буде взяти свою улюблену програму та спробувати відтворити її в Android Studio. Є серія туторіалів про те, як побудувати інтерфейс Instagram’у на базі компонентів Material design.
3. Unit-тестування, архітектурні компоненти
Ніколи не писали Unit-тести на проекті? Не проблема, 120 хвилин з CodeLab — і у вас вже є базові навички. Ще 110 хвилин — і ви вмієте користуватися архітектурними компонентами (принаймні це зрозуміліше, ніж просто документація).
4. Kotlin
Ну і звичайно, Kotlin. Як я вже згадував раніше, це must have. Раджу не зволікати і починати писати частини коду на Kotlin. Насправді це дуже зручно і вам не доведеться чекати на проект, що є/буде повністю написаний на Kotlin.
Google зараз активно працює над документацією, та для початку буде достатньо таких ресурсів: Android Developer, Android Kotlin Guides.
5. Цикл розробки проекту
Більш загальною, проте не менш важливою, метою є розуміння повного циклу розробки програми: від написання фічі або програми і до релізу в Google Play Store; навики аналізу крешів і причин їх виникнення.
6. Практика
Ну і звісно, що, крім різноманітних туторіалів, найефективнішим шляхом розвитку є участь у складному різноплановому проекті та взаємодія з колегами, які готові ділитися своїм досвідом.
Корисні ресурси
Тематичні портали:
Твіттер-блоги:
Книжки:
5 лет опыта разработки под Android
Итак, ты, мой юный друг, решил шагнуть во тьму неизвестности, не так ли? Давай разберемся, что тебе как начинающему программисту в направлении Android стоит знать, на что стоит обратить внимание, а чем можно пренебречь.
Что нужно знать
Нужно начать с основ. Любой язык программирования имеет в себе ряд конструкций и особенностей, которые необходимо знать. В случае с Java это работа с памятью, коллекции и пакет потока безопасных аналогов из java.util.concurrent.*. Раз уж речь зашла о многопоточности, нельзя забывать о том, как в целом она устроена в Java и Android в частности (один из самых избитых вопросов на собеседованиях). Кроме языка, каждая экосистема, в которой работает та или иная программа, тоже обладает своей спецификацией и требованиями. Так как нам предстоит работать с зоопарком устройств экосистемы Android, нужно знать особенности некоторых брендов, потому как не всегда поведение программы в одной ОС будет одинаковым на разных девайсах, к примеру, от Xiaomi или Meizu.
Что может помочь в повышении уровня знаний и качества кода? В случае с первым, нам достаточно читать грамотные книги, практиковаться по ним и не упускать возможности почитать блоги известных программистов и их профили на GitHub. В случае со вторым — мы должны постоянно следить за обновлением функционала в экосистеме, где мы работаем, смотреть подкасты от Google, следить за трендами и новыми фишками, которые несут в себе обновленные ОС у производителей.
На что стоит обратить внимание
В первую очередь, на свой код! 😉 Старайся использовать проверенные практики в построении своих программ, не придумывай колесо. Начинай с малого, а именно сo структурирования проекта. Когда увидишь, что просто разделять классы по принципам ООП — мало, почитай, что такое SOLID и как можно и нужно проектировать программы, какие для этого есть архитектурные и проектные шаблоны.
Используй практику ревью кода. Например, у нас в Nullgravity на каждом проекте используется кросс-ревью, к тому же тимлиды команд смотрят еще pull request’ы соседних проектов. Если практика code review еще не используется у тебя на проекте, будь первым, кто о ней заговорит. Времени на разработку новой фичи будет уходить больше, но код станет гораздо чище.
Что еще? Можно сказать про то, что у нас есть огромный спектр фреймворков и библиотек для всех наших потребностей! Но не стоит бездумно брать в работу первый попавшийся. Рекомендую ознакомиться с самыми популярными: Dagger2, RxJava2, Retrofit2, Google API (Maps, Firebase и т. д.), Room (или любое другое популярное ORM решение), LiveData, Crashlytics — это одни из основных, с которыми частенько приходится работать. Все остальное ищется по принципу количества звездочек и проблем на GitHub. Всегда нужно взвешивать то, насколько конкретную задачу стоит делать с нуля, и сможешь ли ты решить ее лучше, чем это сделали другие за то же время.
И напоследок по этому вопросу. Очень рекомендую начинать практиковать Kotlin. Этот язык программирования уже прошел этап «молодого и неопытного» и сейчас быстро взрослеет. В нем есть множество вещей, которых нам могло не хватать в Java — null safety, coroutines, bind views, data class, sealed class, и многое другое.
Пренебречь — не пренебречь
Для результата на первых порах можно обойтись работой с виртуальной машиной, но чем дальше, тем нужнее будут устройства от разных вендоров, чтобы исключить возможные проблемы. Android Studio всегда нас радует новыми плюшками, поэтому нужно регулярно ее обновлять, использовать ее возможности на полную и знать карту hotkey в лицо. Нужно быть в тренде последних фреймворков и обновлений системы. Посещай митапы, общайся с коллегами по «цеху». Я более чем уверен, что если будут вопросы, то тебе смогут помочь.
Чтобы вырасти из junior’а, нужно понимать, насколько хорошо ты смог/-ла усвоить для себя какую-то тему, нужно постоянно заниматься саморазвитием. Потому даже если ты уже на проектe, то далеко не все, что было описано выше, может встретиться в работе. Всегда старайся автоматизировать то, что поддается этому волшебному слову — темплейты, CI, CD. Всегда пробуй что-то новое на pet-проектах. Выделяй время для планирования, чтобы появлялось понимание того, сколько уходит времени на задачи. Подтягивай знание английского, потому что документация по сложным фреймворкам в основном англоязычная.
5 лет опыта
Система Android охватывает огромное количество разнообразных устройств и позволяет разрабатывать приложения для мобильных телефонов, планшетов, умных часов, автомобилей и IoT. Далее приведу список ресурсов в интернете и книг, которые необходимо изучить для разработки стабильных и производительных мобильных приложений.
Java. Идеальным фундаментом для знаний Android-разработчика будет четкое понимание языка программирования. Для этого необходимо прочитать:
Kotlin. Google в прошлом году официально объявил о поддержке данного языка программирования, поэтому стоит обратить на него внимание. Для изучения воспользуйтесь такими источниками:
Android Framework. Необходимо понимать, какие компоненты включены в систему, как они взаимодействуют между собой и со сторонними сервисами. Эти процессы детально описаны в Developer Guides. После этого стоит прочитать книги:
Также стоит пройти курсы от Google на Udacity:
Что дальше? Дальше необходимо читать статьи, периодически добавляемые на Android Resources, и просматривать видео с конференций Google I/O и DroidCon (Italy 2017, Berlin 2017, NYC 2017, SF 2017).
Олег Козак, Mobile Team Lead в Sigma Software
4 года опыта
Перше питання, яке виникає перед абсолютно всіма Android-початківцями: «Kotlin or Java?». Загалом непогано знати і те, і інше. Проте на початку кар’єри варто сконцентруватися на чомусь одному. Моя порада без вагань — Kotlin. Після того як Google навесні 2017 року анонсував Kotlin як офіційну мову для ОС Android, доля комерційних проектів на Java стрімко падає. Динаміку можна прослідкувати тут.
Для тих, хто має Java-бекграуд, рекомендую почитати цикл статей:
Найкраще джерело Android-знань — Google. Нещодавно компанія запустила програму «Google Developers Training». Тут можна знайти тренінг як для початківців, так і для більш прокачаних девелоперів. Ці тренінги безкоштовні. Також можна пройти тести та отримати Android Developer Certificate, проте це вже платна опція.
Ще один важливий інструмент, на який хочу звернути вашу увагу, — Google Material Design. Дуже корисна збірка правил, де описано, як правильно будувати UI. Ці стандарти настільки круті, що ними керуються не лише в Android-розробці. Наприклад, знаю багатьох iOS-девелоперів, які використовують Material Design теж.
Але слід пам’ятати, що у всіх, навіть дуже авторитетних компаній, можуть бути недогляди. Нещодавно натрапив на проблему з BLE connection через boolean параметр в Android SDK методі. А саме — autoreconnect
в методі connectGatt(context, false, сallback)
. Android-девайси з версією блютусу 5.0 не під’єднуються до BLE-девайсів, якщо autoreconnect true
, і в той же час працюють без проблем, коли autoreconnect false
. Таких огріхів, на жаль, вистачає. Однак не лише з технічними труднощами стикаються початківці.
Найпоширеніша проблема джуніор девелопера — практично будь-яка задача виглядає як «mission impossible». Але не варто впадати у відчай 🙂 Коли не зрозуміло як вирішити задачу, не потрібно битись головою об стіну і намагатись самому знайти рішення. Найкращий вихід — просто спитати в команди. Можливо, хтось стикався вже з такою задачею. Як показує практика, в 95% випадків хтось або вже вирішував таку задачу, або знає, як її вирішити.
Ще один варіант — розбити задачу на маленькі частини і вирішувати глобальну задачу step by step. Потім, скоріш за все, доведеться трохи порефакторити після складання всього пазла, але вирішення задачі кількома способами ще нікому не зашкодило 🙂
І наостанок пораджу навчитися сприймати критику, адже аналіз прийнятих рішень, як хороших, так і не дуже, дозволяє вийти на новий рівень і не робити безглуздих помилок у майбутньому.
Подписывайтесь на наш Telegram-канал для джуниоров, чтобы не пропустить интересные вакансии, стажировки, курсы, статьи.
Как я перешёл из системного администрирования в Android-разработку / Habr
Несколько лет назад, я, как и другие начинающие 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 года — вполне годно.
Так же существуют в текстовом формате.
3. Блог Александра Климова
Актуально. Отдельные моменты до сих пор просматриваю в данном блоге. Каждая тема осваивается на практическом примере с подробным объяснением.
4. Devcolibri — Full Android Application
После прохождения курса от Udacity, появилась идея начать писать свое первое тестовое приложение. После недолгих поисков, нашёл хороший курс от Devcolibri, где объяснялась концепция разработки на примере написания простейшего таск-менеджера. Смотря этот курс, я параллельно начал делать свое приложение, подхватывая различные фишки из урока.
Технологии и инструменты для Android Junior
В сообществе Android-разработчиков в Telegram, появился вопрос на эту тему, мой ответ приравняли как к слишком завышенному по требованиям к Junior. (Я описал Retrofit2 в связке с RxJava, так же Dagger2, 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- 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.