Система грейдов разработчиков — теоретический материал — книги

developer and books

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

  • Первое, самое главное, это Обмен опытом. Книги могут служить основой для обсуждений и обмена опытом в команде. Это помогает создать общий язык и поддерживать единое видение разработки. 
  • Обновление технических знаний. Развивающиеся технологии требуют от нас постоянного обучения. Чтение книг по новым языкам программирования, фреймворкам и подходам помогает нам оставаться в курсе последних тенденций и инноваций.
  • Улучшение навыков разработки. Книги о лучших практиках, паттернах проектирования и оптимизации кода могут предложить ценные уроки и инсайты, которые могут привести к улучшению качества нашего программного продукта. 
  • Понимание процессов разработки. Книги, посвященные методологиям разработки, таким как Agile, Scrum, DevOps, помогут нам лучше понимать и организовывать процессы в команде. Это способствует более эффективной работе, управлению временем и улучшению коммуникации
  • Развитие лидерских навыков. Книги о личном развитии и мотивации могут помочь в преодолении трудностей, укреплении самодисциплины и достижении личных и профессиональных целей

У каждого опытного разработчика, тим-лида и дехдира есть свой собственный субъективный список книг, поскольку невозможно охватить все литературные произведения. Ниже я хочу поделиться своим опытом и классификацией книг по уровням грейдов, учитывая необходимость конкретных произведений на каждом из этих уровней. Книги с более сложными темами предполагает наличие более глубокого опыта и высоких навыков (уровней).

  • Грейды фул-стек разработчика (PHP + MySQL + JS)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерPHP 7 в подлиннике – Дмитрий КотеровMySQL по максимуму. 3-е издание — Шварц Б.Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды фул-стек разработчика
  • Грейды бэк-енд разработчика (PHP + Laravel + Codeigniter + MySQL)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)Сеньор++
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерPHP 7 в подлиннике – Дмитрий КотеровMySQL по максимуму. 3-е издание — Шварц Б.Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

От нуля к единице —
Питер Тиль, Блейк Мастерс
из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды бэк-енд разработчика
  • Грейды фронт-енд разработчика (JS + React)
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерСовременный учебник JavaScript (https://learn.javascript.ru)JavaScript для профессиональный веб разработчиков — Н. Закас,
ECMAScript 6 для разработчиков — Н. Закас
Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды фронт-енд разработчика
  • Грейды android разработчика
Джуниор+Джуниор++МидлМидл+Мидл++
Сеньор
Сеньор+ (тимлид)
из раздела «Разработка»Программирование без дураков – Катрин Пассиг,  Йоханнес ЯндерAndroid Programming: The Big Nerd Ranch Guide, 5th Edition ENG
Или на русском
Android. Программирование для профессионалов. 4-е издание
Android UI Development with Jetpack Compose — Thomas Kunneth
Или на русском
Kotlin в действии, Исакова Светлана, Жемеров Дмитрий
Чистый код — Роберт МартинСовершенный код. Мастер-класс – Стив Макконнелл

Первый среди равных — Майстер, Маккейн


Чистая архитектура — Роберт Мартин

из раздела «Личностный рост»Постигая Agile — Дженнифер ГринПрограммист-фанатик – Чед ФаулерRemote. Офис не обязателен — Джейсон ФарйдПиши, сокращай — Максим Ильяхов7 навыков высокоэффективных людей — Стивен КовиЧистый Agile — Роберт МартинПуть программиста – Джон Сонмез
Грейды андроид разработчика

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

Система грейдов разработчиков — программист на android

android developer

Ранее рассмотренные темы: грейды общими словами, хард-скиллы, грейды full-stack и back-end разработчиков, грейды front-end программистов

Взглянем на последний пример: грейды android разработчика с языками: Java, Kotlin

Итак, с разбивкой по уровням

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Средний уровень знания в следующих технологиях  и инструментах: Kotlin  / Git / Android SDK
  • Базовое понимание Activity, Service, Broadcast Receiver, Content Provider

Комментарии: по сути, это основы. С чего начинают android разработчики приложений.

  1. Джуниор++
  • Разбирается в основном проекте
  • Начальные знания языка Java
  • Сильная экспертиза в следующих технологиях  и инструментах:
  • REST API, Firebase, ViewModel, Lifecycle, coroutines, Retrofit, Okhttp, Room, Flow / RxJava, xml

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в android разработку. Разбираемся в самых необходимых библиотеках и подходах. Изучаем Java (уже считается легаси)

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Помощь менеджерам в формировании более полных требований с технической точки зрения  
  • Уверенное знание Java и Kotlin
  • Сильная экспертиза в следующих технологиях  и инструментах: Dagger 2, Hilt, MVI, MVC / MVP / MVVM
  • Базовое понимание Compose
  • Создание модулей Dagger 2 или Hilt,
  • Создание архитектурных компонентов в связке ViewModel + View или Presenter + View

Комментарии: Мидл разработчик должен обладать более высокими компетенциями, чем Джуниор. Он может принимать «решения». Например, разрабатывать архитектуру новых экранов с процессами. Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. Владеет более сложными технологиями. Значительно углубляемся в основные языки. Применяет подходы на практике

  1. Мидл+
  • Приличная экспертиза по непрофильным android проектам. Уверенное выполнение задач
  • Сильная экспертиза в следующих технологиях  и инструментах: Android Jetpack, Gradle 
  • Уверенное знание Compose, Recomposition, State
  • Созданы оптимизированные сборки приложений, с использованием инструментария обфускации ProGuard
  • Знание и применение Unit тестов
  • Придерживается принципов программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: Еще глубже погружаемся в разработку. Работаем с пакетными менеджерами и сборками. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из непрофильных продуктов на уровне чтобы передать знания
  • Сильная экспертиза в следующих технологиях  и инструментах: Android runtime (art) and dalvik, Application security, Memory Management
  • Умение использовать функционал Window Manager, Package Manager, Telephony Manager и Native C/C++ Libraries
  • Необходимо выполнить одно из условий: «Написать таск с использованием HWAddressSanitizer» ИЛИ «Создать сервис по анализу и оптимизации расхода памяти» ИЛИ «Провести оптимизация приложения с использованием garbage collection»
  • Выполненное условие должно привести к количественной оптимизациии в минимум 20%. Например, сервис оптимизирует количество запросов за одную сессию, уменьшив их на 20%. Или количество используемой оперативной памяти снижено на 20%.
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: Более сложные технологии для android, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать. Огромная польза от ускорения приложений

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах: Graphics architecture (Canvas, Custom View)
  • Написан новый крупный компонет или приложение. Или сделан рефакторинг крупного приложения.
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: преодолеваем новый рубеж (сеньор), усложняются требования, увеличивается отдача от программиста. В теории, можно изучить все предыдущие технологии и даже чуть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться сеньором. Так же, данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях и инструментах: Multi-module architecture, HIDL
  • Создан модульный компонент приложения
  • Написана статья об этом компоненте на общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. А так же социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Сильная экспертиза в следующих технологиях и инструментах: Hardware abstraction layer, AIDL
  • Создана полезная для проекта библиотека для Java/Kotlin приложений, опубликована на GitHub или аналогичном ресурсе
  • Написана статья об этой библиотеке на общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Наставничество: ученик был повышен с Мидла до Мидла++

Комментарии: еще больше взаимной пользы. И программисту и компании

Система грейдов разработчиков — front-end программист

front-end developer

Посмотреть наши предыдущие статьи по рейдам можно тут: грейды общими словами, хард-скиллы, грейды full-stack и back-end разработчиков

Тут мы рассмотрим грейды фронт-энд разработчика со стеком технологий:

  • Javascript, Sass, React, Redux, Chromium браузерные расширения

А теперь — подробнее и с различением по уровням

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Сильная экспертиза в следующих технологиях и инструментах: html, css
  • отличное владение функционалом препроцессора sass, использование css Variables
  • Верстка: респонсивная, адаптивная, кроссбраузерная, pixel-perfect верстка
  • базовое знание css анимаций, понимание принципа «mobile first»
  • Средний уровень знания в следующих технологиях  и инструментах: JavaScript, bootstrap, jQuery

Комментарии: по сути, это основы. С чего начинают фронт-енд разработчики веб-сайтов. Хорошая и эффективная верстка

  1. Джуниор++
  • Разбирается в основном проекте
  • Сильная экспертиза в следующих технологиях и инструментах: JavaScript (знание особенностей работы в браузером окружении, работа с DOM) , Redux, Git
  • Понимание следующих терминов/концепций: Иммутабельность, Чистая функция, Рекурсия, Замыкание
  • Уверенная работа с инструментами разработчика в браузере (dev-tools)
  • Средний уровень знания в следующих технологиях  и инструментах: React, webpack, gulp (на уровне настройки существующей сборки)

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в front-end. Конфигурация сборок проекта

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Помощь менеджерам в формировании более полных требований с технической точки зрения.
  • Понимание устройства и работы браузерных расширений. 
  • Создание React Component-ов, рефакторинг существующих компонентов.
  • Продвинутая работа с состоянием приложений: написаны состояние и экшены для целой страницы или крупной фичи. 
  • Сильная экспертиза в следующих технологиях  и инструментах: React (классовые/функциональные компоненты, жизненный цикл компонентов, использование возможностей стандартных хуков библиотеки react), redux-thunk, webext-redux

Комментарии: Мидл разработчик подразумевает более высокие компетенции, чем Джуниор. Он может принимать «решения». Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. И владеет более сложными технологиями. Значительно углубляемся в основную технологию — React. Причем, с практической точки зрения.

  1. Мидл+
  • Приличная экспертиза в Frontend части одного из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • Написать кастомный React Hook, который используется в проекте.
  • Написана статья в Confluence об используемых ранее технологиях (разбор типичных ошибок, практики хорошего кода)
  • Сильная экспертиза в следующих технологиях и инструментах: React Hooks (написание кастомных хуков, оптимизация рендера компонентов — ускорение загрузки, уменьшение вычислительных затрат), 
  • webpack, gulp (на уровне самостоятельной разработки сборки проекта и автоматизации процессов), babel
  • Придерживается принципам программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: Еще глубже погружаемся в фронт-энд. Документируем опыт. Работаем с пакетными менеджерами и сборками. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из эко-системных продуктов на уровне чтобы передать знания
  • Опыт в оптимизации загрузки страниц сервиса. Понимание SSR & CSR в контексте оптимизации загрузки. 
  • Оптимизирована скорость загрузки (уменьшена в 1.5-2 раза) одной из ключевых точек проекта (страница).
  • Продвинутая работа с css/js анимациями. 
  • Сильная экспертиза в следующих технологиях и инструментах: Vue.js, Service Worker, Web Worker 
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: Более сложные технологии front-end, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать. Огромная польза от ускорения сервисов

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Написан новый крупный компонент (соизмеримый с проектом из микро-сервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен на 2 грейда
  • Сильная экспертиза в следующих технологиях и инструментах: SSR, CSR, SSG (знание плюсов, минусов, умение правильно выбрать подход для конкретного случая)
  • Понимание работы разных сетевых протоколов (HTTP, WebSocket)
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: преодолеваем новый рубеж (сеньор), усиливаются требования, увеличивается отдача от программиста. В теории, можно изучить все предыдущие технологии и даже суть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться сеньором. Так же данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: Node.js, Создание npm пакетов
  • Создан полезный для проекта npm-пакет, который используется в нашем проекте.
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или что-то подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем не совсем профильные, но очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. А так же социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Создано несколько полезных для проекта npm-пакетов, которые используются в нескольких проектах из микро-сервисной архитектуры
  • Сильная экспертиза следующих технологиях и инструментах: Node.js, koajs, mySQL, Jenkins

Комментарии: еще больше взаимной пользы. И программисту и компании

Система грейдов разработчиков — back-end программист

back-end developer

Ранее, мы исследовали грейды в общем, порассуждали про хард скиллы и рассмотрели пример грейдов фулл-стек программиста.

В этой статье, нас интересуют грейды бэк-енд разработчика

Пример основного стека:

  • язык: PHP, Laravel, Codeigniter (язык программирования и фреймворки на нем: новый, современный и старый, легаси)
  • Основная база данных: MySQL, дополнительные: Sphinx, Redis
  • Сервера Linux, Nginx, PHP-FPM, Docker

А теперь — подробнее и с различением по уровням:

  1. Джуниор

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+
  • Базовые знания composer и фрейворк Laravel (на примере оформления цикла жизни http запроса)
  • знание git, gitflow, 
  • навыки работы с консолью linux

Комментарии: предполагается, что Laravel — основной фреймворк, на котором разрабатываются все новые задачи. Ну а систему контроля версий, тоже, нужно знать как можно раньше

  1. Джуниор++
  • Продвинутые знания Laravel: джобы, гейты, политики, посредники, composer пакеты, продвинутые знания в ОРМ в части родительских и полиморфных связей), 
  • знание Codeigniter на примере цикла жизни http запроса, включая основы безопастности передачи данных
  • понимание принципов юнит тестирования, архитектуры тонких контроллеров, принципов проектирования rest api

Комментарии: более сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать.

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Принимать архитектурные решения. Связка 2 и больше таблиц для решения поставленных требовании
  • Нереляционная база данных, кеширование, Redis
  • юнит тестирование
  • понимание значения индексов MySQL, умение писать оптимальные сырые запросы (без ORM)

Комментарии: программист на уровне Мидл должен быть выше Джуна принципиально. Он может принимать «решения». Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. И владеет более сложными технологиями. Так как на этом грейде, речь была про архитектуру, добавляем хорошее знание баз данных.

  1. Мидл+
  • Приличная экспертиза в одном из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • грамотное применение паттернов проектирования, 
  • работа с Docker, Docker-compose
  • хорошая база знаний чистого php (не в рамках фреймворков)
  • Придерживается принципов программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: полезные, современные бэкэнд технологии. Алгоритмы. Оптимальный код Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из эко-системных продуктов на уровне чтобы передать знания
  • описание и дополнение статей  лучших практик в рамках проектов компаний
  • знание Manticore (Sphinx)
  • Jenkins (сборка проектов)
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: еще больше полезных и сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Так же подымаются вопросы сборок, релизов, CI/CD

  1. Сеньор
  • Не менее 5 лет работы в программировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах:
  • Linux server console / Nginx config
  • Написан новый крупный компонент (соизмеримый с проектом из микро-сервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: новое серьезное достижение (Сеньор), усиливаются требования, увеличивается отдача от программиста. В теории, можно изучить все предыдущие технологии и даже чуть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться Сеньором. Так же данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: создание Composer-пакетов
  • Написан необходимый Composer-пакет для одного из наших модулей (или блока, который необходимо выделить в модуль). Подключение в нашем проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем профильные, очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. А так же социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Знание работы ядер фреймворков, задействованных в компании
  • Сильная экспертиза в CI/CD. Внедрение промывных процессов в разработке
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Выступление на айти конференции от лица компании по актуальной теме, на этом грейде или ранее

Комментарии: Уровень «бог программирования». Лидер мнений в компании и айти сфере. Еще больше взаимной пользы: и программисту, и компании

Система грейдов разработчиков — full-stack программист

full-stack developer

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

Пришло время посмотреть реальные примеры грейдов хард-скиллов программистов.

В этой статье «под прицелом» фулл-стек разработчик со стеком технологий:

  • Бэкенд: PHP, Laravel, Codeigniter (язык программирования и фреймворки на нем: новый, современный и старый, легаси), MySQL
  • Фронтенд: JS, React (основная библиотека), Vue.js (так же используется)

А теперь — подробнее и с различением по уровням

  1. Джуниор.

Комментарии: принимаем на этот уровень новичков без значимого опыта. На этот уровень не подымаются по системе грейдов.

  1. Джуниор+

Необходима сильная экспертиза в следующих технологиях  и инструментах: HTML / CSS / Sass / JS / Jquery / Bootstrap / Git

Комментарии: по сути, это основы. С чего начинают разработчики вебсайтов. Ну а систему контроля версий, тоже, нужно знать как можно раньше

  1. Джуниор++
  • Разбирается в основном проекте
  • Сильная экспертиза в следующих технологиях  и инструментах: PHP / Composer / PhpShtorm / MVC / Codeigniter / REST API

Комментарии: чтобы подняться на этот уровень, начинаем углубляться в бэкенд. Основной пакетный менеджер, среда разработки, более легкий фреймворк, его архитектура

  1. Мидл
  • Разбирается в основном проекте на уровне, что может пояснять бизнес процессы коллегам
  • Принимать архитектурные решения. Связка 2 и больше таблиц для решения поставленных требований
  • Помощь менеджерам в формировании более полных требований с технической точки зрения  
  • Сильная экспертиза в следующих технологиях  и инструментах: mySQL, postgresql, Laravel and Codeigniter ORM

Комментарии: Мидл разработчик подразумевает более высокие компетенции, чем Джуниор. Он может принимать решения. Например, разрабатывать архитектуру небольших приложений или «фичи». Так же, он более самостоятелен в работе и, постепенно, становится экспертом в своей области. Владеет более сложными технологиями. Так как на этом грейде, речь была про архитектуру, добавляем хорошее знание баз данных.

  1. Мидл+
  • Приличная экспертиза в одном из проектов из экосистемы (наряду с основным проектом), уверенное выполнение задач
  • Сильная экспертиза в следующих технологиях  и инструментах:
    • React (фронт основного проекта), npm, WordPress (например),
    • VueJS (фронт второго проекта)
  • Придерживается принципам программирования: YAGNI (You Ain’t Gonna Need It)

Комментарии: так как фул-стек программист должен знать и фронт-енд, то глубже погружается в него. Там же пакетый менеджер, без которого, серьезные вещи значительно сложнее реализовать. Экспертиза мидлов не ограничивается кодированием, т.е. активно применяет общепринятые принципы программирования и чистого кода

  1. Мидл++
  • Разбираться в бизнес-процессах одного из экосистемных продуктов на уровне чтобы передать знания
  • Сильная экспертиза в следующих технологиях  и инструментах: Laravel (сервисы, обработчики очередей, консольные команды, мидлвары, реквесты и валидация)
  • Знакомство и способность редактировать: Jenkins(сборка проектов), Gulp / Webpack для сборки и автоматизации сборок
  • Придерживается принципам программирования: KISS (Keep It Simple, Stupid)

Комментарии: Более сложные технологии бэкенда, которые увеличивают гибкость реализации задач. Вопросы хорошего кода, безопасного и понятного кода, который легко поддерживать. Так же подымаются вопросы сборок, релизов, CI/CD

  1. Сеньор
  • Не менее 5 лет работы в програмировании (включая предыдущий опыт)
  • Сильная экспертиза в следующих технологиях  и инструментах: Linux server console / Nginx config / Docker (для создания локальных сред)
  • Написан новый крупный компонет (соизмеримый с проектом из микросервисной архитектуры) или проект, или сделан рефакторинг крупного компонента
  • Наставничество: ученик был повышен с Джуна+ или Джуна++ до Мидла
  • Придерживается принципам программирования: DRY (Don’t Repeat Yourself)

Комментарии: преодолеваем новый рубеж (сеньор), усиливаются требования, увеличивается отдача от программиста. В теории, и за год можно изучить все предыдущие технологии и даже чуть попробовать их на практике, но без опыта, без большого количества рассмотренных задач, кандидат не сможет заслуженно называться сеньором (5 лет опыта в сфере). Так же данный грейд подразумевает наставничество. Кроме опыта самого разработчика, наставничество приносит большую пользу компании

  1. Сеньор+
  • Сильная экспертиза в следующих технологиях  и инструментах: Node.js, Создание Npm пакетов
  • Создан полезный для проекта npm-пакет, который используется в этом проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Занимается релизами в проекте над которым работают 2+ человек
  • Наставник 2+ человек, делает код ревью их кода
  • Придерживается принципам программирования: SOLID

Комментарии: добавляем не совсем профильные, но очень перспективные технологии, которые должны двинуть разработку за новые горизонты. Еще больше наставничества. Социальная активность от имени компании. Все в выигрыше.

  1. Сеньор++
  • Сильная экспертиза в следующих технологиях  и инструментах: создание Composer-пакетов
  • Написан необходимый Composer-пакет для одного из наших модулей (или блока, который необходимо выделить в модуль). Подключение в нашем проекте
  • Написана статья об этом компоненте или того же уровня в общедоступном айти ресурсе с большой аудиторией (habr или чтото подобное) от корпоративного аккаунта, на этом грейде или ранее
  • Наставничество: ученик был повышен с Мидла до Мидла++
  • Выступление на айти конференции от лица компании по актуальной теме, на этом грейде или ранее

Комментарии: еще больше взаимной пользы. И программисту и компании. Оптимизация кода. Уровень качества кода на профессиональном уровне.

Система грейдов разработчиков — профессиональные скиллы

Programmer hard skills

В целом, система трейдов была рассмотрена в статье Общие положения грейдов. 

А в этой статье, рассмотрим прогресс по знаниям разработчика в его профессии

  1. В общем

Самое полезное, что компания ждет от разработчика, — это его знания и опыт в выбранное профессии. Чем он опытнее, тем быстрее будет выполнять задачи. Тем самым, двигая прогресс компании и принося прибыть.

  1. Стеки технологий — специализация

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

Сперва разделим разработчиков на такие категории (наиболее часто встречающиеся):

  • Фронт-енд разработчик
  • Бэк-енд разработчик
  • Фул-стек разработчик
  • Разработчик десктопных приложения
  • Разработчик приложения под Android
  • Разработчик приложения под iOS

Но и теже Бекенд разработчики не знают всех бекенд языков (PHP, Python, Java, Go, Ruby, NodeJS, C# и многие другие) и технологий (Linux, Windows, Docker, Nginx, Apache, MySQL, PostgreSQL, MongoDB, MS SQL, GraphQL, React, Vue.js, Sphinx, Elastic Search, Redis, MQ Rabbit, Machine Learning и многие другие).

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

В следующих статьях будут примеры для PHP Бэк-енд разработчика (Linux + PHP + MySQL), Фронт-енд (JS, React, Node) и Android-разработчика, Фул-стек программиста.

  1. Общие концепции программирования

Но, есть такие технологии и концепции которые применяются во многих стеках или являются стандартном для любого стека

Это, например 

  • git, git-low, 
  • ООП, 
  • REST-Api, 
  • Agile, Scrum
  • YAGNI, KISS, DRY, SOLID 
  • Юнит-тесты
  • CI/CD
  • SSH
  • и многое другое. 

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

  1. Лидерство и наставничество

На самом деле, высокие грейды редко обходятся без наставничества и лидерства.

В качестве требования для перехода на высокие уровни (мидл++, сеньор), можно включать:

  • Наставничество: повышение ученика с X на Y уровень
  • Код-ревью и Релизы
  • Статьи во внутренних (локальная wiki, Confluence) или внешних источниках (Habr, форумы, сообщества, бумажные статьи в сборниках)
  • Выступления на конференциях от имени компании

5. Вопросы безопасности кода

Уже с малых грейдов, нужно знать как писать код, защищенный от основных атак и уязвимостей

Система грейдов разработчика — общие положения

junior developer

Зачем нужна система грейдов разработчиков ПО?

  1. Рано или поздно, полезным разработчикам повышают зарплату. Самые сложные вопросы: когда и на сколько повышать? Система грейдов должна отвечать на эти вопросы. Это, с точки зрения компании или руководителей
  2. А с точки зрения самих разработчиков, необходимы понятные критерии повышения уровня компетентности и вознаграждений
  3. Качественная система грейдов способствует скорейшему прогрессу программистов. Так же как и мотивации, заинтересованности в развитии компании

Какие грейды могут быть у разработчиков?

Все слышали о такой градации:

  1. Джуниор
  2. Мидл
  3. Сеньор

Но три уровня, это мало для полноценной системы грейдов. Поэтому прибегают к внутренним грейдам или под-уровням. Например:

  • Джуниор
  • Джуниор+
  • Джуниор++
  • Мидл
  • Сеньор+
  • Сеньор++

Как часто можно повышать грейды?

Это один из самых интересующих разработчика вопросов. Тут нужно выбрать баланс для компании и разработчиков. Неплохим вариантом будет: пол-года. Пол-года — это время, за которое разработчик, действительно, может «подрасти». Можно сделать промежуток времени «плавающим», например, первые грейды — через пол-года, последние — через год.

Кандидат может провалить защиту на следующий грейд. Нужно предусмотреть сколько минимум время нужно закладывать на очередную защиту по грейду. Могу предложить — 3 месяца

Испытательный срок, если он есть, обычно не входит в рассветы времени до следующего грейда.

На сколько будeт расти зарплаты?

Можно отталкиваться от минимальной зарплаты (на уровне Джуниора) и максимальной (Сеньор++). А далее равномерно распределить увеличение между уровнями.

Финансовый рост при переходе по «внутренним» грейдам (Мидл, Мидл+) может быть менее значителен, чем на новый основной грейд (Мидл, Сеньор). А еще, рост внутри уровней Сеньора может быть больше, чем Мидла. А внутри Мидла — больше чем внутри Джуниора.

Какие основные критерии для перехода на новый уровень?

  1. Конечно же скилы (hard skills). 

Другими словами, знания в технологиях, применяемых в компании или планируемых к применению в ближайшем будущем

Конкретная градация скиллов сильно зависит от используемого стека технологий. 

Каждый новый грейд включает в себя скиллы предыдущих. Т.е. необходима экспертиза по технологиям из всех нижестоящих грейдов

Рассмотрим подробнее в следующих статьях

  1. Повышающаяся продуктивность (полезность компании)

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

  1. Здоровые отношения в коллективе (это можно узнать у кадровика или самостоятельно наблюдать за кандидатом) и положительное влияние на атмосферу в коллективе (не приносит ли он больше вреда, чем пользы, не конфликтный ли)
  2. Прочитанные книги

Чем больше в кандидате теории, тем вариативнее будут принимаемые им решения.

Это могут быть книги как по разработки, так и по личностному росту или же процессам (опять таки, гибкие методологии или другие методологии разработки)

Книги лучше распределять по грейдам начиная от простых (и более подходящих для начальных грейдов) и заканчивая более сложными (и более соответствующими высоким грейдам). 

Подробнее рассмотрим в следующих статьях

Кто и как принимает решение о защите грейдов?

Ниже привожу один из вариантов «целостной картины»:

  • На защите, решение принимает, коллегиально: директор по разработке (тех дир), директор продукта (главный менеджер) и HR-директор (кадровик) и непосредственный руководитель.
  • Подтверждение скилов исходит от непосредственного руководителя (тем лид). Он может привести примеры проектов или фич, подтверждающие хорошее качество и необходимые знания
  • Кандидат на новый грейд информирует непосредственного руководителя о заинтересованности по переходу на новый грейд. Помогает руководителю сформировать базу кода, подтверждающую скиллы
  • Кандидат на новый грейд проявляет инициативу, чтобы получать задачи для подтверждения скиллов нового грейда
  • Грейды проходят последовательно, без пропусков. Исключение — когда взяли на работу на определенный грейд

Впечатления о книге — Чистый Agile — Роберта Мартина

Чистый Agile — Роберт Мартин

Сразу бы хотелось отметить, что книга не рассчитана на людей, которые с нуля (для таких ребят, советую начать с другой книги, представленной в моей статье) хотят разобраться в гибких методологиях, скорее, она (книга) для тех, кто уже успел опробовать какие то методологии и проявляет интерес к этой области. А еще лучше подойдет тем, кто сомневается, правильно ли организованы Agile процессы в команде, так как автор отмечает, что многие организации не понимают или внедряют методы не верно (что может только усугубить проблемы процессов).

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

Все началось со знаковой встречи семнадцати профессионалов разработки программного обеспечения в феврале 2001, чтобы поделиться своими мыслями по поводу эффективности разработки и, в итоге, сформировать Манифест Agile. И за два десятка лет понимание этих принципов претерпело изменения, по мнению автора, далеко не все положительные.

Мысли автора описаны в неформально-разговорном стиле, поэтому некоторые выражения могут показаться не совсем корректными. 

Книга не большая по объему, так как Agile — небольшая идея, предназначенная для решения небольших задач, поставленных небольшими командами программистов, которые выполняют небольшую работу. (Agile не рассчитан на решение крупных задач больших команд программистов, которые занимаются крупными проектами). Здесь представлены основные принципы Agile. И производные от Agile — это уже не сам Agile. Это дополненный Agile со своими опциями.

Вся суть Agile в четырех предложениях Манифеста:

  • Люди и взаимодействия важнее процессов и инструментов
  • Работающий продукт важнее исчерпывающей документации
  • Сотрудничество с заказчиком важнее согласования условий контракта
  • Готовность к изменениям важнее следования первоначальному плану

Автор отмечает интересный факт, что некоторые думают, что Agile способствует скорости выполнения проекта. Это не так. Agile никогда не ставил своей целью выполнить и сдать проект поскорее. Agile помогает вовремя понять то, где и насколько мы облажались. Другими словами, главная цель Agile — защита от самообмана, мы применяем Agile, точны избавиться от ложных надежд, которые в итоге приведут проект к краху.

По мнению Роберта Мартина наиболее подходящий метод Agile — метод экстремального программирования. Из всех методологий Agile это наиболее определенная, исчерпывающая и наименее запутанная методология. В книге этой методологии уделяется, непосредственно, много страниц. Некоторые другие важные методы: метафора, 40-часовая рабочая неделя, коллективное владение и непрерывная интеграция.

Один из наиболее важных методов экстремального программирования — разработка через тестирование. Ее можно описать тремя простыми правилами:

  • Не пишите готовый код до того, как напишите тест, который не получится пройти из-за нехватки этого кода
  • Не пишите тестов больше, чем это необходимо для неудачи, — сбой при компиляции также считается неудачей
  • Не пишите рогового кода больше, чем достаточно для прохождения теста, который был провален до этого

Еще один важный метод экстремального программирования — парное программирование. Многие отрицательно воспринимают мысль о том, что два (или более) человека могут плодотворно работать над одной и той же задачей. Однако, работа в паре не обязательна. Никого не стоит принуждать. А еще, работа в паре не обязательно постоянна. Существует много веских причин работать в одиночестве. Право выбора сколько времени работать в паре принадлежит членам команды, самим программистам.

В финале, хотелось бы отметить мысли автора по поводу нового Манифеста Agile, который дополняет оригинальный манифест и расширяет его с точки гения подхода Высшего мастерства разработки.

Являясь устремленными к совершенству мастерами разработки ПО, мы повышаем уровень профессиональной разработки ПО, делая это сами и помогая другим осваивать наше ремесло. 

Занимаясь этой деятельностью, мы прежде всего научились ценить:

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

Впечатление о книге — Грокаем алгоритмы — Адитьи Бхаргавы

Книга Грокаем алгоритмы Адитьи Бхаргавы

Сразу хочу поделиться мыслями:

  1. это книга рассчитана больше на неискушенных людей, у которых почти нету или мало опыта в программировании и алгоритмах (таких как сортировка, поиск оптимальных путей)
  2. тем не менее, она здорово расширяет кругозор в подобных алгоритмах и некоторых процессах, на которых построены алгоритмы известных технологий, таких как поиск в интернете или рекомендательные системы
  3. так же, издание дает пищу для размышления по поводу современных алгоритмов, машинного обучения и советует изучать определенные технологии для дальнейшего развития

Ниже приведены, освещенные в этом труде, понятия, алгоритмы и технологии

  • Бинарный поиск (в том числе в сравнении с обычным поиском перебором) и массивы. Хотя массив поиска должен быть отсортированным чтобы им пользоваться
  • О-большое — порядок времени работы алгоритма. Важное понятие для оценки эффективности (скорости работы) алгоритмов или сравнения разных алгоритмов
  • Задача о коммивояжере (как пример задачи, которую очень тяжело выполнить точно)
  • Связанные списки, как альтернативный массивам тип данных
  • Сортировка выбором
  • Рекурсия и стек (стек вызовов)
  • Быстрая сортировка (используется понятие алгоритма «Разделяй и властвуй» и рекурсия)
  • Хеши, Хеш-таблицы, Хеш-функции
  • Графы, Поиск в ширину для описка кратчайшего пути по графу (когда весов у ребер нету)
  • Алгоритм Дейкстры для поиска наиболее выгодного (быстрого) пути по графу (когда весы у ребер появляются)
  • Жадные алгоритмы, как быстрые, но приближенного решения сверх-сложных задач (NP-полных)
  • Множества
  • Динамическое программирование, как метод решения сложных задач с помощью разбиения на более простые
  • Шутливый Алгоритм Фейнмана (1 — сформулировать задачу, 2 — хорошенько подумать, 3 — записать решение)
  • Алгоритм k-ближайших соседей, как распостраненный метод решения многих задач классификации (распределение по категориям) и регрессии (прогнозирование ответа)
  • Извлечение признаков
  • Машинное обучение на примерах OCR, спам-фильтра, прогноза биржевых торгов

В последней главе книги вскользь (тезисно) касаются следующих тем

  • Возвращаемся к деревьям
  • Инвертированные индексы
  • Преобразование Фурье
  • Параллельные алгоритмы
  • MapRecude и распределенные алгоритмы
  • Фильтры Блума и HyperLogLog
  • Алгоритмы SHA и сравнение файлов
  • Алгоритм Диффи-Хеллмана
  • Линейное программирование

Вывод: книгу следует прочитать на начальном этапе ознакомления с современными алгоритмами или же для расширения кругозора

PHP foreach — как легко переполнить память даже с крошечным массивом

PHP foreach пример

Рассмотрим простой пример перебора элементов одномерного массива с 4мя элементами

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as $element) {
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

при выполнении все ожидаемо:

1234
[1,2,3,4]

Теперь, перейдем к какой то задаче с пользой, например, если встречается какой то элемент, необходимо добавить его копию в исходный массив

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as $element) {
    if ($element === 3) {
        $copy = $element;
        $elements[] = $copy;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

В результате получаем:

1234
[1,2,3,4,3]

А теперь, рассмотрим вполне реальную ситуацию, когда в цикле с элементами массива нужно что то сделать и сохранить это:

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
foreach ($elements as &$element) {
    // do something with every element
    if ($element === 3) {
        $copy = $element;
        $elements[] = $copy;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode($elements);

И вот тут мы сталкиваемся с проблемой похлеще рекурсии без предусмотренного выхода из нее:

123.....333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /php on line 7
PHP Stack trace:
PHP   1. {main}() /php:0

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in /php on line 7

Call Stack:
    0.0025     392288   1. {main}() /php:0

Это последствия передачи массива по ссылке

И лучше обойти это с помощью временного массива:

<?php
$elements = [1,2,3,4];
echo PHP_EOL;
$additionalElements = [];
foreach ($elements as &$element) {
    // do something with every element
    if ($element === 3) {
        $additionalElements[] = $element;
    }
    echo $element;
}
echo PHP_EOL;
echo json_encode(array_merge($elements, $additionalElements));

И, необходимый нам результат:

1234
[1,2,3,4,3]