Мы в 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.
Автор: dzakhour