开源,何乐而不为!

Posted on Mon 27 March 2017 in 杂谈 • 1 min read

@nito在v2ex上怯生生的问github 没人 star,能写进简历吗?,我在帖子里的回答是:

放,为什么不放?

  1. 如 @est 所说已经能比下去不少人了;
  2. 自己准备好放上去的项目肯定是自己认为较好的代码才放上去的,代表了自己的真实水平,能看上你的人能通过项目代码早点看上你,看不上你代码的则表示不认可你当前的能力,如果没有看到开源的代码,哪怕你侥幸面试过关了,能力达不到要求以后工作也不一定能顺利,所以放于人于己也都是件好事。
  3. 虽然当前没有 star ,不表示后面不会有 star ;
  4. 虽然现在还是 demo 级,不表示以后一直是 demo ,很多好项目甚至公司就是从一个 demo 开始的。

我个人的招聘习惯,只要看到带有github地址的简历,初始印象分马上就上去了,github是一个很好的加分项,我一定会点进去看看项目star、commit情况,并翻翻代码实现,通过代码初步判断候选者的编程能力和编程习惯。面试时我也经常会问一些候选者:

  • 是否经常使用github?
  • 是否有一些代码可以开源?
  • 为什么没有开源?

以此来判断候选者:

  • 是否经常通过开源社区来解决实际问题?
  • 是否有好的对代码的归纳提炼能力?
  • 是否有好的沟通协作能力?
  • 是否既会索取也懂得奉献?
  • 是否足够有自信?

程序员经常会有如下的体会:

之前自己写的XXX代码太烂了,简直就像一坨屎...

这是一件好事,认识到老代码的不足,正说明自身能力已提升。代码写的烂不要紧,要紧的是不持续优化改进。将自己的非商业代码大胆的开源出来,接受群众的检验和社区的驱动,是提升自身能力的绝佳机会。

2013年我刚接触到NSQ时,发现NSQ官方的Python驱动pynsq还没有发消息的接口,所以提了一个feature需求add Writer API,NSQ主要作者之一mreiferson建议我暂时用HTTP的接口,既然还没有而我又有需求那我就自己尝试实现一个吧,经过几天的努力我开发了一版提交了PR Add async Writer to support pub&mpub,可以说我最早提交的一版代码是很粗糙的,但这个代码让我有了和世界级高手对话的机会,经过mreiferson的指点我不断优化和完善了代码,最终,由我实现的Writer代码merge进了pynsq的master。

Go web开发框架beego最初是谢大@astaxie学习Go语言时仿Tornado实现的一个玩具项目,开源到了github上,早期被很多人喷设计不佳、代码不优雅、谢大个人傲慢等,有兴趣的v2ex上可以搜到老的吐槽的帖子。当时代码丑不丑?据我所知多少是有点丑的,但是多年过去了,beego经过谢大持续不断的优化和完善,已经成为github上的明星项目,star数超过了一万,被包括华为、360等很多一线大厂广泛地采用,谢大个人也成为国内Go开发界的风云人物,而喷他的那些人谁还记得?

以上两个案例一个是我自己、一个是我身边好友的亲身经历,通过开源为社区做出了贡献的同时,自身能力、影响力也不知不觉的得到了提升。

开源,何乐而不为!