Привет, Хабр. Сегодня своим опытом решил поделиться Андрей Борю, разработчик и преподаватель курса DevOps Engineer в Нетологии. Андрей рассказал о том, как изменить направление карьеры и освоить новые языки программирования прямо в процессе работы. В чём главная мотивация разработчика — под катом.

Как складывалась моя карьера разработчика

С программированием я познакомился ещё в школе: освоил основы Visual Basic и Pascal, участвовал в тематических олимпиадах. После окончания школы в 2002 году я поступил в Московский институт стали и сплавов, где был председателем турклуба и сделал для него сайт. На старших курсах нашёл первую работу в веб-студии: занимался разработкой несложных сайтов, программировал на PHP и JavaScript.

Потом у меня был опыт работы в крупных IT-компаниях. По приглашениям работодателей из-за границы я много переезжал. Последние два года я нахожусь в Индонезии, до этого жил в Таиланде, Филиппинах, во Вьетнаме, Мексике, Литве. Хочу посмотреть мир и дальше, но сейчас я рассматриваю Индонезию как основную локацию и отправную точку: с жизнью здесь связаны мои хобби и интересы.

Сейчас я работаю в азиатской компании Snapcart. У меня два основных рабочих проекта. Один из них связан с машинным обучением и BigData: мы анализируем различные покупки на разных островах в Индонезии, составляем профиль покупателя, собираем статистику потребления и некоторые другие вещи, которые полезны производителям и продавцам для оптимизации поставок. Второй проект — приложение, позволяющее людям ставить цели в плане похудения, набора веса и мышечной массы, планировать рацион и упражнения.

Последние два года я нахожусь в Индонезии
Последние два года я нахожусь в Индонезии

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

Как я изучаю IT: истинная мотивация и источники знаний

На моей первой работе, чтобы войти в процесс, мне понадобилась буквально пара недель изучения документации для PHP и JavaScript, тем более, я уже представлял себе, как работает программный код. Когда ещё в школе я учил Basic и Pascal, то невзлюбил толстые многостраничные учебники и предпочитал небольшие пособия. В процессе работы мне тоже проще было работать с документацией, чем с книгами. 

Для меня лучшим алгоритмом изучения программирования является конкретная практическая задача, у которой есть сроки и оплата. Без этого изучать программирование у меня не получается. 

Работая в международных компаниях, я стал заниматься DevOps, а потом в определённый момент перестал быть просто программистом и стал больше заниматься архитектурой приложений в целом. Так я выучил Java и Python, тем самым сменив специализацию. А на текущем месте работы пишу в основном на Golang.

Для меня первичен поиск конкретных проектов и вакансий, а знания и навыки уже можно выучить и наверстать под то, чем ты занимаешься. Для решения задач по машинному обучению лучше всего подходит Python, для разработки не очень сложных веб-приложений можно использовать php, для создания  большого количества микросервисов  – Golang и для решения специфических задач  — Java.  

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

Причинами смены специализации стали и финансы, и желание изучать новое. Когда программист долго работает над чем-то одним, то со временем заниматься этим становится скучно. Поэтому IT-менеджеры часто дают программистам задачи вне рамок их компетенции, чтобы тем было интереснее. 

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

Что делать, если вы хотите сменить язык программирования

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

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

Естественно, что опытный программист уже не будет начинать работать с новым языком с уровня junior. В целом, понятия junior, middle и senior говорят не о знании конкретных языков и технологий, а об опыте программирования и построения IT-систем в целом. Сейчас я уже несколько лет работаю на позициях senior, principal.

Переход с PHP на Java прошёл достаточно легко, потому что фреймворки и подходы очень похожи, PHP как бы догоняет Java. Из фундаментальных знаний мне помогло понимание алгоритмов и архитектур построения систем, опыт работы с данными, опыт работы DevOps, ну и, конечно же, кругозор, приобретённый на прошлых местах работы.

Когда программисту не скучно, он работает гораздо эффективнее
Когда программисту не скучно, он работает гораздо эффективнее

Что касается Golang, то он вообще не является объектно-ориентированным языком программирования в привычном понимании, в нём используются другие подходы к структурированию кода и данных. Но алгоритмы и структура языков везде похожи и потому понятны: запоминаешь отличия синтаксиса, начинаешь использовать, в процессе вникаешь в особенности. Но мозг каждый раз приходится перестраивать.

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

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

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

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


  1. endlessnights
    17.11.2021 09:31
    +6

    Статья читается менее чем за 5 минут, но таких текстов я видел много в Интернете. Пожалуйста, опишите подробнее различия, особенности, и возможно переезд в Индонезию, типичные вопросы на собеседовании. Сейчас это выглядит так ИМХО: «Я в Индонезии, ЯП учить несложно, нужно только захотеть».


    1. vyacheslavchulkin
      17.11.2021 09:48
      +2

      Это наверное редакторы пишут, которые судя по всему не в теме.


  1. vyacheslavchulkin
    17.11.2021 09:47
    +1

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


    1. endlessnights
      17.11.2021 09:55
      +1

      Тонны открытых вкладок, видео от индусов (ничего против не имею), stackoverflow (и его переведенные гугл-переводчиком аналоги) и постоянные мысли: «у них всё работает, а ты сделал также и не работает», а потом выясняется, что у них более ранняя версия фреймворка, а в новой всё иначе. Я так Django изучал и полностью окунулся в эти дикие воды.


  1. els24
    17.11.2021 13:09
    +1

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


    1. sshikov
      17.11.2021 19:39

      Автор на самом деле выучил несколько достаточно похожих языков (в высокоуровневой классификации они относились бы к одному классу). Далеко не всегда будет так. Если бы он изучил, условно, Лисп или скажем Хаскель — ему не было бы так просто.


  1. Kirthgreat4
    17.11.2021 17:42
    +1

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


    1. Deosis
      18.11.2021 15:01

      А какие проблемы были при изучении?

      Просто, есть мнение, что для математиков сложна операция присваивания, для других - рекурсия.


    1. vectorplus
      25.11.2021 21:26

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

      А вот "я не хочу этим заниматься, мне не нравится" это совершенно законная причина не учить язык.


    1. s_poliakov
      26.11.2021 12:39

      У меня позади иняз, а впереди, будем надеяться, Python для облегчения своей непрограммерской работы. Тоже месяцами страдал ощущением, что мозги просто не в ту сторону 20 лет назад были повернуты, а теперь чего уж.

      Но потом случился какой-то скачок. Видимо, должен просто накопиться "лексический багаж", а потом возникнуть челендж типа "а как бы мне автоматизировать вот это переименование файла по 500 раз на день?" Идешь гуглишь, как. Потом пытаешься адаптировать нагугленное месиво под свою задачу. Примерно так же, как я бы сейчас переводил абзац на немецкий, если бы, не дай боже, возникла такая потребность: гугл и опыт английского)


  1. AntonyDeveloper
    26.11.2021 12:39

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