Привет! Сегодня рассказываем, как прошла очередная стажировка для разработчиков в Redmadrobot, первая в 2017 году. Мы отработали фидбэк, окончательно обкатали старое и добавили много нового. Подробнее под катом :)
Отбор и программа в целом
Тут все было как и в прошлые разы: анкетирование на первом этапе и технический тест на втором. Всего нам поступило более двухсот заявок, по результатам отбора мы сформировали iOS и Android-группы по 7 человек. К iOS, правда, присоединились ещё два участника – одного из них мы брали на работу разработчиком с условием, что он пройдёт нашу стажировку, а второй работал у наших партнеров Alpina Digital.
Артур Сахаров (@mc_murphy), технический директор Redmadrobot
“Стажировки в Redmadrobot — для продвинутых разработчиков уровня pre-middle и middle, поэтому опыт коммерческой разработки под свою платформу был обязательным требованием. Нам было важно учить не «с азов», а брать тех, кто уже вовсю работает «в поле», но при этом готов тратить 20-30 часов в неделю на своё развитие. Некоторые выгорали, но в итоге в каждом курсе были ребята, которые делали всё, и довольно старательно”.
Стажировка шла семь недель, занятия, как обычно, вели сотрудники Redmadrobot. На лекциях обзорно давали теорию, а на семинарах рассказывали о кейсах из практики и их реализации. На этот раз среди лекторов были выпускники наших предыдущих стажировок, которые присоединились к команде. О простых и базовых вещах не говорили, а концентрировались на том, что нельзя найти в интернете и на нашем собственном опыте. И, конечно, упор был на самостоятельную работу — чтение, исследование, подготовка домашних заданий.
What’s new
Android
В программу по Android были внесены серьезные изменения. Стек технологий в Android меняется в среднем раз в 1-2 года, мы непрерывно исследуем свежие современные подходы и постепенно интегрируем их в продакшн. На стажировке мы давали то, что сейчас актуально в индустрии, но не по принципу “берем самое модное”, а только проверенное нами и рабочее.
Во-первых, всю стажировку делали полностью на новом языке — Kotlin вместо Java. Мы начали работать с ним около года назад, и сейчас разработка ведется только на Kotlin. Во-вторых, мы в компании сменили архитектурный подход в Android — перешли на чистую архитектуру — она стала более сложной, но дала нам нужную степень гибкости. Поэтому на этот раз лекция по архитектуре для Android-потока была отдельная.
Александр Блинов (@Xanderblinov), ведущий Android-разработчик Redmadrobot
“Чистая архитектура дает высокую гибкость и эффективность в работе с запросами со стороны заказчика. Например, если в середине проекта клиент понимает, что ему надо добавить кэширование, мы легко можем это сделать. У среднестатистической команды разработки архитектура сводится к трем слоям: View, Presenter и модель, в которой располагается бизнес-логика: работа с сетью и базой данных. У нас пять слоев. Мы разнесли всю бизнес-логику модели приложения на три слоя. Слой бизнес-логики, слой репозиториев (управление источниками данных) и слой, который нам поставляет данные (сеть, базы данных, сенсоры телефонов). Сейчас этот подход начал практиковаться в индустрии, и это пик технологий”.
Многие ребята-стажеры практически сразу, как только мы дошли до блока про Kotlin, начали на нем писать — им не терпелось и было интересно. Но часто, когда разработчики начинают переходить с Java на Kotlin, они по сути пишут на Java в синтаксисе Kotlin. Чтобы писать на “правильном” Kotlin, нужно немного перестроиться, это более функциональный язык, и некоторые вещи там пишутся по-другому. На одном из занятий мы разобрали типичные ошибки и фишки Kotlin и сразу начали писать по-взрослому.
iOS
Здесь изменений в программе было чуть меньше (хотя без них не обошлось). Ориентируясь на фидбэк, некоторые лекции из предыдущих стажировок мы убрали, некоторые дополнили, а некоторые видоизменили. Совершенно новые материалы были подготовлены про сборку приложений и функциональное программирование.
Александр Емельяненков (@Lumenist), iOS-разработчик Redmadrobot, пришел в компанию после первой стажировки
“С первой стажировки все изменилось достаточно существенно. Например, наш нынешний сервисный уровень писался, как раз когда шла первая стажировка, и тогда по ряду вопросов не было готовых решений. В этот раз мы старались давать больше примеров и свежих кейсов из практики. Из других изменений — на первой стажировке писали на Objective C, на второй можно было работать и на Objective C, и на Swift. В этот раз писали уже только на Swift, потому что компания полностью на него перешла”.
Домашние задания и проекты
Механика домашних заданий была выстроена следующим образом: основная обязательная к выполнению часть дополнялась несколькими опциональными заданиями, за которые начислялись дополнительные баллы (и плюсы в карму :)). Мы проверяли задания в группах, и это позволяло даже тем, кто не выполнял дополнительные задания или делал не все, узнать подробности.
В прошлый раз и Android- и iOS-стажеры работали над одним из живых проектов Redmadrobot. В этот раз такой проект был только у iOS-потока, поскольку, как было сказано выше, наша Android-разработка сейчас переходит на новую архитектуру, текущие проекты ожидает рефакторинг, и мы не хотели показывать какие-то практики на приложениях на старой архитектуре. Задания для Android-группы были “синтетическими”, но мы старались сделать их максимально интересными и актуальными с точки зрения практики.
Александр Блинов, ведущий Android-разработчик Redmadrobot
“Мы подбирали домашние задания так, чтобы они были как можно более разнообразными. Первая лекция была посвящена архитектуре, и домашнее задание к ней было самым большим по объёму. Ребятам сразу же надо было вникнуть в Dagger (фреймворк для dependency injection, за счёт которого выстраивается архитектура) и дальше сделать каркас своего приложения и реализовать пагинацию — сделать список с загрузкой своих элементов. Один стажёр сразу же решил, что не справится. На второй лекции мы рассмотрели три фреймворка, а четвёртый студенты должны были изучить самостоятельно и подготовить свою «мини-лекцию» о его внутреннем устройстве. Такие задачи помогают по-другому посмотреть на сторонние библиотеки, не бояться заглядывать им “под капот” и на основе этого принимать решение, что использовать, а что нет. Кроме того, были задания настроить сборку проекта на build-сервер, делать красивые списки в рамках работы с UI, обеспечивать безопасность приложения и, наконец, провести реверс-инжиниринг”.
По сути Android-стажеры с нуля написали приложение и опробовали на нем многослойную архитектуру и Kotlin.
Ольга Ворона (@malinoeshka), iOS-разработчик Redmadrobot
“Проект, на котором работали iOS-стажеры — наше приложение ‘Вкусомания’. Ребята подключались к тестовому серверу со своими аккаунтами, настраивали там все запросы, работали с базами данных и делали экраны согласно нашим требованиям. То есть создали свой маленький продукт”.
Общее изменение для обоих потоков — в этот раз мы не стали делать отдельную лекцию, посвященную дизайну, а интегрировали ее в более общую и тоже новую лекцию о процессах в компании.
Павел Стрельченко, стажёр потока Android
“Ребята показали архитектурные подходы, которые я раньше даже не рассматривал, мне пришлось долго сидеть над разбором оупенсорсной библиотеки Moxy. В целом главной проблемой для меня было правильно распределить время: основная работа требовала полной самоотдачи, но и стажировка требовала её же. И хотя я ожидал от стажировки нечто иное, думал, что мне будут открывать какой-то «дзен» каждый день, я узнал много нового, особенно на уровне подходов”.
Михаил Коновалов, стажёр потока iOS
“Я столкнулся с более высоким уровнем, чем ожидал. На всех лекциях нам главным образом давали вводные, очерчивали какие-то границы, а дальше материал надо было изучать самостоятельно. Я узнал о разработке под iOS очень много нового, рекомендовал бы всем, у кого есть интерес, пытаться попасть на такую стажировку в будущем”.
Безопасность
Мы в Redmadrobot супер внимательно относимся к вопросам безопасности своих приложений, и на стажировках всегда много работаем с этой темой. Говорили об угрозах безопасности в мобильных приложениях и борьбе с ними на уровне принципов и подходов, справедливых и для iOS, и для Android, и о специфических вещах для каждой из платформ. Отдельный момент — специфика работы с приложениями для крупного бизнеса, где так или иначе вводятся и отображаются персональные данные пользователей, совершаются денежные операции и заказываются различные услуги. Безопасность подобных функций должна быть на высочайшем уровне, ведь любая уязвимость может нести риски, как для бизнеса заказчика, так и для репутации компании-разработчика.
Артем Кулаков (@Fi5t), ведущий Android-разработчик Redmadrobot
“В целом материалы лекций по безопасности были похожи на материалы второй стажировки, я рассказывал как про defensive, так и про offensive. Но были и новые фишки. На первой лекции мы рассмотрели, какие существуют угрозы, векторы атак, какие практики защиты приняты у нас в компании, насколько эта защита эффективна, и что с точки зрения обеспечения безопасности появилось в новых версиях платформы. Но безопасность в Android по-прежнему полумифическая тема — платформа открытая, и при желании рано или поздно добраться можно до всего. Поэтому на второй лекции я показывал, что все, о чем мы говорили на первой, на самом деле ломается. Для наглядности принес железяки, с помощью которых можно развернуть точку доступа, перехватывать и расшифровывать трафик, сидя где-нибудь в кафешке — антенну и одноплатный компьютер”.
В домашних заданиях по безопасности в Android-группе стажерам на выбор был предложен пул задач разного уровня сложности. Ребята должны были скоординироваться и разработать библиотеку для обеспечения безопасности мобильных приложений: решить, кто какой компонент будет писать и как это все вместе потом соединять. Смысл заключался в том, чтобы отработать навыки командной работы — чтобы ребята общались как коллеги, а не набивали код в одиночку все время. В этот раз у Android-разработчиков был специальный чат в Telegram, где можно было задавать вопросы менторам и решать их “в динамике”.
iOS более безопасная система, без jailbreak у пользователя есть только доступ к его «песочнице», и куда-то ещё добраться сложно. Но яблочной платформе мы уделили не меньше внимания.
Григорий Матвиевич (@fountainhead), руководитель группы iOS-разработки, эксперт по безопасности Redmadrobot
“Мы разобрали, какие данные и что помимо данных надо защищать в мобильных приложениях. Подробно прошлись по рискам из OWASP, например:
1. Неправильное использование платформы и SDK, игнорирование системных механизмов защиты (неправильная работа с разрешениями на доступ к данным, камере, микрофону и так далее);
2. Небезопасное хранение данных и их случайная утечка;
3. Использование небезопасных соединений и отсутствие проверки сертификатов;
4. Небезопасные сценарии авторизации и аутентификации;
5. Некорректное использование криптографических средств, в том числе устаревших и самописных алгоритмов.
А в блоке “Обеспечение защиты мобильных приложений” поговорили о конкретных реализациях, большую часть из которых затем надо было самостоятельно написать при выполнении домашнего задания. Также мы рассмотрели iOS Security Model. Начиная с того, как организована цепочка загрузки операционной системы, что такое Secure Enclave, как работает подписание кода, что такое Sandbox, как работает шифрование, и заканчивая тем, как функционирует Application Transport Security для защиты соединений. Рассмотрели, как регулируются права доступа при дистрибьюции приложений (entitlements, provision profile, certificates) и какие есть способы защиты доступа к данным (Touch ID, passcode, keychain, Data Protection API)”.
В целом мы старались донести до ребят мысль, что безопасность мобильного приложения всегда строится комплексно. Иногда может создаться ложное впечатление, что отдельно взятый “небольшой” риск не несет большой угрозы, но это в корне неверно. Стандартный вектор атаки использует множество рисков, и малейшее послабление может привести к печальным последствиям.
Что в итоге
Рынок мобильной разработки все еще очень молодой, и одна из проблем — отсутствие стандартов и системной подготовки специалистов. В силу разных причин многие разработчики имеют ограниченные возможности для развития: кто-то отвечает за разработку в компании один, где-то не развита практика исследования новых подходов и технологий. Мы стремимся повлиять на эту ситуацию, транслируя свой опыт в сообщество, в том числе через такие стажировки в Redmadrobot.
Здорово, что у ребят всё время возникали вопросы: “как еще работать с этой архитектурой?”, “какой принцип проектирования вы здесь используете и почему?”. Одни и те же задачи часто можно решать, комбинируя разные подходы. У нас не было цели вооружить стажеров конкретным стеком технологий — мы хотели показать им разные горизонты.
Все, кто прошёл стажировку, хорошо подготовленные разработчики, способные разрабатывать качественные приложения под свои платформы. Из iOS-потока до конца дошли все, а вот в стане Android потери составили три человека. К команде Redmadrobot присоединилось двое iOS-разработчиков — welcome on board. Традиционно скажем, что эта стажировка не последняя, следите за обновлениями здесь на Хабре и в наших соцсетях.
Автор: redmadrobot