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

О портале Каталог профессий

Разработчик Go

Согласно индексу TIOBE, Go получил звание «язык года» в 2016 году, совершив скачок с 54-го на 13-е место. И сегодня Go находится во второй десятке, опережая Perl, Visual Basic, Objective-C, Swift и др.

    Мы обратились к экспертам и представителям различных компаний, чтобы выяснить, каких кандидатов они видят на этой позиции.

    1. Какими знаниями и навыками должен обладать разработчик Go?
    2. Каков инструментарий разработчика Go?
    3. Каковы требования компании к уровню образования потенциальных сотрудников?
    4. Какие требования предъявляются к опыту работы?
    5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?


    Александр Бабенко, разработчик в компании One Million Likes

    1. Go достаточно молод, и обычно специалисты в него приходят с опытом разработки на других языках программирования. У него достаточно низкий порог вхождения, и начать разрабатывать можно после прохождения Go tour на официальном сайте, чтения документации и довольно небольшой веб-книжки Go book. Однако для найма на работу обычно требуются уже более глубокие знания. Часто рекомендуют прочитать, например, книгу Марка Самерфилда «Программирование на языке Go» или аналогичную книгу Брайана Кернигана и Алана Донована.

    Про другие полезные материалы можно спросить в сообществах Go-программистов: https://t.me/gogolang, https://t.me/proGO, https://t.me/golangjob. Некоторые мануалы есть только на английском.

    2. Go является популярным языком общего назначения и поддерживается различными редакторами. Список гарантированно поддерживающих редакторов и IDE можно посмотреть на официальном сайте. Я в последнее время использую редактор Atom. Он достаточно легкий, но расширяемый плагинами.

    Многие инструменты поставляются с самим языком. Например, gofmt и goimports являются консольными утилитами, которые форматируют код за разработчика по общим стандартам, принятым в сообществе. Редакторы, как правило, просто вызывают эти утилиты при сохранении. Еще используются так называемые линтеры – это такие средства, которые анализируют твой код и указывают на недоработки: отсутствие комментариев у экспортируемых сущностей, применение импорта с относительными путями и прочие недочеты, которые не являются грубыми ошибками, но в перспективе усложняют использование данного кода или его поддержку.

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

    Для Scala-разработчика мы обычно даем тестовое задание, чтобы оценить подход человека к решению задач и качество его кода, затем проводим техническое собеседование и уже принимаем решение. Также компания помогала в организации Scala-курсов scala.wtf, где сотрудники компании обучали всех желающих основам работы со Scala.

    4. На мой взгляд, пока достаточно мало вакансий для Junior-разработчиков. Это отчасти связано с «молодостью» языка и большим количеством разработчиков, которые пишут на нескольких ЯП. Они же обычно обладают многолетним опытом работы на различных ролях. Но постепенно будут появляться люди, для которых этот язык первый.

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

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

    5. Естественно. На языке Go разрабатываются не только стандартные вещи вроде веб-бэкенда, но и какие-то сложные финансовые инструменты, распределенные системы хранения данных (IPFS), блокчейн-приложения (go ethereum) и т.д. Компании могут предъявлять повышенные требования к знаниям работы высоконагруженных систем, баз данных. Кроме этого, любой программист, как правило, должен вникать в контекст работы продукта. Если работаешь в финтех-проекте, то общие знания экономики точно не будут лишними. Разработка решения для медиков может потребовать освежить знания биологии и т.д. Для любого программиста важны навыки непрерывного самообразования.

    На собеседованиях Go-программистов часто спрашивают про многопоточность, т.к. это одно из конкурентных преимуществ языка.


    Ярослав Лукьянов, Senior Software Developer в компании Openprovider

    1. Тут все зависит от того, какой разработчик – начинающий или с имеющимся опытом различной разработки. Если разработчик новичок, то лучшие знания и навыки для него – это базовые вещи, которые будут полезны в разработке, такие как различная теория по программированию, например структуры данных и алгоритмы, стандарты и хорошие практики по написанию кода на Go и тому подобные вещи. Здесь я бы порекомендовал пройти пару общих курсов по теории, а далее уже смотреть на конкретные курсы по Go, например, можно начать с A Tour of Go (https://tour.golang.org/welcome/1). Хотя можно и совмещать, если интересна практика, тут кому как удобно.

    Если разработчик уже имеет опыт разработки на других языках, но хочет начать программировать на Go, то здесь я могу посоветовать тот же A Tour of Go для старта и параллельно пробовать разрабатывать маленькие сервисы в продакшн, но, если боитесь, подойдут даже задачки из интернета или домашние проекты. Здесь знания и навыки Go (опуская то, что разработчик уже должен знать, например, ООП, различные технологии типа баз данных, протоколы типа HTTP, принципы разработки ПО и т.д.) выстроены таким образом: стандартная библиотека и ее внутреннее устройство (как хороший пример: большинство кода Go написано на Go и легкодоступно), структуры, многопоточное программирование (goroutines, блокировки и т.д.), каналы (channels). Go создавался под влиянием C и Оберона, поэтому проблем у большинства с переходом возникнуть не должно – сам я очень люблю Java и Scala, но на Go перешел всего за один день – уж очень все просто и понятно в нем устроено, особенно мне нравится работа с легковесными потоками и механизм каналов.

    2. Основной инструментарий разработчика Go – это, соответственно, ваши знания и навыки, среда разработки или редактор (я предпочитаю GoLand или Sublime), стандарты языка Go, стандартная библиотека и менеджер зависимостей (в моем случае это dep). В Go большинство вещей можно делать, используя только стандартную библиотеку – она очень богата и проста в применении. Если вам чего-то не хватает, то всегда есть большое комьюнити, которое реализовало очень много хороших вещей, например: кучу логгеров, HTTP-серверы и роутеры, хорошие хелперы (например, работа с указателями), ORM, фреймворки и т.д.

    В качестве дополнительного инструментария могу отметить различные анализаторы (например, анализатор на то, что в коде явно обрабатываются ошибки, можете посмотреть GoReporter и список того, с чем он работает).

    3. Я бы сказал, что в нашей компании нет определенных требований к образованию сотрудников. Конечно, как минимум лучше иметь высшее в технической или математической областях, но если вы самоучка со стажем работы и хорошими результатами – двери для вас также открыты. Тут на самом деле все зависит от компании и ее деятельности. Мало шансов, что госструктуры или похожие компании возьмут самоучку без высшего, даже если у него опыта за десяток лет. Другие же компании готовы рвать остальных за любых специалистов с высоким уровнем, игнорируя их образование.

    4. У нас есть требования к опыту работы независимо от языка. Для джуниоров это полгода или год разработки либо хорошие результаты собеседования и тестового задания при отсутствии опыта разработки, либо большой (от трех лет) опыт работы в смежных областях (системное администрирование, Development and Operations и т.д.), для мидл-разработчиков это один – три года и для сеньоров от трех лет разработки, но иногда бывают исключения, как и у всех. В других компаниях данные параметры, названия и тому подобные вещи могут отличаться, но в целом картину можно представить.

    5. В случае с Go у нас нет специфических требований, т.к. язык – это просто инструмент, который используется для решения более подходящих для него задач, поэтому у нас много разработчиков со специфичными знаниями, которые программируют на разных языках, включая Go. Тут все зависит от специфики компании, а не языка – например, компании, которые тесно связаны с деньгами, на разработку/поддержку таких модулей будут приоритетно набирать специалистов, хорошо разбирающихся в экономике; компании, которые занимаются хранением и анализом больших данных, – специалистов, хорошо знакомых с технологиями для работы с большими данными; компании, разрабатывающие решения, построенные на машинном обучении, – математиков и так далее. Такие вещи можно перечислить почти для любых сфер деятельности. В нашем случае мы берем людей с углубленными знаниями в определенных областях и с поверхностными в смежных (так называемый T-shape), например разработчиков бэкенда на любом языке со знаниями работы и устройства фронтенда или SRE-инженеров с уклоном в разработку больше, чем в администрирование.


    Игорь Кузнецов, ведущий разработчик GOST Group

    1. С моей точки зрения, навыки программиста на Go ничем не отличаются от базовых знаний и навыков программистов на других языках, а именно что такое конкурентность и в чем ее отличие от параллелизма, что такое указатель и как с ним работать, ну и другие базовые концепции типа базовых структур данных и алгоритмов. Из языков программирования по мне Go похож на C и Python, поэтому опыт работы с этими языками пойдет на пользу.

    2. Инструментарий разработчика на Go каждый выбирает под себя, я, например, использую Emacs с go-mode или Intellij IDEA с плагином для Go. В качестве дебаггера при необходимости пользуюсь gdb или delve. Кроме этого, использую различные утилиты типа go fmt, golint и другие из поставки.

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

    4. Go – слишком молодой язык, чтобы найти кандидатов с богатым опытом работы на нем. Эта проблема особенно заметна в РФ, так как у нас всегда есть некоторое отставание в плане технологий от западных фирм. На Западе Go уже вполне промышленный язык программирования. У нас же в стране некоторые компании только-только начинают пробовать Go, но, как я указал выше, опыт работы с Python или C в данный момент является очень желательным для претендентов на вакансию программиста Go. Если есть хотя бы небольшие «домашние» проекты на Go, то это очень хорошо.

    5. В любой компании, конечно же, есть своя специфика, и если компания делает веб-сайты, то выбор Go для этого как минимум странный. Если же компания работает с телеметрией и имеет большие потоки данных, то, с моей точки зрения, Go принесет очевидную пользу.

    Поэтому я бы рекомендовал попробовать Go компаниям, которые работают с большими объемами данных и имеют большую нагрузку на свои сервисы.


    Кирилл Семенченко, Go-разработчик в компании Wildberries LLC

    1. Go достаточно прост в изучении, и в первую очередь разработчику необходима дисциплина, чтобы не создать гору не поддерживаемого кода.

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

    2. Для написания кода подойдут Vim или IDE наподобие GoLand. Необходимо освоить основные инструменты для автоматической проверки кода и разобрать с менеджерами зависимостей.

    Сейчас есть целый зоопарк менеджеров вроде govendor или glide, но я бы посоветовал dep.

    3. Как таковых требований нет, реальные знания человека куда важнее диплома.

    4. Для Junior-разработчика хватит даже небольшого опыта на другом языке вроде Python, главное, чтобы было желание изучить Go и общее понимание.

    5. Особой специфики нет.


    Алексей Бондаренко, разработчик в компании TechOps

    1. Требования к навыкам обусловлены сферой применения. Для Go в большинстве случаев это различные веб-сервисы, отсюда вытекают понимание протоколов, базы данных и работа с third party API. Ну и, само собой, знание языка.

    2. Кроме, собственно, компилятора, Go из коробки содержит инструменты для форматирования, тестирования и т.д. Выбор же текстового редактора зависит от личных пристрастий разработчика. Например, один из моих коллег пишет на Go в Vim и всем доволен. Также существуют специальные IDE для Go (GoLand, LiteIDE), но у меня с ними как-то не сложилось. Сам использую Atom.

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

    4. Конкретно в нашей компании на позицию Go-разработчика требуется три года опыта в разработке, минимум два из них на Go. Иногда попадаются вакансии, где требуется только опыт разработки на распространенных языках (C++, Java, Python etc) и желание выучить Go.

    5. У нас нет. Встречаются компании, которые переписывают свои проекты на Go, для них важно уметь читать тот язык, на котором первоначально был написан проект (чаще всего это PHP).


    Радис Валиуллин, Senior Software Engineer в компании EPAM

    1. Если отойти от общего утверждения, что хороший программист должен владеть computer science, и исходить из того, что Go – это язык программирования, заточенный для написания многопоточного/масштабируемого кода, а также для написания микросервисов, тогда необходимо понимать, как пишется многопоточный код, что такое потокобезопастность, знать, что такое микросервисная архитектура, IPC (например, gRPC), etc.

    Для написания эффективных программ также полезно знать, как устроены типы в Go, как работает выделение памяти, сборщик мусора.

    2. DE – gogland (от jetbrains), консоль предпочитаю zsh с плагинами, git – работаю в консоли, в отдельных случаях типа устранения конфликтов слияния использую ide. Это мой основной инструментарий. Пакетный менеджер dep.

    3. Стандартные: знание самого языка (каждый спрашивает, что сам знает, некоторые зациклены на знании каких-то частностей) и общие знания (алгоритмы, базы, etc). Я скептически отношусь к этому.

    4. От года на Go и три года вообще в разработке.

    5. Опыт работы с технологиями, которые применяются в компании, идет в плюс.


    Александр Майоров, CTO в New.HR

    1. По опыту наших заказчиков (среди которых есть как крупные ИТ-компании, так и международные стартапы), для которых мы закрываем вакансии Golang developer, профессиональные знания очень похожи на знания бэкенд-разработчиков на таких языках, как Ruby, Python, PHP, Perl. Обязательно должен быть опыт хотя бы с одной SQL-базой (MySQL, PostgreSQL, etc). Опыт с NoSQL (чаще требуется MongoDB и Elasticsearch).

    Для сеньор-уровня на позицию full stack также требуют знание Frontend-технологий (в зависимости от компании и проекта дополнительно требуют знание фреймворков React, Angular). Golang пока еще относится к «модным» языкам, поэтому много проектов с микросервисами, где есть сервисы на Node.js. Поэтому знание Node.js часто является плюсом для кандидата.

    2. Я на Go стал писать недавно. Мои инструменты: IDE Goland от Jetbrains и командная строка с набором различных скриптов для автоматизации и деплоя на продакшн.

    3. Особых требований нет. Проекты на Go часто связаны с наукоемкими задачами (вплоть до Machine Learning), поэтому наличие хорошей базы будет плюсом. Не смотрят на наличие диплома, но оценивают знания, которые можно было получить на математических факультетах.

    4. Разработчиков на Golang немного, поэтому все наши заказчики готовы принимать кандидатов без опыта работы на Go, при условии наличия профессионального опыта на Python, Ruby, Java, C#. При этом опыт работы на других языках должен быть не менее двух лет.


    Илья Галимьянов, Software Engineer в компании Facecast

    1. Какими навыками должен обладать Go-разработчик? Наверное, всеми теми же, что и другие разработчики. На Go прекрасно реализуются микросервисы, да и вообще сетевые сервисы, поэтому разработчик должен обладать хорошими знаниями архитектуры клиент-серверных приложений и сетевого стека в целом. Все зависит от разрабатываемого ПО.

    2. Хоть язык и молодой, но инструментов для разработки на нем уже немало. Всем нам известная IDE IntelliJ IDEA имеет плагин для разработки на Go, не так давно была выпущена отдельная IDE GoLand, зачастую также используется VS Code, ну и Vim.

    4. Go довольно молодой язык, поэтому разработчиков, которые владеют лишь им, мало. По статистике, на этот язык переходят с Python, JavaScript и PHP. Оттого и обычно требуется background этих языков. Само собой, также это и базы данных, ну и, конечно же, опыт с Docker.

    5. Наша компания занимается разработкой инфраструктуры медиасервера для работы с потоковыми аудио/видео, и требований у нас много. Поэтому специфические требования – это знание различных протоколов передачи данных, таких какRTMP, MPTCP, WebRTC. Ну и понимание принципов обработки аудио/видеоданных.


    Подготовил Игорь Штомпель

     
    Проект Издательского дома "Положевец и Партнеры"

    По вопросам партнерства обращайтесь по электронной почте chooseit@samag.ru

    Телефон: +7 499 277-12-45