本期Er和其他同学将对话Casbin罗阳老师,介绍开源和GSoC活动流程。>罗阳:GSoC2013、2015级学生。在GSoC期间,作为Nmap开源社区的主力,开发了Windows平台网络抓包工具Npcap。之后,建立了自己的开源项目Casbin。2019年,他因在Casbin、Npcap和Nmap方面的工作而获得了GoogleOpenSourcePeerBonus。该奖项由谷歌设立,旨在奖励在全球范围内积极推动开源软件发展的杰出贡献者。参与开源最大的收获是什么?开源社区是一个什么样的群体?一封好的求职信应该包括什么?您如何看待一些同学想同时参与GSoC、OSPP、SummerofBits等开源活动?您认为参与开源最大的收获是什么?首先,我觉得我很幸运。2013年,同学介绍我参加了这个GSoC活动。后来阴差阳错的参加了,后来被选中了,就接触到了开源。我觉得整个过程其实是充满挑战的。运气的元素。因为如果当时那个同学没有通知我,我现在可能十几年都跟开源没关系了。在做开源的过程中,我发现自己其实很适合开源这个概念。因为开源不是适合所有人,适合某一类人参与,所以一定要分清自己是否适合开源。我是2013年加入Nmap社区的,当时是GSoC2013的学生,才知道这个国际顶级开源软件能做什么。Nmap社区:https://nmap.org/Nmap(“NetworkMapper”)是一个用于网络发现和安全审计的免费开源实用程序当我第一次参加GSoC时,我还是一名研究生。在我们国内的高校去读研,比如学校里涉及的项目,或者业余时间做的项目,其实大部分水平都比较有限。包括我们自己的一些项目,或者说一些实践项目,真正投放市场的时候,其实是不怎么有竞争力的。但是,如果你在一个开源社区做出贡献,尤其是你选择了一个比较流行、活跃、受欢迎的开源社区,那么你所做的其实就是FirstClass的工作。你接触到的就是这种一流的开源软件,你能接触到的用户也是一流的。社区里的开发者,包括你的导师,其实都是一流的,可以和BAT相提并论。你可以在这个过程中学到很多东西。比如我当时做的Npcap抓包工具。至少目前它仍然是Windows网络抓包领域的No.1软件。我认为参与开源非常重要。你的代码可以发挥非常大的价值,你可以造福全世界很多人,你的代码会被数以百万计的人调用,也会被后来者修改,赋予它新的光彩。您认为开源社区是什么样的?其实开源社区有很多种,首先有国外的社区和国内的社区,尤其是近几年国内的开源社区也发展的很好。学生和导师在国内社区交流起来会更方便,很多事情可能用中文就可以解决。当然,也有很多外国社区。它们可能更老套一些,各种基础设施可能更传统,比如传统的使用邮件列表的方式。一些历史比较新的社区,比如我们的Casbin社区,我们一般用QQ、微信、GoogleTalk、Gitter等即时通讯工具比较多。尤其是双方都是中国人的时候,更没必要用英文写邮件。然后,我们也非常重视效率,除非是长时间的技术讨论,否则我们可能会通过GitHub等形式进行交流。还有一些基金会下的社区,比如大家熟知的Apache基金会、Linux基金会、CNCF基金会。基金会下的社区很好,因为里面有基金会的模式,所以它的方面会更成熟,更规范,可以学到很多行业的典型做法。开源社区的另一部分由其背后的商业公司运营。选择这类开源社区参与的好处是毕业后找工作。如果你参加过这个社区的活动,你可能会先于其他人拿到这个商业公司的校招offer。而我们Casbin社区目前是纯社区运营模式,本身会更加自由。每个人都是社区中平等的开发者。我们的目标是让这个社区成为一个美好的地方。我们社区的运营以提高效率为主,各项规章制度相对灵活。在社区治理方面,尽可能采用全自动化的基础设施。比如所有的仓库都使用semantic-release语义版本,最大限度的减轻开发者的负担,把更多的精力集中在代码层面。这其实和我们同学毕业找工作很像。毕业后,是去大公司还是小公司,是个问题。大公司各方面都有完备的规章制度,可以得到比较完善的锻炼,但不够灵活。你能做的可能是很小的一部分,因为任何事情都有规定告诉你该怎么做。你的发展空间很小;相比之下,小公司可能没有完善的制度,但在各个方面都会更加灵活。如果你是一个有创新想法和极强执行力的人,那么也许后者更适合你。你认为一封好的求职信应该包括什么?我觉得你应该先在简历上包含一些内容,比如姓名,联系方式,学校,学历,技术栈等信息,我觉得这些还是需要列出来的。我觉得很重要的一点就是技术栈,因为GSoC时间不长不短。如果一个同学现在只会C++,但是他想参与一个以Java为主要语言的项目,短时间内很难发展起来。时间超越了一个一直在做Java的同学。所以个人的技术栈匹配非常重要,尤其是在接触时间比较短,人家还没有了解你的情况下。第二点是谈谈你对这个想法的一些假设。想法中通常会列出几个任务,那么你如何看待每个任务?如何实现?这个首先需要你对这个项目有一定的了解,因为不了解就写不出来。相当于给未来做一个规划,把这三个月的发展情况表达清楚。然后每个部分将大任务分解成小任务,并分配适当的工时。甚至意味着你可能提前参与了社区贡献,可能完成了一些小Issues,提了一些PR,这些也都可以被包含进来。第三点是文章的篇幅。其实文章的篇幅不需要特别长。有的同学可能写了几十页,其实是没有必要的。我个人觉得可以再短点,比如4、5页,但也差不多了。当然,如果有纹路,可以多一点。最重要的是你的编码能力。其实GSoC本身就是考察代码贡献的能力,所以主要是展示这种能力,并不是说我写一个完美的proposal,就是本末倒置。Proposal只是一个体现代码能力的规范。与GSoC同期举办的活动有OSPP和SummerofBits。有些学生想参加多项活动。你怎么看待这种情况?近些年其实也有很多类似这种GSoC的活动,比如我们国家有很好的OSPP,还有比特币的BitSummer,还有像印度有GSSOC(GirlScriptSummerofCode),其实,也是仿GSoC的活动形式。中科院夏季开源活动OSPP、Casbin社区也有幸入选本次。https://summer-ospp.ac.cn/#/h...所以现在有很多活动供你选择。有的同学可能会想,是不是要同时参加多项活动才能刷新经验呢?首先,我个人认为对于绝大多数学生来说,同时参加多项活动可能并不合适。这个问题可以从两个方面来讨论。第一,时间分配。因为每项活动都有时间要求。虽然在这上面花很多时间并不是强制性的,但根据我们的经验,要想做好,每个学生实际上每天需要花4-5个小时来做??这件事。所以,对于技术不是那么强的同学来说,如果同时参与两个或多个项目,压力会比较大,尤其是两个项目可能还是完全不同的领域,比如一个是与Linux内核有关,另一个是Web。在应用方面,这两个项目完全没有交集。是两个完全不同的知识体系,到头来会让你很累。其实这样的活动的初衷是为了吸引更多的同学参与到开源的世界中??,逐渐爱上开源,从而在开源的世界中??成长自己。但最后如果把自己搞得很累,变成了打工挣辛苦钱,就失去了乐趣。事后你甚至觉得开源不是什么好事,就不参加了。事实上,它违背了这些开源活动的初衷。.第二,我想从导师、社区、招聘人员的角度来分享,因为Casbin社区也参与了GSoC,社区也有自己的活动,比如CasbinTalentRisingStar。我也看过成千上万的简历。对于这些简历,在我??看来,如果一个同学同时参加了两个这样的活动,比如参加了一个GSoC,然后又参加了另一个活动,如果这两个活动中的项目内容,难度是相似,两者的经历没有区别,做出的贡献也差不多。其实这些经历在我的思维中会自动合二为一,不会有多余的加分。许多面试官和招聘人员会在他们的简历中结合过去相同和相似的经历。比如一个同学在阿里实习过,另一个同学在百度、阿里巴巴、腾讯、美团实习过。两个学生之间的差距可能并不大。因为有能力去阿里,说明这个同学有足够的能力去BAT实习。然后去其他公司实习,其实并不能证明他的实力明显强于同级别只实习过的同学。只是证明已经达到了高度,但是反复改山是没有意义的,而且这些山还是一样的高度。不如在这个高度的基础上继续攀登,或者在另一个方面达到一个新的高度。第三,我想考虑自己做开源。我也参加过两次GSoC,两年来一直在做同一个项目。虽然我已经去攻读博士学位了。那时,我没有改变社区或项目。只想把一件事做到极致。这个项目经过两轮GSoC之后,又在Nmap社区做了一年的有偿开发,最终我们把这个项目孵化的很好。时至今日,它可以真正成为某一领域的第一软件,在全球范围内被数百万人使用。我经常在各种场合看到这个软件安装在别人的电脑上,我会自豪地告诉他们这个软件是我开发的,这是影响力的体现。换句话说,与其开发100个无人使用的未知软件,还不如只开发一个软件。可能这个软件很小,但是每个人的电脑上都有安装或者使用,所以这件事情的影响是非常大的,所以还是要注意软件的质量,而不是数量。末尔等同学:了解前人的经验,可以更好的帮助我们这些后来者做出适合自己的选择。非常感谢罗老师与我们分享他的开源经验。本次专访为上半部分和下半部分,敬请期待。(友情提示:注意不要迷路~)
