Советы сеньоров: как прокачать знания 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. Официальный ресурс с рекомендациями к дизайну пользовательских интерфейсов.

Ростислав Антонов, Lead Software Engineer в EPAM Ukraine

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, но и понимать, что ты пишешь.

Александр Зубченко, Android Lead в Waverley

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, как бы ни хотелось. Вот только если ну совсем уже нечего делать, а хочется погрызть гранит науки.
  • «Ты ж программист» — не диагноз, будь разносторонней личностью! Социализируйся, ходи в кино/театры/тусовки/музеи — где еще ты встретишь свою половинку? :) Хороших умных людей должно быть много!
  • После английского начни учить еще какой-нибудь иностранный язык, но только такой, чтобы не был похож на английский и ломал мозг. Рекомендую японский/китайский.
  • Дерзай! Нет, не дерзи своему тимлиду, а дерзай...

Василь Пірус, Competence Lead у Perfectial

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. Практика
Ну і звісно, що, крім різноманітних туторіалів, найефективнішим шляхом розвитку є участь у складному різноплановому проекті та взаємодія з колегами, які готові ділитися своїм досвідом.

Корисні ресурси

Тематичні портали:

Твіттер-блоги:

Книжки:

Роман Кучерявец, Android Team Lead в Nullgravity

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-проектах. Выделяй время для планирования, чтобы появлялось понимание того, сколько уходит времени на задачи. Подтягивай знание английского, потому что документация по сложным фреймворкам в основном англоязычная.

Михаил Анохин, Android Developer в Dev-Pro

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-канал для джуниоров, чтобы не пропустить интересные вакансии, стажировки, курсы, статьи.

LinkedIn

32 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Спасибо за статью, взял для себя полезного! Не увидел в статье ссылку еще на один мегаполезный ресурс, добавляю.

guides.codepath.com/...​roid/Home#getting-started

Никита, молодец! Статья супер... и полезная!

Хотел спросить опытных разработчиков, сейчас я нахожусь на уровне junior. Владею Dager2, RxJava, Realm, также паттернами МVP и MVVM и построению Clean Architecture. Недавно закончил крупный проект по аренде вещей. Так как позиций junior компаниях сейчас почти нет, стал вопрос уходить глубже андроид,написание тестов и изучение NDK, или расширятся в сторону веба изучить базовые навыки в Js и beck end. Что бы вы посоветовали?

Если ты владеешь

Dager2, RxJava, Realm, также паттернами МVP и MVVM и построению Clean Architecture

, то ты можешь смело подаваться на позиции миддл+. Главное, чтобы у тебя были хорошие примеры приложений, где ты сможешь объяснить как и почему вышеперечисленные слова ты использовал.
Займись изучением тестов.

Для миддла пока слабоват английский, так как в вакансиях пишут intermediate+, и не хватает коммерческого опыта, так как фриланс и подработки несильно котируются. А такой стек + английский сейчас для некоторых вакансиях джуна. Видимо в Харькове слишком много программистов и мало вакансий)) Пример последнего приложения, написанного с помощью этого стека photos.app.goo.gl/HFKrf9zajXPOlAXu1

Забыл совсем про английский. Да, без него — никуда.
По видео: присутствует англо-русский суржик, надо, чтобы все было переведено (внимание к деталям). Без кода сложно что-то сказать о твоих навыках кроме того, что можешь выполнить большой объем работы.

js & back-end тебе никак в Android не пригодятся) лучше пройтись хорошенько по матчасти и закрепить знания по ней. Тесты, да, можно посмотреть

Для меня лучше всего закрепляется на практике, пока в поиске новых проектов, есть время подучить beckend, чтобы хватало для написания rest api. Я бы назвал это некий fullstack или android+swift, хотя и знаю пословицу про двух зайцев. Ну и возможно хочется перестраховаться, так как разница в количестве вакансий с js, php почти в 10 раз. Но и кажется. что бекенд разработчик решает сложнее и менее рутинные задачи. Могу быть не прав.

На мидла свободно отправляй резюме.

что на счет различных кросплатформов типа Flutter под Дартсом или React Native под Джаваскриптом?

это лучше оставить на потом. Чтобы использовать эти плюшки, лучше к этому времени понимать как система работает изнутри в принципе

Если начинать заниматься разработкой под Android, то лучше всё-таки сконцетрироваться на Java, а не на Kotlin. Большинство кода всё ещё написано на ней. Поддержка существующих проектов, баг-фикс и прочие задачи, с которыми джуну неизбежно придётся сталкиваться, требуют знания данного языка и его идиом, большое количество туториалов для начинающих и нет написаны на Java. Стоит также добавить, что Kotlin опирается на многие джава-классы и их функционал, поэтому ограничиться одним лишь Kotlin не получится. При должном желании с хорошей базой Java джуну не составит труда перейти на Kotlin, процесс занимает порядка 2-х недель, чтобы начать писать код in a kotlin way, а не «как на джаве».

джуну не составит труда перейти на Kotlin

И что вы потом с этим «трудом» будете делать?) Я понимаю, что джуны есть разные, но все-таки я предпочитаю в людях видеть просто людей, а не гениев

Никто не говорит, что Java учить не нужно. Вроде бы никто такого не писал, но Kotlin — это настоящее, а не возможное будущее, и не стоит оттягивать в долгий ящик его изучение.

И что вы потом с этим «трудом» будете делать?)

Не понял вашего вопроса.

джуны есть разные, но все-таки я предпочитаю в людях видеть просто людей, а не гениев

Если я правильно понимаю ваше утверждение, то не надо быть гением, чтобы со знанием Java начать писать на Kotlin.

Вроде бы никто такого не писал
Перше питання, яке виникає перед абсолютно всіма Android-початківцями: «Kotlin or Java?». Загалом непогано знати і те, і інше. Проте на початку кар’єри варто сконцентруватися на чомусь одному. Моя порада без вагань — Kotlin.

Я ссылался на следующий совет. По-моему мнению, как я и писал в первом комментарии, не просто неплохо знать и то, и то, а лучше бы знать джаву прежде чем полностью переходить на Kotlin.

Kotlin — это настоящее, а не возможное будущее, и не стоит оттягивать в долгий ящик его изучение.

С этим не поспоришь, так и есть.

Если я правильно понимаю ваше утверждение, то не надо быть гением, чтобы со знанием Java начать писать на Kotlin

Как раз наоборот. Java знать важно, и я бы не сказал, что порог вхождения в Kotlin такой же быстрый как в Java. Именно поэтому, если рядового джуна пустить в Kotlin, то через две недели мы получим овощное рагу)

Все, вижу, что кто-то сразу посоветовал Kotlin) — я видать пропустил). Вопрос снимается.

Не знаю, почему ни один из синьоров не посоветовал новичкам посмотреть, как гугл предлагает и показывает в коде, как писать приложения с использованием всех вышеперечисленных фреймворков и архитектур.
github.com/...​ples/android-architecture

Ну почему же не указывает? Я вот четко дал ссылку на туториалы и гайды, где есть отсылки к примерам на гитхабе. Ваша ссылка, кстати, не совсем репрезентативна, я бы больше посоветовал вот эту github.com/...​d-architecture-components

Ваша ссылка, кстати, не совсем репрезентативна

Что это вообще значит?

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

Можете, сколько угодно. Только это ссылка на абсолютно другой репозиторий.
Не знаю, что там сложного. Наглядно показывается, как писать на MVP, как использовать репозиторий. Открываешь код на втором окне и учишься.
Очень уж пугают синьоры, которые весь код в активити пишут.

Майже кожен з дописувачів згадав Kotlin, тому запрошуємо відвадити першу в Україні конференцію «Kotlin Night Kyiv» goo.gl/4LgJ1j

Жалко мне джуника, который сразу накинется на это все чтиво. Переизбыток информации для начинающего, из которой пригодится хорошо если 1% в первый год

Якихось ніжних джунів ти описав :) Та і тут же ж плани розвитку пропонуються, ніхто не каже розібратися з усім цим за вихідні під чай/каву/сік/пиво.

У меня строго обратная проблема) Повыучивал библиотеки, побежал писать код) А когда на собеседовании спрашивают всякую теорию — я не бе не ме))

Те що в статті, я б назвав планом розвитку мідла. Для джуна головне навчитися писати продакшн код. Стайл гайди, код конвекшени, старатися не забувати алгоритми і математику. В’їхати взагалі в процеси розробки. І фігачити фігачити фігачити.

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

Ну и типа это норм, что джуник должен к собесу готовится как к экзамену? Все мы знаем как к экзаменам готовятся. Выучил — на следующий день забыл.

Все зависит от собеседования)
Иногда бывает приходишь, нормально пообщались, поотвечал на вопросик и ушел со спокойной душой.
А иногда приходишь — сидит перед тобой такой угрюмый чувак, начинает тебя гонять как на экзамене тупо по вопросам)
Ни за опыт не спрашивает, ни пет-проекты.
Хочешь задать ему вопрос, а он говорит типа я тут задаю вопросы.
И ты такой сидишь и думаешь как-бы выйти отсюда побыстрее.

ВОт, по моему первый вариант работает всегда. Для джуника лучше всего дать на месте выполнить маленькое тестовое задание, на час-полтора. И главное смотреть не на результат, а как он все это выполнял.

Я хз, норм это или нет. На собеседовании задача — пройти собеседование, от этого и отталкиваемся. Остальное — эмоции.

Пару месяцев ждал статью, огромное спасибо, познавательно

Подписаться на комментарии