1. 首页
  2. 访谈

Jimmy Song:如何成为一名比特币核心开发者

如果你是开发人员并持有比特币,那么为比特币核心(Bitcoin Core)贡献可能是你能为帮助自己的投资所做的最好的事情之一。在本文中,我将简要介绍如何为核心开发贡献。

所以你想成为核心开发者......

在我们深入了解为核心贡献的实际细节之前,请先了解一些注意事项。

首先,比特币核心是一个精英管理的团体。作为一个菜鸟,你不太可能把一个疯狂的修改工作量证明(proof-of-work)的拉取请求(pull request)合并到核心里。像任何精英管理一样,你从零声誉开始,凭工作说话。

好消息是没有人关心你的背景。无论你是一个14岁的印度人,还是一个45岁的财富500强公司首席技术官,唯一真正重要的是你的工作质量。

坏消息是你必须愿意收起自己的自负。没有人关心你有多少年的经验,或者你有什么好主意来修复比特币。你的代码、审查、文档和测试的质量才算数。

其次,你应该相应地设定你的期望。著名核心开发人员如Pieter Wuille、Cory Fields和Gregory Maxwell通过多年的血汗和泪水赢得了他们的尊重。添加一个纠正拼写错误的拉取请求并不会赢得Pieter Wuille级别的尊重。好的工作会让你赢得认可和尊重,但只有在你生产了一段时间之后。

第三,这不是一条容易的道路。成为X公司的顶级开发人员并不一定会让你成为一名优秀的核心开发人员。造成这种情况的原因有很多种,但总的来说,你的工作必须满足一些非常高的测试、文档和代码审查标准,即使在非常靠谱的技术公司里这样的标准也并不常见。

总而言之,如果你谦卑、自我驱动和追求卓越,那么为核心贡献将使你成为更好的开发人员,代码审查者,文档员和测试员。

预备知识

你需要一些知识和技能才能开始。

比特币核心主要是用两种语言写的,C++和Python。如果你希望贡献,你应该必须学习至少其中一种。

源代码控制通过Git来进行管理。至少,你应该知道如何从起始地点获取,如何创建主题分支以及如何复位基底。如果你正在测试其他人的代码,你还应该知道如何将多个存储库添加到本地开发环境中,以便可以获取并测试代码。

对核心的所有更改都在Github上以拉取请求为基础合并,因此你需要一个GitHub帐户。

最后,你需要知道如何在平台上安装和删除软件包。这些说明非常详细,但它可以很有用,比如,它可以帮助你根据需要添加和删除ZMQ。

开始

开始时,你该做的第一件事是阅读文档。自述文件和贡献指南是开始的好地方。

然后,转到doc目录并阅读那里的README。 doc目录中的所有文档都在README中有描述,因此,如果你在任何时候迷路或困惑,可以参考它。

请注意,你不必了解我建议的每个文档中的所有内容。如果你遇到一些你不理解的东西,在IRC,StackExchange和Slack上有很多非常好的人可以帮你。

从源头构建

既然你已经阅读了开发应该如何进行的基础知识,那么首先要从源代码构建比特币。首先,克隆比特币Git存储库:

git clone git@github.com:bitcoin/bitcoin

下一步将是设置你的开发环境。这在很大程度上取决于你所使用的平台,但编译是你需要经常进行的操作,因此将这部分放下来是非常值得的。

此外,你还需要运行所有集成测试,因此请务必在执行以下说明时打开GUI和ZMQ。

· *nix说明在这里(https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.md)。

· osx说明在这里(https://github.com/bitcoin/bitcoin/blob/master/doc/build-osx.md)。

· windows说明在这里(https://github.com/bitcoin/bitcoin/blob/master/doc/build-windows.md)。

· openBSD说明在这里(https://github.com/bitcoin/bitcoin/blob/master/doc/build-openbsd.md)。

在你设置环境时,如果某些东西无法运行,请在提交文档拉取请求之前Google一下。如前所述,IRC、StackExchange和Slack是很好的资源,但请不要问极为简单的问题,耗尽每个人时间。

测试

既然你已经编译了所有内容,那么下一步就是测试软件。值得庆幸的是,比特币核心有各种单元测试和集成测试,以检查你刚刚编译的软件是否正常工作。

首先,运行位于此处的单元测试。单元测试与其他所有内容一起编译,因此你需要做的就是运行生成的二进制文件。检查所有测试是否通过。如果它们无法通过,可能是遗漏了一些指令。

如果所有单元测试都通过,请运行此处的集成测试。你将要运行扩展测试。特别是修剪测试需要很长时间才能运行,因此你希望在将来运行集成测试时排除该测试。

再次,检查所有测试是否通过。在最后显示摘要之前,你将看到很多点。如果某些地方没有通过,你可能是遗漏了一些指令,尽管有时候,一些集成测试可能会因RAM和CPU而变得有点多变。

贡献类别

现在你已经设置了系统,你可以开始贡献了!

你可能认为贡献意味着添加一堆代码,发送拉取请求并获得荣耀。实际上,很多工作都围绕着其他人提交的审查和测试代码。它有助于理解如何合并拉取请求所涉及的步骤。

1. 有人创建更改并通过一个拉取请求提交代码。

2. 一个或多个人审查代码。

3. 一个或多个人测试代码。

4. 当有足够的人审查并测试代码时,维护者将合并代码——只有少数人可以这样做。

大多数人认为对开源项目的贡献只是贡献,但实际上,测试和审查对项目的成功更为重要。正如我们在最近的以太坊Parity故障中看到的那样,缺乏审查和测试通常是许多项目中出现安全漏洞的原因。

审查和测试也很关键,因为通常很难有涵盖所有案例的对抗思维模式。有许多双眼睛来查看和测试代码有助于发现可以利用代码的可能方式。

最后,审查和测试不仅对项目有益,它们对你也有好处!审查和测试将迫使你了解有关代码库的更多信息,并且甚至比编写代码更能让你理解。

开始

为了适应贡献的流程,你不应该首先添加大量的拉取请求。相反,作为一个没有声誉的新开发者,最好的办法是开始审查和测试其他人的工作。审查和测试往往是瓶颈,因此你可以同时贡献并在社区中赢得一些声誉。

值得一提的是,Greg Maxwell在开发人员中享有如此良好声誉的部分原因,是他是一位非常优秀的审查者和测试者。在寻找破解某物的可能方法时,他拥有世界级的才能,他审查和测试的代码比写的多。我保证在你自己的代码被审查和测试之后,你会更加感激他。

此外,代码通常只写一次,但它被读了很多次。因此,审查是一个非常重要的步骤,因为它揭示了代码的“可读性”。一般的经验法则是,对于你提交的每个拉取请求,你应该审查大约3个拉取请求。一开始你可能希望这个审查/提交请求比更高。

如何审查

通常,在理解代码在做什么之前,你将无法对拉取请求进行良好的审核。正如他们所说,在编码中写比读容易得多,所以花些时间来真正理解代码。

通常,为了掌握一个拉取请求中发生的事情,你必须查找正在使用的函数和方法,并仔细检查代码的上下文。如果你感到困惑,并且你正在审查代码的人在IRC上,你可能需要直接提问。大多数时候,拉取请求作者都会非常感谢审查者,并乐意为你提供帮助。

就像审查一篇文章或一本书一样,你应该注意很多事情,即:

· 代码是否在做它应该做的事情?

· 代码是否经过充分测试?

· 围绕代码的所有评论是否有用且准确?

· 代码是否清晰,并且在以后易于修改?

作为一般规则,如果你不同意某些东西的实现,最好假设你不了解情况,而不是开始讲课。移情和机智会让你在这里走很长的路。记住,你在很多方面审查某人的宝贝。温柔地提问,至少在开始时这样。通常情况下,这些程序员不了解你或你的意图。清楚地区分格式上的小问题和可能破坏某些东西的重大问题。最好听起来像一个试图掌握改进内容的学生,而不是一个看门人。

一旦你确定代码试图实现的是什么,那么你可以评论这个功能是否值得做。在你建立一些声誉之前,请远离任何可能被认为是消极的评论。

查看完代码后,请使用适当的同行审查评论对拉取请求进行评论。如果你想要否定应答,请重新开始并假设你并不明白发生了什么,与作者交谈并提出问题,直到你肯定这是一个糟糕的拉取请求。即便如此,也要与更有经验的人交谈来确保。

如何测试

为了正确测试,你必须从拉取请求下载代码,再次编译并运行测试。如果你能想到一种以某种方式手动测试该功能的方法,那就更好了,但这不是必需的。

大多数情况下,拉取请求将包括一个或多个测试。如果写代码的人没有提供测试覆盖,请尝试理解为什么——出于明显的原因,重构通常不会提供。如果你认为应该进行测试,你可以在拉取请求中写下“这需要测试”。更好的是,自己编写测试并让作者知道它可以在拉取请求中从哪里挑选出来!这是一个很好的方式来跟你正在审查的代码的作者建立起一些善意。

你作为测试者的工作是确保测试通过,并且测试充分涵盖了所引入的功能。审查中的一个好的评论可能是“如果一个做到这样这样的测试可以涵盖如此如此的情况,那就太好了”。

测试之后,请务必在拉取请求中注明你已经测试过了。

更好的拉取请求

最终,你会走向足以创建自己的拉取请求。拉取请求可以是从添加文档到共识关键功能的任何内容。无论发生什么变化,提出好的拉动请求的关键,是让它易于理解,审查起来不痛苦。

为此,请不要一次性提交3000行更改的拉取请求来折磨你的审查人。将这些更改分成易于审查的提交,少于300行(或者可能少于100行!)并进行适当的分组。例如,你应该将格式更改放入一个提交中,将实际编码更改为另一个提交,将代码块的大幅移动放入另一个提交。

在每次提交中,都要努力解释你正在做什么,以及你所做的事情背后的原因。这一部分怎么强调都不为过。不遗余力地使拉取请求中的所有内容都易于理解!如果你不这样做,将不会有任何人审查你的代码。

当审查者评论某些内容或建议更改时,请尝试了解其原因。如果你不理解,请询问,直到明确他们想要你做什么为止。如果你同意,请进行适当的更改并让你的审查者知道,但如果没有,请确保你与他们进行成熟、机智的对话,以了解如何获得他们的确认。

开始时的拉取请求理念

以下是你可以立即提供的一些拉取请求想法(请记住,请审查3遍你提交的拉取请求!)

· 让文档(特别是关于设置的文档)清晰

· 为尚未测试的东西编写单元测试或集成测试

· 在未记录的代码中编写注释以便其他人查找

结论

在其他环境中通常不会遵循比特币核心所使用的软件开发实践。进入核心开发的大多数人会发现这个流程过于严格和限制。我保证每一步都有理由。

记住要有礼貌、温柔和委婉。以谦虚的态度和渴望学习的方式进来,这将使你不仅成为更好的开发者,而且还成为比特币社区的中坚力量。

商务合作,请添加商务微信~

【深氪财经版权及免责声明】本站所发布的文章,版权归原作者所有,如有侵权,请联系我们,我们将及时删除!本站所发布的文章,均出于传递行业信息为目的,不代表深氪财经立场!本站所发布的文章,不构成任何投资建议,投资有风险,入市须谨慎!谨防ICO,变相ICO!

下一篇:以太坊联合创始人Vitalik Buterin:区块链技术和加密货币不可分割
« 上一篇
上一篇:从华尔街老兵到bitcoiner,他认为隐私应该是比特币的默认功能
下一篇 »

相关推荐

QR code