Junior | Middle | Senior | |
Возможности | может создать новостное приложение, общающееся с JSON API | может оперативно спроектировать и реализовать быстрый и надёжный чат-модуль | может устанавливать стандарты поведения в команде без опоры на фанатизм |
Интеграция кода | манипулирует кодом через git | имеет своё мнение о GitFlow | имеет собственные идеи об организации CI и автоматизации регулярных задач |
Парадигмы | понимает, в чём состоит суть ООП | имел дело с ФРП | привносит полезные решения из других платформ и парадигм |
Зависимости | умеет пользоваться Cocoapods | знает, почему приложения не могут использовать SPM, но возможно применение Carthage | знает, почему важно управлять зависимостями и сокращать их |
Платформа | применяет массивы, словари и множества | разбирается в Value/Reference типах и Equatable/Hashable | знает нюансы диспетчеризации методов как в Swift, так и в Obj-C |
Клиент-сервер | легко получает JSON из интернета | может реализовать real-time чат на базе веб-сокетов | написать видеочат — выполнимый вызов |
Справочные источники | ответ на любой вопрос ищет на StackOverflow | часто пользуется официальной документацией | задаёт вопросы разработчикам платформы и способен на реверс-инжиниринг |
Память | знает, как предотвращать и устранять утечки памяти | знает NSPointerArray и понимает, почему структуры утяжеляют исполняемый файл | имеет стратегию снижения количества отказов по причине нехватки памяти |
Графический интерфейс | может сверстать простой графический интерфейс в Interface Builder’е | имеет основания верстать UI в коде | может вынести вёрстку и diff calculation в неосновной поток |
Многопоточность | считает asyncAfter своим другом, повсюду применяет @synchronize | asyncAfter вреден, thread синхронизация потоков — источник проблем | понимает проблемы многопоточности глубже блокировок |
Подход | ожидает от коллег подсказок и советов | делится принятыми решениями с командой при обсуждении проекта | принимает ответственность за проектные решения, принятые коллегами |
Паттерны проектирования | понимает Delegation, Target-Action и MVC | умело использует шаблоны Observer, Facade и Mediator | знает золотую середину между внедрением зависимости и локатором служб |
Качество продукта | приложение считается протестированным, если оно работает на моём телефоне | пишет модульные тесты, пробовал TDD и UI-тесты | задаёт легко поддерживаемую пирамиду тестов с неперекрывающимися областями покрытия |
Таблицу в форме изображения и markdown-версию ищите на Github’е.
Всегда нужно стремиться к объективности, когда мы оцениваем себя или потенциальных членов команды.
К сожалению, чем точнее мы пытаемся ответить на вопрос, тем сильнее отдаляемся от истины.
Эта таблица умений — результат попытки определить примерные требования к кандидатам на должность iOS-разработчика.
Она стремится быть:
- достаточно точной, чтобы подсказать, в каких областях следует подтянуть свой уровень,
- достаточно неопределённой, чтобы не давать повода зациклиться на каких-то конкретных знаниях.
Уровни
Деление данной таблицы на три уровня не означает, что такой подход можно встретить в любой организации, но минимальное количество уровней позволяет продемонстрировать больший разрыв между показателями. Деление на пять и более уровней может нести практическую пользу для организации (возможность ежегодно повышать сотрудников), но также и может обернуться трудностями при оценке уровня кандидата.
Области
Данные области были выбраны исходя из повседневного опыта, большинство разработчиков ежедневно имеют дело с несколькими индикаторами этой таблицы. Некоторые области порой могут подолгу оставаться без внимания, так как у большинства из нас нет возможности поработать со всем, с чем хотелось бы на работе. Поэтому особенно важно изучать то, чем вы не занимаетесь на работе и посещать собеседования хотя бы раз в год, это будет держать вас в форме!
Как не следует применять таблицу
Не используйте её как единственный инструмент для оценки соискателей или как учебный план. Это всего лишь индикаторы знаний, ключевые слова.
Изображение и markdown-версию ищите на Github’е.
Автор: Bohdan Orlov
Дата публикации: 13.06.2018
Оригинал статьи
Перевод: Борис Радченко, radchenko.boris@gmail.com
Дата перевода: 02.08.2018