Google Summer of Code谷歌编程之夏活动流程全解析(上)
本期由尔等同学来对话Casbin罗杨老师,为大家介绍开源及GSoC活动流程。
> 罗杨:GSoC 2013、2015学生。GSoC期间在Nmap开源社区作为主力开发了Windows平台网络抓包工具Npcap。在此之后,建立了自己的开源项目Casbin。2019 年,因其在Casbin、Npcap和Nmap方面的工作被授予Google Open Source Peer Bonus的奖励。该奖由Google设立,用于奖励全球各地积极推动开源软件发展的优秀贡献者。
目录
- 参加开源最大的收获是什么?
- 开源社区是什么样的团体?
- 一份好的申请书中应该包含哪些内容?
- 如何看待有些同学想同时参与GSoC、OSPP、比特之夏等开源活动?
您觉得参加开源最大的收获是什么?
首先我觉得首先我比较幸运,在2013年,同学给我介绍了这个GSoC活动,后来我就误打误撞的参加了,然后就入选了,从而才接触开源,我觉得整个流程其实是充满着运气成分的。因为如果当时那个同学没有通知我,可能到现在为止十来年,我都与开源没有关系。
我在做开源的过程中,我发现其实我非常适合开源这个理念。因为开源这个东西,他并不是适合每一个人,他是适合特定种类的一个人去参加,所以说一定要区分自己适不适合开源。
我在2013年参加的Nmap社区,作为GSoC2013的学生,然后我了解到这种国际顶尖的开源软件,它能够做成什么样子。
Nmap社区:https://nmap.org/
Nmap(“网络映射器”)是一个免费和开源的用于网络发现和安全审计的实用程序
第一次参加GSoC时,我还是一个在读研究生。在咱们国内高校去读研究生,比如在学校里涉及到的项目,或者说自己业余搞的项目,其实大部分水平是比较有限的。包括我们自己做的一些项目,或者说一些练手的项目,当真正放到市场上,其实是没有什么竞争力的。
但是,如果你在开源社区做贡献,尤其是选择了一个比较流行、现在还比较活跃的、比较热门的开源社区,你做的其实是First Class的工作。接触到的是这种第一流的开源软件,你能接触到的用户也是第一流的,社区的开发者、包括你的mentor其实也是属于第一流的,是可以与BAT相提并论的水准,在整个参与过程中你能学到很多。比如说我当时做的这个Npcap抓包工具。它至少目前在Windows网络抓包领域仍然是No. 1的软件。我觉得参与开源有一点很重要,你的代码能够发挥非常大的价值,你能造福全球很多人,你的代码会被百万级别的调用,也会被后来者修改焕发出新的光彩。
您觉得开源社区是什么样的团体?
其实现在有很多不同的开源社区,首先有国外的社区也有国内的社区,尤其是这几年国内的开源发展得也很好。国内社区里学生和导师沟通会更容易一些,很多事情可能用中文就解决了。当然也有很多国外的社区,他们可能更老派一点,各种基础设施可能会比较传统,比如用邮件列表这种传统的方式。有的历史比较新的社区,比如说像我们Casbin社区,我们一般用QQ、微信、Google Talk、Gitter等即时通信工具比较多。尤其是双方都是国人时,就没必要去用英文去写个邮件。然后呢,我们对效率也非常重视,除非是长篇的技术讨论,我们可能会通过GitHub等形式去沟通。
还有一些基金会下的社区,像现在比较出名的Apache基金会,还有Linux基金会,CNCF基金会。基金会下的社区都是非常好的,因为本身他有基金会的模式在里面,所以他的各方面都会更成熟、更规范一些,你能学到很多行业内的典型实践。
另一部分开源社区,背后是有商业公司在运营。选择这个类型的开源社区参与的优势在于未来毕业找工作,如果你参加过这个社区的活动,那你可能比别人优先拿到这个商业公司的校招Offer。
而我们Casbin社区,目前就是一个纯社区的运营模式,它本身会更自由一些。在社区里大家都是平等的开发者。我们的目标就是共同把这个社区做好。我们社区的运作以提高效率为优先,各种规章制度比较灵活,社区治理方面尽量采用全自动化的基础设施,比如所有仓库均采用semantic-release语义化版本,尽量减少开发者的负担,将精力更多地集中在代码层面。
这个其实跟咱们同学毕业去找工作很相似,毕业之后是去大公司还是小公司的问题。大公司各方面规章制度很全,能得到一个比较完整的锻炼,但是它的灵活性不足,你能做的事情可能就是很微小的一部分,因为每一个东西都有规范,告诉你去怎么做,你能发挥的空间就小;相比之下,小公司它的制度可能没那么健全,但是各方面会比较灵活,如果你是一个很有创新想法、执行力又很强的人,那或许后者会更适合你。
您觉得一份好的申请书中应该包含哪些内容?
我觉得首先应该包含你的个人简历上的一些内容,比如说姓名、联系方式、学校、学历、技术栈等信息,我觉得这些还是需要列出来的。
我觉得很重要的一个点就是技术栈,因为GSoC时间说长不长,说短不短,如果一个同学现在只会C++,但是他要参加一个Java为主要语言的项目,他是很难在短时间内去超过一个一直做Java的同学的。所以个人技术栈匹配就很重要,尤其是在接触时间比较短、大家还没有了解你时,这就很重要。
第二点就是说你针对这个idea的一些设想。idea中一般都会列出有几个task,那么每一个task你是怎么去想的?怎么去实现它?这个首先要求你对这个项目有一定的了解,因为如果你不了解,你是不可能写出来的。相当于你要做一个未来的规划,表述清楚这三个月大概怎么去开发。然后每一部分把大的任务都拆解成小的任务,给它们分配合适的工时。甚至说你可能提前参与到社区贡献中,可能完成了一些小的Issue,提了一些PR,这些也都可以列进来。
第三点是文章篇幅,篇幅其实也不用特别长,就是有些同学他可能写起来就几十页,这种其实也没有必要。我个人认为可以写短一点,比如说4、5页的样子,其实就差不多了。当然如果有贴图的话,可以稍微多一些。最重要的还是你做Coding的能力,GSoC其实本身考察的就是做代码贡献的能力,所以说主要还是去展现这个能力,而不是说我去写一份完美的Proposal,这就本末倒置了。Proposal只是体现代码能力的一个说明书。
与GSoC同时间段举办的活动还有OSPP、比特之夏,有些同学想参加多个活动,您是怎么看待这种情况的?
最近几年其实有出现了很多类似于这种GSoC的活动,像咱们国内这个办的非常好的OSPP,以及比特币的那个比特之夏,还有像印度,他们有GSSOC(GirlScript Summer of Code),其实也是模仿的GSoC的活动形式。
OSPP,中科院暑期之夏开源活动,Casbin社区也本次有幸入选。
所以现在有很多活动可以供大家来选择,有些同学可能在想,要不要同时参加多个活动来刷刷经历?首先我个人认为,对于绝大多数同学,可能不太适合去同时去参加多个活动,可以从两方面来探讨这个问题。
第一,时间分配。因为每一个活动,都提出了时间上的要求。虽然不是强制要求花多少时间在这个上面,但是根据我们的经验,想要做好的话,平均每个同学其实还是要拿出每天4-5个小时来去做这个事情。所以对于技术实力没那么强的同学来,他同时参加两个以上的项目,压力会比较大,尤其是两个项目可能还是完全不一样的领域,比如一个是Linux内核相关的,另外一个是Web应用相关的,这两个项目其实就完全没有交叉,是两套完全不一样的知识体系,最后会把自己搞得很累。这类活动,其实初衷还是为了吸引更多的同学参与到开源世界中,并逐渐热爱上开源,在开源世界中自我成长。但最终如果把自己搞得很累,变成了打工挣一份辛苦钱,失去了乐趣,活动结束后甚至觉得开源这个事儿不好,再也不参与,其实反而违背了这些开源活动的初衷。
第二,我想从导师、社区、招聘者这个角度来分享下,因为Casbin社区也参加GSoC,社区也有Casbin Talent明日之星这种自己的活动。我也看过不下千份简历。对于这些简历,从我的角度来讲,如果说一个同学同时参加了两个这样的活动,比如说参加了一个GSoC,然后又参加了一个别的活动,如果这两个活动中做的项目内容、难度差不多,那两段经历是没什么区别的,做出的贡献也是差不多的,这些经历其实在我的思维中会自动合并成一个,不会有额外加分。很多面试官、招聘者,会把简历上过去相同的、相似的经历进行合并。比如说一个同学去阿里实习过,然后另一个同学在百度、阿里、腾讯、美团都实习过,两个同学的差距可能并不大。因为有能力去阿里,那说明这位同学有足够去BAT实习的能力。那再去其他公司实习,其实也并没有证明他的实力是要明显强于只有一段相同等级实习的同学的。它只是证明达到了那个高度,但是重复地换山头,这些山头还都在同一个高度,其实是没有意义的。不如在这个高度基础上继续攀登,或者说在另一个方面去达到一个新的高度。
第三,我想从做开源这件事本身来考虑。我自己也参加过两次GSoC,两年我做的是同一个项目。虽然那个时候我都已经去念博士了,我也没有换社区,也没有换项目,我只是想把一件事情做到极致。这个项目经过这两轮GSoC后,我又在Nmap社区做了一年的带薪开发,最终我们把这个项目孵化得很好。到现在它能够真正成为某个领域No. 1的软件,在全球有上百万的人去使用。我经常在各种场合,看到别人的电脑上装了这个软件,我会很自豪地跟他们说,这个软件是我开发的,这就是一种影响力的体现。换句话说,与其去开发100个不知名的、没有人用的软件,不如只开发一个软件。也许这个软件很小,但是它在每个人的电脑上都安装或者使用了,那么做的这件事情影响力就非常大,所以,还是要看重软件的质量,而不是看数量。
尾声
尔等同学:了解前人的经历可以更好的帮助我们这些后来者做出合适自己的选择,非常感谢罗老师给我们分享他的开源经历,本期采访为上半部分,还有下半部分敬请期待。(友情提示:点点关注不迷路~)
Google Summer of Code谷歌编程之夏活动流程全解析(上)的更多相关文章
- 罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程
罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程 为了帮助同学们更好地参与开源,Casbin 决定做一期访谈节目,由小编作为一名开源初学者,用访谈的形式与北京大学工学博士.Casbin作者.Npca ...
- 2019 年 Google 编程之夏活动报告
2019 年 Google 编程之夏活动报告 主要介绍了 GSoC 2019 活动的几个课题并讲述了整个活动的组织过程 Google 编程之夏活动不仅仅是一个夏日的实习项目,对于组织和一些社区的成员来 ...
- 中国首个进入谷歌编程之夏(GSoC)的开源项目: Casbin, 2022 年预选生招募!
Casbin 明日之星预选生计划-Talent for Casbin 2022 "Casbin 明日之星预选生计划-Talent for Casbin 2022"是什么? &quo ...
- Java 面试宝典!并发编程 71 道题及答案全送上!
金九银十跳槽季已经开始,作为 Java 开发者你开始刷面试题了吗?别急,我整理了71道并发相关的面试题,看这一文就够了! 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程( ...
- 倒计时第3天!Google Summer of Code报名即将截止!(Casbin社区还有空缺名额)
Google Summer of Code 介绍 Google Summer of Code ( GSoC ,即 Google 编程之夏)是 Google (谷歌)组织并提供经费,面对全球在读学生的在 ...
- Google Summer of Code 2017 经验谈
Google Summer of Code (GSoC) 2018 又要开始了. 如果想实现你心中的开源梦想, 用代码让世界变得更美好. 参加GSoC可能是你进入开源的世界最好途径. GSoC是什么 ...
- Google Summer of Code礼包
这个暑假参加google summer of code, 给Google的分布式容器管理系统kubernates开发新的特性,希望从中学习更多的分布式的技术,锻炼自己的编程技巧. 中午在学校的图书馆吗 ...
- 使你的 Google Summer of Code 建议被接收的5个技巧
本文翻译自:http://www.di.ens.fr/~baghdadi/TXT_blog/5_advices_to_get_your_proposal_accepted.lyx.html 本文讲的主 ...
- Google Summer of Code 建议被接收的5个技巧
Google Summer of Code 建议被接收的5个技巧 本文翻译自:http://www.di.ens.fr/~baghdadi/TXT_blog/5_advices_to_get_your ...
随机推荐
- scrapy--使用案例
1.scrapy框架 1.1 安装scrapy pip3 install wheel 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twis ...
- 学习GlusterFS(六)
一.GlusterFS概述 分布式文件系统由来 在介绍之前我们先来看下文件系统及典型的NFS文件系统. 计算机通过文件系统管理,存储数据的.而现在数据信息时代中人们可获取数据成指数倍的增长,单纯通过增 ...
- 学习 Haproxy (五)
1 Linux Haproxy 负载均衡 v1.8 ★★★ 类似于ningx的反向代理1.1 Haproxy 概述 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热 ...
- Rust 中的数据布局--可选的数据布局
Rust 允许你指定不同于默认的数据布局策略,并为你提供了不安全代码指南. repr(C) 这是最重要的"repr".它的意图相当简单:做 C 所做的事.字段的顺序.大小和对齐方式 ...
- H5: 表单验证失败的提示语
前言 前端的童鞋在写页面时, 都不可避免的总会踩到表单验证这个坑. 这时候, 我们就要跪了, 因为要写一堆js来检查. 但是自从H5出现后, 很多常见的表达验证, 它都已经帮我们实现了, 让我 ...
- ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)
ssm 框架实现增删改查 SpringBoot 项目整合 一.项目准备 1.1 ssm 框架环境搭建 1.2 项目结构图如下 1.3 数据表结构图如下 1.4 运行结果 二.项目实现 1. Emplo ...
- 实现一个promise.all方法
思路: 1:首先明白all的用法 2:promise.all可以接受一个由promise数组作为参数,并且返回一个promise实例, 3:promise.all([a,b,c...]).then方法 ...
- sequelize模型
model表示数据库中的表,有时它也会被称为"模型"或"工厂".Model不能通过构造函数创建,只能通过sequlize.define方法来定义或通过sequl ...
- SpringMVC 解析(四)编程式路由
多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上.Spring还提供了一种编程的方式去实现请求和路由方法之间的路由 ...
- matplotlib---Annotation标注
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-3, 3, 50) y = 2 * x + 1 plt.figu ...