Интервью
Как самому научиться Android-разработке
Андрей Белоус (@tzkt1 в Телеграм) разрабатывает мобильные приложения уже больше 6 лет. В 2021 году занял 3 место на чемпионате Яндекса по мобильной разработке с 5000 участниками, а сейчас работает Senior Android Developer в Лондоне. До мобильной разработки он успел поработать программистом 1С и отучиться на сварщика в универе. А потом сам научился разрабатывать мобильные приложения, не потратив на это ни рубля. С ним мы поговорили о том, как самостоятельно стать Android-разработчиком.
Кажется, что мобайл уже стал commodity — имеет смысл сейчас погружаться в разработку приложений, а не ИИ, например?
Да, мобильная разработка как направление сейчас устоялась. Первые версии операционных систем были выпущены примерно 15 лет назад и в целом большинство “инновационных” задач уже кем-то когда-то решены. Существуют библиотеки и готовые решения практически для любых проблем. Но, тем не менее, спрос на разработчиков большой и работы много.
Если сравнивать мобильную разработку с разработкой ИИ, то мобильная разработка это более классический software engineering, а разработка ИИ скорее ближе к математике и статистике, и программирования там меньше. А если же посмотреть на общую картину, то все типы разработки (мобайл, фронтенд, бэкенд, машинное обучение и т.д.) нужны для одного — создания продукта которым будут пользоваться люди. Никто не мешает переходить между направлениями в процессе карьеры. Поэтому выбор того чем заниматься скорее должен зависеть от личных предпочтений.
Сейчас спрос на machine learning инженеров выше, т.к. их меньше, чем нужно рынку и зарплаты из-за этого немного выше. Но со временем рынок насытится, появится какая-то новая хайповая технология, где не будет хватать спецов, и цикл повторится. Поэтому если нравится писать код для мобилок — выбирай мобилки, нравится ИИ — выбирай ИИ и т.д. Главное чтобы работа доставляла удовольствие и было интересно.
Почему ты пошел в Android, а не, например, в iOS, где больше денег?
У меня это скорее стечение обстоятельств. Когда начинал изучать мобильную разработку, у меня был знакомый Android-разработчик и не было макбука, который необходим для iOS разработки. Только потом я узнал, что можно установить виртуальную машину MacOS на Windows и разрабатывать там.
Но сейчас, спустя почти 6 лет разработки под Android, могу сказать, что большой разницы между платформами нет. Главное понимать принципы разработки хороших приложений. Хорошее мобильное приложение покрыто тестами, туда можно легко добавлять новые фичи, там выстроена понятная архитектура, позволяющая новым людям быстро вливаться в проект. Эти принципы не зависят от платформы. Поэтому опытный iOS-разработчик легко переключится Android за пару месяцев и наоборот.
Насчет денег вопрос интересный. Если мы говорим про инди разработку/стартапы, то в iOS денег больше и пользователи айфонов действительно готовы платить за приложения. Поэтому многие продукты запускаются сначала на iOS и только потом на Android.
Если же мы говорим про работу разработчиком, то большой разницы нет, и зарплата скорее зависит от умения вести переговоры и уровня junior/middle/senior. Возможно, когда я начинал разрабатывать под Android, был небольшой перекос в сторону iOS, но сейчас, по ощущениям, такого нет.
Вот, например, скриншоты зарплат iOS и Android разработчиков в Google. Выглядит примерно одинаково. Посмотреть можно на сайте https://www.levels.fyi/
Хорошо, я решил стать Android-разработчиком. С чего начать?
Это зависит от текущего уровня.
- Если уже есть опыт программирования и понимание основных концепций, то можно сразу изучать Android-разработку. Бесплатных ресурсов очень много. Приведу некоторые из них:
- Start Android — сайт с которого начинали многие android разработчики. Первый урок создан в 2012 году, последний в 2017, тем не менее там очень хорошо рассматриваются разные темы и он не потерял актуальности.
- После того как пройдено уроков 30 на Start Android можно проходить другие курсы, например — Developing Android Apps with Kotlin. Это курс от Google в котором рассматриваются основы архитектуры и сетевого взаимодействия. В результате прохождения этого курса будет разработано приложение для показа погоды.
- Android Academy. Это курс, который делают волонтеры, Android-разработчики, чтобы помочь другим войти в разработку или улучшить текущие навыки. Там есть несколько треков, рекомендую начать с fundamentals.
- Школа мобильной разработки Яндекса. Хорошие лекции, глубокое погружение, но это скорее продвинутый курс, который стоит пройти после курсов начального уровня.
- Также стоит смотреть на стажировки/школы мобильной разработки, которые открывают крупные компании вроде Сбера/Тинькофф/Яндекса. Отбор туда сложный, но после них могут взять на работу.
- Если же опыта программирования нет, я бы начал с изучения просто языков — Java или Kotlin — и уже потом переходил к изучению фреймворка.
Как в твоем случае происходило обучение?
Я начал с ресурса Start Android, там прошел несколько уроков и потом просто искал разные бесплатные курсы, на которых делали приложения от А до Я.
Дальше у меня было несколько идей простеньких приложений, которые я хотел реализовать. Поэтому моё дальнейшее обучение скорее строилось на этом. Я пытался понять, что нужно сделать и дальше изучал материалы на эту тему.
Еще очень помогли различные митапы. И они помогли не столько как источник полезной информации, а скорее как место для вдохновения/нетворкинга. Там я знакомился с другими ребятами, и с теми которые уже работают, и с теми, которые, как и я, только учатся. Всё это очень мотивировало продолжить обучение.
Статьи, учебники, видео или курсы — на что делать упор в обучении?
Все эти ресурсы скорее дополняют друг друга в процессе обучения. Начинать стоит с курсов, там чаще всего проводят по шагам создания Android-приложения и показывают, как решать основные проблемы, возникающие при разработке.
Но в процессе курсов могут (и будут) появляться вопросы, ответы на которые могут быть в статьях или видео.
А учебники/книги скорее полезны, когда нужно глубоко погрузиться в определенную тему, например, многопоточность или межпроцессное взаимодействие.
А открытые проекты имеет смысл изучать?
Да, их точно имеет смысл изучать, но, опять же, на определенном уровне. Когда начинают появляться вопросы как сделать какую-то функциональность или как работает какая-то архитектура, можно и нужно смотреть, как это сделано в других приложениях.
Как Android-разработчик я часто замечаю интересные моменты в других приложениях. Это может быть, например, маленькая анимация в Telegram, которая почти незаметна пользователю, или интересная работа с картами или списками. Тогда я могу посмотреть как это реализовано и всегда находится что-то интересное.
В сети есть много дорожных карт для разработчиков — они помогают? Как составить вменяемый план развития?
К дорожным картам стоит относиться осторожно. Большинство тех, которые я видел, описывают просто все навыки подряд, и можно потерять время на изучении неинтересных и ненужных скилов.
Но если интересна какая-то узкая тема, дорожные карты вполне могут помочь. Они могут показать куда двигаться и какие подтемы могут быть составляющими.
План развития стоит составлять исходя из задач которые есть. Он не должен быть сложным и супер детализированным, а скорее должен быть направлением, куда нужно двигаться.
Например:
- Стать Android разработчиком
- выучить Java
- переменные, циклы, условия, синтаксис
- коллекции
- пройти 2 курса по андроид разработке
- разработать андроид приложение
- придумать идею
- сделать дизайн
- разбить на подзадачи
- найти работу
- сделать резюме
- подготовиться к собеседованию
- отправить резюме всем, до кого смогу дотянуться
- пройти собеседование
- выучить Java
И в процессе выполнения каждого из пунктов необходимые знания будут получаться сами собой.
Как не перегореть в обучении?
Совсем без выгорания, думаю, не получится, но есть несколько пунктов которые помогут преодолеть перегорание.
- Постоянство. Очень важно программировать как можно чаще. У многих моих друзей, которые хотят стать программистами, есть проблема — они уверенно начинают и интенсивно учатся 1-2 месяца, но потом из-за этой интенсивности они устают и забрасывают. И тут, на мой взгляд, важно именно постоянство. Лучше заниматься по часу в день, но каждый день на протяжении года, чем по 5-6 часов и забросить через 2 месяца.
- Плавно увеличивайте сложность проектов для разработки. Если сразу взяться за что-то сложное — условно убийцу Instagram* или свой клиент для Telegram — навыков не хватит и немного людей смогут дойти до конца и сделать такие приложения. Лучше начинать с простых проектов, реализующих простые, но интересные идеи. Приложение должно хорошо выполнять одну бизнес-функцию, чтобы считаться хорошим приложением. Моим первым проектом на Android был транслятор текста в азбуку морзе и потом фонарик на телефоне проигрывал этот код морзе моргая. Идея далеко не уникальная, но уникальные идеи в обучении и не нужны. Главное освоить работу с фреймворком.
- Умейте доводить дело до конца. В любой работе есть моменты, когда хочется все бросить, тут главное пересилить себя и продолжить. Android это не рокет саенс и шансы, что получится, увеличиваются пропорционально времени, которое затрачено на обучение.
- Не забывайте про нетворкинг. Проводится много бесплатных мероприятий по мобильной разработке. Чаще всего они проходят в офисах крупных компаний. Там можно послушать доклады, перекусить, познакомиться с другими разработчиками и оставить свои контакты рекрутерам. Рекомендую в таких участвовать, если есть возможность.
Какова роль коммюнити в обучении — она вообще есть/нет, как участвовать, выделиться?
Роль комьюнити определенно есть. Оно может помочь не забросить, ответить на технические/карьерные вопросы.
Android-комьюнити очень открытое и все друг другу помогают. Есть много волонтерских проектов, YouTube каналов с лекциями, статей, митапов и т. д. Большинство из этого делается на чистом энтузиазме и желании отдать комьюнити то, что получили раньше в процессе обучения.
Участвовать в этом довольно несложно. Можно просто писать в существующие проекты с предложением помощи. Шансы, что будут отказы, довольно небольшие.
Выделиться можно сделав крутой вклад, например, глубокий доклад на какую-то тему, или на тему вроде иммиграции, которая всех интересует. Также можно участвовать в организации эвентов, писать статьи, ходить на открытые собеседования.
Как выделиться на рынке разработчиков с самостоятельным обучением с точки зрения поиска работы (пет-проекты, участие в олимпиадах, конкурсах)?
Этот вопрос можно разбить на два. Первый — как выделиться перед рекрутерами и заинтересовать их, второй — как выделиться перед непосредственно нанимающим.
Первая часть очень сложная, сейчас большая конкуренция на рынке джунов и на вакансию приходит по 300 откликов. Со стороны рекрутеров часто есть автоматические фильтры, которые будут отсеивать резюме по годам опыта и пробиться будет очень сложно. Но, тем не менее, возможно.
Основная проблема это сделать так, чтобы резюме посмотрели и уделили ему внимание. Тут стоит помнить, что вакансии есть не только на hh.ru или superjob.ru, но так же в телеграм каналах, на конференциях или митапах. Можно искать рекрутеров компаний и писать им напрямую.
Еще можно искать разработчиков из нужной компании и просить их зарефералить на нужную позицию. Если правильно и вежливо попросить, то кто-то откликнется.
Вот вещи, которые я бы искал в резюме джуна:
- Опубликованный проект в Google Play. Показывает, что человек разобрался со всем, самостоятельно сделал приложение, довел это непростое дело до конца. Подготовил релиз и залил его в Google Play.
- Ссылка на GitHub, куда залиты проекты. Так можно будет посмотреть и оценить код, технологии, навыки.
- Конкурсы/олимпиады это скорее бонус, лично для меня хорошо сделанное работающее приложение важнее, но если оно комбинируется с победой в конкурсе это конечно огромный плюс.
Спасибо, надеюсь мы продолжим!