Матрица компетенций веб-программиста – 2020

В 2017 году  ИНТЕРВОЛГА уже публиковала свою матрицу компетенций веб-разработчика . По сей день это самый обширный и подробный план развития специалиста в нашей отрасли.

В 2020 году мы собрали отзывы и пожелания по матрице и аттестациям, посмотрели как поменялся технологический стек. Разработчики и руководители потратили много времени на поиск истины.

Мы готовы опубликовать новую матрицу компетенций вместе с планом развития. Мы считаем что это и есть ответ на вопрос “как из новичка стать гуру веб-разработки”. Итак, поехали.


У каждого программиста в ИНТЕРВОЛГЕ есть файл “Матрица компетенций”. В ней отражен текущий статус и история развития по уровням.

Таблица разделена на грейды (стажер, junior, middle, senior). Каждый грейд содержит набор уникальных компетенций. Вопросы сгруппированы по областям знаний (PHP, SQL, Frontend, …).

Есть столбец “Опционально” для специальных вопросов конкретного отдела. Компетенции из этого столбца учитываются в освоении грейда, но не входят в 100%. То есть, например, можно освоить стажера на 120%.

В статье показаны фрагменты матрицы и контрольных вопросов. 

Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей


Стажер

На старте стажер должен быть способен:

  • уверенно отличать куки от сессий;

  • понимать на сервере или в браузере происходит конкретная операция;

  • написать на PHP без серверных фреймворков несложную задачу управления данными. Например “ведение БД групп и студентов с редактированием, удалением, созданием и выводом”;

  • прилично оформить результат своей работы.

Стажер учится. Его главная задача – набираться знаний, решать задачи под присмотром, и – набивать шишки. Почти каждый стажер удаляет базу, промахивается окном или решает заново давно закрытую задачу.

Ошибки – нормальная часть обучения. Какие знания PHP требуются на уровне стажера? Какие вопросы задаются?

  1. Синтаксис языка PHP

    1. открывающие / закрывающие теги (+короткие +альтернативный синтаксис)

    2. объяснить поведение include-require + once

  2. "Типы данных, переменные

    1. перечислить все типы данных (7)

    2. инициализация массива (новый и старый синтаксис, ассоциативный и последовательный)

    3. правила именования переменных в php

    4. как работают и зачем нужны ссылки на переменные (можно на примере preg_match)

  3. Глобальные переменные

    1. какие существуют предопределенные (перечислить все, объяснить в какой что хранится)

  4. Выражения и операторы

    1. что такое выражение (определение)

    2. что такое арность с примерами (унарный, бинарный, тернарный + с сокращенным синтаксисом)

    3. условные операторы и циклы

    4. как работает $$

  5. Побитовые операторы

    1. объяснить как работает объединение флагов при вызове error_reporting (самому написать проверку наличия двух флагов в аргументе)

  6. Функции

    1. синтаксис

    2. ограничения типов аргументов, что будет если передать не тот тип

    3. аргументы по умолчанию

    4. анонимные функции: зачем нужны + пример

  7. Классы

    1. каким оператором можно проверить тип

    2. что такое класс

    3. что такое объект

    4. что может быть членом класса

    5. что такое инициализация

  8. Отображение ошибок

    1. где в php / apache / битриксе управлять отображением (конкретные параметры и функции) ошибок (с приоритетами)

    2. где искать логи ошибок на сервере

  9. Авторизация на сайте

    1. написать авторизацию на чистом php

    2. три отличия хеш-функций от функций шифрования

Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей

Junior

Junior способен решать задачи самостоятельно. Он часто советуется со старшими, но вопросы он задает совсем не стажерские.

Что практически должен уметь Junior на старте:

  • переписать (а значить досконально понимать) авторизацию на сайте;

  • уверенно править настройками и кодом фреймворка работу каталогов, ленты новостей, формы;

  • собирать простые интерфейсы управления данными и целые сайты на фреймворке;

  • писать простую интеграцию с внешним API.

Покажем что должен знать Junior веб-разработчик по SQL. 

  1. Select со всеми конструкциями, включая Join

    1. синтаксис select-а (смысловой порядок)

    2. второй способ выбрать данные из нескольких таблиц кроме join и почему его не надо использовать

    3. where-having

    4. limit

    5. вывести для каждого пользователя количество групп в которых он состоит

  2. Типы данных MySQL

    1. перечислить все типы

    2. разница в хранении

  3. Типы join-ов

    1. продемонстрировать работу двух основных типов join-ов на таблицах (хуже на кружках)

    2. что такое cross join"

  4. Типы таблиц Mysql

    1. транзакции (где есть, зачем нужны, как запустить/завершить/отменить)

  5. Применение Alter

    1. как переименовать таблицу

    2. как задать значение по умолчанию для столбца

  6. Отношение многие ко многим

    1. как реализуется на физическом уровне

  7. Индексы, оптимизация

    1. проведите аналогию с реальным миром: бд = библиотека, что будет индексами?

    2. на какие типы данных можно создавать

    3. тебе нужно самому запрограммировать индексы: primary, unique, index какие переменные/структуры данных для этого нужны

    4. почему в CIBlockElement::GetList нужно обязательно указывать IBLOCK_TYPE (см. cookbook по инфоблокам)

  8. Работа с СУБД в консоли

    1. как указать логин и пароль из консоли

    2. как выбрать бд при подключении и как сменить после

    3. посмотреть список всех процессов бд (кто висит)

    4. вывести список баз и список таблиц в базе

Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей


Middle

Middle – специалист, который способен решить сам любую типовую для отрасли задачу. Что практически должен уметь Middle на старте:

  • работать с внешней авторизацией (войти через внешний провайдер или сделать свой код провайдером авторизации);

  • уверенно программировать интерфейсы интернет-магазинов или интранет-порталов (в зависимости от специфики);

  • собирать сложные интерфейсы управления данными и разделы на фреймворке;

  • писать сложные интеграции с внешним API, реализовывать веб-сервисы.

Вот что спрашивают наставники на уровне middle по Javascript

  1. ООП в JS

  2. Работа с JS фреймворком кроме JQuery (d3)

  3. Работа с БЭМ

  4. Front-end оптимизация

  5. Написание своего плагина для jQuery

  6. NPM

    1. зачем нужен

    2. основные команды (установка/обновление/запуск скрипта)

    3. package.json: зачем нужен, какой параметр отвечает за точку входа, как описываются скрипты/команды

  7. Современные фреймворки

    1. опыт работы с react/vue

    2. управление состоянием: объяснить 3 основных принципа redux

Полную версию матрицы компетенций вы получите, если “поделитесь” статьей в своем аккаунте в соцсети (не менее 10 друзей, запись не нужно удалять и делать “закрытой”). Поделитесь и заполните форму под статьей


Senior

Senior знает “свой стек” досконально, с готовностью изучает и применяет новые технологии, и работает как наставник. Вот например, что сам Senior должен знать и уметь по блоку “Работа с серверами и Linux”.

  1. Сборка нетиповой системы выкатки изменений

  2. Работа с микросервисами.

  3. Организация нагрузочного тестирования

  4. Настройка continuous integration

  5. Синхронизация файлов и репликация данных

  6. Сборка отказоустойчивого и высоконагруженного кластера на Bitrix Framework и без него.

  7. ELK / другие системы логирования и аналитики

  8. Серверы очередей Gearman / RabbitMQ и построение распределенных систем

Как правило, Senior играет роль технического лидера группы разработчиков.


Architect

Архитектор – следующий уровень развития специалиста, когда он продумывает архитектуры крупных проектов и руководит их реализацией. Он не только технический, но и проектный руководитель.

Такие специалисты играют ключевую роль в технически и организационно сложных проектах.

Качество архитектора определяет способность проекта выполняться в срок и развиваться много лет подряд.

Управление развитием программиста

Каждый месяц с каждым программистом индивидуально мы проводим «планерку по развитию» и разговор на другие темы о работе. Участвуют руководитель отдела, техлид и/или наставник.

Во время таких встреч мы вместе определяем приоритеты развития — сдать лабораторную, экзамен 1С-Битрикс или устный экзамен по нашим компетенциям.

Как устроена проверка уровня (аттестация) в ИНТЕРВОЛГЕ?

Что такое «аттестация»?

Это процедура подтверждения квалификации программиста. Ее проходят все программисты компании.
Аттестация включает лабораторные работы и устные экзамены.

В результате аттестации в вашей матрице компетенций появляются “Да” напротив подтвержденных компетенций. От этого увеличивается ваш грейд, например, «Стажер-54%» → «Junior-27%».


Зачем нужна аттестация?

  1. Возможности компании зависят от вас. Мы хотим, чтобы вы приобретали навыки, которые приносят наибольшую пользу для наших клиентов.

  2. Ваша зарплата растет вместе с квалификацией. Мы измеряем квалификацию с помощью матрицы компетенций. Чтобы ЗП была повышена, нужно подтвердить квалификацию.

  3. Интересные задачи – это сложные задачи. Повышение уровня позволит работать самостоятельнее и решать сложные задачи.

Как проходит аттестация?

Аттестация включает теорию (устный экзамен) и практику (лабораторные работы). Цель – “закрыть” несколько компетенций в матрице, подтвердить уровень, получить новые задачи и повысить зарплату.

Наши практические задания можно сделать правильно только если изучить и понять теорию. Списывать и хитрить у нас не принято, и наставник не пропустит халтуру.

Многие блоки матрицы компетенций закрываются практикой и теоретических вопросов по ним нет.

Теория. Устный экзамен

Компетенции, не покрытые лабораторными работами нужно подтвердить на устном экзамене.

По каждой компетенции мы задаем около 5 вопросов. По-хорошему ответить надо на все или почти все. Длительность устного экзамена зависит от уровня, обычно это 1-2 ч.

Практика. Лабораторные работы

Лабораторная работа покрывает сразу несколько компетенций. После выполнения лабораторной работу эти компетенции засчитываются как подтвержденные и не попадают в устный экзамен.

Лабораторная работа завершается отчетом. Отчет может включать демонстрацию чего-либо, код-ревью, устные вопросы. Набор проверок зависит от самой лабораторной.

Примерные формулировки заданий

Мы разработали около 20 заданий лабораторные работы. Несколько – опубликуем. 

Вот примеры простых заданий.

Задание 2а. Базовый web на PHP, CRUD.

Компетенции:

  • PHP: Аутентификация и авторизация на сайте

  • PHP: Обработка форма обратной связи с сохранением данных и валидацией

  • Фронт: Создание форм на html

  • Фронт: Синтаксис и селекторы CSS, общее представление о весах селекторов

  • SQL: Основы Mysql

  • SQL: Типы данных

  • PHP: Синтаксис языка PHP

  • Оформление кода (локальный документ)

Суть:

  • завести репозиторий на bitbucket и выполнять в нем;

  • сразу сделать ветку и pull request;

  • в PhpStorm установить плагин Statistic , максимальное кол-во строк на всю лабу — 1500 (см. столбец Source Code Lines, на скриншоте ниже — 862):

  • через PhpStorm создать необходимые таблицы и заполнить их данными;

  • сделать страницу аутентификации;

  • сделать страницу с формой обратной связи, на которой есть: текстовое поле, многострочное текстовое поле, радиокнопки, флажки, выпадающий список, кнопка сброса формы, кнопка отправки формы;

  • форма обратной связи доступна только авторизованным пользователям, критерий допуска - вход в систему выполнен;

  • все красиво сверстать, показать пример использования основных типов селекторов: id, class, attribute, pseudo-class, pseudo-element;

  • обе формы должны обрабатываться без JS;

  • проверить через PhpStorm, что данные добавляются в таблицу.

Проверка:

  • проверяется качество декомпозиции php, js, css;

  • умение выделить ответственность и установить правильные зависимости между компонентами MVC/ECB;

  • безопасность (доступ);

  • безопасность (XSS, SQL injection);

  • корректность редиректов;

  • единство стиля оформления кода.

Развитие задания

Задание 2б. Базовый web на PHP, CRUD (часть 2).

Компетенции:

  • 3 способа подключения скрипта

  • Создание форм на html

  • Синтаксис и селекторы CSS, общее представление о весах селекторов

  • JS: операторы, функции

  • Отладка JS с помощью консоли браузера

  • Основы Mysql

  • Типы данных

  • TODO: оформление кода

Суть — продолжаем работу над сайтом из задания 2а:

  • сделать мини-админку:

    • список отправленных форм обратной связи;

    • список должен быть отсортирован по дате отправки, новые - сначала;

    • список можно “обновить”, это делается с помощью AJAX;

    • совет: для интерактивного тестирования запросов к БД используйте консоль БД в PhpStorm;

    • отправленную форму можно удалить из админки, все на AJAX;

    • таким образом продемонстрировать все способы подключения JS;

    • отправленные данные можно отредактировать (использовать уже разработанную форму, без AJAX);

    • можно использовать jQuery.

  • открыть инструменты разработчика (желательно Firefox):

    • найти источник запроса из лога запросов;

    • установить точку останова, спровоцировать выполнение кода, изучить пошаговое выполнение кода;

    • во время пошагового выполнения просмотреть значения переменных через соответствующий инспектор;

    • добавить watch;

    • воспользоваться консолью для доступа к переменным в текущей области видимости.

Проверка:

  • проверяется качество декомпозиции php, js, css;

  • умение выделить и установить правильные зависимости между компонентами MVC/ECB;

  • безопасность (доступ);

  • безопасность (XSS, SQL injection);

  • единство стиля оформления кода;

  • все пункты по использованию инструментов разработчика продемонстрировать.

Вот пример “средней сложности”

Задание 10. Парсинг сайтов

Компетенции:

  • Регулярные выражения

  • HTTP-запросы с сервера, cURL

  • TODO: написание консольных утилит (и одноразовых скриптов) на кодовой базе Bitrix Framework

  • TODO: добавить CRON

Суть:

  • Проанализировать сайт, продумать структуры данных, пригодные для автоматизированной обработки

  • Распарсить сайт _______ в эти структуры 

  • Оформить в виде CLI-скрипта

  • Настройками реализовать возможность парсить не все подряд, а только то, что нужно пользователю

Проверка:

  • корректность CLI-окружения

  • декомпозиция регулярных выражений

  • экономичность по запросам

  • обработка ошибок

  • возможность параллельного парсинга нескольких объектов сразу

  • Работа в консольном и интерактивном режиме

  • *работа в режиме внешнего сервиса, доступного по HTTP, с поддержкой очередей

Все “лабораторные работы” с методикой их выполнения и проверки доступны нашим сотрудникам .

Путь по “матрице” через лабораторные и экзамены гарантирует профессиональный рост! Подробный путь развития программиста мы описали ранее в статье


Итого

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



Оцените статью:
Я «поделился» статьей, прошу прислать файл

Вы можете войти, используя аккаунт одной из социальных сетей