Долгое время работая в разных сферах ИТ, мы с исследовательской командой наблюдали все возможные проблемы становления разработчиков и все причины-следствия их дефицита. Нас интересовало: почему программист развивается в senior-специалиста так долго или вовсе им не становится? Откуда неоправданные ожидания с обеих сторон? И главное — что делать разработчику на каждом уровне, чтобы войти в привилегированную касту senior-ов, архитекторов, тимлидов и руководителей?
Мы провели обширное исследование среди программистов и их руководителей. Собрали требования к senior-разработчикам топовых компаний, возможности и пути к развитию до этого уровня, сгенерировали всевозможные инсайты и лайфхаки и трансформировали их в данную статью. Об всем этом и пойдет дальше речь.
Senior, who the f… is Alice Senior?
Анализ описания вакансий на hh и требований, которыми поделились руководители в очных беседах, показал — единого подхода к определению уровня senior нет. В одной компании это тот, кто способен сам спроектировать сложный модуль, в другой — подключиться к доработке отдельных решений, в третьей — тот, кто просто круче остальных. Внутри самих компаний требования также существенно отличаются у руководителей, тимлидов, HR и самих программистов.
В результате разработчики получают ряд проблем: без адекватного определения требований нет четкого видения карьерного пути и шагов развития. Вопросы: “Какой уровень у меня сейчас? Зарабатываю ли соразмерно ему? Много ли мне нужно апгрейдить до следующей ступени?” — мы слышим повсеместно.
Вместо планомерного развития приходится решать стандартные задачи, ждать внимания руководства, осваивать фреймворки, не понимая, продвинут ли они карьеру вперед. Советуем: при входе в компанию или прямо сейчас — узнавайте о требованиях не только к текущему уровню, но и к максимально высокому. Так вы получите перспективное видение развития и можете соотносить с ним каждый шаг.
Оценка программиста — дело рук самого программиста?
Ваше развитие зависит от того, на каком этапе вы сейчас. Но как это оценить? Это вторая проблема.
Из проведенных опросов были получены несколько инсайтов: 70% программистов уровней junior-middle пытаются оценить себя самостоятельно. Парадокс: чем ниже уровень оцениваемого, тем больше он оперирует собственными представлениями.
На начальных этапах отсутствует глубина знаний и широта кругозора — картина весьма ограничена. И такая оценка завышает представление о своем уровне в 86% случаев.
Рекомендуем: как можно раньше переключайтесь от “внутренних” способов оценки (собственное мнение, опыт) на “внешние” — сами запрашивайте фидбэк от руководителя, атакуйте наиболее опытных коллег, сравнивайте задачи и способы их решения, ходите на собеседования в топовые компании, где уровень требований выше и тестовая база лучше и т.д. Оценку руководителя обязательно нужно объективизировать результатами из альтернативных источников, чтобы не попадаться в ловушку ограничений текущих возможностей и требований компании/отдела/проекта.
Но есть путь короче. Мы сами сформировали список требований топовых компаний для senior-специалистов. И обнаружили серьезный лаг, который образуется между уровнями middle и senior.
Если вы не знаете, куда идете, то скорее всего окажетесь где-нибудь не там
Мы собрали требования и обнаружили, что не только хороший код превращает junior-специалиста в middl-а. На уровне junior программист должен освоить все необходимые технологии и способность в принципе решать типовые задачи, научиться писать код грамотно и быстро. На уровне middle-разработчика уже обязательны культура кода, способность мыслить глубже и шире, реализовывать более крупные задачи самостоятельно и уметь применять различные инструменты разработки.
Различие между middle и senior существенно тоньше. Именно здесь у разработчиков образуется лаг, преодолеть который самостоятельно под силу не всем. Это целый ряд навыков и личностных качеств, которые подразумеваются, но о которых никто не говорит четко: ответственность за большую часть разрабатываемой системы, менторство, способность самостоятельно формулировать и предлагать оптимальные технические решения, коммуникативные навыки и т.д.
Итак, кто же такой super-Senior? Чтобы формализовать требования, нам пришлось пройтись по максимуму и собрать воедино все, что предъявляют компании уровня Яндекс, Luxoft, Mail.Ru Group и даже Google в открытых источниках. А также верифицировали эту информацию в беседах с руководителями разработки именитых компаний.
Hard Skills
1. Чистота кода;
2. Верхнеуровневые Hard Skills:
- Знание алгоритмов и структур данных (это база, без которой никуда);
- Знание принципов ООП;
- Знание современных фреймворков (и чем длиннее список, тем лучше; регулярное пополнение приветствуется);
- Понимание принципов проектирования, основных архитектур (самостоятельно проектирует систему/модуль как хедлайнер проекта, либо участвует в проектировании крупных систем; минимально — решает объемную задачу с учетом текущей архитектуры проекта);
- Знание паттернов проектирования (вовремя распознать и применить, а не изобретать велосипед; в широком смысле — это общение в команде на одном языке для быстрого нахождения решения или оценки решения коллег);
- Опыт взаимодействия как с реляционными, так и NoSQL СУБД, построения к ним запросов, навыки оптимизации и управления;
- Понимание принципов организации тестирования, владение юнит- тестированием, в идеале — переход на автоматизированное тестирование вместо ручного;
- Владение хотя бы одной системой контроля версий (чаще всего нужна конкретная, в зависимости от требований компании).
Soft Skills и профессиональный кругозор
Те самые загадочные требования, отчаянно недооцениваемые самими программистами. Зачастую в компании руководство и HR оперируют понятием “командности” и “ответственности”, но никак не формализуют ни их критерии, ни их проявления в жизни. Как следствие — 90% разработчиков не упоминали эти аспекты как важные для развития.
- Понимание гибких методологий разработки, способность с ними работать и адаптировать их под специфику проекта;
- Наставничество: умение брать под свое крыло junior-ов, новичков, а иногда и всю команду в случае острой необходимости;
- Способность находить и предлагать технологии, инструменты для наилучшей реализации, грамотная оценка комплекса задач;
- Навыки работы в команде: выработка договоренностей, принятие командных решений, поддержание отношений, нацеленность на командный результат, следование общим интересам;
- Уровень личностной ответственности — принятие ответственности в сферах: целей и планов, профессиональных взаимоотношений, руководства, карьерного развития.
Идею проверить себя на владение всеми перечисленными блоками нам подарила тотальная скудность инструментов оценки чего-либо, кроме уровня владения языками на российском рынке. Для нужд нашего исследовательского проекта мы составили пробную версию теста для 3х языков, которая помогает быстро сориентироваться в текущем уровне, а также освещает сильные и слабые стороны:
Подводя итог, оценивать себя адекватно с использованием максимального количества внешних ресурсов крайне важно. Дабы избежать классической проблемы на рынке труда — “ожидания разработчиков vs. реальность компаний.” Когда разработчики оценивают свои навыки и их стоимость выше, чем это готовы делать компании. А также надеются на быстрый взлет и развитие, чего в такой мере не происходит (подробнее — в следующей статье).
Автор: TimeLab