Senior — это не набор технологий
Продолжаю цикл постов с ответами на вопросы подписчиков.
Меня спросили, какой, на мой взгляд, skill set должен быть у middle и senior и куда вообще расти после senior: в стартап, в менеджмент, глубже в домен, математику, алгоритмы, C++?
Мне кажется, сам вопрос про skill set немного сбивает с толку. Как будто где-то существует список: middle знает пять технологий, senior — восемь и ещё три языка программирования.
Я бы разделял middle и senior по двум другим вещам: масштабу ответственности и точности действий. Middle обычно получает на вход задачу. Понятно, какого результата нужно достичь, и хотя бы примерно виден путь. Внутри остаётся много пространства для инженерных решений: разобраться в коде, выбрать алгоритм, собрать дополнительные данные, решить, как именно реализовать нужное поведение. Хороший middle — надёжный разработчик: ему поставили задачу, а он принёс работающий результат, в идеале доведённый до прода.
Senior чаще получает на вход проблему. Например, сервис регулярно падает или нужно реализовать новую возможность, но пока непонятно как. Senior способен разобраться, сформулировать варианты решения, сравнить их, выбрать один, превратить его в конкретные задачи, реализовать и довести до продакшна. В этом смысле он отличается и от менеджера: хороший менеджер тоже может помочь найти и выбрать решение, но senior способен ещё и сам его реализовать.
Вторая характеристика — точность. Senior много раз проходил весь этот путь и поэтому лучше понимает, где нужно глубоко разобраться и всё отполировать, а где достаточно собрать из 💩 и палок. Какие инструменты использовать, где можно безопасно срезать угол, а где ошибка потом обойдётся очень дорого. Это не обязательно означает, что senior быстрее middle пишет код: middle, который каждый день сидит в IDE, запросто может печатать быстрее. Речь про экономность всего пути от проблемы до результата.
Поэтому я не верю в skill set вида «senior обязан знать три языка». Я считаю себя senior-разработчиком, при этом очень хорошо знаю C++, приемлемо Python — и всё. Зато я уверен, что при необходимости освою новый язык за несколько месяцев. На мой взгляд, гораздо важнее очень хорошо знать хотя бы один язык и глубоко понимать фундамент своей области. Алгоритмы, устройство систем, базы данных, ОС — набор зависит от специализации.
Причём с приходом AI это не стало менее важно. Модель теперь может написать за меня много кода, но мне всё равно нужно задать ей правильное направление и быстро увидеть места, где она написала ерунду.
А дальше единого роадмапа уже нет. Стартап может отлично прокачать широту, скорость и ответственность: нужно быстро собрать решение из множества технологий и получить результат. Корпорация может дать другую мышцу — глубину, фундаментальное понимание сложной системы и навык делать очень точные изменения там, где ошибка дорого стоит. Оба пути имеют обратную сторону. После стартапа может не хватать глубины. После многих лет в большой корпорации — широты и привычки брать на себя область целиком. IC и менеджмент — ещё одна развилка, и я точно не стану утверждать, что один путь «выше» другого.
Поэтому мой универсальный роадмап гораздо скучнее: постепенно брать на себя чуть больше ответственности, чем у вас есть сейчас. Не в режиме «сейчас я отвечу вообще за всё», а брать проблему, путь к решению которой вы примерно видите, хотя ещё не знаете всех деталей. Дальше вы неизбежно найдёте по дороге десяток граблей, о существовании которых не подозревали. И именно на них middle постепенно и превращается в senior.
Какая из двух senior-мышц у вас сейчас сильнее: ответственность за результат или точность инженерных решений?
В этом посте были ссылки, но мы их удалили по правилам Сетки