- PVSM.RU - https://www.pvsm.ru -
Мы в Binary District проводим интенсивы по Go. За два дня можно научиться понимать идеологию и внутренности Go, писать чистый тестируемый код. Но это первый шаг, а дальше — практика, практика, практика: читать чужой код, писать и править свой.
Для этого идеально подходит open source:
Вместе с выпускником нашего Go-курса [1] Сергеем Tolsi [2] мы составили список открытых проектов разного уровня и направленности, которые подходят, чтобы учиться писать хороший код и заодно делать мир лучше.
Стратегия Tolsi [2]:
«Если хочешь использовать open source для обучения, сначала определись с конкретной областью работы и поставь цель — например, сделать сайт или игру, какой-то сервис, — а затем найди схожий проект или фреймворк с примерами. Например, я работаю в области криптовалют и выяснил, что на Go пишут реализацию Lightning network [3] для ускорения переводов в сети Bitcoin и самую стабильную ноду для Ethereum — geth [4]».
Начнем с одних из самых сложных и объемных проектов, известных далеко за пределами Go Community. Docker [5] с 2013 распространяется свободно, по лицензии Apache 2.0, и представляет собой систему для создания изолированных виртуальных машин с любой необходимой для тестирования приложений средой. Его ключевой компонент — libcontainer [6] — стандарт для такого рода систем. Лучшей реализации «песочницы» для примера не найти.
С Docker тесно связан другой интересный проект, появившийся в середине 2014 года: Kubernetes [7], ПО для группового управления контейнерами на большом парке устройств. Не исключено, что вы уже имели с ним дело, но заглядывали ли под капот этого проекта?
Если вы изучаете Go, это стоит сделать хотя бы потому, что Kubernetes писали программисты Google, а среди контрибьюторов проекта спецы из RedHat, IBM и Microsoft. Кодовая база Kubernetes снабжена неплохим руководством Kubernetes Contributor guide [8], а с командой разработчиков можно пообщаться в Slack во время регулярных сессий вопросов и ответов [9].
Syncthing — удачно спроектированный проект без заметных технических проблем и критических багов, созданный с оглядкой на практики Effective Go [10].
Эта реализация распределенной системы обмена файлами типа BitTorrent Sync основана на протоколе Block Exchange (BEP) с открытым исходным кодом.
По сравнению с Kubernetes, Syncthing обладает простейшей архитектурой, состоящей всего из трех основных слоев. Код программы соответствует стандартной библиотеке Go и сочетает ее с LevelDB и еще несколькими библиотеками. Они используются для шифрования сетевых подключений, расчета хэшей и хранения данных. Разобраться в его кодовой базе помогут руководство с официального сайта [11] и оживленный форум [12].
А как насчет 3D-движка, созданного программистами, для программистов? Этот титул носит G3N [13], и он также целиком написан на Go. Движок подходит для игр, но позиционируется как инструмент для написания интерактивных приложений.
Машинное обучение и Python почти синонимы, однако и Go бывает полезен для data scientists. На этом языке написана простая и гибкая библиотека машинного обучения GoLearn [14]. Она использует оболочку BLAN от Gonum [15] и поддерживает основные алгоритмы машинного обучения, включая: метод опорных векторов, линейную регрессию, нейронные сети, random forest, деревья решений и наивный байесовский классификатор.
Низкоуровневое решение для машинного обучения на Go — Gorgonia [16] — также заслуживает внимания. Эта библиотека, напоминающая по концепции TensorFlow [17], использует концепцию представления уравнений в виде графа и упакована в единственный бинарный файл.
Интересным опытом может стать изучение кодовой базы acra [18] — инструмента для шифрования и безопасного хранения баз данных, разработанного для микросервисов на мобильных платформах и в вебе. Это возможность изучить действительно безопасный код и на чужом опыте научиться обнаруживать и защищаться от утечек данных, интегрировать в проект криптографию.
Кроме того, клиентская библиотека AcraWriter [19] доступна не только на Go, но и на Ruby, Python, NodeJS, iOS (Objective-C / Swift), Android Java и PHP [20] — можно сравнить реализации и узнать некоторые тонкости портирования ПО на практике.
Новейшая версия документации и учебников по Acra доступна на официальном сервере Cossack Labs [21].
ConnectorDB [22] подходит, если вы не просто хотите изучить чужой код, но и сделать нечто полезное для себя лично. Это open source платформа для развертывания собственного сегмента интернета вещей на базе уже имеющихся под рукой устройств. Она агрегирует данные с компьютеров, смартфонов из браузеров и обрабатывает их.
Разобравшись в коде, можно написать новые модули и подключить к ConnectorDB практически любое устройство, настроить мониторинг собственной жизни, начиная с контроля за физической нагрузкой и заканчивая подсчетом продуктивности и оценкой настроения.
Идеальное место для начала поисков — список Awesome Go [23], где сообщество собирает ссылки на лучшие open source библиотеки и приложения на Go. Кроме того, полезна Wiki при репозитории языка. В ней есть списки потенциально полезных статей [24], курсов [25] и книг [26].
Анализируя код проекта и внося свой вклад, можно развить приобретенные навыки и актуализировать знания. Есть вероятность втянуться в open source движение, и существует только один способ узнать, как глубоко и надолго. А для тех, кто собирается начать с азов и хочет сразу влиться в разработку, 8 и 9 декабря в Binary District пройдет практический интенсив по программированию на Go [1].
Автор: dzakhour
Источник [27]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/301130
Ссылки в тексте:
[1] Go-курса: https://binarydistrict.com/ru/workshop/go-workshop/?utm_source=blogs&utm_medium=habrhabr&utm_campaign=opensource_go
[2] Tolsi: https://habr.com/users/tolsi/
[3] Lightning network: https://github.com/lightningnetwork/lnd
[4] geth: https://github.com/ethereum/go-ethereum
[5] Docker: https://github.com/docker
[6] libcontainer: https://github.com/docker/libcontainer
[7] Kubernetes: https://github.com/kubernetes/kubernetes
[8] Kubernetes Contributor guide: https://github.com/kubernetes/community/tree/master/contributors/guide
[9] регулярных сессий вопросов и ответов: https://github.com/kubernetes/community/blob/master/mentoring/meet-our-contributors.md
[10] Effective Go: https://golang.org/doc/effective_go.html
[11] руководство с официального сайта: https://docs.syncthing.net/dev/intro.html
[12] оживленный форум: https://forum.syncthing.net/
[13] G3N: https://github.com/g3n/engine
[14] GoLearn: https://github.com/sjwhitworth/golearn
[15] BLAN от Gonum: https://github.com/gonum/gonum
[16] Gorgonia: https://github.com/gorgonia/gorgonia
[17] TensorFlow: https://www.tensorflow.org/
[18] acra: https://github.com/cossacklabs/acra
[19] AcraWriter: https://github.com/cossacklabs/acra/wiki/AcraConnector-and-AcraWriter#acrawriter
[20] PHP: https://docs.cossacklabs.com/pages/documentation-acra/#building-acrawriter-for-php
[21] сервере Cossack Labs: https://docs.cossacklabs.com/products/acra/
[22] ConnectorDB: https://github.com/connectordb/connectordb
[23] список Awesome Go: https://awesome-go.com/
[24] потенциально полезных статей: https://github.com/golang/go/wiki/Articles
[25] курсов: https://github.com/golang/go/wiki/Courses
[26] книг: https://github.com/golang/go/wiki/Books
[27] Источник: https://habr.com/post/432022/?utm_campaign=432022
Нажмите здесь для печати.