Мобильная разработка — одно из актуальных направлений в IT-сфере. Мир вокруг нас стремительно меняется, но, несмотря на это, люди по-прежнему решают множество своих задач с помощью телефонов. Такси, шопинг, обучение — всё это доступно в виде мобильных приложений. А за создание этих приложений отвечают мобильные разработчики. 

Летом в Яндекс Практикуме стартовало два курса по мобильной разработке: «Android-разработчик» и «iOS-разработчик». О том, что особенного в каждой программе, мы поговорили с командой Практикума, которая их создавала.

  • Татьяна Шашлова, продакт-менеджер;

  • Лусине Арсенян, продакт-менеджер;

  • Анастасия Марченко, методист;

  • Татьяна Априкова, менеджер команды сопровождения;

  • Сергей Сорокин, автор курса «Android-разработчик», лид мобильной разработки Rosberry;

  • Антон Данилов, автор курса «iOS-разработчик», технический директор в Trinity Monsters.

Почему мы решили писать курсы

Мобильная разработка — довольно большая ниша. А курс по мобильной разработке — довольно большой продукт. В 2021 году команда Практикума решила взяться за эту амбициозную задачу и выяснить, как обстоят дела на IT-рынке и что вообще можно сделать в этом направлении.

Согласно исследованию data.ai, пользователи смартфонов проводят с ними больше четырёх часов в день. Кроме того, пандемия спровоцировала рост новых пользователей приложений, особенно в сфере шопинга и доставки еды. Такие данные говорят об одном: сейчас многие компании обращаются к мобильным приложениям, а это значит, что их нужно кому-то разрабатывать.

Наше исследование состояло из нескольких этапов:

  • Сначала мы посмотрели на рынок мобильных приложений. По данным 2021 года он показывал себя как большой и растущий. Это подтверждает отчёт Technavio

  • Далее мы посчитали соотношение чистых вакансий и резюме на hh.ru. Мы увидели, что спрос на Android-разработчиков был почти в два раза выше предложения. На iOS вакансий было чуть больше, чем резюме.

  • Мы обратились к исследованию зарплат технических специалистов на Хабре. Оно помогло понять, сколько зарабатывают мобильные разработчики и на что могут рассчитывать специалисты начального уровня. На скриншотах представлены цифры 2021 года, но они мало чем отличаются от результатов исследования 2022 года.

Зарплаты разработчиков под iOS и Android
Зарплаты разработчиков под iOS и Android
  • Мы пообщались с представителями компаний, которые нанимают мобильных разработчиков, чтобы понять требования к джуниор-разработчикам — технические и нетехнические. Последние имеют большое значение: все хотят нанимать заинтересованных людей, которые могут взаимодействовать с другими, адекватно реагировать на критику и самостоятельно искать решения проблем.

  • Дополнительно мы поговорили с потенциальными студентами, чтобы понять, кому это интересно и почему они хотят получить новую профессию. 

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

Список нетехнических навыков джунов, которые мы собрали после общения с работодателями
Список нетехнических навыков джунов, которые мы собрали после общения с работодателями

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

Итак, в результате исследования мы поняли, что на рынке есть спрос на мобильных разработчиков, как под iOS, так и под Android. Стало понятно, что такие специалисты нужны и что Практикум может планировать выход курсов для получения новой профессии. 

Проектирование программы и её производство

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

Скриншот рабочей заметки, где мы собрали технические скилы по Android по итогам интервью с работодателями
Скриншот рабочей заметки, где мы собрали технические скилы по Android по итогам интервью с работодателями
Скриншот подобной рабочей заметки, но по iOS
Скриншот подобной рабочей заметки, но по iOS

Список необходимых навыков получился очень большим, поэтому мы сидели и думали, что оставлять, а что нет. Если бы мы оставили все, то программы растянулись бы по два года обучения каждая. 

Например, в Android для изучения мы выбрали библиотеку Koin, а не Dagger, потому что для разбора последней можно делать отдельный курс. А для iOS мы выбрали UIKit и не стали добавлять SwiftUI. На тот момент SwiftUI был очень популярен за рубежом, но в российских больших компаниях практически не использовался. Однако сейчас мы думаем над тем, чтобы всё же добавлять SwiftUI в курс.

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

Мы хотели и хотим научить студентов тем навыкам, которые позволят выполнять реальные рабочие задачи джунов. А ещё — помочь им приобрести нетехнические навыки: принимать обратную связь, работать в команде, разбираться, просить помощи.

Но список навыков — это ещё не курс. Образовательный опыт должен быть спроектирован и иметь логику. Для поиска этой логики мы проводили общие воркшопы с авторами и методистом. Это были большие созвоны, на которых мы сначала пытались нащупать общий принцип того, как может быть устроен курс. 

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

Потом мы додумались до концепции, что у мобильного приложения можно выделить части, с которыми разработчики взаимодействуют — мы назвали их «слоями». Например, вёрстка, архитектура, работа с сетью и хранением данных. И в итоге мы объединили два подхода — с задачами и со слоями, — ведь у джуна задачи могут быть самого разного уровня сложности.

Если он приходит на большой проект, ему может достаться небольшая задача в духе «перекрасить кнопку». Это будет касаться только интерфейса. Но в то же время может попасться что-то более сложное, например, поменять какой-нибудь сетевой запрос. И это уже затрагивает более сложный слой. 

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

По итогу проектирования у нас получилась огромная схема со структурой курсов. Программа поделилась на логические части: 

  • подготовительная, где студенты изучают синтаксис; 

  • основная, где студенты делают приложения; 

  • командная, где мы больше рассказываем про совместную работу; 

  • дипломный проект, который делается в командах.

Так выглядела схема программы курсов
Так выглядела схема программы курсов

После этого мы разделились, потому что командам каждого курса предстояло решать разные задачи и учитывать особенности изучаемых платформ. 

В итоге программа по Android оказалась длиннее, чем программа iOS: «Android-разработчик» рассчитан на 12 месяцев, а «iOS-разработчик» — на 10. Дело в том, что для работы с  Android надо учить два языка — Java и Kotlin, а в iOS основной язык — Swift. К тому же мы по-разному подошли к проектам: в iOS мы остановились на трёх не очень больших проектах, а в Android приняли решение делать один сквозной проект. 

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

На iOS в самой большой основной части программы логично выделились три модуля, и команда решила, что будет здорово сделать приложение под каждый из них. Они меньше, чем проект на Android, но зато в портфолио окажется сразу три проекта.

Контент сейчас

Мы ещё в процессе написания контента — не стали ждать, пока допишем всю программу. На обоих курсах у нас есть бета-когорты: по их комментам и обратной связи мы переделывали уроки и только потом запустили студентов платных наборов. 

Несколько авторов параллельно пишут разные темы, потом эти темы проходят авторское ревью, методическое ревью, а ещё редактуру. К каждому уроку создаётся визуальное сопровождение — иллюстрации и схемы. Такой многоступенчатый процесс нужен для того, чтобы мы поставляли хороший образовательный продукт. 

Почему мы пишем программу, когда курс уже запущен? Потому что рынок мобильной разработки очень подвижный. Мы пишем тему и видим, что, например, к осени она чуть изменится — будут новые библиотеки или Apple выпустит какой-нибудь релиз. Например, совсем недавно вышли Xcode 14 и iOS 16. И ещё был случай, когда изменился интерфейс Android Studio, и нам пришлось переделывать скриншоты для урока.

Нам важно учитывать все подобные изменения. Если бы мы написали программу год назад и выпустили сейчас, то местами она была бы устаревшей. А нам важно, чтобы у наших студентов были актуальные знания.

О сопровождении

Контент и программа — это только половина продукта. Вторая — это сопровождение, а именно наставники, ревьюеры и кураторы. 

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

В начале программы наставники пытаются давать прямые ответы, потому что студенты ещё почти ничего не знают. По мере усложнения тем наставники дают ссылки на источники и задают наводящие вопросы. Так студенты качают свои навыки поиска информации: на работе часто придётся в чём-то копаться и разбираться самостоятельно. 

При этом на протяжении всей программы наставники меняются — они закреплены за определёнными модулями. Мы считаем, что так студенты получают разный практический опыт. А ещё так мы застрахованы от того, что студенту не понравится наставник — он может общаться с другим.  

Мы проводили эксперимент, когда команда курса по Android работала по классической схеме, когда один наставник ведёт весь процесс обучения, а курс iOS был поделен по модулям. Нам понравились результаты по смене наставников, и поэтому Android тоже будет переходить на модульную систему. 

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

Кстати, на курсе «iOS-разработчик» есть особенность: за всю программу в определённые промежутки доступно два индивидуальных получасовых созвона с наставниками.

Ещё одна важная составляющая курсов — проверка работ студентов ревьюерами. На реальной работе всегда есть этап код-ревью, когда твой код комментируют и могут отклонить, пока не переделаешь.

В iOS ревью начинаются на третьем спринте: после него студентам нужно отправлять проект на GitHub или ссылку на свой пул-реквест. В Android на подготовительном этапе ревью проходит через спринт, а когда студенты приступят к производству огромного сквозного проекта — каждый спринт. 

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

Особенности программ iOS и Android

Самое важное, что в обеих программах в начале есть этап подготовки. Это нужно для того, чтобы студенты сначала разобрались, что к чему, а только потом переходили к производству приложений. 

Также в некоторых местах курса у нас работает механика peer-to-peer, или «взаимное обучение». Суть в том, что студенты взаимодействуют друг с другом, обмениваются опытом, знаниями и информацией. На курсе это представлено в разных форматах: например, студентам может понадобиться ревью от друг друга или сделать задачу в паре. 

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

Ещё особенность каждого курса в том, что они целиком создавались авторами. Наши авторы — это разработчики с опытом от пяти лет, которые работают и работали в Яндексе, Tinkoff, VK, МТС, Onfido, Trade Republic и в других российских и зарубежных компаниях и студиях. Даже если какая-то информация касалась банальных основ языка программирования, мы не брали ничего готового — объясняли своими словами, исходя из личного опыта.

Но курс не состоит только из текста и задач. Мы стараемся с помощью иллюстраций помогать в понимании сложных тем: рисуем схемы и метафоры, даём простые примеры и сюжеты с приятным юмором. Таким образом мы регулируем динамику прохождения уроков.

Объясняем, что такое класс в курсе по iOS...
Объясняем, что такое класс в курсе по iOS...
...и взаимодействие между пользователем и приложением в курсе по Android
...и взаимодействие между пользователем и приложением в курсе по Android

Мы стараемся не зацикливаться только на технической части, а стремимся, чтобы у студентов вырабатывались и софтовые навыки — например, мы рассказываем, кто есть кто в команде, как с ними взаимодействовать, по каким циклам строится производство продуктов. 

Мы постарались сделать проекты такими, чтобы их можно было положить в портфолио, выложить на GitHub и рассказать, какие технологии в них использованы. Поэтому наши проекты приближены к реальным задачам. 

А ещё мы понимаем, что студентам важно делать пет-проекты. К счастью, мобильным разработчикам это сделать гораздо легче, чем, например, бэкенд-разработчикам. Можно взять какой-то сценарий из жизни и попробовать решить его с помощью приложения. 

Сейчас мы работаем над тем, чтобы у студентов наших курсов была возможность поучаствовать в реальных проектах в рамках Мастерской. На данный момент такой возможности нет.

Карьерный трек — это опциональный модуль, который открывается незадолго до конца программы. Там студенты получают информацию про то, как составлять резюме, как повысить свои шансы на наём, что будут спрашивать на собеседовании и как к нему готовиться.

В конце каждой программы мы хотим сделать тренировочное техническое собеседование, чтобы студенты поняли, как оно проходит. Это нужно, чтобы решить большие и важные проблемы у людей без опыта — боязнь перед собеседованием и плавание в информации, которую он выучил. 

Android

Курс «Android-разработчик» рассчитан на 12 месяцев. Кроме лендинга, подробную программу курса можно изучить в этом документе.

На Android нам приходится давать два языка программирования — Java и Kotlin. Этот момент связан с тем, что до появления Kotlin приложения под устройства с Android писали на Java. А ещё о Java могут спрашивать на собеседованиях. 

Короткая вводная часть рассчитана на людей с разным опытом — уровень сложности заданий будет зависеть от ваших навыков и предпочтений. Это полноценный учебный модуль, в конце которого вы сможете дописать и запустить конвертер валют. 

В подготовительной части студенты дописывают мобильное приложение для сортировки, просмотра и совершения звонков по всем контактам в телефоне с учётом привязки к мессенджерам и почте.

Затем студенты анализируют разницу между Java и Kotlin, работают с фильтрами и списками. На этом этапе нет смысла создавать что-то самостоятельное: сначала нужно на практике освоить языки. Поэтому на подготовительном этапе в программе есть задачи в тренажёре и дописывание мобильного приложения для работы с контактами.

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

Проекты курса «Android-разработчик»
Проекты курса «Android-разработчик»
Немного о технологиях, которые изучают на курсе

Основы Android-разработки

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

  • Kotlin — основной рекомендованный Google язык для разработки Android-приложений с 2019 года, позволяет быстрее писать код, облегчает жизнь разработчикам.

  • Git — система контроля версий; инструмент, нужный для того, чтобы писать код в команде.

  • Gradle — система автоматической сборки, сокращает её время, используется в Android Studio.

  • Android SDK — набор библиотек и инструментов для разработки мобильных приложений для Android.

Вёрстка

  • Xml — язык разметки, используется для описания визуального представления интерфейса приложения.

Работа с View

  • Создание и взаимодействие с элементами пользовательского интерфейса различной сложности.

Архитектура

  • MVP (Model — View — Presenter) — шаблон проектирования, который разделяет ответственность за бизнес-логику и отображение содержимого экрана.

  • MVVM (Model — View — ViewModel) — архитектурный паттерн, переход от MVP к более гибкому архитектурному стилю.

DI

  • Koin — библиотека, упрощающая работу и управление зависимостями в приложении, если в нём больше чем три экрана. 

Работа с сетью и многопоточность

  • REST — архитектурный стиль, позволяющий выстроить взаимодействие между приложением и сервером для получения и отправки данных.

  • OkHttp — библиотека, которая позволяет согласованно работать мобильному клиенту и серверу по протоколам HTTP.

  • Retrofit — библиотека, которая упрощает взаимодействие приложения с REST API, позволяет запрашивать и отдавать данные серверу.

Асинхронное взаимодействие

  • Coroutines — библиотека от компании JetBrains, позволяющая выполнять задачи параллельно и писать код в привычном для программистов стиле.

  • RxJava — библиотека для асинхронного выполнения задач, основанная на парадигме реактивного программирования.

Хранение данных

  • Shared Preferences — постоянное хранилище, используемое Android-приложениями для сохранения пользовательских настроек и различных конфигурационных данных.

  • Content Provider — компонент, позволяющий управлять доступом к данным, которые хранятся на устройстве внутри приложения.

  • SQLite — библиотека для работы с базой данных.

  • Room — библиотека для хранения данных в Android-приложениях, облегчает работу с SQLite.

Тестирование

  • JVM Tests — автоматизированные тесты, выполняющиеся на Java Virtual Machine.

  • Unit Testing — тип тестирования, при котором проверяется работа отдельных единиц кода.

iOS 

Курс «iOS-разработчик» рассчитан на 10 месяцев. Подробную программу снова можно посмотреть в документе.

На тесте спроса было видно, что в iOS приходит чуть бόльшая доля новичков. И тогда мы подумали, что нужно сделать для таких людей отдельные уроки про основные понятия в программировании без ухода в мобильную разработку. 

Так появился «Бассейн» — короткий дополнительный модуль, где можно подтянуть общие знания по программированию. Его прохождение занимает несколько часов. Он необязательный, но многим помогает освоиться и подготовиться к основной программе. 

За период прохождения курса студенты делают три проекта: приложение-квиз по популярным фильмам, приложение с лентой для просмотра фотографий, приложение-трекер, которое позволяет отслеживать что угодно. Дипломный проект — NFT-маркетплейс в команде с другими студентами. 

Проекты курса «iOS-разработчик»
Проекты курса «iOS-разработчик»
Немного о технологиях, которые изучают на курсе

Основы iOS-разработки

  • Swift — основной и самый популярный язык для разработки iOS-приложений.

  • Git — система контроля версий; инструмент, нужный для того, чтобы писать код в команде.

Вёрстка

  • UIKit — фреймворк, который позволяет строить интерфейсы iOS-приложений и обрабатывать действия пользователя. 

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

Архитектура

  • MVC (Model — View — Controller) — архитектурный паттерн, позволяющий отделить хранение данных от их представления на экране смартфона. В своей основе использует трёхзвенную модель: данные — действия — отображение.

  • MVVM (Model — View — ViewModel) — архитектурный паттерн, переход от MVC к более гибкому архитектурному стилю.

  • Clean architecture — концепция, позволяющая реализовывать масштабируемые архитектуры.

  • CocoaPods — менеджер зависимостей, который содержит более 35 тысяч библиотек и используется в более чем 2,4 миллиона приложений. Поможет масштабировать проекты и использовать в них библиотеки с открытым исходным кодом.

Работа с сетью и многопоточность

  • REST — набор правил, который позволяет согласованно работать мобильному клиенту и серверу.

  • GCD (Grand Central Dispatch) — технология Apple, библиотека, позволяющая управлять потоками выполнения задач в приложении.

Хранение данных

  • UserDefaults — средство для хранения небольших данных в приложении.

  • Keychain — инструмент для сохранения и защиты пользовательских данных в приложении.

  • SQLite — библиотека для работы с базой данных.

  • CoreData — фреймворк, который управляет и хранит данные в приложении, не являясь при этом базой данных.

Тестирование

  • Unit Testing — тип тестирования, при котором проверяется работа отдельных единиц кода.

  • UI Testing — тесты, которые взаимодействуют с приложением через пользовательский интерфейс. Используются, если нужно проверить сценарий, через который будет проходить пользователь.

Первые оценки

Уже по бете было видно, что наши студенты жадные до практики. Ребята очень хотели поскорее закончить подготовительные части и перейти к созданию приложений. А ещё студентам нравятся проекты, которые мы выбрали для учебных программ обоих курсов. 

В будущем мы добавим ещё больше практики. Программа постоянно изменяется и улучшается: мы смотрим на то, как студенты её проходят, где им тяжело, где чего-то не хватает, где нужно что-то дорассказать. 

Над курсами работают целые команды: авторы, методист, редакторы, иллюстраторы, наставники, ревьюеры. У нас у всех общая цель: мы очень хотим, чтобы у студентов всё получилось и они выпустились с нужными навыками. Мы стараемся сделать всё, чтобы они получили новую профессию, и мы очень ждём, когда у нас появятся выпускники.

Комментарии (2)


  1. Mitai
    08.10.2022 10:37
    -3

    На фига они нужны когда есть Flutter))


  1. VladislavWorld
    08.10.2022 16:56

    Звучит очень интересно.
    А сколько времени ушло на подготовку материала от "идеи" до первого запуска потока?
    Сколько времени, в среднем, занимает на создание блока? Интересно сколько нужно времени для изменение блока в случае выхода новых технологий и\или иных изменений которые были указаны в статье?