Linus Torvalds:代码即文档,开源即信仰
|
去年元旦我在改智能合约的溢出检查,老张突然把显示器转过来:「Linus又怼人了,说‘代码即文档,开源即信仰’」。我盯着他屏幕上那行加粗的英文,手里咖啡差点泼到键盘上——这不就是我们上个月跟甲方吵架的点么?他们非让我们把每个函数的用途写成word文档,说「代码看不懂」。老张当时怼回去:「你们见过哪个厨师边炒菜边写菜谱的?」结果被产品经理记了小本本。 但Linus这话能站住,真不是靠情怀。我原以为开源项目死掉是因为没钱,结果翻了下GitLab上挂了的项目——70%是代码烂到没人敢碰。去年有个做跨链的,白皮书写得比《圣经》还厚,代码里连基本的错误处理都没有。我试着fork下来跑测试,构建卡在87%不动了,日志里全是「TODO: 后面再补」。这种项目,你就是把Linus本人绑在椅子上写文档,也救不活。 显示器右下角的时间跳到00:17,机房冷风机嗡嗡响。老张突然说:「记得Web3.0那波吗?」我当然记得——2021年满大街都是「去中心化社交协议」,结果90%的项目连基本的消息排序都搞不定。有个团队甚至把用户数据存IPFS上,结果链上索引和实际文件对不上,用户发的消息全乱序显示。他们后来在GitHub发了个「技术说明.pdf」,200多页,我看完第一页就关了——代码都写成屎了,文档再漂亮有个屁用。 但优胜劣汰这事儿,在区块链圈特别狠。去年有个做DeFi的,代码写得那叫一个漂亮,注释比代码还多。结果被黑客找到个整数溢出的漏洞,30分钟内被抽干了池子。后来复盘发现,他们注释里写了「此处需检查溢出」,但代码里没写检查逻辑——你说这是文档的错,还是代码的错?老张当时说了句特损的话:「这就像在厕所墙上写‘请冲水’,但没装冲水按钮。」 窗外的雨下得更大了,外卖在桌上凉了半小时。我突然想起2018年那个做预言机的项目,代码量不到5000行,但每个函数都有单元测试,连边界条件都考虑到了。他们文档就三页:怎么编译、怎么部署、怎么调API。结果三年过去了,那项目还在跑,而同时期那些写了几百页文档的,早成了GitHub上的僵尸仓库。Linus说的「代码即文档」,大概就是这个意思——好的代码自己会说话,烂的代码,你写再多注释都是废话。 不过这事儿也有反例。去年有个做NFT市场的,代码写得跟鬼画符似的,变量名全是a、b、c,函数嵌套八层深。但人家会营销啊,找了一堆KOL吹「去中心化新范式」,结果用户量暴涨。我原以为这种项目活不过三个月,结果他们靠交易手续费赚得盆满钵满,现在还准备发币。老张当时叹了口气:「这就是区块链的悲哀——代码质量不重要,会讲故事才重要。」但仔细想想,这种项目最后要么被黑客撸穿,要么被监管盯上,优胜劣汰的筛子,迟早会轮到他们。 说到黑客,我想起2020年那个被黑5000万美金的交易所。他们的代码其实不算烂,但有个致命问题:所有私钥都硬编码在合约里。审计报告里明确写了「私钥管理存在风险」,但他们觉得「文档里说了,用户要自己保管私钥」——结果呢?用户根本没仔细看文档,黑客直接把合约里的私钥提出来,把钱全转走了。这事儿后来在开发者群里传疯了,有人说:「这就是Linus说的反面教材——代码里有漏洞,文档里写再多的警告都没用。」
文章配图,仅供参考 老张突然戳我:「你看这个。」他屏幕上是Linus的原话:「如果代码烂到需要额外文档,那它就不配被开源。」我盯着那行字看了半天,突然笑了——这不就是我们每天在做的选择么?是花时间写漂亮的文档,还是把代码写得更健壮?是迎合甲方「要文档」的需求,还是坚持「代码即文档」的原则?去年元旦那天,我最终没给那个智能合约加溢出检查的文档,而是重写了整个计算逻辑——现在那合约跑了快一年,没出过任何问题。雨停了,机房的冷风机突然停了,热风扑面而来。我合上笔记本,突然想起个事儿:那个写200页文档的DeFi项目,后来被另一个团队fork了。新团队删掉了所有文档,把代码重构了一遍,加了自动测试和溢出检查。现在那项目还在跑,交易量比原来还高。你说这是文档的胜利,还是代码的胜利?我原以为答案很明显,结果老张说了句特扎心的话:「都不是,是用户用脚投票的胜利——他们才不管你代码还是文档,能赚钱就行。」 至于Linus的「开源即信仰」,我倒是觉得,在区块链圈,这信仰得加个前提:代码得先配得上。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


LinusTorvalds开源转变了Linux,否则它就完了