Интерн - первый шаг на дорожной карте разработчика в Kolesa Group.
- Язык программирования (любой)
- Знание что такое PHP (Go, Python, Java, 1C и т.д. в зависимости от команды) и готовность его изучать
- Иметь бешеное желание стать Back-end разработчиком
- Стремительно развиваться
- Быть ответственным
- Уметь формулировать вопросы
- Уметь гуглить
- Взаимодействовать с членами своей команды
- Следовать внутренним правилам разработки программного обеспечения
Junior - это следующий шаг на дорожной карте разработчика. Разработчик становится полноценным членом нашей команды, который отныне имеет чёткие полномочия и обязанности. Обычно зона ответственности Junior специалиста - это задача или небольшой эпик.
- Язык программирования PHP (Go, Python, Java, 1C и т.д. в зависимости от команды)
- Базовый синтаксис
- Типы данных
- Базовые навыки вёрстки (CSS, HTML)
- Git (pull, commit, push, branch, checkout)
- ООП: объекты, классы, интерфейсы
- Понимание MVC
- Базовый синтаксис SQL (select, update, insert, delete)
- Linux
- Базовое понимание работы ОС: директории, пользователи
- Команды cd, ls, cat, mv, cp, rm, ssh
- Умение работать в окружении разработки по ssh
- Инструменты
- IDE (PhpStorm, VSCode, GoLand, IDEA, EDT для 1C)
- Клиенты MySQL (например: DataGrip, HeidiSQL, MySQL Workbench)
- Анализировать и уточнять требования к задаче
- Взаимодействовать с QA-инженерами
- Иметь желание делать лучший в мире продукт
- Исправлять баги
- Участвовать в codereview
- Писать unit-тесты
- Писать рекомендации к тестированию
- Соблюдать поставленные сроки
- Фреймворки (PHP, Go, Python, Java, 1C и т.д. в зависимости от команды)
- Формы
- Валидаторы
- Роутинг
- Файлы конфигурации
- Отладка кода
- echo, printf, var_dump (xdebug, clockwork для PHP)
- curl, postman
- Логирование
- Обработка ошибок
- Исключения
- Учёт негативных сценариев
- Linux
- Понимание работы ОС: процессы
- Установка ПО (apt или аналогичные команды на вашей ОС)
- ps, tail, grep
- консольный текстовый редактор (nano или vim)
- Взаимодействовать с другими командами разработки
- Исправлять причины багов
- Помогать команде в аварийных ситуациях
- Вносить правки в техническую документацию
- Понимание клиент-серверной архитектуры
- HTTP запросы и ответы, жизненный цикл запроса
- Роли клиента и сервера
- Linux
- df, du, free, top, htop, chmod, chown, scp
- запуск bash скриптов
- ООП: абстракции, инкапсуляция, полиморфизм
- Базовое знание NoSQL баз данных
- Elasticsearch
- MongoDb
- Базовое знание docker (pull, run, ps, rm)
- Знание структуры Dockerfile
- Использование инструментов мониторинга (Graylog, Grafana, Zabbix)
- Декомпозировать и планировать ход реализации задачи
- Улучшать кодовую базу проекта
- Информировать тимлида о проблемах, решение которых вне своей компетенции
- Сопровождать релиз своей задачи
Middle это серьёзный промежуточный шаг на дорожной карте разработчика. Middle разработчик - самостоятельная единица команды с четкими зонами ответственности и полномочий. Обычно специалист уровня middle влияет своей экспертизой на весь продукт и приносит существенный вклад в свой отдел.
- Рефакторинг: улучшение существующего кода
- Язык программирования:
- Опыт работы с популярными расширениями и библиотеками
- Опыт конфигурирования интерпретатора
- Паттерны проектирования:
- Внедрение зависимостей
- Порождающие паттерны
- Linux:
- systemd service unit
- полноценное знание bash
- SOLID и DRY
- Базовое понимание kubernetes
- Deployments, pods, services
- Просмотр информации об объектах kubernetes
- Инструменты:
- kubectl
- docker-compose
- cron
- Уверенное использование фреймворка вашего проекта (phalcon, symfony, yii, laravel)
- Базы данных:
- Оптимизация запросов, устранение лишних запросов
- Применение индексов
- Использование моков в тестировании
- Понимать как задача влияет на достижение целей бизнеса
- Участвовать в менторстве более младших по рангу разработчиков
- Устранять и предотвращать аварии
- Взаимодействовать с системными администраторами
- Проектировать крупные фичи
- Искать слабые места проекта
- Решать сложные баги
- Покрывать проект техническими метриками
- Написание надежного, расширяемого и тестируемого кода
- Выделение часто используемые фрагменты кода в библиотеки
- Расширение функциональности фреймворка
- Создание и изменение деплой/билд планов (CI/CD)
- Создание production ready docker образов
- Создание и изменение kubernetes манифестов
- Понимание и поддержка микросервисной архитектуры
- Дополнительный язык программирования (Go, Python)
- Elasticsearch (маппинг, индексация, поиск)
- Делиться знаниями, навыками, выступать на конференциях и/или писать статьи
- Находить простые способы решения задач
- Писать техническую документацию (swagger, confluence, readme.md)
Это последний рубеж на позиции Middle. На этом шаге вы должны стать более требовательными к себе, начать думать как Senior и поступать как Senior. От вас ожидается углубленное понимание технологий, описанных в предыдущих пунктах, а также больший уровень ответственности и инициативности.
- Паттерны проектирования
- Понимание Domain Driven Design (подразумеваем, что применит подход если будет строить архитектуру)
- Docker оркестрация, Kubernetes
- Чтение и редактирование Ansible плейбуков и ролей
- Понимание механизма транзакций, репликации, шардинга
- Понимание инструментов балансировки запросов (nginx, haproxy, envoy, ingress)
- Решать сложные задачи:
- с применением паттернов проектирования
- с покрытием разными видами тестов (интеграционные, нагрузочные)
- Делиться знаниями на внешних платформах (писать статьи, выступать на конференциях)
- Помогать в постановке сроков
- Оптимизировать и ускорять сборки проектов (CI/CD)
Senior - это ступень, подразумевающая очень высокий уровень технической экспертизы, ответственности и погружения в процессы бизнеса. Человек на этом уровне оказывает влияние своей экспертизой на всю компанию и весь технический департамент.
- Понимание взаимодействия сервисов и систем в компании и её продуктах
- Выявление и решение архитектурных проблем
- Понимание принципов взаимодействия компонентов Kubernetes кластера
- Принятие осознанных решений при выборе технологий
- Формирование технических метрик и контроль их значений
- Предлагать, защищать и внедрять инфраструктурные решения
- Проводить код-ревью и экспертизу качества кода
- Исправлять критические ситуации в обход стандартных процессов разработки
- Поддерживать качество, стабильность и производительность проектов
- Быть готовым решить аварийную ситуацию в любое время суток
- Знание принципов и опыт построения распределенных систем
- Создание сервисов, используемых несколькими проектами сразу
- Понимание внутреннего устройства систем хранения данных:
- mysql (понимать разницу MyISAM, InnoDB, XtraDB)
- mongodb (InMemory, WiredTiger)
- ceph
- elasticsearch
- Соблюдать баланс между архитектурными новшествами и достижениями целей бизнеса
- Давать экспертную оценку сроков в команде
- Оптимизировать архитектуру кода, работу с данными и сетью
- Поддерживать open-source библиотеки без ущерба для других обязанностей
- Принимать архитектурные решения для проектов
- Заменять тим-лида/тех-лида
- Осведомлённость о современных технологических трендах
- Внедрение инновационных подходов/технологий с учётом интересов бизнеса и технических рисков
- Опыт построения архитектуры нового проекта с нуля
- Выявлять и решать глобальные технические проблемы в рамках продуктов всей компании, в том числе прибегая к написанию собственного уникального ПО
- Полная техническая ответственность и контроль за качеством, стабильностью и производительностью сервисов
- Организовывать и управлять рабочей группой для реализации нового проекта
- Нести ответственность за техническую реализацию проекта
- Делать технические решения так, чтобы они могли стать самостоятельными продуктами