Я именно тот 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% клиник внезапно перейдёт на квазерный портализатор вместо бормашины. А за место у оставшихся бормашин (не выкидывать же) хитрые работодатели будут платить гроши.
В ИТ скорость изменений зашкаливает. Да есть фундаментальные навыки: переменные, циклы, классы, структуры, преобразования структур, матметоды, паттерны. Но, блин, на подходе квантовые компьютеры и, возможно всё, что есть у меня в багаже, уже стремительно превращается в суперпозицию тыквы.
И чем больше нагрузка, тем лучше форма (до определенного предела, конечно). Обучение новому – это как раз вид нагрузки, который наиболее благоприятен
И чем больше учишься, тем лучше оно получается. Плюс, во время тотального обучения не удаётся работать на всю катушку – в какой-то момент не хватает матчасти и приходится сменять «пахоту» на гайды. Это как раз даёт отдых
Как говорят многие институтские преподаватели: высшее образование даёт две вещи – терминологию, чтобы разговаривать со специалистами и… умение учиться. Но последнее, не навсегда, а пока им пользуешься.
Да глубокому специалисту по идее могут платить больше, чем широкому, но мест с мегазарплатой для «узких» мало. А вот «широкие» легко находят работу, потому то и выбор есть и жаба не душит, если зарплата «всего лишь немного выше рынка».
Диверсифицирование себя любимого
Владея несколькими платформами значительно проще более гибко строить карьеру. Это не только возможность более оперативно сменить работодателя. В рамках своей команды или своего отдела/управления часто возникают всякие «внутренние стартапы». Это может быть как инициатива самих разработчиков, так и появление ресурсов на то, чтобы сделать наконец розово-голубую хотелку бизнеса.
И это не только шанс поменять стаз, но и сделать это без отрыва от производства. И, возможно, получить зарплатный/карьерный рост или долю в бизнесе. Просто потому что в команде не было бэка/фронта/дата-сайентиста, тебе было интересно попробовать, а люди были рады, что кто-то хотя бы попробует.
Я уже упоминал раньше про грабли и костыли. Ценность и рост специалиста – это владение инструментом. Без хождения по граблям роста не будет, хоть обчитайся умными книжками и гайдами.
И последнее по порядку, но не по значеию
Делая часть, часто полезно представлять целое. Если у тебя есть опыт работы с бэкендер, то работая фронтом ты лучше представляешь, что ты можешь получит/отдать серверу. Что для тебя легко сделают, а что потребует серьёзных усилий. Бэкендер с опытом фронта лучше понимает, какие данные и в каком виде ждёт от него фронтендер.
Кроме того, ты лучше представляешь систему в целом и понимаешь, как она будет дальше развиваться. Какие вещи критичные, а какие нет. Что можно и нужно сделать «softly», а где лучше хардкодить и не парится.
Это также помогает в «торговле» ресурсами. Когда представляешь, сколько «стоит» доработка на другом конце интерфейса и какие сайд-эффекты могут возникнуть, то проще договариваться с коллегами на «необязательные» для них доработки. Даже на фоне аврала коллег.
Даже если опыт не такой разнополюсный, то владея «соседними» технологиями, часто находишь интересные решения в своей текущей.
Плюс вожделенная для многих возможность.
Возможность работы фулл-стеком
О! Фуллстек – это круто. Звучит. Сразу представляешь как мир ложится к твоим ногам, очередь работодателей уходит за горизонт, девушки улыбаются на улице, а в качалке берешь вес на 30кг больше. На деле чуть-чуть не так.
Основная ниша фуллстека это маленькие фирмы и маленькие проекты. Да, часто маленькие по объёму, но не по важности. Где ты царь и бог всего кода. Сам сделал фронт, сам сделал мидл и сам запилил базу данных. И тут возможно два варианта:
- тебя взяли на вырост системы
- работодателя всё устраивает
И то и другое имеет перспективы. В первом случае, если бизнес попрёт, то, скорее всего ты станешь тимлидом. Хотя ситуации бывают разные, пара моих коллег искали себе падаванов, а находили начальников. Но, скорее всего, тимлидом останется человек, имеющий максимум знаний о системе, если у него есть хоть какие-то лидерские и организаторские способности. Ссно – вот и рост.
Во втором случае можно запилить ляльку и прозябать на поддержке. Работа не бей лежачего, но начальство не в курсе, что зарплаты в IT постоянно растут. А если и будет в курсе, то будет делать вид, что не в курсе. Но, если система действительно краеугольная для бизнеса, а бизнес адекватный, то чтобы не терять ключевого (и единственного специалиста) тебе могут сделать предложение… От которого сложно отказаться. Варианты, по возрастающей мотивации:
- лояльный полудомашний график работы
- з/п выше рыночной
- доля в доходах
- отрежут пальцы, если вздумаешь уйти
Но последнее встречается редко, хотя я слышал из первых рук такую ситуацию. Но, в итоге, пальцы резать не стали, пугали только. Скучно.
Собственно работа фуллстека может приносить много-много рулезов, но…
Немного горечи
Пришло время вишенки на торте. Но в моей вишенке синильной кислоты немного больше нормы.
И вот в чём дело. Переключение контекста. То, о чём мы очень любим говорить, когда летим по срокам во взятых задачах. Во всех двух взятых задачах. А оно и на самом деле существует. И больнее всего бьёт по фулстекам.
Наибольшие зарплаты, самая интересная работа и быстрый карьерный рост на переднем крае. Когда ты выходишь на грань неизвестного и начинаешь делать что-то, что вроде пока ещё никто не делал (ну или делал, но не писал про это в интернетах). Когда бизнес хочет чего-то, имеет на это деньги, но не знает, как оно должно выглядеть и иногда даже как именно работать. Либо когда у тебя противоречивые требования к интерфейсу и/или системе. И для того, чтобы продвинутся, нужно находить какие-то нестандартные ходы и решения.
В такой ситуации ты рано или поздно начинаешь биться в стену. Те самые противоречивые требования. Скорость против гибкости. Понятность против достаточности. Тут либо делать костыль на костыле в надежде когда-нибудь придти и разгрести. Либо уходить глубоко в творческий поиск, пробовать разные варианты и ждать озарения. А в реальности рулит баланс костылестроений и озарений. Но если костыли выигрывают с разгромным счётом, то проект становится мертворождённым. Поэтому так важны озарения.
А вот они обычно приходят, когда глубоко погружаешься в тему. Со всем контекстом. Необязательно всё время сидеть за монитором или над листами бумаги. Если ты погружен глубоко, то часто приходит фея-халява вся работа идёт в бэкграунде, а ты можешь просто гулять, кататься на велике, играть в хоккей, заниматься сексом, находиться в запое,… И щёлк! И вот оно – решение, такое просто и очевидное.
Но чем больше контекста ты переключаешь, тем озарений меньше. Поэтому судьба фулстека – это либо крепкие средние продукы, либо перекосы в одной из частей. Гениальный фронт и средний бэк, летающий бэк и косяки на фронте. Либо и то и другое огонь, но сроки летят.
Плюс проклятые буридановы ослы. Которые ходя вокруг тебя и пихают под руку, то под правую, то под левую: давай это лучше на фронте запилим, а нет-нет, на бэке будет лучше. Повбивал бы.
А вот мультистековость на переднем крае часто даёт прорывы. У тебя меньше туман войны, поскольку ты можешь представить проблемы других частей системы, озвучить их… и оставить с ними разбираться профессионалов. Плюс некоторые решения из практик фронта-бэка-миддла — оказываются вполне себе транспортабельными.
Выводы
Я ни на чем не настаиваю* (*наглая ложь). Но по мне опыт и важность фулстековости несколько переоценены. А мультистековость наоборот фатально недооценена. Но владение несколькими аспектами разработки – это большой плюс. За это не будут отдельно доплачивать, да и на собеседованиях это не всегда даст серьёзное преимущество. Но работать становится веселее и проще. Кроме того можно всегда утереть нос понтующимся коллегам бэкендерам/фронтендерам в доброй дружеской беседе под пиво или борщ. И да, я сам рассматривая резюме считаю опыт в нескольких стеках плюсом (если он серьёзный) и вам того же советую.
Мне нравилось менять технологии, узнавать что-то новое. И это почти не сказывается на зарплате.
Да, и в статье я немного наезжаю на фуллсттеков. На самом деле, когда я начинал писать статью (точнее через месяц после того как я вернулся к первым наброскам) у меня был прекрасный преоффер на фуллстека. Прекрасный всем, кроме з/п, по которой мы так и не договорились. А я так надеялся написать про фулстеков гадостей, а в конце статьи сказать, что я таки теперь фулстек. Но, увы, фронтенды рулят* (*по результатам моей мании величия и текущего основного стека).
Автор: mclander