常混GitHub的人都知道,想要从数以百万的项目中找到靠谱的项目,有一个重要的参考标准,就是「开发者活跃度」。
然而,最近一家数据分析公司的CTO(本文作者)在分析过GitHub的开发者活跃度指数以及多个数据平台根据该指数提供的排名后,却发现,现有的指数数据和排名有些隐藏的坑,连以太坊这样的王者都被无名项目给虐了。
总之,活跃度排名的水很深,还是让圈内人为你揭秘吧。
作为开发者,在GitHub浏览项目时,「开发者活跃度」(Dev Activity)是一个重要的参考指标。
越多开发者愿意投入时间和精力在一个项目上,项目的活跃度高,活跃度高则往往意味着:开发者相信这个项目是靠谱的;这个项目的功能更丰富;以及这个项目存在「猫腻」的可能性更低。
虽然有些土豪开发者可以靠「刷量」把项目的活跃度给刷上去,但对于GitHub上的绝大多数普通开发者来说,刷量的成本是可望而不可即的。况且刷上去的项目,也很容易露出马脚,经常上GitHub的人往往一眼就能看出来。
那么,这是不是说GitHub是筛选项目最靠谱的参考数据呢?带着这个疑问,我们研究了大量活跃度指数的数据,通过将此数据与不同项目进行深度对比,发现一个有意思的现象,那就是现有的活跃度数据和排名并不能反应项目的质量和靠谱程度。
既然如此,这一现象是怎样造成的?开发者在参考项目的活跃度时,到底该参考哪些数据呢?
王者败给青铜,GitHub活跃度应该怎么看?
CryptoMiso是一个活跃度数据平台,通过对以太坊、比特币等知名项目的GitHub活跃度指数进行对比时发现,在活跃度的整体排名上,「王者」竟然败给了无名「青铜」。
Particl和DigiByte这样几乎没有存在感的项目,git commits的数量远远高于以太坊,排名竟然也将比特币和以太坊远远甩在身后。
可问题是,Particl和DigiByte这样的项目凭什么提交数就比比特币和以太坊高呢?通过深挖,我们发现Particl「借鉴」了一部分比特币的源码,随着「借鉴」的操作,也分流了一大批比特币项目下的提交数(commits)和贡献者,简单来说就是窃取了比特币的胜利果实。
而这种操作Particl绝不是个例,类似这样的项目还多着呢。
随便举几个例子:
- DigiByte,CryptoMiso上排名第8位的项目,复制/粘贴了比特币的源代码;
- ChainCoin,CryptoMiso上排名第18位,把比特币的源代码进行分叉,虽然提交数不多(不到30个),但仍然比以太坊要高;
- GlobalCoin,CryptoMiso上排名第22,同样把比特币的源代码给分叉了,虽然活跃度不高,但排名却比较靠前。
虽然CryptoMiso在展示排名时会在对别的项目进行分叉的项目下用小字标注出来,但这么做似乎也并没有什么效果,像DigiByte这样直接复制/粘贴的项目,能耐它何?
还有一个有意思的发现是,像CryptoMiso这样的数据平台往往只抓取一个代码库(repositories)的数据。比如以太坊就有很多个代码库,只抓取一个数据往往无法全面反映出以太坊的活跃度。
实际上,以太坊有大量超级活跃的代码库。
你可能会想,那我们换个数据平台怎么样?行啊,我们就来看看另一个数据平台Coincheckup,通过对过去一年的提交数进行筛选,很遗憾,数据显示结果与上面如出一辙,DigiByte和Particl仍然分别排在第8位和第12位。
要找到以太坊,需要往后翻三页。就连比特金(Bitcoin Gold)这样连一条提交都没有的项目,也排在了以太坊的前面。
还有更虐的,很多看起来提交数很多的项目,实际上掺了不少「水分」。
比如有些提交就是用pixel art画了个像素风格的画,也能算做有效的数据。
除此之外,利用这些数据平台去查看项目的GitHub活跃度指数,也是件及其麻烦的事。你要一个一个的去看各个项目的数据,然后再把这些数据放到一起来对比。
不仅如此,正如上面提到很多数据网站抓取的库很单一,你还要再确定这些库抓取的对不对。总之,非常麻烦。
那么,要想更科学的获取项目的GitHub活跃度指数该怎么办呢?
事件 vs. 提交,谁更靠谱?
从上面可以看出,按照项目的提交数这个标准来判断项目的活跃度,根本无法有效的反映出项目实际的活跃度。
因此,有些开发者认为,现有的排名机制不好,更科学的方法应该是基于「项目在GitHub上所产生的事件」。那么,事件到底又指什么呢?
事件(event)可以包括以下几个维度:
- 代码推送(code pushes)数量;
- 互动行为数量,包括添加/删除/编辑/评论等行为;
- pull request交互数量,包括在PRs里的添加/删除/编辑等;
- GitHub Wiki编辑数量;
- commits的评论数;
- 开源代码库数量。
通过事件(event)来判断项目的活跃度还有一个好处,那就是所有事件的返回格式都是统一的。如下面代码所示:
调用语句也非常简单:
通过「事件」来获取GitHub项目的活跃度,不仅能避免上面的问题,还有以下好处:
- 避免了对某个项目代码库代码的分叉,就能自动继承该项目的事件数据;
- 历史抓去记录不可更改;
- 开发者活跃度数据更多元,不仅有提交代码数量,还包括上面提到的种种维度。
通过这样的判断标准再来筛选,我们得到了以下结果:
看到了吗,以太坊和比特币妥妥出现在了它们应该出现的位置上,而那些在现有筛选机制上排名靠前的项目,如DigiByte、比特金等,则一个都没有出现!
利用这一方法,我们也对ERC20 Token进行了筛选,得到的结果也靠谱了很多:
从上图可以看出,排在最前面的分别是:Status, EOS, BAT, Golem,甚至连波场(TRON)这样近期被黑的厂商,也排在了相对客观的位置。
其他有意思的发现
通过今天的文章,我们可以得出一个结论:GitHub项目的活跃度指数,基于事件比基于提交数更科学,也可以避开很多坑。
同时,通过数据的结果来看,也能看出一些有意思的现象:比如ERC20项目的开发者活跃度,比很多区块链平台项目高得多。
这意味着,以太坊已经吸引到了大量的优质开发者基于这个平台做开发。
作为开发者之一,相信通过科学的方法筛选和分析数据,找的项目会更靠谱。从今天起,也尝试起来吧。
PS. 本文提到通过事件(event)筛选开发者活跃度的数据平台为:
https://santiment.net
来源:区块链大本营(ID:blockchain_camp)
作者:Valentin Mihov
责编:Aholiab