主页 > imtoken钱包最新版下载不能 > Jimmy Song:如何成为比特币核心开发者
Jimmy Song:如何成为比特币核心开发者
这不仅会让你成为更好的开发者,还会成为比特币社区的中坚力量。 本文约4000字,阅读全文约需10分钟。
如果您是一名开发人员并持有比特币,那么为 Bitcoin Core 做贡献可能是您可以为投资做的最好的事情之一。 在本文中,我将简要描述您可以如何为核心开发做出贡献。
所以你想成为核心开发人员......
在我们深入探讨为核心做贡献的实际细节之前,有几点需要注意。
首先,Bitcoin Core 是一个精英团体。 作为新手,您不太可能将修改工作量证明的疯狂拉取请求合并到核心中。 像任何精英管理一样,你从零声誉开始,你的工作不言而喻。
好消息是没有人关心你的背景。 无论您是 14 岁的印度人还是 45 岁的财富 500 强公司的 CTO,唯一真正重要的是您的工作质量。
坏消息是你必须愿意放下你的自我。 没有人关心你有多少年的经验,或者你有什么好主意来修复比特币。 您的代码、审查、文档和测试的质量很重要。
其次,你应该相应地设定你的期望。 Pieter Wuille、Cory Fields 和 Gregory Maxwell 等著名的核心开发人员通过多年的血汗和泪水赢得了他们的尊重。 添加拉取请求以更正拼写错误并不能赢得 Pieter Wuille 级别的尊重。 出色的工作会为您赢得认可和尊重,但前提是您已经高效工作了一段时间。
第三,这不是一条容易的路。 成为 X 公司的顶级开发人员并不一定能让你成为优秀的核心开发人员。 这有很多原因,但总的来说,你的工作必须满足一些非常高的测试、文档和代码审查标准,而这样的标准即使在非常可靠的科技公司也不常见。
总而言之,如果你谦虚、自我驱动并追求卓越,那么为核心做出贡献将使你成为更好的开发人员、代码审查人员、文档编写人员和测试人员。
初步知识
您需要一些知识和技能才能开始。
Bitcoin Core 主要用两种语言编写,C++ 和 Python。 如果你想做出贡献,你应该至少学习其中的一个。
源代码控制通过 Git 进行管理。 至少,您应该知道如何从起点获取信息、如何创建主题分支以及如何变基。 如果您正在测试其他人的代码,您还应该知道如何将多个存储库添加到您的本地开发环境,以便您可以获取和测试代码。
对核心的所有更改都作为拉取请求合并到 Github 上,因此您需要一个 GitHub 帐户。
最后,您需要知道如何在您的平台上安装和删除包。 这些说明非常详细,但很有用,例如,可以帮助您根据需要添加和删除 ZMQ。
开始
入门时应该做的第一件事是阅读文档。 自述文件和贡献指南是很好的起点。
然后,转到 doc 目录并阅读那里的 README。 doc 目录中的所有文档都在 README 中进行了描述,因此如果您在任何时候迷路或感到困惑,都可以参考它。
请注意,您不必了解我建议的每份文档中的所有内容。 如果您遇到不明白的事情,IRC、StackExchange 和 Slack 上有很多非常优秀的人可以帮助您。
从源代码构建
既然您已经阅读了应该如何进行开发的基础知识,那么就从从源代码构建比特币开始吧。 首先,克隆比特币 Git 存储库:
git clone git@github.com:比特币/比特币
下一步将是设置您的开发环境。 这在很大程度上取决于您所使用的平台,但编译是您需要经常做的事情,所以将这部分放在外面是非常值得的。
此外,您将需要运行所有集成测试,因此请确保在执行以下说明时打开 GUI 和 ØMQ。
· *nix 说明在这里 ()。
· osx 指令在这里()。
· Windows 说明在这里 ()。
· openBSD 说明在这里()。
当您设置环境时,如果某些地方不起作用,请在提交文档拉取请求之前谷歌它。 如前所述,IRC、StackExchange 和 Slack 都是很好的资源,但请不要问超级简单的问题来占用大家的时间。
测试
现在您已经编译了所有内容,下一步是测试软件。 值得庆幸的是,Bitcoin Core 有各种单元测试和集成测试来检查你刚刚编译的软件是否正常工作。
首先,运行位于此处的单元测试。 单元测试与其他所有内容一起编译,因此您需要做的就是运行生成的二进制文件。 检查所有测试是否通过。 如果它们没有通过,则可能缺少某些说明。
如果所有单元测试都通过,请在此处运行集成测试。 您将运行扩展测试。 特别是修剪测试需要很长时间才能运行,因此您希望在将来运行集成测试时排除该测试。
再次检查所有测试是否通过。 在最后显示摘要之前,您会看到一些点。 如果有什么没有通过,您可能会遗漏一些指令,但有时,一些集成测试可能会因 RAM 和 CPU 的不同而有所不同。
贡献类别
现在您已经设置了系统,您可以开始贡献了!
您可能认为贡献意味着添加一堆代码、发送拉取请求并获得荣耀。 事实上,很多工作都是围绕审查和测试其他人提交的代码展开的。 它有助于理解如何合并拉取请求所涉及的步骤。
1. 有人创建更改并通过拉取请求提交代码。
2. 一个或多个人审查代码。
3. 一个或多个人测试代码。
4. 当足够多的人审查和测试代码时,维护者将合并代码——只有少数人可以这样做。
大多数人认为对开源项目的贡献只是贡献,但实际上,测试和审查对项目的成功更为重要。 正如我们在最近的 Ethereum Parity 崩溃中看到的那样,缺乏审查和测试通常是许多项目中出现安全漏洞的原因。
审查和测试也很关键,因为通常很难有一种涵盖所有情况的对抗心态。 让多双眼睛查看和测试代码有助于发现利用代码的可能方式。
最后,审查和测试不仅对项目有好处,对你也有好处! 审查和测试将迫使您更多地了解您的代码库,并让您比编写代码更能理解它。
开始
为了适应贡献流,您首先不应添加大量拉取请求。 相反,作为没有声誉的新开发人员,您最好的选择是开始审查和测试其他人的工作。 审查和测试通常是瓶颈,因此您可以同时做出贡献并在社区中赢得一些声誉。
值得一提的是,Greg Maxwell 在开发人员中享有如此良好声誉的部分原因在于他是一位优秀的审阅者和测试者。 在寻找破解某些东西的可能方法方面比特币需要解决的核心问题是,他拥有世界一流的才能,而且他审查和测试的代码比他编写的代码还多。 我保证在您自己的代码经过审查和测试后,您会更加感激他。
另外,代码通常只写一次,却被多次阅读。 因此,审查是非常重要的一步,它揭示了代码的“可读性”。 一般的经验法则是,对于您提交的每个拉取请求,您应该审查大约 3 个拉取请求。 一开始您可能希望此审查/提交请求比率更高。
如何复习
通常,在您了解代码的作用之前,您将无法对拉取请求进行良好的审查。 正如他们所说,编写代码比阅读容易得多,因此请花时间真正理解代码。
通常,为了掌握拉取请求中发生的事情,您必须查找正在使用的函数和方法并仔细检查代码的上下文。 如果您感到困惑,并且与您一起审查代码的人在 IRC 上,您可能想直接询问。 大多数时候,pull request 的作者会非常感谢审阅者并且很乐意帮助你。
就像复习一篇文章或一本书,你应该注意很多事情,即:
· 代码在做它应该做的事吗?
· 代码是否经过充分测试?
· 围绕代码的所有注释是否有用且准确?
· 代码是否清晰,方便后期修改?
作为一般规则,如果您不同意某事的实施,最好假设您不了解情况,而不是开始说教。 同理心和机智会让你在这里走得更远。 请记住,您以多种方式审查某人的孩子。 温和地提问,至少一开始是这样。 通常,这些程序员不了解您或您的意图。 明确区分格式方面的小问题和可能破坏某些内容的主要问题。 最好听起来像一个试图掌握内容以进行改进的学生,而不是守门人。
一旦您确定了代码试图实现的目标,您就可以评论该功能是否值得实现。 在建立一些声誉之前,请远离任何可能被视为负面的评论。
审查代码后,请使用适当的同行评审评论对拉取请求进行评论。 如果你想要一个否定的答案,重新开始并假设你不明白发生了什么,与作者交谈并提出问题,直到你确定这是一个糟糕的拉取请求。 即使那样,也要与更有经验的人交谈以确保。
如何测试
为了正确测试,您必须从拉取请求中下载代码,再次编译并运行测试。 如果您能想出一种以某种方式手动测试功能的方法,那就太好了,但这不是必需的。
在大多数情况下,拉取请求将包含一个或多个测试。 如果编写代码的人没有提供测试覆盖率,请尝试了解原因 - 重构通常不会,原因很明显。 如果您认为应该进行测试,您可以在拉取请求中写上“这需要测试”。 更好的是,自己编写测试并让作者知道可以在拉取请求中从哪里选择它! 这是与您正在审查的代码的作者建立友好关系的好方法。
作为测试人员,您的工作是确保测试通过并且测试充分涵盖了引入的功能。 审查中的一个好的评论可能是“如果这样做的测试可以涵盖这样那样的情况,那就太好了”。
测试之后,一定要注意你已经在pull request中测试过了。
更好的拉取请求
最终,您将足够接近以创建您自己的拉取请求。 拉取请求可以是从添加文档到共识关键功能的任何内容。 提出一个好的 pull request 的关键,无论发生什么变化,都是让它易于理解和轻松审查。
为此,请不要通过一次提交包含 3000 行更改的拉取请求来折磨您的审阅者。 将这些更改分解为易于审查的提交,少于 300 行(或者可能少于 100 行!)并将它们适当地分组。 例如,您应该在一次提交中进行格式更改,在另一次提交中进行实际编码更改,而在另一次提交中进行大量代码块移动。
在每一次提交中,努力解释你在做什么,以及你在做什么背后的原因。 这部分怎么强调都不为过。 不遗余力地使 pull request 中的所有内容都易于理解! 如果你不这样做,没有人会审查你的代码。
当审阅者对某事发表评论或提出更改建议时,请尝试理解原因。 如果您不明白,请询问,直到清楚他们要您做什么为止。 如果您同意,请进行适当的更改并让您的审阅者知道比特币需要解决的核心问题是,但如果不同意,请确保您与他们就如何获得他们的批准进行成熟、机智的对话。
拉取请求入门的想法
这里有一些您可以立即贡献的拉取请求想法(记住要检查您的拉取请求 3 次!)
· 使文档(特别是关于设置)清晰
· 为尚未测试的事物编写单元测试或集成测试
在未记录的代码中写注释,以便其他人可以找到它
综上所述
其他环境通常不会遵循比特币核心使用的软件开发实践。 大多数进入核心开发的人会发现这个过程过于拘束和束缚。 我保证每一步都有理由。
切记要有礼貌,温文尔雅。 带着谦虚和渴望学习的态度进来,这不仅会让你成为更好的开发者,还会成为比特币社区的一股力量。
-结尾-
作者:吉米·宋
本文由比心原创编译,原文链接: