首页 > 代码库 > 开源(Github)对程序员的影响

开源(Github)对程序员的影响

到了2017年,我们已经生活在开源的世界里了,进入了软件开源的时代。

下面两件事,可以让你真切地感受到开源时代的到来:

微软曾经是闭源私有软件的典型代表、反对开源的圣斗士,如今已经全心全意地拥抱开源软件,成立了 .Net 基金会(红帽是其中的一员) 并且加入 Linux 基金会。.Net 现在已经作为开源项目进行开发。

GitHub 已经成为了一个奇特的社交网络,它把问题跟踪(issue tracking)和分布式代码控制捆绑在一起。

对那些主要是拥有闭源软件背景的软件开发者来说,他们还没真正了解到开源时代的到来。开源对他们来说就,等同于“用你的空闲时间来进行免费工作”。

但是,对我们这些使用十年时间来建立一个价值10亿美元开源软件公司的人来说,我们并不是使用空余时间来免费为开源软件工作。而且,为开源工作的好处和结果是显而易见的:你建立的声誉是你自己的,而且你可以在换工作时把它带到新的公司里。GitHub 是一个社交网络,你所有的提交和对任何技术的研究、交流这些资产都是属于你自己的,它和你正在工作的公司没任何关系。

聪明人会利用 GitHub 的这个优点来建立自己的资产:向他们日常使用的语言和框架进行提交补丁、问题(issue)、评论。比如,TypeScript、.NET、Redux。

他们同样会尽可能地提倡并安排他们的工作以开源的形式来完成,即使他们的提交显示都是私有的提交。

GitHub 是一个很好的均衡器。你虽然不能从印度找到一份澳大利亚的工作,但你能够在印度利用 GitHub 与澳大利亚人进行工作。

在过去的十年里,从红帽公司获取一个工作机会的方式已经显而易见了:你只需与红帽公司的工程师一起合作开发他们的一些开源项目,然后只提交一些有价值的提交并且得到他们的认可,你就会得到这份工作。否则不会提供工作机会给你。

现在红帽公司依然提供同样的求职方式给求职者,不过仅限于技术职位。如今是开源的时代,这种求职方式在世界各地开始流行起来了。

在 2 月中旬的一次访谈中,Linux 和 git 的发明者 Linus Torvalds (他在 Github 中拥有将近 5 万粉丝)说到:

你需要为开源项目提交大量的小补丁,直到项目的维护者信任你,到了那时你就会成为一个在这个项目中值得信赖的人,而不仅仅是一个提交补丁的人。

在信任网络中,你的声誉代表这你的地位。当你换公司时,你之前的声誉就会有所丢失并且减弱。如果你生活在一个小镇里并且在那待了很久,那么那里的人都会对你有所了解。但如果你去了其他国家生活,无论你去哪个国家,你之前的声誉都已经归零了。你最终会到一个没人了解你的地方,更糟糕的是,那里没人知道谁了解你。

你可能是第一次、第二次,或者更糟糕的是你已经是第三次这样丢失了与你的信任网络的联系。除非你已经通过在研讨会或者大型会议进行演讲建立个人品牌,否则你与其他人共事时建立的信任,以及提交到企业内部仓库的代码都会不复存在。

但是,如果你的工作是在 GitHub 上完成的,它就不会消失。它是可以看得见的。你之前与别人建立的信任网络的联系是可以从 GitHub 里直接看的到的。

在 GitHub 开源社区中将要发生的一件事就是,学生、刚毕业的学以及移民者这些相对弱势的群体可以利用 GitHub 这个优势到澳大利亚找份工作。

并且 GitHub 会改变开发者社区现有的样貌。一些之前比较有权威的开发者将会突然地发现他们的信任网络被破坏了。因为在开源中有个原则叫精英领导(meritocracy?)——拥有最好想法的人胜出、拥有提多提交的人胜出、拥有最多通过测试的人胜出、拥有最佳实现的人胜出,等等。

这不是一个完美的原则(没有任何东西是完美的)。并且会让你很难成为一个可以一起共事的好同事。在红帽公司里,我们解雇过一些明星工程师(rock star engineers ),仅仅因为他们不能和其他同事和睦相处。而那些“其他工程师”会经常在 GitHub 里与其他代码提交者进行交流。

GitHub 不是简单地作为一个代码仓库和原始提交者的成员列表, 一些人把这看成是稻草人谬误( strawman arguments)。GitHub 是一个社交网络。我觉得:

重要的不是你提交到 GitHub 上的代码,是其他人对你 GitHub 上的代码的评论

那是你可以随身携带的声誉。并且在之后的12到24个月里,是否在 GitHub 里为开源项目贡献代码会有明显的区别。就好像有邮件和没有邮件(现在所有人都有邮件了)、有手机与没手机(现在任何人都有手机)的区别。到最后,大多数人将会以开源的方式来进行工作,并且会基于各种因素提供相对公平的竞争环境。

但如今,程序员的职业发展空间已经被 GitHub 打乱了。

开源(Github)对程序员的影响