Привет, Хабр. Сегодня своим опытом решил поделиться Андрей Борю, разработчик и преподаватель курса 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 и хочет перейти на другой язык программирования: все мы разные. Я работаю на зарубежные корпорации, где взгляд может несколько отличаться от того, что принято в России.
Если в российских компаниях чаще спрашивают о том, как соискатель решал типовые задачи на прошлых местах работы, то в международных — о том, как бы он решил такую задачу сейчас исходя из знаний и опыта.
Но в целом разработчик может действовать во многих вопросах самостоятельно, не спрашивая менеджеров, а параллельно использовать какие-то интересные ему новые технологии, изучая их в процессе.