Быть фулстеком и не быть им

в 9:25, , рубрики: fullstack development, multystack, карьера, Карьера в IT-индустрии, кровавый enterprise, Программирование, разработка

Я именно тот 40+ летний синглстек, который упоминался в нашумевшей статье. Когда я вижу таск, где бэкендер упоминает dTo, к которому нужно написать обвязку на фронте… Я запланировано выхожу из себя. Во-первых, я хорошо работаю, когда злой. А тут такой случай. А во-вторых (и это главное), я не хочу знать, что такое ДэТэО, где оно лежит и как с ним работать. Мне нужен только путь, метод, параметры и набор ответа. В терминах HTTP/REST. Я не хочу лезть в код бэка. Я даже не хочу догадываться о том, что исходя из имени класса dTo, можно легко вычислить путь.

Это вопрос уважения. Я не лезу в кухню бэка. А когда сам ставлю задачу на бэк, то чётко расписываю интерфейс (опять же в терминах REST) и кратко описываю, зачем оно мне надо и как собираюсь использовать. Как это реализуют на бэке – это не моё дело, как я реализую работу фронта и где расставлю кнопки – не их.

Вы уже поняли, о чём пойдёт речь в статье? Так вот – немного не о том. Я работаю синглом. Но на самом деле, я мультистек. Притом работал и давал результат сеньором и тимлидом во фронте, бэке, фуллстеке, системном и даже бизнес-анализе. И рад, что у меня такой бэкграунд.

Что в нём хорошего, и как я до такого дошёл под катом.

Поехали.

Во многих статьях я сразу фейлю интригу. Ставлю выводы в начало статьи, а дальше раскрываю тему, с объяснениями, примерами, шуточками и троллингом. Особенно, когда выводы противоречивые, а объяснения шаткие. Не вижу причин не сэкономить кому-то время и здесь.

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

P.S. Я пишу в основном о сеньорах, но всё можно спустить и на ступень ниже (у меня мало опыта работы мидлом).

PPS. Я использую термины технология и платформа (как синонимы), для языка программирования и/или фреймворка. Это не случайно в контексте статьи. «Глубокое знание языка» часто ничто, перед глубоким и практичным знанием библиотек (возможно, если не брать LISP/Hackel или С++ с извращениями). Поэтому скажем Python+Hadoop, Python+CV и Python+ML – это разные технологии/платформы, на мой вкус. Конечно, часто люди имеющие знания в компьютерном зрении, как минимум, интересуются машинным обучением, а то и распределёнными вычислениями. Но… чтобы стать классным специалистом на этих трёх платформах, совсем не достаточно быть спецом на одной.

  • Знания устаревают
  • Привычка учиться
  • Диверсификация
  • хайп
  • Целое помогает частностям

Итак.

Время жизни технологии

Любая технология живёт в среднем 5 лет* (*фантазии Автора). Потом либо её вытесняет что-то другое. Либо технология переходит на версию 2.0, декларативно идеологически совместимую с предыдущей, а не самом деле…

На самом деле, приходится учиться заново. Более того: приходится ломать себя, отказываться от комфортных наработок и привычной логики. Это больно, сложно и бесит. Когда простая задача (в версии 1.0), в версии 2.0 требует адских костылей и тонны кода. Потом, конечно, обнаруживаешь, что задачу можно было решить более чем просто. Проще, чем в 1.0. Просто не так, как привык.

В любом случае, есть пятилетний цикл, за который знания и наработки порядком обесцениваются. Поэтому, в разработке постоянно приходится учиться. Бежать, чтобы только оставаться на месте, как а «Алисе в стране чудес». Остановился, отстал и востребованность падает.

И что обидно, что учиться приходится рывками. Сидишь себе, кодишь без роздыху, нарабатываешь приемы, изучаешь тонкие фичи и «стандартные хаки». А там… раз! Новая версия. И половина знаний уже не нужна потенциальным работодателям. А значит, и со своим работодателем будет сложно построить разговор, начинающийся с: «тут на рынке такая ситуация …»

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

Рано или поздно по тем или иным причинам, работу меняешь. И тогда предстоит разговаривать с людьми, которые давно на версии 2.0. И выглядеть несколько заискивающе, поскольку з/п хочется сеньорскую, а понимаешь, что пока даже не мидл. И хорошо, если понимаешь.

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

Соответственно, тебя ждёт боль от новых граблей. А потенциального работодателя проблемы от костылей. Которыми ты хитроумно будешь обёртывать грабли. И работодатели, гады такие, прекрасно всё понимают. И не против, разделить с тобой затраты на твоё «очень быстрое обучение», «разумно» занизив з/п.

Да, все хотят нанять готового спеца, у которого период «вкатывания», займёт пару дней (в идеале те пару дней, которые занимают формальности и настройка рабочего места). Нанять-то хотят, но не могут. Не так много бесхозных хороших бегает по рынку. Ну, иногда бегают, но им особо бегать то не дают, сразу прихлопывают офферами.

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

И в этот момент, можно сделать хитрый финт ухом. Взять и не пойти работать на платформу 2.0. Можно поискать (и найти работу!) на совсем другой платформе.

Да ну! Бред же, скажете. Так не бывает. Хмм,… я много раз так делал. И, в отличие от героев известного телешоу, у меня получалось.

Да, иногда, приходится жертвовать з/п или возможной прибавкой к ней. Да, нужно потратить время на изучение технологии и попробовать хоть что-то поделать. Придётся знатно побегать по собеседованиям и получить пачку отказов. Но рано или поздно работу находишь… Кстати, несколько раз было, что те, кто сперва мне отказывали – потом неоднократно перезванивали и заманивали разными плюшками.

Теперь вопрос – а зачем таки менять платформу? Самое вкусное оставлю под конец статьи, но и тут есть что сказать.

Что лежит на поверхности:

  • безнадёжное устаревание технологии или выход технологии из «зоны хайпа»
  • банальная скука и замыленность

Просто через какое-то время технология, приносившая надёжный хлеб с маслом и икрой, может сдуться. Да так мощно, что и на хлеб ей заработать непросто. А то и не сдуться, а фактически помереть. И часто это нам демонстрируют в ещё институте, устраивая обучение некроплатформам. Я в 96 году застал Clipper и Supercalc (начал было писать, что это такое, но написав огромный абзац, стёр его – статья таки не по археологии, а ещё в 96году, оба эти продукта надо было преподавать археологам). А мы вместо того, чтобы усвоить урок (что ничто не вечно в IT) бурчали на преподавателей-дерьмомамонтоведов.

И даже если технология далека от смерти, она может просто выйти из «зоны хайпа». То есть рынок может массово отказаться от технологии и перейти на что-то иное. Я даже не буду приводить примеры – сами можете вспомнить их массу, даже если в IT всего пару-тройку лет.

В случае, если технология «померла», теряешь в зарплате и становится сложно найти работу.

Если же антихайпанула возможно теряешь в зарплате, а с поиском работы «всего лишь» ощущаешь затруднения. Но тем, кто привык, что работодатели рвут на части, в такой ситуации очень некомфортно и депрессивно (знаю это не понаслышке – реально тяжело, особенно если «на руках висит» семья).

Выход тут один – выбирать из «пула хайпа» наиболее интересную для себя платформу и нырять в неё с головой. И это менее сложно, чем пытаться выжимать профит из стремительно устаревающих знаний и умений (мой опыт говорит так). И, что самое забавное, это интересно. Приходится напрягать мозги: читать, разбираться, формировать инструменты и решения под свои задачи. Меня от такого часто просто прёт не по-детски. И, заметьте, этот квест за деньги работодателя.

Да иногда, бывает, что новая технология совсем не заходит. Постоянно втыкаешься в барьеры и ограничения технологии. Но изучение нового, как минимум в 2 из 3 случаев – это гораздо интереснее «клепания формочек».

Дело в том, что на той работе, где ты давно, где тебя любят и уважают, есть одна проблема – колея. Ты сам её построил и имеешь с неё много гитик. Знаешь, как работает система, наработаны приёмы и инструменты, которые позволяют её расширять пусть не бесконечно, но в горизонте года точно. Знаешь, что планирует бизнес, знаешь какие новые системы будут сделаны на основе твоих разработок (бизнес любит готовые быстрые решения) и…
И это … скучно. Потому что колея. По которой бизнес мчит в финансовые дали, а ты просто обеспечиваешь поступательное движение локомотива ну и, иногда, капитальный ремонт… привокзального буфета.

И даже если ты поменяешь работу, но не сменишь технологию, то… Вот ты приходишь на новое место, где люди пытаются делать смесь фуникулёра с броненосцем. А тут ты: давайте не будем подвешивать рельсы на секвойях (тем более, что пока не все секвойи выросли). Лучше используем шпалы типоразмером А1* (*реальный типоразмер) и рельсы марки МТ-ЛБ-70РХ* (*случайный набор букв и цифр). Можно быстро сделать узкоколеечку для прототипа, потом, если что, перешьём полотно.

Все дружно удивляются, вдохновляются, аплодируют. Назначают тебя главной рок-звездой и идут пилить секвойи на шпалы указанного типоразмера. А тебе… уже на этом этапе становится скучно. Ты-то шёл делать фуникулёр, но он не нужен для перевозки угля и палок. И ты опять строишь привычную колею, разве чуть в ином пейзаже.

На самом деле, наработанные решения – очень круто. Для бизнеса. Работодатель внезапно получает то, о чём влажно грезил долгое время. И осыпает тебя если не плюшками, то безмерным уважением. Да, это тоже то, что стоит ощутить в жизни. Но, опять же, скука и … ограниченный горизонт для использования «солидных наработок». Бизнес готов использовать и очень устаревшие решения, если они дадут быстрый профит. Но тоже до поры до времени.
Я, попадая в долговременную колею, замечал за собой резкое снижение продуктивности и мозговой активности. Меня любят, ценят,… а мне приходится со скрипом заставлять себя работать.

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

Хотя… ладно, по-противоречу сам себе. Работа в колее, несколько напрягает меня лично, поскольку привык быстро думать и принимать решения (пусть не всегда верные). Мне нравится решать задачи. Находить крутые или хитро-компромиссные решения, а то и с понтом предлагать заколачивать костыли (оговариваясь, что вообще-то так нельзя). А вот реализовывать решение – это уже скучновато.

Но это мой склад ума. В команде со мной работают ребята, которые тащатся от того, что они делают, а не от того «как». Им прикольно видеть в системе новую фичу и гордиться тем, что она появилась благодаря им. Я тоже этим страдаю наслаждаюсь, хоть и в меньшей степени.
Поэтому… научился сосредотачиваться на дельте сделанного, что даёт мотивацию. Специально нахожу время, для того, чтобы просто поиграться с системой (не на проде, честно-честно). Посмотреть, что появилось, чего мне это стоило (заодно найти несколько мест, которые пора бы уже обточить напильником). Так же работе в колее помогают хобби. Оно даёт драйв, а положительные эмоции добираешь от закрытых тасков.

Однако, при работе в колее у рок-звёзд (я нескромен) заметно падает результативность, просто потому, что для успешной работы (в колее) нельзя полностью сосредотачиваться на работе. Нужна параллельная мотивация. И начальство начинает косить глазом: как так? На некоторые фичи уходит столько же времени, за сколько запилен прототип, сразу же ушедший в прод. К этому нужно относиться с пониманием или опять же… думать о смене работы.

Привычка учиться и любопытство

Разработчику приходится учиться постоянно. Да, это относится к любой профессии. Помню про тоже самое мне говорил стоматолог. Но стоматолог вряд ли столкнётся с ситуацией, когда в течение пары лет 80% клиник внезапно перейдёт на квазерный портализатор вместо бормашины. А за место у оставшихся бормашин (не выкидывать же) хитрые работодатели будут платить гроши.

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

Мозг, это единственный орган, способный развиваться в любом возрасте. И по скорости развития (и, к сожалению, деградации) делает любой бицепс как Ту-160 воробья.

И чем больше нагрузка, тем лучше форма (до определенного предела, конечно). Обучение новому – это как раз вид нагрузки, который наиболее благоприятен мозгу. Чтобы сравнить: это как таскать мешки с картошкой на даче или «вес» в тренажёрке. Нагрузки по объёму сопоставимы, а по «вкусовым ощущениям» — нет. Ну, если ты не садоводофил, конечно.

И чем больше учишься, тем лучше оно получается. Плюс, во время тотального обучения не удаётся работать на всю катушку – в какой-то момент не хватает матчасти и приходится сменять «пахоту» на гайды. Это как раз даёт отдых мозгу от совсем не полезных однообразных нагрузок, особенно в авральном режиме. Я, разбирая свой код, написанный в режиме 60-80 часовой рабочей недели, был в неком удивлении. От того, что не использовал не только новых, но вообще любых известных мне инструментов, которые не имели мощной наработанности. Не было ресурсов мозга не только на то, чтобы подучить, а хотя бы вспомнить. Ну, кроме тех вещей, без которых вообще никак нельзя было продвинуться.

Как говорят многие институтские преподаватели: высшее образование даёт две вещи – терминологию, чтобы разговаривать со специалистами и… умение учиться. Но последнее, не навсегда, а пока им пользуешься.

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

Диверсифицирование себя любимого

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

И это не только шанс поменять стаз, но и сделать это без отрыва от производства. И, возможно, получить зарплатный/карьерный рост или долю в бизнесе. Просто потому что в команде не было бэка/фронта/дата-сайентиста, тебе было интересно попробовать, а люди были рады, что кто-то хотя бы попробует.

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

И последнее по порядку, но не по значеию

Делая часть, часто полезно представлять целое. Если у тебя есть опыт работы с бэкендер, то работая фронтом ты лучше представляешь, что ты можешь получит/отдать серверу. Что для тебя легко сделают, а что потребует серьёзных усилий. Бэкендер с опытом фронта лучше понимает, какие данные и в каком виде ждёт от него фронтендер.

Кроме того, ты лучше представляешь систему в целом и понимаешь, как она будет дальше развиваться. Какие вещи критичные, а какие нет. Что можно и нужно сделать «softly», а где лучше хардкодить и не парится.

Это также помогает в «торговле» ресурсами. Когда представляешь, сколько «стоит» доработка на другом конце интерфейса и какие сайд-эффекты могут возникнуть, то проще договариваться с коллегами на «необязательные» для них доработки. Даже на фоне аврала коллег.
Даже если опыт не такой разнополюсный, то владея «соседними» технологиями, часто находишь интересные решения в своей текущей.

Плюс вожделенная для многих возможность.

Возможность работы фулл-стеком

О! Фуллстек – это круто. Звучит. Сразу представляешь как мир ложится к твоим ногам, очередь работодателей уходит за горизонт, девушки улыбаются на улице, а в качалке берешь вес на 30кг больше. На деле чуть-чуть не так.

Основная ниша фуллстека это маленькие фирмы и маленькие проекты. Да, часто маленькие по объёму, но не по важности. Где ты царь и бог всего кода. Сам сделал фронт, сам сделал мидл и сам запилил базу данных. И тут возможно два варианта:

  • тебя взяли на вырост системы
  • работодателя всё устраивает

И то и другое имеет перспективы. В первом случае, если бизнес попрёт, то, скорее всего ты станешь тимлидом. Хотя ситуации бывают разные, пара моих коллег искали себе падаванов, а находили начальников. Но, скорее всего, тимлидом останется человек, имеющий максимум знаний о системе, если у него есть хоть какие-то лидерские и организаторские способности. Ссно – вот и рост.

Во втором случае можно запилить ляльку и прозябать на поддержке. Работа не бей лежачего, но начальство не в курсе, что зарплаты в IT постоянно растут. А если и будет в курсе, то будет делать вид, что не в курсе. Но, если система действительно краеугольная для бизнеса, а бизнес адекватный, то чтобы не терять ключевого (и единственного специалиста) тебе могут сделать предложение… От которого сложно отказаться. Варианты, по возрастающей мотивации:

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

Но последнее встречается редко, хотя я слышал из первых рук такую ситуацию. Но, в итоге, пальцы резать не стали, пугали только. Скучно.

Собственно работа фуллстека может приносить много-много рулезов, но…

Немного горечи

Пришло время вишенки на торте. Но в моей вишенке синильной кислоты немного больше нормы.

И вот в чём дело. Переключение контекста. То, о чём мы очень любим говорить, когда летим по срокам во взятых задачах. Во всех двух взятых задачах. А оно и на самом деле существует. И больнее всего бьёт по фулстекам.

Наибольшие зарплаты, самая интересная работа и быстрый карьерный рост на переднем крае. Когда ты выходишь на грань неизвестного и начинаешь делать что-то, что вроде пока ещё никто не делал (ну или делал, но не писал про это в интернетах). Когда бизнес хочет чего-то, имеет на это деньги, но не знает, как оно должно выглядеть и иногда даже как именно работать. Либо когда у тебя противоречивые требования к интерфейсу и/или системе. И для того, чтобы продвинутся, нужно находить какие-то нестандартные ходы и решения.

В такой ситуации ты рано или поздно начинаешь биться в стену. Те самые противоречивые требования. Скорость против гибкости. Понятность против достаточности. Тут либо делать костыль на костыле в надежде когда-нибудь придти и разгрести. Либо уходить глубоко в творческий поиск, пробовать разные варианты и ждать озарения. А в реальности рулит баланс костылестроений и озарений. Но если костыли выигрывают с разгромным счётом, то проект становится мертворождённым. Поэтому так важны озарения.

А вот они обычно приходят, когда глубоко погружаешься в тему. Со всем контекстом. Необязательно всё время сидеть за монитором или над листами бумаги. Если ты погружен глубоко, то часто приходит фея-халява вся работа идёт в бэкграунде, а ты можешь просто гулять, кататься на велике, играть в хоккей, заниматься сексом, находиться в запое,… И щёлк! И вот оно – решение, такое просто и очевидное.

Но чем больше контекста ты переключаешь, тем озарений меньше. Поэтому судьба фулстека – это либо крепкие средние продукы, либо перекосы в одной из частей. Гениальный фронт и средний бэк, летающий бэк и косяки на фронте. Либо и то и другое огонь, но сроки летят.
Плюс проклятые буридановы ослы. Которые ходя вокруг тебя и пихают под руку, то под правую, то под левую: давай это лучше на фронте запилим, а нет-нет, на бэке будет лучше. Повбивал бы.

А вот мультистековость на переднем крае часто даёт прорывы. У тебя меньше туман войны, поскольку ты можешь представить проблемы других частей системы, озвучить их… и оставить с ними разбираться профессионалов. Плюс некоторые решения из практик фронта-бэка-миддла — оказываются вполне себе транспортабельными.

Выводы

Я ни на чем не настаиваю* (*наглая ложь). Но по мне опыт и важность фулстековости несколько переоценены. А мультистековость наоборот фатально недооценена. Но владение несколькими аспектами разработки – это большой плюс. За это не будут отдельно доплачивать, да и на собеседованиях это не всегда даст серьёзное преимущество. Но работать становится веселее и проще. Кроме того можно всегда утереть нос понтующимся коллегам бэкендерам/фронтендерам в доброй дружеской беседе под пиво или борщ. И да, я сам рассматривая резюме считаю опыт в нескольких стеках плюсом (если он серьёзный) и вам того же советую.

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

Да, и в статье я немного наезжаю на фуллсттеков. На самом деле, когда я начинал писать статью (точнее через месяц после того как я вернулся к первым наброскам) у меня был прекрасный преоффер на фуллстека. Прекрасный всем, кроме з/п, по которой мы так и не договорились. А я так надеялся написать про фулстеков гадостей, а в конце статьи сказать, что я таки теперь фулстек. Но, увы, фронтенды рулят* (*по результатам моей мании величия и текущего основного стека).

Автор: mclander

Источник

* - обязательные к заполнению поля