Экосистема GoLang бурно развивается, и ее внедрение ускоряется.

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

Проблемы / соображения менеджеров и разработчиков

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

  • Разработчики: достаточно ли возможностей в Go?
  • Разработчики: есть ли технические преимущества использования Go по сравнению с другими языками?
  • Разработчики: почему в Go нет функции X? или почему в нем есть функция Y?
  • Разработчики: но потрясающая функция Z в Go в моем случае не применима.
  • Менеджеры: достаточно ли в экосистеме разработчиков?
  • Менеджеры: захотят ли разработчики изучать язык? Можем ли мы их обучить?
  • Менеджеры: есть ли преимущества в переписывании существующих систем с помощью Go?
  • Менеджеры: это стабильный язык (или) нам придется поддерживать эту систему в течение многих лет.

Тогда есть эти вопросы, которые мне не задавали, но, вероятно, должны быть. Я предполагаю, что другие языки не предоставляют ничего существенно полезного в этих областях, и у нас нет знаний, чтобы требовать этого. (Мне вспоминаются мысли Генри Форда и Стива Джобса о том, что «люди не знают, чего они хотят, пока вы им это не покажете»). Го великолепен в этих областях, и было бы неправильно, если бы я не выделил их.

  • Как это масштабируется в современных системах?
  • Насколько легко запрограммировать масштабируемость?
  • Насколько хорошо это работает в современных контейнерных системах?
  • Компании: есть ли политические, юридические преимущества / недостатки перехода на Go?
  • Насколько легко развертывать приложения Go?
  • Насколько легко распространять приложения Go?
  • Как инструменты в Go? Во что еще мне придется инвестировать для проверки качества кода?

Dev: достаточно возможностей в Go? Менеджеры: есть ли в экосистеме разработчики? Захотят ли они учиться?

Это наиболее частый вопрос, который я получаю - балансирующее уравнение между возможностью и доступностью, - и тот, на который я хочу ответить подробно, поскольку это то, что очевидно для меня, работая со многими компаниями и командами, но, по-видимому, невидимо для других, работающих самостоятельно. силосы. Эти два момента идут рука об руку. До 2017 года мои обсуждения с менеджерами обычно заканчивались тем, что я говорил им, что на рынке сложно найти много разработчиков Go. (Почему это было так для такого хорошего / полезного языка программирования - тема для другого поста). Но в 2018 году все по-другому. Я думаю, что критическая масса для ускорения принятия GoLang в Индии уже достигнута.

Возможности определенно увеличиваются. Я вижу больше сообщений о вакансиях. Я получаю больше предложений о работе. Я знаю, что в этих компаниях больше проектов, написанных на Go (даже если он не широко публикуется). Некоторые из этих вакансий ищут разработчиков Java / Python / C ++, которые «хотят изучать Go». Я получаю все больше и больше запросов на обучение, чтобы компании могли переобучать разработчиков Java / Python / C ++ / C / Node. Только за последние полгода я обучил не менее тысячи человек на корпоративных тренингах. В настоящее время я занят в начале 2019 года для обучения и консультирования. И да, возможности для хороших тренеров также очень высоки - я ожидаю, что по мере того, как я тренирую все больше и больше людей, я смогу облегчить свой текущий напряженный график, поскольку люди, которым я помог, будут помогать следующей партии и поддерживать этот снежный ком. .

В результате появления новых проектов, переписанных проектов и требований к программистам на Go появляется все больше разработчиков, которые берут на себя или хотят это сделать. У меня нет статистики опросов специально по Индии, но, по крайней мере, общая тенденция во всем мире такова. В Опросе разработчиков Stackoverflow за 2018 год Go находится в верхней части списка Любимый и Разыскиваемый и даже не фигурирует в Ужасающем - в отличие от большинства других языков. Я все же скажу, что я думаю, что Java-разработчики в Бангалоре по-прежнему являются самым большим пулом доступных специалистов по программному обеспечению для внутренней разработки. Пул Go в настоящее время определенно меньше, но продолжает расти.

Когда мы начали встречу группы GoLang Bangalore в 2012 году, это была небольшая группа. Сегодня насчитывается более 3400 участников. Регулярно на каждое мероприятие подписывается более 100 человек. Все больше компаний предлагают провести мероприятия. (В стороне, я также определенно должен поблагодарить недавнюю группу организаторов, которые проделывают огромную работу по проведению этих встреч с регулярной ежемесячной частотой.)

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

Как это масштабируется в современных системах? Насколько легко запрограммировать масштабируемость?

Такие языки, как Node и Python, по своей сути однопоточные и не могут использовать современные системы с множеством процессоров / ядер / виртуальных процессоров. Вы можете писать многопоточные программы на Java / C ++ / C # / и т. Д. но управлять им непросто.

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

Насколько хорошо это работает в современных контейнерных системах? Насколько легко развертывать приложения Go?

Одно дело, что почти все проекты в экосистеме контейнеров - Docker, Kubernetes и другие - написаны на Go. Это само по себе говорит о многом. Но сейчас мы говорим о приложениях, написанных для них. При использовании контейнерных систем Go просто великолепен, потому что не требует зависимостей и дополнительных установок. Программы компилируются в один статически созданный исполняемый файл, который можно просто скопировать и вставить для развертывания. Без необходимости установки виртуальной машины (например, Java / C #) и без интерпретатора (например, Python) процесс развертывания очень легкий и простой. Представьте себе разницу в скорости запуска между контейнерами и модулями с минимальной установкой JVM 300–400 МБ до запуска приложения и несколькими МБ вашей полностью самодостаточной программы Go. Также представьте себе снижение использования ресурсов при их запуске.

Компании: есть ли политические, юридические преимущества / недостатки перехода на Go?

Go имеет открытый исходный код и принадлежит сообществу. Go принадлежит вам так же, как и всем остальным. C # принадлежит Microsoft. Java поддерживается Oracle, и лично я не думаю, что они были хорошими игроками в сообществе. Кто знает, как в дальнейшем изменится лицензирование или что будет взиматься? По причинам лицензирования мне сейчас трудно рекомендовать Java. Интересно, думают ли компании о том же? (обновление: в январе 2019 года я разговаривал с несколькими людьми, которые предоставили мне конкретную информацию о некоторых крупных банках, которые отказываются от Java и переписывают свой код из-за проблем с лицензированием).

Как инструменты в Go? Во что еще мне придется инвестировать для проверки качества кода?

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

Модульное тестирование и тестирование производительности являются частью стандартной библиотеки. Среда выполнения Go может легко собирать данные профилирования, что позволяет оптимизировать код. Это также дает результаты покрытия. Графики вызовов дают представление о потоке кода. А трассировка помогает отслеживать горутины и системные ресурсы, такие как память и потоки. Документация существует вместе с кодом и извлекается из него. При использовании «go fmt» весь код, написанный кем-либо, всегда выглядит одинаково, что улучшает читаемость и удобство сопровождения.

Многопоточная / параллельная / параллельная программа мощна, но также сложна. Среда выполнения Go способна выявлять проблемы в вашем коде, такие как взаимоблокировки и эти коварные условия гонки. Продемонстрируйте опцию -race человеку, которого замучили непредсказуемым кодом или синдромом «это работает на моей машине», вызванным условиями гонки. Если бы это был Голливуд, он бы встал и начал бы медленно хлопать в ладоши.

Я уже упоминал, что все это бесплатно?

Насколько легко развертывать приложения Go? Насколько легко их распространять?

В наши дни Go фактически стал языком де-факто для написания инструментов командной строки. Docker и Kubernetes - самые популярные. Почему? Отчасти потому, что кросс-компиляция для разных платформ проста и удобна.

Что еще более важно, подход Go на самом деле решает кроссплатформенную совместимость намного лучше, чем другие. Java / C # / Python / Ruby / Node требует, чтобы у вас была та же среда, в которой вы кодировали, где бы вы ее не развертывали. Попробуйте распространять приложения с этим гонщиком. Как я люблю говорить, «они просто пнули банку дальше по дороге». Время выполнения Go на много порядков меньше, и он является частью исполняемого файла, куда бы вы его ни взяли. Да, исполняемый файл, вероятно, больше на один или два МБ, но сравните это с сотнями МБ, которые должны быть на каждой развернутой машине как часть виртуальной машины, библиотек или интерпретатора.

Разработчики: почему в Go нет функции X? или почему в нем есть функция Y? Разработчики: но потрясающая функция Z в Go в моем случае не применима. Менеджеры: есть ли преимущества в переписывании существующих систем с помощью Go?

Я получаю много таких вопросов, но я не могу здесь подробно описать ответы, но в сети есть много статей и мнений по этому поводу. Компании увидели большие преимущества в использовании Go и не скупились на похвалу. Они выполнили тесты и увидели, что Go работает очень хорошо. Однако я не утверждаю, что Go идеален и подходит не для всех случаев использования. Я сам разработчик полного стека, который не зависит от языка и использует то, что работает. Просто Го очень хорошо работает для меня и многих, многих других. Как сказал Брэд Фицпатрик: Иди на 90% в 100% случаев.

Это стабильный язык (или) нам придется поддерживать эту систему в течение многих лет.

Одна глобальная фирма, с которой я консультировал, пыталась выяснить, какой язык выбрать для их будущего. Чтобы избежать предвзятости, они передали исследование на аутсорсинг. Исследование, проведенное очень авторитетным учреждением, пришло к выводу, что это должен быть Go. Помимо очень важных моментов, которые мы обсуждали - технические преимущества языка, отличный инструментарий, скорость, возможность распространения / развертывания и т. Д. - еще один важный момент - это управление вокруг Go и то, что могло бы дополнительно поддержать исследование.

Программное обеспечение этих фирм использовалось десятилетиями. Им нужно, чтобы любое новое программное обеспечение также существовало десятилетиями. Подходит ли управление языком? Для Go существует задокументированная гарантия обратной совместимости. Таким образом, программы, которые вы написали для v1.0, по-прежнему собираются и работают даже на последних версиях.

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

tldr;

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

Я архитектор, инвестор, преподаватель. Вы можете найти меня в LinkedIn и Twitter.