В 2017 году ИНТЕРВОЛГА уже публиковала свою матрицу компетенций веб-разработчика . По сей день это самый обширный и подробный план развития специалиста в нашей отрасли.
В 2020 году мы собрали отзывы и пожелания по матрице и аттестациям, посмотрели как поменялся технологический стек. Разработчики и руководители потратили много времени на поиск истины.
Мы готовы опубликовать новую матрицу компетенций вместе с планом развития. Мы считаем что это и есть ответ на вопрос “как из новичка стать гуру веб-разработки”. Итак, поехали.
У каждого программиста в ИНТЕРВОЛГЕ есть файл “Матрица компетенций”. В ней отражен текущий статус и история развития по уровням.
Таблица разделена на грейды (стажер, junior, middle, senior). Каждый грейд содержит набор уникальных компетенций. Вопросы сгруппированы по областям знаний (PHP, SQL, Frontend, …).
Есть столбец “Опционально” для специальных вопросов конкретного отдела. Компетенции из этого столбца учитываются в освоении грейда, но не входят в 100%. То есть, например, можно освоить стажера на 120%.
В статье показаны фрагменты матрицы и контрольных вопросов.
Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей
На старте стажер должен быть способен:
уверенно отличать куки от сессий;
понимать на сервере или в браузере происходит конкретная операция;
написать на PHP без серверных фреймворков несложную задачу управления данными. Например “ведение БД групп и студентов с редактированием, удалением, созданием и выводом”;
прилично оформить результат своей работы.
Стажер учится. Его главная задача – набираться знаний, решать задачи под присмотром, и – набивать шишки. Почти каждый стажер удаляет базу, промахивается окном или решает заново давно закрытую задачу.
Ошибки – нормальная часть обучения. Какие знания PHP требуются на уровне стажера? Какие вопросы задаются?
Синтаксис языка PHP
открывающие / закрывающие теги (+короткие +альтернативный синтаксис)
объяснить поведение include-require + once
"Типы данных, переменные
перечислить все типы данных (7)
инициализация массива (новый и старый синтаксис, ассоциативный и последовательный)
правила именования переменных в php
как работают и зачем нужны ссылки на переменные (можно на примере preg_match)
Глобальные переменные
какие существуют предопределенные (перечислить все, объяснить в какой что хранится)
Выражения и операторы
что такое выражение (определение)
что такое арность с примерами (унарный, бинарный, тернарный + с сокращенным синтаксисом)
условные операторы и циклы
как работает $$
Побитовые операторы
объяснить как работает объединение флагов при вызове error_reporting (самому написать проверку наличия двух флагов в аргументе)
Функции
синтаксис
ограничения типов аргументов, что будет если передать не тот тип
аргументы по умолчанию
анонимные функции: зачем нужны + пример
Классы
каким оператором можно проверить тип
что такое класс
что такое объект
что может быть членом класса
что такое инициализация
Отображение ошибок
где в php / apache / битриксе управлять отображением (конкретные параметры и функции) ошибок (с приоритетами)
где искать логи ошибок на сервере
Авторизация на сайте
написать авторизацию на чистом php
три отличия хеш-функций от функций шифрования
Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей
Junior способен решать задачи самостоятельно. Он часто советуется со старшими, но вопросы он задает совсем не стажерские.
Что практически должен уметь Junior на старте:
переписать (а значить досконально понимать) авторизацию на сайте;
уверенно править настройками и кодом фреймворка работу каталогов, ленты новостей, формы;
собирать простые интерфейсы управления данными и целые сайты на фреймворке;
писать простую интеграцию с внешним API.
Покажем что должен знать Junior веб-разработчик по SQL.
Select со всеми конструкциями, включая Join
синтаксис select-а (смысловой порядок)
второй способ выбрать данные из нескольких таблиц кроме join и почему его не надо использовать
where-having
limit
вывести для каждого пользователя количество групп в которых он состоит
Типы данных MySQL
перечислить все типы
разница в хранении
Типы join-ов
продемонстрировать работу двух основных типов join-ов на таблицах (хуже на кружках)
что такое cross join"
Типы таблиц Mysql
транзакции (где есть, зачем нужны, как запустить/завершить/отменить)
Применение Alter
как переименовать таблицу
как задать значение по умолчанию для столбца
Отношение многие ко многим
как реализуется на физическом уровне
Индексы, оптимизация
проведите аналогию с реальным миром: бд = библиотека, что будет индексами?
на какие типы данных можно создавать
тебе нужно самому запрограммировать индексы: primary, unique, index какие переменные/структуры данных для этого нужны
почему в CIBlockElement::GetList нужно обязательно указывать IBLOCK_TYPE (см. cookbook по инфоблокам)
Работа с СУБД в консоли
как указать логин и пароль из консоли
как выбрать бд при подключении и как сменить после
посмотреть список всех процессов бд (кто висит)
вывести список баз и список таблиц в базе
Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей
Middle – специалист, который способен решить сам любую типовую для отрасли задачу. Что практически должен уметь Middle на старте:
работать с внешней авторизацией (войти через внешний провайдер или сделать свой код провайдером авторизации);
уверенно программировать интерфейсы интернет-магазинов или интранет-порталов (в зависимости от специфики);
собирать сложные интерфейсы управления данными и разделы на фреймворке;
писать сложные интеграции с внешним API, реализовывать веб-сервисы.
Вот что спрашивают наставники на уровне middle по Javascript
ООП в JS
Работа с JS фреймворком кроме JQuery (d3)
Работа с БЭМ
Front-end оптимизация
Написание своего плагина для jQuery
NPM
зачем нужен
основные команды (установка/обновление/запуск скрипта)
package.json: зачем нужен, какой параметр отвечает за точку входа, как описываются скрипты/команды
Современные фреймворки
опыт работы с react/vue
управление состоянием: объяснить 3 основных принципа redux
Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей
Senior знает “свой стек” досконально, с готовностью изучает и применяет новые технологии, и работает как наставник. Вот например, что сам Senior должен знать и уметь по блоку “Работа с серверами и Linux”.
Сборка нетиповой системы выкатки изменений
Работа с микросервисами.
Организация нагрузочного тестирования
Настройка continuous integration
Синхронизация файлов и репликация данных
Сборка отказоустойчивого и высоконагруженного кластера на Bitrix Framework и без него.
ELK / другие системы логирования и аналитики
Серверы очередей Gearman / RabbitMQ и построение распределенных систем
Как правило, Senior играет роль технического лидера группы разработчиков.
Архитектор – следующий уровень развития специалиста, когда он продумывает архитектуры крупных проектов и руководит их реализацией. Он не только технический, но и проектный руководитель.
Такие специалисты играют ключевую роль в технически и организационно сложных проектах.
Качество архитектора определяет способность проекта выполняться в срок и развиваться много лет подряд.
Каждый месяц с каждым программистом индивидуально мы проводим «планерку по развитию» и разговор на другие темы о работе. Участвуют руководитель отдела, техлид и/или наставник.
Во время таких встреч мы вместе определяем приоритеты развития — сдать лабораторную, экзамен 1С-Битрикс или устный экзамен по нашим компетенциям.
Это процедура подтверждения квалификации программиста. Ее проходят все программисты компании.
Аттестация включает лабораторные работы и устные экзамены.
В результате аттестации в вашей матрице компетенций появляются “Да” напротив подтвержденных компетенций. От этого увеличивается ваш грейд, например, «Стажер-54%» → «Junior-27%».
Возможности компании зависят от вас. Мы хотим, чтобы вы приобретали навыки, которые приносят наибольшую пользу для наших клиентов.
Ваша зарплата растет вместе с квалификацией. Мы измеряем квалификацию с помощью матрицы компетенций. Чтобы ЗП была повышена, нужно подтвердить квалификацию.
Интересные задачи – это сложные задачи. Повышение уровня позволит работать самостоятельнее и решать сложные задачи.
Аттестация включает теорию (устный экзамен) и практику (лабораторные работы). Цель – “закрыть” несколько компетенций в матрице, подтвердить уровень, получить новые задачи и повысить зарплату.
Наши практические задания можно сделать правильно только если изучить и понять теорию. Списывать и хитрить у нас не принято, и наставник не пропустит халтуру.
Многие блоки матрицы компетенций закрываются практикой и теоретических вопросов по ним нет.
Компетенции, не покрытые лабораторными работами нужно подтвердить на устном экзамене.
По каждой компетенции мы задаем около 5 вопросов. По-хорошему ответить надо на все или почти все. Длительность устного экзамена зависит от уровня, обычно это 1-2 ч.
Лабораторная работа покрывает сразу несколько компетенций. После выполнения лабораторной работу эти компетенции засчитываются как подтвержденные и не попадают в устный экзамен.
Лабораторная работа завершается отчетом. Отчет может включать демонстрацию чего-либо, код-ревью, устные вопросы. Набор проверок зависит от самой лабораторной.
Мы разработали около 20 заданий лабораторные работы. Несколько – опубликуем.
Вот примеры простых заданий.
Задание 2а. Базовый web на PHP, CRUD. Компетенции:
Суть:
Проверка:
|
Развитие задания
Задание 2б. Базовый web на PHP, CRUD (часть 2). Компетенции:
Суть — продолжаем работу над сайтом из задания 2а:
Проверка:
|
Вот пример “средней сложности”
Задание 10. Парсинг сайтов Компетенции:
Суть:
Проверка:
|
Все “лабораторные работы” с методикой их выполнения и проверки доступны нашим сотрудникам .
Путь по “матрице” через лабораторные и экзамены гарантирует профессиональный рост! Подробный путь развития программиста мы описали ранее в статье
Вы хотите стать профессиональным программистом? Мы готовы вам помочь. Подготовьтесь, пройдите собеседование и приходите к нам в команду . Сначала – стажером. Через несколько лет вы сильно вырастете.
Вы можете войти, используя аккаунт одной из социальных сетей