- Стажер
- Junior
- Middle
- Senior
- Architect
- Управление развитием программиста
- Как устроена проверка уровня (аттестация) в ИНТЕРВОЛГЕ?
- Итого
В 2020 году мы собрали отзывы и пожелания по матрице и аттестациям, посмотрели как поменялся технологический стек. Разработчики и руководители потратили много времени на поиск истины.
Мы готовы опубликовать новую матрицу компетенций вместе с планом развития. Мы считаем что это и есть ответ на вопрос “как из новичка стать гуру веб-разработки”. Итак, поехали.
У каждого программиста в ИНТЕРВОЛГЕ есть файл “Матрица компетенций”. В ней отражен текущий статус и история развития по уровням.
Таблица разделена на грейды (стажер, junior, middle, senior). Каждый грейд содержит набор уникальных компетенций. Вопросы сгруппированы по областям знаний (PHP, SQL, Frontend, …).

В статье показаны фрагменты матрицы и контрольных вопросов.
Полную версию матрицы компетенций вы можете скачать по ссылке.

Стажер
На старте стажер должен быть способен:- уверенно отличать куки от сессий;
- понимать на сервере или в браузере происходит конкретная операция;
- написать на PHP без серверных фреймворков несложную задачу управления данными. Например “ведение БД групп и студентов с редактированием, удалением, созданием и выводом”;
- прилично оформить результат своей работы.
Ошибки – нормальная часть обучения.
Какие знания PHP требуются на уровне стажера?
Какие вопросы задаются?Синтаксис языка PHP
- открывающие / закрывающие теги (+короткие +альтернативный синтаксис);
- объяснить поведение include-require + once.
"Типы данных", переменные
- перечислить все типы данных (7);
- инициализация массива (новый и старый синтаксис, ассоциативный и последовательный);
- правила именования переменных в php;
- как работают и зачем нужны ссылки на переменные (можно на примере preg_match).
Глобальные переменные
- какие существуют предопределенные (перечислить все, объяснить в какой что хранится).
Выражения и операторы
- что такое выражение (определение);
- что такое арность с примерами (унарный, бинарный, тернарный + с сокращенным синтаксисом);
- условные операторы и циклы;
- как работает $$.
Побитовые операторы
- объяснить как работает объединение флагов при вызове error_reporting (самому написать проверку наличия двух флагов в аргументе).
Функции
- синтаксис;
- ограничения типов аргументов, что будет если передать не тот тип;
- аргументы по умолчанию;
- анонимные функции: зачем нужны + пример.
Классы
- каким оператором можно проверить тип;
- что такое класс;
- что такое объект;
- что может быть членом класса;
- что такое инициализация.
Отображение ошибок
- где в php / apache / битриксе управлять отображением (конкретные параметры и функции) ошибок (с приоритетами);
- где искать логи ошибок на сервере.
Авторизация на сайте
- написать авторизацию на чистом php;
- три отличия хеш-функций от функций шифрования.

Junior
Junior способен решать задачи самостоятельно. Он часто советуется со старшими, но вопросы он задает совсем не стажерские.Что практически должен уметь Junior на старте
- переписать (а значить досконально понимать) авторизацию на сайте;
- уверенно править настройками и кодом фреймворка работу каталогов, ленты новостей, формы;
- собирать простые интерфейсы управления данными и целые сайты на фреймворке;
- писать простую интеграцию с внешним API.
Select со всеми конструкциями, включая Join
- синтаксис select-а (смысловой порядок);
- второй способ выбрать данные из нескольких таблиц кроме join и почему его не надо использовать;
- where-having;
- limit;
- вывести для каждого пользователя количество групп в которых он состоит.
Типы данных MySQL
- перечислить все типы;
- разница в хранении.
Типы join-ов
- продемонстрировать работу двух основных типов join-ов на таблицах (хуже на кружках);
- что такое "cross join".
Типы таблиц Mysql
- транзакции (где есть, зачем нужны, как запустить/завершить/отменить).
Применение Alter
- как переименовать таблицу;
- как задать значение по умолчанию для столбца.
Отношение многие ко многим
- как реализуется на физическом уровне.
Индексы, оптимизация
- проведите аналогию с реальным миром: бд = библиотека, что будет индексами?;
- на какие типы данных можно создавать;
- тебе нужно самому запрограммировать индексы: primary, unique, index какие переменные/структуры данных для этого нужны;
- почему в CIBlockElement::GetList нужно обязательно указывать IBLOCK_TYPE (см. cookbook по инфоблокам).
Работа с СУБД в консоли
- как выбрать бд при подключении и как сменить после;
- вывести список баз и список таблиц в базе;
- посмотреть список всех процессов бд (кто висит).

Middle
Middle – специалист, который способен решить сам любую типовую для отрасли задачу. Что практически должен уметь Middle на старте:- работать с внешней авторизацией (войти через внешний провайдер или сделать свой код провайдером авторизации);
- уверенно программировать интерфейсы интернет-магазинов или интранет-порталов (в зависимости от специфики);
- собирать сложные интерфейсы управления данными и разделы на фреймворке;
- писать сложные интеграции с внешним API, реализовывать веб-сервисы.
Вот что спрашивают наставники на уровне middle по Javascript
- ООП в JS;
- работа с JS фреймворком кроме JQuery (d3);
- работа с БЭМ;
- Front-end оптимизация;
- написание своего плагина для jQuery;
- NPM (зачем нужен; основные команды (установка/обновление/запуск скрипта); package.json: зачем нужен, какой параметр отвечает за точку входа, как описываются скрипты/команды);
- Современные фреймворки (опыт работы с react/vue; управление состоянием: объяснить 3 основных принципа redux).
Полную версию матрицы компетенций вы можете скачать по ссылке.

Senior
Senior знает “свой стек” досконально, с готовностью изучает и применяет новые технологии, и работает как наставник. Вот например, что сам Senior должен знать и уметь по блоку “Работа с серверами и Linux”.- сборка нетиповой системы выкатки изменений;
- работа с микросервисами;
- организация нагрузочного тестирования;
- настройка continuous integration;
- синхронизация файлов и репликация данных;
- сборка отказоустойчивого и высоконагруженного кластера на Bitrix Framework и без него;
- ELK / другие системы логирования и аналитики;
- серверы очередей Gearman / RabbitMQ и построение распределенных систем.
Architect
Архитектор – следующий уровень развития специалиста, когда он продумывает архитектуры крупных проектов и руководит их реализацией. Он не только технический, но и проектный руководитель.Такие специалисты играют ключевую роль в технически и организационно сложных проектах.
Качество архитектора определяет способность проекта выполняться в срок и развиваться много лет подряд.
Управление развитием программиста
Каждый месяц с каждым программистом индивидуально мы проводим «планерку по развитию» и разговор на другие темы о работе. Участвуют руководитель отдела, техлид и/или наставник.Во время таких встреч мы вместе определяем приоритеты развития — сдать лабораторную, экзамен 1С-Битрикс или устный экзамен по нашим компетенциям.
Как устроена проверка уровня (аттестация) в ИНТЕРВОЛГЕ?
Как мы проверяем знанияЧто такое «аттестация»?
Это процедура подтверждения квалификации программиста. Ее проходят все программисты компании. Аттестация включает лабораторные работы и устные экзамены.В результате аттестации в вашей матрице компетенций появляются “Да” напротив подтвержденных компетенций. От этого увеличивается ваш грейд, например, «Стажер-54%» → «Junior-27%».

Зачем нужна аттестация?
- Возможности компании зависят от вас. Мы хотим, чтобы вы приобретали навыки, которые приносят наибольшую пользу для наших клиентов.
- Ваша зарплата растет вместе с квалификацией. Мы измеряем квалификацию с помощью матрицы компетенций. Чтобы ЗП была повышена, нужно подтвердить квалификацию.
- Интересные задачи – это сложные задачи. Повышение уровня позволит работать самостоятельнее и решать сложные задачи.
Как проходит аттестация?
Аттестация включает теорию (устный экзамен) и практику (лабораторные работы). Цель – “закрыть” несколько компетенций в матрице, подтвердить уровень, получить новые задачи и повысить зарплату.Наши практические задания можно сделать правильно только если изучить и понять теорию. Списывать и хитрить у нас не принято, и наставник не пропустит халтуру.
Многие блоки матрицы компетенций закрываются практикой и теоретических вопросов по ним нет.
Теория. Устный экзамен
Компетенции, не покрытые лабораторными работами нужно подтвердить на устном экзамене.По каждой компетенции мы задаем около 5 вопросов. По-хорошему ответить надо на все или почти все. Длительность устного экзамена зависит от уровня, обычно это 1-2 ч.
Практика. Лабораторные работы
Лабораторная работа покрывает сразу несколько компетенций. После выполнения лабораторной работу эти компетенции засчитываются как подтвержденные и не попадают в устный экзамен.Лабораторная работа завершается отчетом. Отчет может включать демонстрацию чего-либо, код-ревью, устные вопросы. Набор проверок зависит от самой лабораторной.
Примерные формулировки заданий
Мы разработали около 20 заданий лабораторные работы. Несколько – опубликуем.Вот примеры простых заданий.
Задание 2а. Базовый web на PHP, CRUD. Компетенции:
Суть:
Проверка:
|
Развитие задания
Задание 2б. Базовый web на PHP, CRUD (часть 2). Компетенции:
Суть — продолжаем работу над сайтом из задания 2а:
Проверка:
|
Вот пример “средней сложности”
Задание 10. Парсинг сайтов Компетенции:
Суть:
Проверка:
|
Все “лабораторные работы” с методикой их выполнения и проверки доступны нашим сотрудникам.
Путь по “матрице” через лабораторные и экзамены гарантирует профессиональный рост! Подробный путь развития программиста мы описали ранее в статье.

Итого
Вы хотите стать профессиональным программистом? Мы готовы вам помочь. Подготовьтесь, пройдите собеседование и приходите к нам в команду. Сначала – стажером. Через несколько лет вы сильно вырастете.Полную версию матрицы компетенций вы можете скачать по ссылке.
Статьи по теме






- аренда команды (от 2 человек, не менее 3 месяцев);
- итерации с фиксированной ценой (1-3 месяца длительностью).
- регулярные онлайн-планерки с заказчиком;
- квалифицированных специалистов;
- организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
- полную прозрачность и регулярность отчетов о результатах.
- нагруженный интернет-магазин;
- личный кабинет;
- оптовые продажи — B2B-платформа;
- маркетплейс;
- технический аудит сайта;
- Битрикс24 — корпоративные HR-порталы;
- Битрикс24 — построение CRM-системы;
- Битрикс24 — личные кабинеты сотрудников;
- Битрикс24 — аудит портала;
- 1С — интеграция с другими системами;
- 1С — доработка системы;
- маркетинг — комплексное интернет-продвижение;
- маркетинг — продвижение для B2B.