Тема грейдирования программистов довольно болезненная. Градация на junior, middle и senior стала наиболее распространенным вариантом, видимо, как некий компромисс между готовностью среднего HR вникать в различия между профессиональными навыками разных технарей и потребностью среднего разработчика в карьерных ориентирах. Однако всем понятно, что три категории - это очень примерно, особенно учитывая, что редкие два человека имеют одинаковые представления о том, в чем заключаются конкретные отличия. Это нередко приводит к парадоксальным ситуациям, когда в коллективе есть категория более слабых разработчиков, которые по какой-то причине имеют более высокий грейд и, соответственно, зарплату. Так как такая инфа обычно так или иначе всплывает в коллективе, но редко доходит до руководства, то она накапливается в чувстве несправедливости по отношению к компании и разобщает команду.
Многие, понимая проблемы этой расплывчатой классификации, пытаются изобретать собственные системы. Вариантов, конечно, масса: начиная с отказа от разделения по грейдам в принципе и заканчивая четкими и подробными инструкциями с десятками карьерных ступеней, сопровождаемыми системой тестов и экзаменов. Однако, при описании вакансий 90% по-прежнему придерживается стандарта в виде senior-системы.
По моим наблюдениям, обобщенное мнение о критериях, по которым идет разделение между этими грейдами, выглядит примерно так:
Junior - человек, умеющий программировать логику на каком-либо языке, понимать отличия между типами данных и принципами безопасной работы с ними, разбираться в архитектуре несложных приложений. Младший разработчик не обязан уметь хорошо прогнозировать результаты своей деятельности. По сути, ответственность за его вклад в проект должен нести другой разработчик, назначенный руководителем. Из этого, кстати, следует правило, что нанимать на проект только джуниоров - плохая идея. Мысль кажется очевидной, но я встречал и подобные подходы.
Если обобщить, Junior не знает, что хорошо, а что плохо
Middle - это уверенный кодер. Он, как хороший швейцарский нож, многое умеет, надежен, предсказуем. Обладает опытом поддержки серьезных приложений в продакшене. Умеет более-менее точно оценивать сроки выполнения задач. Мидл уже должен отвечать за результаты своих действий, но не обязан принимать решения о глобальных изменениях в проекте и другие решения, которые подразумевают повышенную ответственность и максимальную осведомленность.
Можно сказать, что Middle знает, что хорошо, а что плохо
Senior - опытный разработчик, хорошо понимающий весь цикл разработки софта в знакомой ему области. Ему можно доверить как минимум техническое руководство и полную ответственность на критичном для бизнеса участке. Старший разработчик также должен понимать ожидания бизнеса от разрабатываемого софта и уметь принимать взвешенные решения, одновременно учитывающие разные факторы, как технические, так и бизнесовые или даже административные.
Иными словами, Senior решает, что хорошо, а что плохо
Как видите, рост подразумевается не только и даже не столько в знаниях и опыте, сколько в самостоятельности и количестве ответственности, которую человек способен на себя взять. Оттуда же вытекает важность софт-скиллов как навыков, позволяющих выгодно продемонстрировать себя окружающим.