О чем эта статья


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


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


Немного про себя


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


Как это произошло и почему? Причины две — я не справился с дизайном это раз, депрессия это два. Чтобы стать успешным дизайнером настолько, насколько я бы хотел, мне нужны был WOW эффект, а не только логичный UX, лаконичная композиция, оперирование сценариями использования продукта и некоторые навыки менеджера продукта опять же. Нужны были классные, сочные картинки. Для них мне не хватало владения цветовой композицией, и то ли в силу депрессии то ли еще по какой-то причине освоить ее у меня не получалось. А дальше… сначала просмотр фильма Ex Machina что-то перевернул во мне и я записался на курс Machine Learning от Andrew Ng. Мне очень понравилось, просто дико, несмотря на бессонные ночи и красные глаза по утрам.


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


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


Про грабли и ошибки новичка


Когда я менял профессию я не знал нескольких вещей и сделал несколько ошибок, за которые пришлось заплатить нервами, бессонными ночами и деньгами.


Во первых как я думаю, есть некая шкала на которой можно определить программиста да и человека наверное тоже. На одном конце ему интересно все, он хочет помогать общему делу, на другом полная концентрация на чем-то одном, будет копать одну траншею годами, десятилетиями и ему с этим ок (наверное). И там и там есть свои преимущества, недостатки, и подводные камни о которых надо знать. Сам я принадлежу к первому типу, "безумный Тигра", так что про него могу больше рассказать. Но что точно важно — как можно раньше понять к какому типу вы относитесь.
Если вы любите копать что-то одно, то у вас врядли будут проблемы при устройстве на открытом рынке труда — узкие специалисты быстрее получают углубленный опыт в своей области за одно и то же время, работодателю проще взять вас, потому что он хотя бы знает что вы собаку съели на чем-то одном что ему очень важно — например оптимизации анимации кнопок в браузере на сайте. Но не все так просто. При найме конечно вам будут очень рады, но в процессе работы могут возникнуть сложности, потому что коллеги очень вероятно будут ожидать вовлеченности в продукт в целом и весь его технологический стек. Готовности помочь, в том числе выйдя за рамки своих прямх обязанностей — поработать без определенного ТЗ, поштурмить с продуктовиком, говорить с бекендером на его языке и тп. А вот вам вероятно будет это до одного места. Вас скорее всего не повысят да и вы сами этого не захотите. Насколько я понял, те кто сидят на краю этой шкалы меняют работу раз в год-два чтобы индексровать зарплату. Потому что это впринципе единственный способ, если вы работаете в офисе. Второй путь — фриланс с выходом на более развитые рынки, хотя в конце концов если вам нужно в самом деле много денег — придется все же расширять арсенал навыков.


Если вы из тех кому приятно помогать коллегам, готовьтесь. После того как вы достаточно (для первого найма) изучите что-то одно, то с чем вы первый раз решите выйти на рынок, вас будет мотать из стека в стек из технологии в технологию. Вы можете обнаружить себя в роли девопса, менеджера проекта, дизайнера продукта (не того который рисует), архитектора и черт знает кого еще. Вы наберетесь очень разнообразного опыта и вам будет о чем рассказать. А уж если вы попадете в хорошую разностороннюю команду с большим интересным продуктом — то держите меня семеро. Беда в том что проекты заканчиваются, компании банкротятся, начальники самодурят, и вот вы без работы, перед вами открытый рынок труда и вы ему — не нужны, ему нужны надежные узкие специалисты. Все двери будут закрыты. Ну, потому что даже если вы по одной специализации пройдете все технические интервью, то вам укажут что вот кнопочки вы полировали всего полгода за последние несколько лет, а им нужен полирователь кнопочек. И тут оказывается что вам надо идти на ведущего разработчика или выше, но облом — туда обычно не берут "с улицы". Единственный выход про который я знаю — строть личный бренд. Не важно вы в офисе работаете или удаленно по контрактам — делайте что нибудь. Референсы вам кстати не помогут. Я знаю пока про два варианта — посещать отраслевые конференции, с докладами вообще шик, и писать личные блог. Что угодно, хоть любую ерунду но начать это делать в первый же год с момента как вас наняли первый раз. Это важно.


С рынком труда тут да, есть противоречие — на найме хотят видеть одно, а в команде потом хочется работать с другим.


Про технологии и "какой же язык мне выбрать?"


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


Когда вы выбираете, вам придется определиться, и чем раньше тем лучше — осознать что выбранный тобой стек тебя ограничивает не очень приятно. Определиться с тем чего вы хотите — надежности, денег и хорошей базы знаний, или я даже не знаю, чего-то еще совсем другого. Если первое — мне кажется лучше выбрать из тех динозавров которые еще живы и неплохо развиваются. Посколько я сам весь про веб то могу сказать тут есть две надежные технологии. C# и Java. PHP разработчики могут возмутиться, но предлагаю оставить этот вопрос, на вкус и цвет так сказать… Особенность в том что проекты могут долго жить и развиваться без дополнительных трудностей только когда написаны на зрелых языках с достаточным инструментарием для структурирования кода. Это раз. Вторым выбором будет конкретный фреймворк. .Net или Spring или что-то еще возможно. Тут критерий такой — это должно часто встречаться, использоваться в больших корпорациях и долго живущих проектах и в идеале, на этом должно быть удобно работать. Например Spring Boot сейчас позволяет как быстро прототипировать сервисы, так и писать серьезные вещи с очень навороченной архитектурой и массой функционала нужного бизнесу, причем он разворачивает его "из коробки".


Напротив все что "модно" — как правило очень молодо, имеет слабую или наивную инфраструктуру но зато сообщество фанатов с горящими глазами готовых продать тебе что угодно просто по доброте душевной. Проблема всех таких новых или не получивших широкого применения технологий в том что для них нет достаточного готового инструментария — вам скорее всего придется писать очень многое из тривиального функционала самому, например авторизацию через социальные сети. Это на самом деле чудовищно. Бизнес редко хочет платить деньги за "велосипеды". А вам потом еще поддерживать этот код. Примеры? Для Python нет ни одного полноценного веб фреймворка (кроме Django, с рядом оговорок) с которым можно жить и не свихнуться работая над проектом больше года или двух. Проблемы у вас начнутся прямо сразу причем довольно тривиальные, такие как циклический импорт модулей. Простите что обошел стороной PHP, на нем много что делают, но есть момент — я не слышал чтобы кто-то из больших компаний использовал именно его, а не сильно переделанный форк, как это сделал Facebook.


Отдельными строками стоят своего рода монополии. Swift для экосистемы Apple, которая сама создает свои фреймворки для разработки приложений. Google с Android (кстати тоже Java/Kotlin). Язык и среда разработки R для анализа данных. JavaScript как единственный язык программирования выполняющийся в браузерах.


Со Swift все вроде понятно. Программистов мало, платят хорошо (по слухам), язык развивается бурно, он модный, но от хайпа его отличает то что он обратно совместим с динозавром ObjC и всем что на нем написано за долгие годы. Так же за ним стоит Apple и она очень быстро развивает платформенные фреймворки. Кроме того он может компилироваться в другие системы и вроде бы обещают обратную совместимость с C/C++. Если это произойдет, даже не знаю… будет что-то или очень хорошее или что-то еще. Потому что на C/C++ написано уже столько всего что голова идет кругом можно, это огромный ресурс.


JavaScript. Язык как язык. Многие считают его недо языком. У него много проблем, это правда. В осоновном это родовые травмы которые почти невозможно преодолеть в техническом смысле. Его можно использовать для серверных приложений, но я бы не рекомендовал идти этой дорожкой. NodeJS это чистый хайп о котором его создатель сам прямо сказал что были совершены фундаментальные ошибки при его создании. Что касается браузерной разработки, я бы рекомендовал брать то что больше всего используется сейчас, это React в связке с Redux. Просто его много. Он везде нужен. Вы найдете работу. Хоть вы просто в браузере, хоть вы фулстек — на филе миньон с керамического гриля всегда хватит.


Как итог, свои личные выводы


Если бы я выбирал заново, я бы взял связку Java/Spring + React. Конечно Spring тогда это не спринг сейчас, и то же самое относится к React, но критерии все те же.


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


Java же дает огромное поле уже готовых решений и почти любые "хотелки" вашего клиента или работодателя можно будет ну если не легко, но хотя бы реализовать не через забор костылей. Искренне верю что с .Net и особенно развитием кроссплатформенной .Net Core все настолько же прекрасно, но мне лично не очень нравится C#, ну так вышло.

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


  1. frostspb
    01.09.2019 20:05
    +5

    Опять кто-то окончил курсы по Джаве


    1. skomarov Автор
      01.09.2019 21:45
      -1

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

      Что-то более содержательное есть что сказать?


  1. kranid
    01.09.2019 22:02

    Это конечно крайне субъективно все, однако странно, что java кому-то может нравится больше, чем c#, то есть если выбирать платформу исходя из соображений её востребованности/популярности/оплачиваемости, тут java вероятно может быть предпочтительным, но если и есть какие-то преимущество у .net, то это c#. Я конечно более всего знаком именно с c#, но когда вынужден был работать с java под android, то периодически сталкивался с отсутствием каких-то возможностей.


    1. skomarov Автор
      01.09.2019 22:21
      -1

      А какого плана возможностей нехватало больше? Фреймворка или языка? Подозреваю что языка, но тогда интересно какая версия джавы была, или это был уже Kotlin?

      А так-то конечно пост восновном субъективный. И мне в данном случае приглянулся именно Spring, а с ASP.NET остались воспоминания о проблемах с .Net Core. Хотя вот недавно спрашивал людей, говорят что все уже давно отлично работает. Остается только руками развести. Как язык C# наверное более развит и проблем поменьше, судя по тому что в продакшен проектах по прежнему предпочитают запускаться на Java 8 а не 12 например…


      1. Kanut
        02.09.2019 12:18

        Один из сильных аргументов в сторону.Net это например Nuget с огромным количеством бесплатных библиотек и фреймворков. Причём многие из них очень хорошего качества.
        Плюс IDE у .Net на мой взгляд лучше. Но это уже наверное субъективно.


        1. skomarov Автор
          02.09.2019 12:59

          Получается плюсы так на так. В противовес NuGet в Java есть два опенсорс репозитория, и несколько сборщиков на выбор которые установят вам все зависисмости которые укажите. Истоярия с .csproj декларацией и NuGet примерно похожа, разве что да, признаю, тут вы избавлены от мук выбора сборщика для проекта, коих для Java больше двух. Про IDE — _бесплатный_ да, наверняка лучше. Ну надеюсь мы не сравниваем VS и Eclipse всерьез…


  1. evocatus
    01.09.2019 23:50
    +1

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


    1. JustDont
      02.09.2019 10:51

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

      А когда работа хотя бы на 30-40% (лучше побольше, конечно) нравится — остальное там обычно складывается: и задачи решаются, и опыт полезный нарабатывается, и в послужной список есть, что вписать, и работодатель меняется, и на тупые вопросы на собеседовании а-ля «а почему вы идете именно к нам» ты можешь ответить без выдумывания правдоподобных тезисов.


  1. w3ga
    02.09.2019 09:43

    мммм, программист со стажем 3 года… уже учит других как «жить»


    1. lotse8
      02.09.2019 11:25

      Давно известно же, кто умеет — тот делает, а кто не умеет — тот учит.


      1. skomarov Автор
        02.09.2019 16:30

        Всмысле, радикально профессию менять? Так сделал же. Давайте-ка с тем не всорачивать.


  1. Engenigger
    02.09.2019 12:06

    skomarov
    Не поделитесь, хотя бы в общих чертах, как получилось найти работу без опыта по новому направлению?
    Я вот уже давно пытаюсь сменить направление, хот и не столь кардинально (от программиста-ембеддера к прикладному). Но без опыта предлагают только Junior-вакансии с соответствующей з/п, на которую я пойти не могу. Так и вожусь с железками :)


    1. skomarov Автор
      02.09.2019 12:26

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


    1. sunki
      02.09.2019 13:25

      Пошел на джуна и увеличил зп в течение года в 3 раза. В чем проблема пойти на джуна? Главное проект выбрать не с точки зрения зп, а возможности прокачки опыта, иначе просто можно бесполезно потратить это время.


      1. skomarov Автор
        02.09.2019 13:26

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


        1. sunki
          02.09.2019 13:28

          Очевидно, что упадет, а как может быть иначе?


          1. skomarov Автор
            02.09.2019 13:40

            ну лично я предполагаю что человек опасается не просто так. у всех есть нижний предел после которого или в долги влезать или никак. 3 года не всякие долги выдержат.


            1. Engenigger
              02.09.2019 14:56

              Да, именно так. У меня текущая 120 тыр, а на позиции джуна максимум, что предлагали — 40 тыр.


              1. Kanut
                02.09.2019 15:03
                +1

                Какоего-то универсального ответа на такое нет.

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

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


            1. sunki
              02.09.2019 18:23

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


    1. Newrbinez
      02.09.2019 16:28

      Не поделитесь, почему желаете перейти с embedded? К этому подталкивают какие-то объективные факторы или просто само желание? Зарплату вы указали весьма неплохую.


      1. Engenigger
        02.09.2019 21:59

        Честно говоря, сам не знаю… Скорее всего просто устал и рутина заела. Но на данный момент я нашел другую работу, более сложную и интересную, — вроде попустило.
        А насчет размера з/п — при наличии 3-х детей дополнительные деньги никогда не помешают.


  1. unchase
    02.09.2019 16:28

    В мире .Net уже все замечательно, а будет только лучше)


  1. raingo
    02.09.2019 16:28

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


    1. skomarov Автор
      02.09.2019 16:28
      -1

      Вот это новость! Пруф пожалуйста, или небыло.


      1. nonname
        02.09.2019 18:18
        -1

        ActiveX, flash, WebAssembly то что сразу в голову пришло.


        1. skomarov Автор
          02.09.2019 18:53

          ух. первое и второе поросло пылью, wasm я даже не знаю. байт код JS, выглядит во всяком случае именно так. Байт код Java это java или уже нет? Экзистенциальный вопрос наверное. Блин да короче. Статья — для тех кто вкатывается, ну да конечно сейчасс новичек пойдет учить WASM… и чтобы потом что? На рынке что с ним? Спор ради спора. Минус однозначно


          1. 0xd34df00d
            02.09.2019 21:47
            -1

            WASM учить не надо, достаточно учить то, что в него компилируется. От C++ до хаскеля.