Когда я только начал учиться кодить, я поверил старым мудрым засранцам с их мантрой «язык программирования не важен». У меня появилась идея фикс — быть разработчиком, который может всё. Парнем, который переносит опыт использования одной технологии на другую и возносится над деталями. Но эта затея с треском провалилась.
Идея фикс — знать все
Я изучил C# и .NET с разными областями применения (asp.net, wpf, xamarin), js/ts (react/redux, node) и убедил себя, что теперь-то могу действительно всё. Я абстрагировался, мыслю в нескольких парадигмах программирования одновременно и обладаю практическими знаниями во всех аспектах профессиональной разработки ПО. Можно смело начинать высмеивать этих сорокалетних сеньоров одной технологии, которые потратили полжизни на то, что я могу постигнуть за неделю. Можно утверждать что погружение в предметную область — для болванов, которые хотят всю жизнь проработать на одном месте, тогда как я — абстрагирован от неё.
Всё вокруг одинаковое, и я увидел закономерность. Теперь, когда мне нужно поработать на каком-нибудь нелепом питоне, я говорю: «дайте немного времени на беглое чтение спеки, и я готов работать с этим говном ну уровне senior. Ну что, в конце концов, там может быть такого сложного, чего я еще не видел?» Так я создал себе культ пренебрежения деталями. Пусть в деталях копошатся джуны, которые не могут в абстракции.
Пробелы в знаниях неочевидны и незаметны
Однажды я зафигачил дизайн на абстрактных классах в typeScript, и меня высмеяли. Потому что в тайпскрипте» так не делают. Я, конечно же, сделал вид, что просто мои коллеги — бездарные идиоты. Обычно это помогало, но в этот раз остался осадок.
Репутация хорошего разраба скрывает твои пробелы как от коллег, так и от тебя самого. Ты не знаешь огромное количество критичных специфичных штук, но не видишь этого, как раз потому, что не знаешь.
Затем началась черная полоса. Фигак! Я не знаю, что там за типы индексов в SQL. Бам! Забыл, когда вызывается статический конструктор в шарпах. Упс! Я не могу правильно реализовать IDisposable без гугла. Пытаюсь мутировать стейт в реакт компоненте.
Я заподозрил, что моя абстрагированность не работает. Что технологии все-таки разные, а детали — важны. В каждой технологической экосистеме свои уникальные лучшие практики. Опыт в .NET не помешает при работе с jvm, но и не заменит его. Мой самоприсвоенный скилл «Я научился быстро учиться» оказался неправдой. Я учился не быстрее, чем все остальные. И мне потребовалось слишком много времени, чтобы это понять.
Мой скилл оказался как обоз — лебедь, рак и щука пытались тащить его в разные стороны. Я не стал автоматически сеньором во всем. Я просто стал мультимидлом, посмешищем для сорокалетних сеньоров одной технологии. И тогда я пришел к выводу, что выбирать путь фулстека — ошибка.
И тут начинается самобичевание
Проблема в том, что бизнесу нужны фулстеки. Только не такие, как я, а синьоры во всём, ребята, у которых за плечами по пять лет опыта в каждой из фулстечных технологий.
Но таких не бывает, и бизнес идёт на самообман. Они берут слабого мидла в трех крупных технологиях, и называют его senior full-stack developer. Этот титул превращает человека в самозванца и становится неиссякаемым источником комплекса неполноценности. Любой обычный разраб, который шарит в одной технологии — шарит в ней лучше. И сейчас я хорошо понимаю, что не готов на равных правах работать в команде с людьми, которые шарят намного лучше меня. Иначе уже через неделю умру от самобичевания.
Самобичевание — огромная проблема нашей индустрии, но мы ее неправильно лечим. Мы пишем друг для друга манифесты, что мы дартаньяны, а все вокруг козлы. Что девальвации сеньоров не существует, просто мы себя недооцениваем, что нам надо выкинуть скромность на помойку и поверить в свою внутреннюю богиню разработки. Что нам надо натянуть на себя шкуру высокомерия и слать подальше всех, кто в нас сомневается.
А надо-то всего лишь признать, что разработка — это сложно не только для людей извне, но и для нас тоже. Не знать что-то на данный момент — нормально. Если у тебя есть пробел, это не значит, что ты стоишь меньше денег, и тебя надо изгонять в пустыню.
Но на самых глубоких уровнях рефлексии в нас все равно остается самобичевание. Фулстеки грызут себя, что не знают технологии глубоко. Однояпные спецы — что не знают широко.
Учить вширь vs учить вглубь
Здесь старый конфликт: ты можешь изучать в глубь, а можешь вширь, но не то и другое одновременно. Я заметил такой эффект — когда начинаешь изучать новую технологию, старая становиться неинтересной. Но в IT если ты не обновляешь свои знания о технологии в течение года, ты уже не актуален.
Если хочешь оставаться фулстеком, тебе придётся заставлять себя читать релиз-ноуты какого-нибудь TypeScript, заодно ещё и пробуя их в деле — даже если не хочется. Причём ты всё ещё будешь недосягаемо хуже разраба, который каждый день пишет исключительно на «Тайпскрипте».
Главная проблема этого конфликта в том, что мы не знаем, как лучше. Мы-то, и особенно бизнес, хотим и так, и так. Что бы все шарили во всём, и шарили достаточно глубоко.
Что лучше, я не знаю, но знаю, каково быть на этом пути фулстеком. Тебе придется тратить намного больше времени на обучение, чем разработчикам с одним языком. Так будет продолжаться всю карьеру, но по сравнению с ними твой уровень все равно будет ниже.
Ты везде будешь свой, но везде среди чужих. Несмотря на твои огромные усилия, каждый знаток конкретного языка будет с пеной у рта доказывать, что ты не достоин называться сеньором.
Ты станешь вечным мидлом.
Я лично решил, что обратной дороги у меня нет. Я могу изучить что-то одно по-настоящему глубоко, могу попробовать уйти в управление — вот уж где нужны только поверхностные знания — но лучше останусь на своем пути и буду страдать, пока действительно не узнаю все обо всем.
Автор: Филипп Ранжин