Мы в Binary District проводим интенсивы по Go. За два дня можно научиться понимать идеологию и внутренности Go, писать чистый тестируемый код. Но это первый шаг, а дальше — практика, практика, практика: читать чужой код, писать и править свой.

Для этого идеально подходит open source:

  • Open source повышает насмотренность. Можно невозбранно изучать исходники.
  • Open source дает стимул писать максимально чистый код и документировать логику.
  • Вклад в open source движение улучшает карму.



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

 Стратегия Tolsi:
«Если хочешь использовать open source для обучения, сначала определись с конкретной областью работы и поставь цель — например, сделать сайт или игру, какой-то сервис, — а затем найди схожий проект или фреймворк с примерами. Например, я работаю в области криптовалют и выяснил, что на Go пишут реализацию Lightning network для ускорения переводов в сети Bitcoin и самую стабильную ноду для Ethereum — geth».

1. Docker


Начнем с одних из самых сложных и объемных проектов, известных далеко за пределами Go Community. Docker с 2013 распространяется свободно, по лицензии Apache 2.0, и представляет собой систему для создания изолированных виртуальных машин с любой необходимой для тестирования приложений средой. Его ключевой компонент — libcontainer — стандарт для такого рода систем. Лучшей реализации «песочницы» для примера не найти.

2. Kubernetes


С Docker тесно связан другой интересный проект, появившийся в середине 2014 года: Kubernetes, ПО для группового управления контейнерами на большом парке устройств. Не исключено, что вы уже имели с ним дело, но заглядывали ли под капот этого проекта?

Если вы изучаете Go, это стоит сделать хотя бы потому, что Kubernetes писали программисты Google, а среди контрибьюторов проекта спецы из RedHat, IBM и Microsoft. Кодовая база Kubernetes снабжена неплохим руководством Kubernetes Contributor guide, а с командой разработчиков можно пообщаться в Slack во время регулярных сессий вопросов и ответов.

3. Syncthing


Syncthing — удачно спроектированный проект без заметных технических проблем и критических багов, созданный с оглядкой на практики Effective Go.

Эта реализация распределенной системы обмена файлами типа BitTorrent Sync основана на протоколе Block Exchange (BEP) с открытым исходным кодом.

По сравнению с Kubernetes, Syncthing обладает простейшей архитектурой, состоящей всего из трех основных слоев. Код программы соответствует стандартной библиотеке Go и сочетает ее с LevelDB и еще несколькими библиотеками. Они используются для шифрования сетевых подключений, расчета хэшей и хранения данных. Разобраться в его кодовой базе помогут руководство с официального сайта и оживленный форум.

4. G3N


А как насчет 3D-движка, созданного программистами, для программистов? Этот титул носит G3N, и он также целиком написан на Go. Движок подходит для игр, но позиционируется как инструмент для написания интерактивных приложений.

5. GoLearn


Машинное обучение и Python почти синонимы, однако и Go бывает полезен для data scientists. На этом языке написана простая и гибкая библиотека машинного обучения GoLearn. Она использует оболочку BLAN от Gonum и поддерживает основные алгоритмы машинного обучения, включая: метод опорных векторов, линейную регрессию, нейронные сети, random forest, деревья решений и наивный байесовский классификатор.

6. Gorgonia


Низкоуровневое решение для машинного обучения на Go — Gorgonia  — также заслуживает внимания. Эта библиотека, напоминающая по концепции TensorFlow, использует концепцию представления уравнений в виде графа и упакована в единственный бинарный файл.

7. acra


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

Кроме того, клиентская библиотека AcraWriter доступна не только на Go, но и на Ruby, Python, NodeJS, iOS (Objective-C / Swift), Android Java и PHP — можно сравнить реализации и узнать некоторые тонкости портирования ПО на практике.

Новейшая версия документации и учебников по Acra доступна на официальном сервере Cossack Labs.

8. ConnectorDB


ConnectorDB подходит, если вы не просто хотите изучить чужой код, но и сделать нечто полезное для себя лично. Это open source платформа для развертывания собственного сегмента интернета вещей на базе уже имеющихся под рукой устройств. Она агрегирует данные с компьютеров, смартфонов из браузеров и обрабатывает их.

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

А еще...


Идеальное место для начала поисков — список Awesome Go, где сообщество собирает ссылки на лучшие open source библиотеки и приложения на Go. Кроме того, полезна Wiki при репозитории языка. В ней есть списки потенциально полезных статей, курсов и книг.

Анализируя код проекта и внося свой вклад, можно развить приобретенные навыки и актуализировать знания. Есть вероятность втянуться в open source движение, и существует только один способ узнать, как глубоко и надолго. А для тех, кто собирается начать с азов и хочет сразу влиться в разработку, 8 и 9 декабря в Binary District пройдет практический интенсив по программированию на Go.

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