Обучение

Сообщение об ошибке

Обучение

Сообщение об ошибке

«Работодатели “голодны” до Go-разработчиков...»

18 июня 2020

По данным опроса HackerRank, на первом месте среди языков, которые разработчики хотят изучить в будущем, сегодня находится Go. И даже в недавно прошедшем в IT-Academy баттле технологий, этот язык тоже сумел заявить о себе. Чем привлекает он действующих специалистов и какие возможности предоставляет, в интервью объясняет Сергей Добродей, Senior Go Developer в компании SoftSwiss.


– Сергей, расскажите, как давно вы программируете на Go? Почему выбрали именно этот язык?

– Я в IT с 2011 года, начинал с C# и С++, потом несколько лет писал C++ и С (от демонов для linux до кроссплатформенных десктопных приложения на Qt). В 2016 году присоединился к команде, работающей над масштабным проектом (мультимедиа + видеоаналитика), ядро которого было написано на C++. Проект уже тогда был «взрослым», он развивается и сейчас. Естественным этапом его развития стала реализация масштабирования. До этого мы использовали систему кластеризации собственной разработки. В дальнейшем решили опереться на опыт других разработчиков и использовать для кластеризации готовые подходы: контейнеризация на базе docker, оркестрация с помощью k8s. Часто бывает так, что разработка микросервисного приложения – это не столько разработка логики, сколько реализация взаимодействия с другими микросервисами. У нас использовались разные подходы: и REST, и RPC. Думаю, многие видели сравнение синтаксиса для работы с json в C++ и Go. С другой стороны, приложение – это не только API, у нас по-прежнему оставалась необходимость работать с библиотеками, написанными на С/C++ (собственные модули видеоаналитики, да и ffmpeg прекрасно подходит для работы с мультимедиа). 

Проведенные эксперименты с замером производительности CGO-вызовов показали приемлемые результаты в плане производительности. Поэтому было принято решение переписать ядро проекта с C++ на Go. В тот день я сперва прочитал спецификацию языка (кстати, если заскучали, постарайтесь вспомнить, существует ли в Go undefined behavior?), быстро пробежался по «A Tour of Go», потом начал вдумчиво изучать «Effective Go». После этого в голове крутилось: круто, круто, круто… Решил быстрее попробовать все в деле. 

В историях «мы переписали с языка X на Y и получили …», ключевым является переписали для любых «взрослых» X и Y, поэтому здесь не будет каких-то точных процентов, но могу сказать, что производительность компонента системы не снизилась (хотя в процессе сталкивались с различными «подводными камнями», но многие из них были связаны с особенностями подсистемы cgo), а скорость разработки продукта выросла, в том числе за счет широкого набора инструментов (pprof, vet, fmt, doc, fix).

– Для каких проектов и задач Go подходит лучше всего?

– Для ответа на этот вопрос хотел бы вернуться к истокам, дающим понимание, для чего создавался Go. Есть отличная статья на основе доклада Роба Пайка «Go at Google: Language Design in the Service of Software Engineering». В ней имеется очень точная фраза:


 The language was designed by and for people who write – and read and debug and maintain – large software systems. Go's purpose is therefore not to do research into programming language design; it is to improve the working environment for its designers and their coworkers. Go is more about software engineering than programming language research.


– Что вы считаете главным преимуществом Go перед другими языками?


– Картинка из доклада Simplicity is Complicated – лучший ответ на этот вопрос. Спецификацию языка можно изучить за пару часов. Простота синтаксиса позволяет вести разработку проекта очень быстро, реже стреляя себе в ногу. В то же время за простым синтаксисом спрятан весьма эффективный GC, удобная реализация CSP (Communicating sequential processes) с помощью горутин, кроссплатформенность.

– Насколько этот язык прост для изучения новичку?

– В университетах чаще всего в качестве базового языка учат C/C++. Это отличный фундамент для понимания того, как работает CPU, адресация RAM. Но после студенты начинают «рыдать» при виде конструкций перегрузки операторов, шаблонов. Практически как в примере с рисованием совы. 

В 2016-2017 годах я преподавал в университете предмет под названием «Современные информационные технологии». Тогда же предлагал своим студентами пройти tour.golang.org, изучить спецификацию языка и лабораторные работы выполнять на Go. Могу сказать, что многим понравилось. К концу семестра ребята реализовали вполне интересные проекты. Я упоминал это раньше, но повторюсь – Golang имеет очень простой синтаксис, что позволяет писать лаконичный код, а это значительно упрощает изучение языка. 


Записаться на онлайн-курс по программированию на Go от IT-Academy. Для прохождения обучения не требуется специальной подготовки, но приветствуется наличие технического образования или бэкграунда.
Топ для тех, кто любит точные науки!


– Как оцениваете спрос на Go-разработчиков со стороны работодателей? Сложно ли найти работу?

 – Честно говоря, мне трудно оценить сложность поиска работы. За последние 9 лет был «тунеядцем» только неделю. Могу сказать, что Go сейчас «доверяют» значительно больше, чем в 2016 году, когда я только начинал с ним работать. Тогда проекты на Go скорее были экспериментами на перспективном ЯП. Сейчас все больше компаний стартуют (или продолжают развивать) проекты на Go и, соответственно, на рынке растет спрос. Касательно сложности поиска работы: заглянул на jobs.tut.by и dev.by – вакансии «висят», причем некоторые с мая, так что, на мой взгляд, работодатели «голодны» до Go-разработчиков.

– Какие, на ваш взгляд, перспективы у языка Go?

– Несколько дней назад был опубликован очередной черновик реализации параметрических типов (generic). Конечно, это далеко не первая попытка (до этого был вариант с  contract) найти удобный способ реализации generic в Go. В конечном итоге появление generic позволит уменьшить количество вынужденного дублирования кода, что еще больше повысит привлекательность языка для тех, кто захочет на него перейти с другой ЯП. 

Кроме этого, на мой взгляд, Go прекрасно подходит для образовательных целей в том числе среди школьников. В моем детстве для этого использовался Turbo Pascal 7.0. Честно говоря, не знаю, что используют сейчас, но Go отлично подходит для формирования представления о программировании  и реализации базовых алгоритмов на практике, благодаря простоте синтаксиса.


Полная, частичная перепечатка или любое иное использование материалов с сайта IT-Academy разрешается только с указанием активной гиперссылки, ведущей на первоисточник (точный адрес страницы на www.it-academy.by).