Работа над Bitcoin Core: взгляд изнутри
В январе этого года я переехал в Нью-Йорк и устроился на новую работу на полную ставку над проектами Биткойна с открытым исходным кодом. Ниже я изложил свои впечатления от первых нескольких месяцев.

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

Но вернёмся на землю. Чему я действительно научился за это время?

Начинайте с малого

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

Биткойн — очень сложный проект, который развёрнут на различных платформах и в различных средах. Он представляет собой систему согласованности, где каждый участник должен шагать в ногу со всеми, иначе система развалится на части. В ранние годы Биткойна такое могло произойти не один раз. Не нужно говорить, что любые изменения в коде должны быть тщательно продуманы, и только несколько людей в мире понимают систему настолько, чтобы безопасно работать в этой сфере. Остальные хоть и пытаются вносить согласованные изменения, но в большинстве случаев такие попытки с треском проваливаются.

Итак, я новичок. Чем же я занимался? Я не профессиональный программист C++, но довольно неплохо разбираюсь в Python, на котором написан фреймворк функционального тестирования Биткойна. Я мог подчистить код, исправить ошибки в тестах и найти и исправить ошибки в окончательной версии кода. Работая над этими тестами, я понемногу начал разбираться и в других частях кодовой базы: в PRC-сервере и клиенте, кошельке, системе сборки и так далее. Теперь я могу принять скромное участие и в этих сферах.

Вот мой первый код для Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/8829.

Этот код обеспечивает дополнительное тестирование для утилиты bitcoin-tx. Скромная работа, но ведь все мы с чего-то начинали!

Будьте ответственны

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

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

Мне понравилось выбрать один сложный долгосрочный проект и работать с ним до конца. В первые несколько месяцев это была реорганизация кода фреймворка функционального тестирования с добавлением класса TestNode (https://github.com/bitcoin/bitcoin/pull/10082). Я очень надеюсь, что этот проект будет завершен в течение следующих нескольких недель. Работа над ним ведется уже довольно долго, и возникает много трудностей, но, я считаю, что тестовый фреймворк в конце концов станет намного лучше. Моя следующая цель — осуществить разделение кошелька и сервера (начало здесь: https://github.com/bitcoin/bitcoin/pull/10762), а также создать основу для полной аппаратной интеграции кошелька в версии v0.16 или v0.17. Иметь цель, делиться ей с другими людьми и нести за неё ответственность — вот это по-настоящему полезное занятие.

Совершенствуйте инструменты

Постоянно, постоянно, постоянно совершенствуйте инструменты и обучайтесь новым навыкам и техникам. Когда я взялся за эту работу в октябре прошлого года, я знал, что мои базовые навыки не совершенны. Поэтому я прочитал от корки до корки книгу Pro Git, затем прочитал библию vim, учебник по tmux для начинающих и изучил общие сведения о linux. Сейчас я читаю Understanding Cryptography. Следующая в списке — Elliptic Curves, а затем книга о системе automake. Я также перечитаю некоторые книги по C++, чтобы повторить уже забытое.

(отступление: если вы не читали Pro Git и Practical Vim, то начните прямо сейчас. Время, которое вы потратите на освоение таких вещей, как интерактивное перемещение, rerere и filter-branch, а также повышение эффективности в работе с vim окупят потраченное на книги время с лихвой)

В среду на работе я также разбирал уайтпейпер. Каждую неделю один из нас читает и делает презентацию интересного уайтпейпера или доклад на техническую тему.

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

Предлагайте помощь и просите помощи

Я не самый опытный программист C++, но благодаря Pro Git я достаточно хорошо разбираюсь в ветках и коммитах. Я помог бывалым разработчикам, переместив и подчистив запросы на включение кода (pull request) (например, здесь: https://github.com/bitcoin/bitcoin/pull/7729 и здесь: https://github.com/bitcoin/bitcoin/pull/10830), и считаю, что совершил полезное дело, если это позволило разработчикам потратить больше времени на важные проекты. С другой стороны, существует много новичков, которые часто ошибаются в таких основах, как склеивание коммитов и перемещение запросов на включение кода. Я считаю трату времени на помощь этим людям полезной, потому что это помогает разблокировать запросы на включение кода, а также мотивирует разработчика вернуться и продолжить работать над проектом.

В то же время я был приятно удивлен количеству помогающих опытных биткойн-разработчиков, которые тратили свое время, чтобы помочь мне. Меня всегда удивляет то, как много времени готов потратить sipa на обучение и объяснение (загляните в его профиль на Stack Exchange, если не верите: https://bitcoin.stackexchange.com/users/208/pieter-wuille). Кори Филдс также очень щедро распоряжается своим временем, объясняя мне систему сборки кода и отвечая даже на самые дилетантские вопросы. Мэтт Коралло, Сухас Дафтуар и Алекс Моркос заслуживают особого упоминания, так как они помогли мне в начале моей карьеры биткойн-разработчика в сентябре прошлого года, а также помогли увеличить скорость создания кода и показали, как стать по-настоящему полезным разработчиком.

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

Главное — приносить пользу, а не быть разработчиком

Еще одна черта, которой должен обладать полезный разработчик проекта с открытым исходным кодом — это способность писать хороший код. Но существуют и другие качества: понимание того, что другие хотят от проекта, работа в одном направлении, а не в противоположном, привлечение людей к своим запросам на включение кода и их объединение, ясное, убедительное и вежливое изложение в запросах на включение кода и обзорах, структуризация запросов на включение кода для облегчения работы проверяющим, создание хороших взаимоотношений с другими разработчиками и многое другое. Работайте над этими навыками. Даже самый гениальный код окажется бесполезным, если другие не хотят видеть его в проекте или же если вы не сможете убедить кого-то проверить его. Это особенно важный момент для новичков, которые еще не сделали себе репутацию в проекте. Пытайтесь облегчить другим процесс проверки и понимания ваших запросов на включение кода и вы с большей вероятностью получите положительный ответ.

Заинтересовались?

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

Если вы хотите получить более практические советы о том, как начать работать с Bircoin Core, то прочтите это великолепное руководство от Джимми Сонга.

Поделитесь со мной вашими мыслями и предложениями, или же пишите, если вам нужна помощь в ваших начинаниях. Я всегда с радостью помогаю людям с внедрением первого коммита!

Автор: John Newbery

Источник

The post Работа над Bitcoin Core: взгляд изнутри appeared first on .

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

Оставить комментарий