Ой, а напомни как называют очень опытного программиста, там что-то такое романтично-средневековое, кажется «милорд»...

Homo vitruvianus — изображение, созданное Леонардо да Винчи в 1492 году.
Леонардо да Винчи считается ярким примером «универсального человека».
Homo vitruvianus — изображение, созданное Леонардо да Винчи в 1492 году. Леонардо да Винчи считается ярким примером «универсального человека».

Почти три года назад на Хабре вышла статья «Фулстеки — это вечные мидлы. Не идите по этому пути, если не хотите страдать». Я еще тогда был не согласен с изложенным, но сдержался:) Однако недавно я стал свидетелем весьма примечательного случая и сразу вспомнилась та самая статья... Итак, одна команда испытывала нехватку бекенд-разработчиков и сравнительный переизбыток разработчиков на фронте. Дело осложнялось сжатыми сроками сдачи проекта. Проблема типовая, но стек..., ах если бы не стек: бек — NodeJs, фронт — React, TypeScript и там и там.

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

Может быть я старомоден, но сегодняшняя специализация порой видится мне чрезмерной. Раньше все было как-то проще: ты либо умеешь программировать, либо нет. А сейчас все кругом ищут кибер-ниндзю с опытом работы исключительно на фреймворке X не менее пяти лет (хотя фреймворк X существует четыре года). Если ты работал с фреймворком X всего три года, то с тобой не о чем разговаривать: ты — джун. Ага, т.е. известному английскому банку не впадлу нанимать на Java-проект кандидата с десятилетним опытом на .NET’е, потому что они считают, что важны фундаментальные знания, а не знания конкретной платформы (ну напорется он пару раз на стирающиеся дженерики и сравнение строк через ==, почешет репу и перестанет так делать), а ООО «Рога и Копыта Интернейшнл» может работать только с теми, кто пять лет ковырял фреймворк Х. По-моему это фигня. Кстати, тот парень в банке, что перешел с .NET'а на Java сейчас там числится синьором и находит горы проблем в мердж-реквестах разработчиков, пишущих на Java значительно дольше него.

Знать все на свете невозможно

Не сказать, что разные точки зрения на вопрос «что лучше: вширь или вглубь» существуют только в программировании. Например американская система здравоохранения предполагает две ученые степени: MD и DO. Если копнуть глубже, то мы откопаем холизм и редукционизм, как две крайние точки зрения на вопрос является ли целое совокупностью всех его составных частей или чем-то большим. Аргументы в пользу узкой специализации уже привел @fillpackart. Я приведу свои в пользу расширения сознания.

Фулстеки не должны «знать все». Фуллстек — это человек, неплохо (не превосходно!) разбирающийся сразу в нескольких дисциплинах. Кстати, у врачей это называется «терапевт» или «general practitioner». Куда вы попадаете первым делом в медицинском учреждении: к хирургу, к психотерапевту, может быть к гастроэнтерологу? Или к терапевту? Это нормально: нужны как узкие, так и широкие специалисты. Это не хорошо и не плохо, это просто по-разному.

Большинство задач, решаемых большинством разработчиков далеки от rocket science. Давайте честно: сколько у вас типовых тасков, а сколько творческих? Как часто требуется знание деталей реализации низкоуровневых системных API?

T-Shaped — фуллстек здорового человека

Между экстремальными «только вширь» и «только вглубь» существует еще и T-shaped: кто запрещает развиваться в том, что нравится больше всего, но подтягивать до базового уровня еще несколько дисциплин. T-shaped команды гораздо легче находят общий язык среди своих членов и гораздо гибче и устойчивее ко внешним воздействиям. Пришел горящий инцидент с прода, коллега заболел(а), произошло что-то незапланированное? Команда готова подстроится. Да T-shaped специалист скорее всего не сможет выполнить сложные задачи из смежных областей. Простые задачи, возможно, сделает хуже и/или дольше эксперта, но он их сделает, черт возьми! Работа не остановится потому что узкий специалист недоступен по той или иной причине.

Пусть большую часть работы по фронту выполняет фронтендер, настраивает выкладки — админ (или devops, не знаю как теперь правильно), а бекенд пишет бекендер. Но что если этот специалист здесь и сейчас недоступен? Неужели нельзя внести правку в конфиг или починить небольшую багу самому? Я думаю, что во многих случаях вполне себе можно. Как вообще бекендер и фронтендер будут разговаривать, если они не понимают специфики работы друг друга? 

Отличия дуал-классов от мульти-классов в AD&D

Воин + Маг = Воин/Маг
Воин + Маг = Воин/Маг

Посмотрим на развитие специалиста через призму AD&D. В первых редакциях правил персонаж всегда должен следовать одному классу. Назвался воином — полезай в кузов никакой тебе магии стихий. Знай орудуй двуручным мечом. Потом появились «мультиклассы», скажем воины/маги или жрецы/монахи. Довольно быстро стало ясно, что прокачать мультикласс — та еще задачка, ведь опыт делится между двумя классами. По этой причине в Baldur's Gate 2 многие не рекомендуют брать в партию из шести персонажей одновременно другида-воина Джахейру и клерика-мага Аери. C учетом равного распределения опыта между всеми членами партии и между классами мультикласса их развитие в какой-то момент стопорится. О подобной проблеме говорится в оригинальной статье: при ограниченном количестве XP (а в реальной жизни — времени в сутках) мультикласс всегда будет отставать от чистого класса в уровне.

Поэтому появилась новая концепция дуал-классов. Вы фиксируете уровень в одном классе и продолжаете развиваться в другом. Этот сценарий уже гораздо интереснее. На сколько я помню, во времена Icewind Dale 2 отлично работал дуал вор/маг. Уровень вора останавливался в районе шестого (или около того), а дальше прокачивался маг. На первых уровнях от заклинаний мага все-равно толку мало, а вор шестого (или около того) уровня уже спокойно разбирался с большей частью замков и ловушек, а вместо того, чтобы обворовывать NPC их можно было просто убивать и забирать тот же самый лут + опыт за убийство неписей впридачу. Некоторые дуалы оказались даже слишком крутыми, например Кенсай/Маг в Baldur's Gate 2 может в одиночку убить дракона.

Я понимаю, что аналогия может показаться натянутой, но в жизни также. Некоторые навыки не требуют идеального исполнения. Важно в принципе их наличие, а не безупречный скилл.

Да, я помню, что у дуал-классов в AD&D еще есть нюансы и ограничения, но в контексте статьи это неважно. К тому же это ограничения правил AD&D, а не реальной жизни;)

Вширь и вглубь

Будьте T-shaped или дуал-классом (как угодно) и развивайтесь вширь и вглубь. Просто вместо того, чтобы бездумно кидаться на любую новую технологию или фреймворк, с умом инвестируйте время и выбирайте те дисциплины, которые дополняют и усиливают друг друга (в английском есть глагол to synergize, который я хотел употребить, но в русском ничего друг с другом не синергируют/синергизирует,... ну вы поняли о чем я). Скажем, Rust не будет лишним, если у вас хорошие знания в C или C++, Kotlin проще учить вторым языком к Java, JavaScript подойдет, если вы работаете с вебом, а случись так, что C#, F# и JavaScript вы уже знаете (мой случай), TypeScript и учить-то толком не придется.

Концепция синергии навыков и умений отлично реализована в двух других RPG: Divinity Original Sin 1 и 2. Эти игры не основаны на правилах AD&D, так что там нет классов и игрок волен выбирать почти любые умения для каждого из персонажей. Просто некоторые комбинации оказываются лучше других, потому что они усиливают друг друга. Скажем, воину лучше всего дополнительно научиться навыкам некромантии, а рейнджера можно замесить с рогой, чтобы получить ассасина.

А вот что будет в Original Sin 2, если неосторожно обращаться с огнем на нефтяной вышке...
Синергия двух стихий в действии!
А вот что будет в Original Sin 2, если неосторожно обращаться с огнем на нефтяной вышке... Синергия двух стихий в действии!

Правда некоторые билды в Original Sin 2 таким макаром оказались сломаны. Скажем, если Фейн качается в некроманта, берет пару скилов из соседних веток, с помощью маски меняет расу на эльфа... все заканчиваю с примерами из игрушек:)

Еще немного ностальгии, не имеющей прямого отношения к теме статьи
Система S.P.E.C.I.A.L из Fallout 1, 2
Система S.P.E.C.I.A.L из Fallout 1, 2

Возможно, больше других похожа на реальность система развития S.P.E.C.I.A.L из Fallout 1, 2. Вот где приходилось специализироваться сразу в нескольких направлениях и думать, куда распределить каждое заработанное очко опыта.

Почему архитекторы?

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

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

Бывает, что архитектурные вопросы решаются коллегиально. Однако в конечном счете все-равно есть человек, за которым остается последнее слово когда команда не может прийти к консенсусу, и который осуществляет контроль за соблюдением достигнутых договоренностей. Архитектор должен говорить на одном языке как с бизнесом, так и с разработкой и обладать авторитетом у тех и других, чтобы у лидов не возникало вопросов к его компетентности и соблазна саботировать достигнутые решения об архитектуре. Бизнес в свою очередь должен быть уверен, что выбранная архитектура адекватна решаемой задаче, а не высосана из пальца, потому что вся команда хочет поиграть в микро-сервисы/блокчейн/<вставьте своё>. А для этого придется много чего знать и уметь.

Логические ошибки оригинальной статьи

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

Я изучил C# и .NET с разными областями применения (asp.net, wpf, xamarin), js/ts (react/redux, node) и убедил себя, что теперь-то могу действительно всё… Так я создал себе культ пренебрежения деталями. Пусть в деталях копошатся джуны, которые не могут в абстракции... Всё вокруг одинаковое, и я увидел закономерность. Теперь, когда мне нужно поработать на каком-нибудь нелепом питоне, я говорю: «дайте немного времени на беглое чтение спеки, и я готов работать с этим говном на уровне senior...

Всего лишь два с половиной си-подобных языка программирования (TS - суть C#, натянутый на JS, так что за полноценный ЯП считать не будем) и три паттерна: MVC, MVVM и Flux (если вы уже знаете CQRS+ES, то Flux чем-то новым и прорывным казаться не будет) и случился Даннинг-Крюгер. К мидловости, синьорности или фулстековости всё это отношения не имеет. Детали бывают важны, просто нужно определиться в каком стеке и в каком объеме. Где здесь основной фокус: веб, десктоп, мобильная разработка? Кажется, что в этом наборе лишние WPF и Xamarin. Достаточно было сосредоточиться на веб-разработке и появилось бы время уделить внимание деталям.

Однажды я зафигачил дизайн на абстрактных классах в typeScript, и меня высмеяли. Потому что в тайпскрипте так не делают. Я, конечно же, сделал вид, что просто мои коллеги — бездарные идиоты. Обычно это помогало, но в этот раз остался осадок.

Не знаю кто именно в TS так не делает, что там был за дизайн и почему реакция коллег свелась к высмеиванию, а не к конструктивной обратной связи вида «давай здесь переделаем вот так, а вот здесь эдак, потому что у нас такие-то цели и мы их достигаем так-то». В любом случае, когда я слышу, что вопросы проектирования обсуждаются в терминах нравится/не нравится, то сразу напрягаюсь, потому что вспоминаю про Культ Карго. Не бывает правильных или неправильных решений вне контекста. Копирование архитектуры с предыдущего проекта без анализа текущей ситуации — тревожный звонок, потому что в IT условия каждого проекта могут варьироваться в достаточно широком диапазоне. В TS поддерживаются классы, в том числе абстрактные. Что смешного в абстрактных классах? Ну и вишенка на торте обвинить коллег в бездарном идиотизме. Это безусловно очень взрослая и профессиональная реакция. Именно так люди и становятся синьорами.

Затем началась черная полоса. Фигак! Я не знаю, что там за типы индексов в SQL. Бам! Забыл, когда вызывается статический конструктор в шарпах. Упс! Я не могу правильно реализовать IDisposable без гугла. Пытаюсь мутировать стейт в реакт компоненте... «Я научился быстро учиться» оказался неправдой. Я учился не быстрее, чем все остальные. И мне потребовалось слишком много времени, чтобы это понять... Мой скилл оказался как обоз — лебедь, рак и щука пытались тащить его в разные стороны. Я не стал автоматически сеньором во всем. Я просто стал мультимидлом, посмешищем для сорокалетних сеньоров одной технологии. И тогда я пришел к выводу, что выбирать путь фулстека — ошибка.

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

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

Конечно, если взять двух однояйцевых близнецов и одного из них заставить по восемь часов в день пять дней в неделю программировать, а другого — играть на гитаре, скорее всего первый станет неплохим программистом, а второй — музыкантом. По крайней мере так я себе объясняю, почему программист из меня лучше, чем гитарист, ведь на программирование я тратил около восьми часов в день в течение пятнадцати лет, а музыка всегда была и остается хобби:) Часто ли ставят такие эксперименты с близнецами и повторимы ли результаты таких экспериментов в реальной жизни? Кто-то готов тратить на работу четыре часа в день, а кто-то — двенадцать. Кстати, не факт, что тот, кто посвящает работе двенадцать часов в сутки обязательно перегорит и в итоге будет несчастлив. Бывают очень увлеченные люди, а бывают те, кому и четыре часа втягость.

Есть ли прямая связь между затраченным временем и успешным успехом? Любой педагог скажет, что всех студентов можно условно разделить на три группы:

  • те, кто научатся независимо от качества программы и преподавателя

  • те, кто не научатся ни при каких обстоятельствах

  • и самая большая группа  - те, чье качество обучения напрямую зависит от качества образовательной программы и качества педагога

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

Последние пять лет у меня была возможность наблюдать за тем как учатся студенты: я преподаю курс по выбору в Казанском Федеральном Университете. Курс имеет ограничение на количество студентов, потому что в сутках всего двадцать четыре часа, а еще я много сплю. Знаете, что я наблюдаю? Чем выше средний балл по всем предметам, тем лучше студенты занимаются у меня на курсе. Обратное тоже верно. Иными словами, троечники учатся спустя рукава по всем предметам, а отличники успешны не только в программировании, но и в математике, истории и философии. Таким образом нет прямой зависимости между прошедшим временем и полученными знаниями студента в одной или нескольких областях. Ещё интереснее то, что нет прямой зависимости между знаниями и тем, на сколько хорошо человек будет работать, но об этом в другой раз.

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

Смотри выше, нет не любой и нет, не шарит. А если шарит, так это же хорошо! У этого человека есть чему поучиться. Это неиссякаемый источник личного роста, а не самобичевания. 

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

Пожалуй, это единственный частично-верный тезис. Новые версии языков, фреймворков, технологий больше не вызывает былого щенячьего восторга. Здесь все просто: бесполезно гнаться за всем и сразу. Выбирайте основную специализацию, а остальные навыки поддерживайте по мере необходимости. Лайфхак: если пару лет не заниматься Реактом, то можно пропустить пару десятков версий и посмотреть state of the art на момент, когда Реакт снова потребуется. Ну завезли туда хуки вместо классов, ну и что такого. Классы же не выпилили с концами, просто стало немодно их использовать. Не надо лезть на амбразуру, бить себя в грудь и бросаться проектировать фронтенд после долгого перерыва. Пообщайтесь с лидом, уточните почему в проекте сделано так, а не эдак. А фронт-лид наверняка может чему-то научиться по беку у вас. Реализуйте свои сильные стороны и просите помощи где вы слабы, а не кройте всех несогласных х-ми по любому поводу и без. Будьте t-shaped (или дуал-классом) и станете фуллстек-синьором или милордом, как больше нравится.

Комментарии (35)


  1. Akter
    03.09.2021 15:00
    +8

    Спасибо, ваша статья содержательная и полезная, но в ней высказывается предположение, что лирический герой в исходной статье и есть её автор. Насколько я успел ознакомиться с творчеством @fillpackart,речь в них всё же не о нём самом, а некий собирательный образ, а повествование от первого лица -- художественный приём.


    1. marshinov Автор
      03.09.2021 15:02
      +6

      Может и так. В этом случае следует читать "лирический герой автора (художественный прием) ошибается, потому что и далее по тексту";)


  1. cdmnk
    03.09.2021 16:22

    Знания, которыми ты не пользуешься, вымываются из памяти. Ты можешь прийти студентом со знанием десятка языков и нескольких платформ, но через десяток лет сможешь пользоваться только теми, что постоянно приходилось использовать в деле. До тех пор, пока активно используешь два языка ты можешь в них развиваться или хотя бы поддерживать уровень актуальных знаний (какой ценой?), но на остальных с трудом наколбасишь Hello World с помощью гугла. И тут возникает вопрос — стоило ли тратить время, если ты всё это забыл? Я хотел бы услышать здесь чужое мнение
    PS Многие учили когда-то Basic, Pascal, да даже C, а если бы сейчас могли выбрать изучать вместо них любимый язык, согласились бы?


    1. nevoroman
      03.09.2021 16:27
      +7

      Вопрос того, на чем ты фокусируешься. Изучать языки как функции и операторы действительно довольно бессмысленно, но вот концепции это совсем другое дело.

      Если бы я не полез учить Haskell, мне было бы куда сложнее понять часть особенностей C# и многих других современных языков.

      Если бы я не полез учить Python, то не почувствовал бы особенностей работы с динамической типизацией и рядом других особенностей.

      Учить похожие general purpose языки достаточно бессмысленно, разумеется. Особенно бесполезно заучивать функции и операторы. А вот смотреть на разные языки и подходы, чтобы понять лежащие в их основе идеи и механизмы это как раз полезно и переиспользуемо.


      1. cdmnk
        03.09.2021 16:42

        Звучит как T-shaped: крутые знания в одном, базовые во многом. Очень полезно, да и с опытом просто неизбежно лезешь в соседние технологии. Но изучение концепций это ни разу не фуллстек


        1. nevoroman
          03.09.2021 17:17
          +5

          Зависит. Именно из-за знания концепций я легко пишу продакшеновый код на разных языках, когда этого требует проектная необходимость. Даже low-level штуки гораздо легче учить — опять же, там используются некоторые общие концепции. Хаки и те похожи.

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


    1. marshinov Автор
      03.09.2021 17:11

      Это неверно. Смотрите Асю Казанцеву про долговременную память.


      1. cdmnk
        03.09.2021 17:40

        Посмотрю, спасибо. Но пока не посмотрел, возможно вы выскажете своё мнение тезисно? Так-то мнение я высказал на основе своего опыта, там как раз 20 лет набралось :)


        1. marshinov Автор
          03.09.2021 17:55
          +9

          То, что попадает в долговременную память уже "не вымывается". Оно остается условно-навсегда. Вы правы в том, что если вы выучили что-то 20 лет назад, то за 20 лет версии этого "чего-то" уйдут далеко вперед и знания будут не первой свежести. Кроме того, неиспользуемое действительно "условно забывается". Иными словами, без тренировок теряется "форма". С этим ничего не поделаешь. В людей "свободно владеющих C++, React, Haskell и еще 20 страшных слов" я не верю. Мой тезис в том, что сейчас зачастую доходит до абсурда, когда люди пишут даже не на одном языке, а на одном фреймворке.

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


          1. saboteur_kiev
            03.09.2021 23:44
            +3

            Плюс есть еще архитектурный вопрос. Музыкант не забудет как он мог играть, и что делать чтобы научиться играть примерно также.
            Поэтому знания мелких деталей могут выветриться, но важные аспекты, которые нужны чтобы спланировать архитектуру как раз останутся.


    1. movl
      03.09.2021 18:42
      +3

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


  1. YSpektor
    03.09.2021 19:26
    +4

    Сеньор, имхо, это не столько тот, кто знает кишки инструмента, с которым работает, а тот, кто видит последствия принимаемых им решений. А то видел я таких "сеньоров", за которыми потом несколько лет прибираться нужно было


  1. danilstepa
    03.09.2021 21:08
    +1

    Очень похож путь:) Правда пока не архитектор, а так team lead, но приходится копаться и в бэке .net, и xamarin, и в typescript angular, и в java с obj-c часто залезаю, чтобы разобрать специфичные задачи которые на текущем проекте требуется. Есть интерес именно разносторонне расти.

    У хороших знакомых недавно систему акторов продвинул в проекте, потому что там iot большой, правда akka.net так как у них все дотнетчики, ребята джуны, но парни уже хорошо навострились, и сами кайфуют от того как пишется.

    Это сложно, может конечно потому что я необразованный, и некоторые вещи приходится вдалбливать себе в голову, а уже и дети, и куча других проблем, но интересно, именно в кругозор развиваться, а не затачивать один инструмент.

    З.Ы. Почти к вам устроился в прошлом году:) Жаль проект на который меня хотели, немного забуксовал, но Анна и Андрей очень крутые, хоть я и подтупливал на собеседовании)


  1. avengerweb
    04.09.2021 00:32
    +1

    фулстэк это как инвестировать в лонг-терм фонд. Это сильно отличается от специализации, когда через 2 года вы сможете стать сеньором реакт разработчиком. Тут главное выбрать правильный набор языков. Нытьё про фс обычно можно услышать от ребят которые выбрали js на бэк/ фронт /десктоп/ мобилы.

    Выбирая свой стэк вы обязательно должны взять:

    Enterprise язык - java или C#, они развивают медленно, ещё медленнее они обновляются в enterprise приложениях. Это даст вам подушку на ближайшее 3-6 лет - вы всегда будете востребованы, даже не следя за релизами.

    Раз два и в прод - php, python. Позволят вам поднимать не большие заказы с фриленса на досуге, копаться в легаси или автоматизировать заказ ???? пиццы. Php (нет он не умер) проще зайдет после Java/C#

    Js - вам придётся, выбора просто нет, его изучать веселее всего, особенно если речь про браузер.

    Базы данных - PostgreSQL/MySQL + MongoDB, реляционнки для enterprise, монга будет схожа с другими документоориентированнвии бд, в общем случае нужно понимать концепт.

    Future vision - golang, kotlin, swift, rust - возможно сможете попасть в интересный проект или просто показать на интервью что вы идёте в ногу со временем.

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

    Несколько лет пройдёт и вы сможете спокойно онбордить всех этих джунов и мидлов в разные команды, с таким же успехом как это делает сеньор определенного направления. Развитие карьеры, вы 100% не будете тем сеньором который получает по ляму баксов в год и пишет крутой оптимизированный код для <выберите специализацию>, но вы сможете стать Теч/Тим Лидом, менеджером, СТО, архитектором с таким же пейгрейдом, правда написание кода перестанет быть вашей основной обязанностью.


    1. PavelGatilov
      07.09.2021 10:32
      +1

      В Facebook всех кого угодно любят. У нас 40000 инженеров работает, есть место для всех.


  1. priwelec
    04.09.2021 00:49
    +1

    милорд =)))))
    а откуда этот мем пошёл, интересно?


    1. ignat99
      04.09.2021 02:14
      +1

      Из "3 мушкетеров". Там песня была - Милорд я не сказала да...


    1. arka33
      05.09.2021 14:24
      +1

      из твиттера, по-моему. скриншот переписки


  1. ignat99
    04.09.2021 02:08
    -6

    Фулстеки (если под ними не понимать тех кто действительно знает сокеты на самом низком уровне и само ядро OS и пр., а понимать тех кто освоил Реакт JS с хуками) никем не будут в будущем.

    Потому что их любимый фреймворк устареет (React уже устарел для больших проектов в нём нет стандартов по разделению кодов компонентов), а новый себе сейчас они написать не в состоянии, потому что С++ и систему не знают.

    А будут фреймворки на HDL или System C для чистого железа (либо любых других субстратов, кремния, арсенида-галия, ниобия или биохимических).


  1. mvv-rus
    04.09.2021 02:14
    +3

    Знаете, а ведь правы (IMHO) одновременно и вы, и Король Разработки (лирический герой Фила Ранжина): фуллстеки — это вечные миддлы, в том числе — и миддлы-архитекты. Потому как архитектор — это отдельная от кодеров специальность, которой, вообще-то, надо учить отдельно, но которой, похоже, просто не учат — а потому миддлы-самоучки там востребованы.
    PS А вообще-то, путь развития отрасли — это всегда специализация. Примерно как в промышленности — от ремесленников-мастеров позднего Средневековья, делавших свои поразительные chef d'oeuvre, через мануфактуры Нового Времени, где отдельные операции делались куда более узкими специалистами, и до современных промышленных предприятий, в которых эти операциии подверглись всяческой механизации-автоматизации, и требуют совсем немного квалификации. IMHO промышленная разработка ПО, как очень молодая отрась, просто находится в начале этого пути, а потому вынуждена использовать, в основном, мастеров. Но тот, кто научится использовать более узких, а потому — более дешевых специализированных работников (особенно — из числа вайтишников) сделает большой шаг в организации процессов разработки. И победит в конкурентной борьбе на рынке.
    Ждем.


    1. event1
      06.09.2021 12:07
      +1

      Примерно как в промышленности — от ремесленников-мастеров позднего Средневековья, делавших свои поразительные chef d'oeuvre, через мануфактуры Нового Времени, где отдельные операции делались куда более узкими специалистами, и до современных промышленных предприятий, в которых эти операциии подверглись всяческой механизации-автоматизации, и требуют совсем немного квалификации

      Сегодня на крупных предприятиях с высокой степенью автоматизации значительная часть рабочих — это квалифицированные операторы станков, программисты PLC и т.д. Таким образом, квалификация рабочих прошла через классическое отрицание отрицания.

      Собственно у программистов было то же самое. Сначала были супер-универсалы, которые утром паяли компьютер, а вечером писали для него ОС и компилятор. Потом прошло разделение. Дошло до специализации по отдельным версиям библиотек. Теперь, в моде опять широкий профиль


  1. Bone
    04.09.2021 11:07
    +1

    Мне кажется в пользу фуллстеков играет быстрое развитие технологий. Например, если сейчас взять VueJS и за день прочитать документацию, то скорее всего напишешь не хуже, чем какой-нибудь сеньор на чистом js или jquery. Я к тому, что выход новых языков и фреймворков, в некотором смысле обнуляет сеньорство и позволяет джунам/миддлам на новой технологии быть не менее эффективными, чем сеньор на старой. Для фуллстеков достаточно легко переходить на новые языки и технологии и им не приходится жалеть о потраченных годах на изучение уже нерелевантных вещей.


    1. dimti
      07.09.2021 14:46

      Рад видеть, что что тут не только про реакт.

      Фуллстек миддл, прочитавший за день документацию с vuejs станет через год не более чем миддлом в vue. А тот чувак, который не играл в фуллстек и любит во фронт, станет хорошим спецом в vue3 и typoscript за год.


  1. bogolt
    04.09.2021 15:12
    +1

    В вашей статье допущена критическая ошибка.
    Развитие мультикласса в ДнД остатет всего на 1 уровень а не в два раза.
    Вот посмотрите на таблицы опыта персонажей в ДнД 2

    таблицы опыта классов




    Итого персонаж набравший 500 000 опыта может быть или Воином 10 уровня, или Магом 11 уровня или же мультиклассом Воин-Маг на уровне Воин: 9, Маг: 10


    1. marshinov Автор
      04.09.2021 18:26

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


      1. bogolt
        04.09.2021 23:16
        +1

        А не воспринимайте всерьез =)
        К тому же я никуда не лез, просто помню что опыт каждый уровень удваивается, отсюда и разница в росте не такая огромная. Вообще днд это же не про реальную жизнь поэтому и сравнение не очень работает. Но как визуальное представление вполне норм.


        1. marshinov Автор
          06.09.2021 00:53

          Заглянул в табличку опыта BG2 (собственно тормозные мульти-классы я помню от туда, а не из настолько D&D). Там даже не всегда в два раз. У Друида на уровнях 13-16 происходит что-то странное с опытом. В D&D есть какое-то объяснение этому, но я уже не помню деталей. В итоге Джахейра намертво залипает на 14 уровне друида и плохо прогрессирует как воин. Поэтому у меня постоянно была дилемма: то ли заменить ее кем-то более эффективным с точки зрения распределения XP, то ли оставить. Все-таки они на пару с Минском только из первой части перекочевали (Имоен первые три акта сидит в темнице).


  1. moroz69off
    04.09.2021 15:28

    Непременно прочту статью до конца, но спешу высказаться (трагикомично): 51++ лет, чуствую себя вечным "жуном", хотя "жоины" на "мускулах" накачал, в ЯП "хтмл" даже умею, и "дотнет" читаю в оригинале. Когда не умеешь программировать - программируешь с радостью первооткрывателя, но с опытом радость от "готово, я сделяль" тухнет, приходит желание написать 100500 тестов на 1 фичу, чтобы не было мучительно больно. Вот тут и раскрываются чакры, и понимаешь - что ничего не понимаешь, и начинаешь думать головой, но не переполненной кучей.
    Пошел дочитывать...
    Всем добра.


    1. moroz69off
      04.09.2021 15:43

      в ЯП "хтмл" даже умею, и "дотнет" читаю в оригинале

      Да мало ли их, скилов, весь фулстек наперевес...

      Кроме си, си ниасилил...
      СиЖун
      СиЖун


  1. web1nick
    04.09.2021 15:33
    +1

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

    Но да, я считаю, что самые умные люди на планете, это те, которые хороши в широкой специализации. Они могу смотреть на проблемы с разных сторон. Плюс общее развитие, который получает интеллект за счёт самых разных знаний, и необходимости всё время обучаться. Причём самое главное обучаться не только в привычной тебе области, а и совершенно новых, что заставляет мозг изрядно трудиться


  1. sarapinit
    04.09.2021 19:38

    напорется он пару раз на стирающиеся дженерики

    Что за зверь такой?


    1. speshuric
      05.09.2021 01:18
      +1

      Type Erasure. Собственно, в том-то и пример, что [почти] любой миддл из мира Java не может этого не знать.


      1. sarapinit
        05.09.2021 06:42

        Спасибо, гляну


        1. marshinov Автор
          05.09.2021 23:50

          @speshuricправильно написал про type erasure. Добавлю, что проблема настолько актуальна, что в Kotlin даже специальное ключевое слово добавили.


  1. sarapinit
    04.09.2021 20:27
    +1

    Максим, спасибо за статью, спасибо за то что продвигаешь путь расширения кругозора вместо пути уныния и страдания)