Личный опыт и выводы после смены профессии с дизайнера на программиста

в 13:56, , рубрики: личный опыт, Программирование, Разработка веб-сайтов, смена профессии

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

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

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

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

Я стал программистом в начале 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#, ну так вышло.

Автор: Святослав Комаров

Источник

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js