最近我在处理一个汇总Github开发者资料数据的项目。由于使用GitHub个人资料作为数据源时存在一些问题,因此我想先列出在尝试通过仅仅查看他们的GitHub贡献来评估开发者时遇到的问题。
GitHub个人资料数据的一个常见错用是试图以此来筛选出应聘者。很多人似乎认为可以通过查看开发人员的开源贡献来弄清楚他们的能力。以最新的“黑客新闻”中“谁在招聘”主题为例,有大量各式招聘广告要求将Github个人资料作为工作申请的一部分。
已经有一些帖子反对要求将GitHub贡献纳为招聘过程的一部分。我特别推荐《无偿劳动伦理和OSS社区》,以及《为什么GitHub不等同于你的简历》这两篇文章。虽然这两个帖子都在论证招聘时要求开源贡献的观点值得商榷,但我的看法并不是为什么要求开源贡献在道德上不可取,或者为什么GitHub不适合展示你的项目。
相反,这篇文章是关于为什么GitHub个人资料在寻找开发人员时并不是那么有用。
如果你查看过我曾经合作过的最好的软件工程师公开的GitHub个人资料。
尽管去年他在工作中写了大量代码,但他没有发布任何可以公开查看的内容:他没有公开提交,他没有创建任何自己的存储库,而且他的关注者数量也不是很多。尽管如此,他仍然是我曾合作过的最好的开发人员。
他有一个相对不活跃的GitHub个人资料也不奇怪:绝大多数GitHub用户都没有很亮眼的个人资料。为了量化这一点,我从GitHub存档中汇总了每个用户的公共提交,并发现:
去年,只有17%的GitHub用户提交过代码
只有7.4%的GitHub用户提交过10次以上
只有1.4%的GitHub用户提交过100多次
只有0.15%的GitHub用户提交超过500次
这种分布大致是一种幂律分布(或至少类似于此)。这意味着在过去的一年中大多数用户所展示的活动相对较少,尽管少数帐户将进行数十万次提交。
下面这张图展现出GitHub上有一定数量粉丝的开发者所占的百分比:
我认为让人们看到自己的GitHub个人资料在这个排名中的位置会很有趣,由于从GitHub API获取提交数量比较难,所以我只展示了关注者数量,实际上两者有类似的分布。如果你在上面的搜索框输入你的GitHub用户ID,你还会看到关于你的排名情况的小型报告。
由上述统计可以发现的优势是,即使只有10个关注者,你也可以声称你在所有开发人员中排在前1%。
缺点是由于绝大多数开发人员在他们的公开GitHub个人资料中没有任何数据,因此用它们并不能筛选应聘人员。 83%的用户在去年没有提交任何内容,而88%的用户没有关注者。这并不意味着这些开发者都没有能力,这仅仅意味着这些开发者没有任何开源的贡献来炫耀。
这可能不言而喻,但公开的GitHub个人资料只能让那些开发开源软件的人得到展现。而绝大多数正在开发的软件都是封闭源码软件,如果你将专注于工作中的专有技术上,没有公开的开源贡献并不意味着什么。
我认为通过比较那些致力于开发开源软件和未开发开源软件的知名程序员,可以看出这一点。例如,Linus Torvalds在GitHub上的关注度最高。这是非常合理的,因为他是Linux和Git等几个非常成功的开源项目的创造者。另一方面,John Carmack和Jeff Dean甚至都没有GitHub个人资料,尽管他们都因其在Doom和Google等同样成功的闭源项目中的工作而闻名。
我一直觉得,在寻找开发专有闭源项目的开发人员时,要求开源贡献的证据是无意义的。这让我想起了那些需要介绍人,但又有一个政策是不向前雇员提供介绍的公司。如果你不打算让开发人员编写开源项目,那么要求已有开源项目经验是没有意义的。
即使忽略这些无意义的东西,你也不得不质疑需要GitHub贡献这一要求,因为这会筛除大多数开发人员,包括John Carmack和Jeff Dean等工程师。我觉得应该让应聘的开发人员做一个“Jeff Dean测试”:如果你的工作要求竟然会将Jeff Dean这样的人排除出你公司的软件开发工作中,那么你的要求可能是错的。
即使对于GitHub个人资料中有一个项目的开发人员来说,大部分项目并不令人印象深刻。
现在许多编程训练营和大学都要求学生创建GitHub存储库作为课程的一部分。尽管我完全支持教新程序员打好坚实的版本控制技能基础,但我看到的一部分学生们创建的项目让我觉得他们并没有完成这一项目。例如,GitHub上有大约190,000个名为“datasciencecoursera”的存储库。
同样,在GitHub存档中连接的超过7800万个存储库中,有110万个叫“hello-world”的存储库,100万个名为“test”的存储库。
由于GitHub上的这么多项目都很平庸,一个简单的思路是只考虑重复被标星的项目或者拥有大量关注者的个人资料。即使忽略这进一步限制了可用候选人的数量这一点,它仍然不是一个评估开发人员素质的有效方式——因为它只说明了受欢迎程度而非能力。
举个例子,看一下Stichpunk的GitHub个人资料:
这个配置文件有大约1560个关注者,这使她在GitHub的开发人员中排在前0.002%。她也有多个较受欢迎的存储库,并且似乎在一家大型科技公司工作。表面上看,这看起来像一个相当可观的GitHub个人资料。
但这不是一个真实的用户,而是由电视节目“硅谷”的编剧为他们的“Tabs Versus Spaces”剧集创建的。
当你认为GitHub的关注者数量有意义时,只要记住为仅出现在电视节目某一集中的角色创建的虚拟个人资料具有比全球99.998%开发者的更多关注者,并且在全球范围内排名为第670左右。
同样,如果你查看GitHub上最受欢迎的标星项目,其中很多都是列表或笑话。尽管编写列表或笑话也不一定简单,但它与开发者的天赋并无关系。
许多受欢迎的项目实际上都非常出色,我并不是想说受欢迎和质量甚至没有弱相关。问题是让一个项目变得受欢迎是一个非常不同的任务,需要与编写高质量代码完全不同的技能。
GitHub个人资料不仅对招聘开发人员没什么帮助,对于正在寻找工作的开发人员来说也没有看起来的帮助大。
在过去的十年里,我只接受过一次求职面试,但据我所知,面试过我的人都没有在面试前看过我的GitHub个人资料。事实上,其中一位面试官称他在面试前甚至没有看过我的简历,更不用说我的GitHub--我很欣赏他的实话实说。
从我听到的一些事实看,这似乎很常见。例如,Dan Luu在twitter上发布过这样的消息:
“尽管关于开源贡献对你的职业生涯如何有帮助以及github就等同于简历的说法大行其道,我的所有面试中只有2/50场的面试官中有人看过我的代码”——Dan Luu
Dan Luu是在GitHub上关注者数量前1K的用户,这至少意味着我的之前所说的经验不是由于我的GitHub资料相对平庸。
同样,在hftguy上,一位开发人员在进行了很多场面试后看了一下GitHub分析,发现只有1个人查看了他的项目(可能是自己测试的):
“经过十几次电话采访(每次1名开发人员)和几个现场(每场4到7名开发人员),我的个人资料只有1次访问。结论:没有人关心GitHub,没有人会读它。”
尽管GitHub个人资料作为数据源存在一些问题,但我仍计划在未来的项目中使用GitHub个人资料数据。这个想法是,虽然单个GitHub用户个人资料可能是一个稀疏的嘈杂信号,但通过将多个GitHub用户聚合在一起,仍然可以找出一些有趣的趋势。