Артемий Соболев, iOS-разработчик в Parallels
1. Ключевые знания – это, конечно же, знание Objective-C и фреймворков UIKit, Foundation, поскольку без них сегодня не обходится ни одно более-менее нетривиальное iOS-приложение. Кроме того, необходимо отличное владение основным инструментом разработчика в экосистеме Apple – Xcode, который предоставляет богатейшие возможности не только для создания, но и для отладки и профилирования приложений.
Операционная система iOS, как и вся мобильная отрасль, сейчас бурно развивается, в ней постоянно появляется что-то новое для разработчика: новый язык программирования (Swift), новые фреймворки, API, возможности и т.д. Чтобы оставаться «на плаву», iOS-разработчик должен постоянно обновлять свои знания и навыки, поэтому любопытство, стремление к самообразованию, способность быстро вникать в документацию и примеры, разбираться в сложных вещах – критически важные навыки.
И, как и любому программисту, разработчику мобильных приложений под iOS необходимо обладать абстрактным мышлением, умением спроектировать архитектуру приложения, грамотно разбить его на модули, оформить в виде аккуратно написанного и читабельного кода (что особенно важно при работе в команде).
2. Основной инструмент – это Xcode, в который Apple постоянно добавляет новую функциональность как для создания UI и написания кода, так и для отладки и профилирования приложений. Новых экстраординарных решений пока нет. App Code добавляет возможности для быстрой навигации, но очень далек от Xcode по функциональности и может быть только дополнением к Xcode. Для быстрой навигации по документации можно порекомендовать Dash. Также нам в нашем проекте (мобильное приложение удаленного доступа Parallels Access) очень пригодилось использование фреймворка ReactiveCocoa (парадигмы Functional Reactive Programming) и Typhoon (для Dependency Injections). Кроме того, в последние годы Apple активно продвигает свой новый язык программирования Swift. Это очень перспективный язык, который позволят отловить множество ошибок на раннем этапе разработки. Но пока он переживает свои «болезни роста», поэтому в «боевом» коде, особенно в больших и сложных проектах, думаем, его стоит применять осторожно и дозированно.
3, 4. Практика показывает, что кандидаты, закончившие или заканчивающие ведущие технические вузы (МФТИ, МГУ, МИФИ, МГТУ им Баумана, МАИ), как правило, показывают хорошие результаты и могут быстро разобраться в сложных вещах, однако все, конечно, зависит от конкретного кандидата. Поэтому наличие релевантного опыта работы и навыков вполне может перевесить.
Опыт работы важен, но также не имеет решающего значения: у нас есть студенты, обладающие более глубокими знаниями, чем некоторые приходившие на собеседования кандидаты.
Честно говоря, хорошего специалиста отличает стремление вникнуть в суть вещей и внимание к деталям. Поэтому на собеседованиях мы часто спрашиваем о тонкостях при использовании, казалось бы, привычных и знакомых разработчику iOS-вещей. Это показывает, интересуется ли человек тем, что находится «под капотом» у фреймворков, и понимает ли, какие могут быть «подводные камни» при их использовании. Например, почти все использовали NSNotificationCenter, но, оказывается, далеко не все задумывались и могут ответить, в какой очереди придет callback, если postNotification было вызвано из background очереди.
Если у кандидата есть портфолио опубликованных в AppStore приложений, мы их обязательно посмотрим, почитаем отзывы. Если хотите лично убедиться, то у нас в компании как раз открыта вакансия iOS-разработчика.
5. Абсолютно must have требований нет, но есть ряд вещей, которые будут критически важны при работе у нас. Во-первых, при разработке своих продуктов, как мобильных, так и десктопных, Parallels вкладывает много ресурсов в качество UI (пользовательского интерфейса) и usability (удобства работы). Плавно работающий и удобный UI часто требует применения нетривиальных решений, чтобы обойти те или иные ограничения или «подводные камни» iOS, поэтому глубокое знание особенностей поведения iOS и ее UI-элементов – это жизненная необходимость.
Во-вторых, поскольку разрабатываемые нами мобильные приложения являются кросс-платформенными, с общим ядром на С++, то опыт разработки именно кросс-платформенных приложений будет большим дополнительным плюсом. В-третьих, поскольку проект большой, то хорошее знание и умение применять паттерны при проектировании и разработке – также большой плюс.
Егор Потяг, Mobile Developer в минском центре разработки Wargaming
1. Необходимо знать и понимать:
- язык программирования Objective-C;
- устройство жизненного цикла приложения на iOS;
- структуру iOS-приложения и принципы взаимодействия с пользователем;
- паттерны проектирования (Singleton, Delegate, MVC, Target-Action, Command, Observer);
- базовые компоненты/контролы UIKit и их иерархическую зависимость;
- базовые принципы сетевого взаимодействия.
Помимо вышеперечисленного, необходимо свободно ориентироваться в специфике разработки многопоточных приложений и асинхронного взаимодействия, иметь навыки самостоятельной разработки архитектуры приложения. Очень желательно иметь опыт разработки на C/C++ (для понимания глубинных механизмов языка).
2. Стандартная среда разработки Xcode; сторонние продукты, облегчающие сопровождение приложения (Flurry, Crashlytics, TestFlight и т.п.); сторонние библиотеки, ставшие уже стандартом индустрии (CocoaPods, ReactiveCocoa, AFNetworking, Mantle, Masonry и т.д.).
3. Сотрудник должен обладать достаточным уровнем образования, чтобы выполнять проектные задачи, а также иметь возможность профессионально развиваться в будущем. Однако не стоит забывать и о том, что промышленная разработка программного обеспечения действительно требует высокой квалификации. Поэтому наличие профильного высшего технического образования у кандидата, как правило, является обязательным минимумом. Для успешной работы сотрудник должен обладать определенным уровнем системного мышления, пониманием принципов построения архитектуры приложений, знанием базовых моментов алгоритмизации, структур и баз данных и т.п. – всего того, что позволит далее совершенствоваться и углублять знания в конкретной узкой области. Развить это с нуля достаточно затратно по времени, а в итоге и финансово. Конечно, бывают самоучки-исключения, но ориентироваться на них не приходится.
4. Все зависит от конкретных задач. Если у сотрудника отсутствуют отдельные важные навыки, то обязательно должны быть знания из смежных областей, которые позволят обучить его специфике программирования под iOS в кратчайший срок. Например, если потенциальный кандидат имеет опыт разработки клиент-серверных приложений на других языках и написания многопоточных приложений для других платформ, то обучить его использованию определенных средств на iOS не составит большого труда. Другое дело, когда у кандидата в принципе отсутствуют знания в этих областях.
5. Требования могут предъявляться исходя из нужд конкретного проекта. К примеру, если сотрудника рассматривают на роль разработчика 3D-графики, то отсутствие знаний определенных разделов высшей математики и линейной алгебры может оказаться основным фактором для принятия решения о найме.
Дмитрий Коркин, ведущий iOS-разработчик компании Auslogics
1. Работа в компании Auslogics для всех соискателей начинается с выполнения тестового задания. Рассматривая тестовые работы на позицию iOS-разработчик, мы в первую очередь обращаем внимание на результат – корректно работающее приложение. Следующие критерии – выбор технологий, хорошая структура и архитектура проекта. В случае успешного выполнения мы приглашаем кандидата на техническое интервью, где и выясняем знание iOS SDK, принципов клиент-серверного взаимодействия, шаблонов проектирования.
Создание многопоточных приложений, в которых сохраняются и отображаются данные посредством привлекательного интерфейса, – также одна из задач штатного iOS-разработчика в нашей компании.
Кроме всего вышесказанного, также немаловажно обладать аналитическим мышлением для сравнения существующих технологий в целях определения оптимального решения для реализации конкретной задачи.
2. На официальном сайте Apple можно найти полный пакет программ, необходимых для iOS-разработки (Xcode, WatchKit). Разработчик должен ориентироваться в управлении приложений через iTunes connect и уверенно решать конфликты в системе контроля версий, Git – SourceTree клиент. Большой плюс – это знание фреймворков автоматического тестирования, инструментов отладки и профилирования приложения, опыт работы с менеджерами зависимостей – pod.
3. Как уже было отмечено ранее, в компании Auslogics выполнение тестового задания является неотъемлемой частью процедуры рассмотрения соискателей. Помимо этого, существует также техническое интервью. Именно эти две составляющие отбора позволяют оценить соответствие заявленного уровня знаний соискателя требованиям компании.
Однако тестовые работы отправляются не всем соискателям, подавшим свое резюме, а лишь тем, у кого указанный опыт соответствует требованиям вакансии. Образование, повышение квалификации и научная деятельность играют, конечно, важную роль, но не решающую.
Принимая окончательное решение в пользу того или иного кандидата, мы анализируем умение соискателя рассуждать, искать оптимальные решения поставленных задач, качественно изучать новые технологии. Эти навыки гораздо важнее дипломов и сертификатов.
4. Для разработки мобильных приложений на высоком уровне обязательным требованием является наличие опыта работы со следующими фреймворками и технологиями:
- API социальных сетей (Facebook, Twitter, Swarm).
- Работа с базой данных, использование CoreData и библиотек-оберток типа MagicalRecord.
- Работа с многопоточными приложениями.
- Опыт работы с push-уведомлениями и встроенными покупками.
- Знание принципов ручного управления памятью.
- Опыт работы с сокетами (socket.io).
- REST API, знание библиотеки AFNetworking (Alamofire).
- Применение паттернов проектирования.
- Опыт разработки кастомных интерфейсов.
5. Коллектив компании Auslogics работает в отличном от большинства других ИT-компаний формате – все сотрудники, кроме сиднейского офиса, работают на условиях полной занятости, но удаленно. Это дает немало свободы, но и требует большей самостоятельности, самоорганизованности и инициативности. Креативный подход, кропотливое отношение к написанию кода, видение конечного продукта и четкая его реализация являются залогом успеха работы над проектом.
Для нас немаловажно отношение сотрудника к продуктам компании. Именно «продуктовый» тип мышления разработчика определяет будущее качество кода. Широкий кругозор, знание предметной области и рынка приложений – преимущество, которое позволит разработать действительно качественный продукт.
Наши программисты не только не опасаются изменений требований и переработки архитектуры, а порой и сами являются инициаторами этого, принимая это как вызов и мотив самосовершенствования.
Всеволод Иванов, технический директор Touch Instinct
1. Английский на уровне чтения технической документации; знание Objective-C и ООП; наличие в AppStore минимум двух приложений; умение эффективно использовать сторонние библиотеки (CocoaPods); понимание принципов работы баз данных.
2. Инструментарий разработчика мобильных приложений для iOS:
- XCode
- SourceTree
- Adobe Assets
3. Высшее техническое образование, иногда – студенты последних курсов.
4. Опыт программирования от двух лет, наличие в AppStore реализованных приложений, опыт работы с какой-либо системой контроля версий (Git, Svn, Mercurial и т.д.), опыт разработки многопоточных программ.
5. Желание работать и развиваться на крупных проектах.
Подготовил Игорь Штомпель