首先非常感谢@0xFAN君之前的帮助,回答了我很多关于比赛的问题,还给我看了他以前的proposal做参考,觉得这次能进真是多亏了饭君的帮助啊!
今年GSOC被接受的项目名单出来了,有1307个学生参加,其中就有我,想想还有点小激动呢。
要知道我可是三年前就想进这个比赛了啊!
当年大二刚学会C,但是已经用了两年多的纯linux,所以对开源充满好奇,也想参加个开源项目试试。当时看一个人的博客(现在已经没了)知道了GSOC,就想进去试试。现在想想那时连系统调用是什么、怎么用C打开一个文件都还不知道,就知道vim、linux是开源项目,所以只有看下以前参加GSOC的项目,觉得git这个项目还不错,而且是用C写的,linux都在用它,觉得应该挺牛X,而且社区成熟,文档挺多,于是就准备报它们的项目。了解了它们列出的idea,混了下邮件列表,准备做让git支持大文件的项目,mentor是Jeff King,搜他时发现他刚加入github,于是也跟着注册了github。当时给Jeff发邮件聊项目,结果回我邮件说“我们更喜欢公开讨论问题”。由于对自己英语没这么大信心,发个邮件还要拼写、语法检查半天才敢发出去,而且一想到自己发的邮件会被全球这么多人看到,还会被Linus看到就觉得紧张得不行了,所以并没有交流很多,而且当时技术实在是不行,草草地看了下git源码,好多库函数都不知道,perror都不知道是什么,也去投了个proposal,结果早早地就被reject了。
现在想来真是初生牛犊不怕虎,不过这次经历对我改变很大——注册了github,习惯于用git,严格要求自己的code style,知道开源项目怎么组织。之后还花了很多时间去认真地读git源码,还写了几篇git源码阅读的文章在这个博客上。所以之后用git简直熟到不行,很多同学有git问题都找我。
之后三年由于准备考研、去北京实习,完全没时间参加,所以这比赛几乎成了我的梦想。今年终于有空出来的时间了,所以春节结束后马上就开始准备了。发现自己对于C不是那么感冒了,而学clojure已经半年了,所以就准备报个clojure的项目,看他们idea页的Dynalint觉得挺简单的,于是就联系mentor,看了下code base,觉得真是太简单了,而且工作貌似也挺无聊,只是给这个工具加一些数据条目而已。不过这个mentor还有Typed Clojure项目,是给clojure加一个类型系统的,由于在学校做的项目是符号执行,对于静态分析了解了许多,所以最后选了Typed Clojure这个项目,其实现在回想起来还是觉得自己挺厉害的,两个月时间从完全不知道类型系统到现在提交了5个补丁。这期间也花了很多时间在这个项目上,所以被接受也是预料之中啦(笑)。
这期间最大的发现就是开源项目的组织形式都有很大的差别,clojure的管理形式和linux、git那种完全靠邮件列表的形式完全不同,clojure全是通过JIRA这个问题管理系统来管理和讨论源码,而且所有补丁是通过patch文件作为附件来提交,不允许通过github的pull request接受外来补丁,就是为了避免版权问题——因为所有通过JIRA发送补丁的人都必须签CA才行。不过我觉得这样就完全阻止了那些不想长期开发,只是想提交个补丁的人。你可能说这样可以提高代码质量,但是clojure的java部分是我见过的最丑的开源代码(只是指code style,不是指设计)。clojure的CA政策真是怎么吐槽都不为过,还要求邮寄,真是很打击积极性呢。当时为了签CA还寄邮件寄到Rich Hickey那,过了一个月还没收到,以为寄丢了,赶紧让在美国的师兄重寄一份,结果过了几天我那封6块钱寄出的平邮有惊无险地寄到了,现在想想还真是神奇。
有了CA后就时不时地发patch、问代码来跟mentor刷存在感了,到最后宣布结果已经给项目贡献了5个patch了,其中一个还是比较大的,前前后后改了4、5次,rebase后总共7次提交。
所以我也就没什么悬念地进了,不过进了后,国内同样参加GSOC的学生建了个QQ群,听他们讨论说有个人像我这样花了很多时间,也提交了很多patch,结果还是被拒,实在有点可怜。
5月19就要正式开始写代码了,根据vim的说法,学生是被期望每周工作40小时的,我猜这也是为什么每年印度学生越来越多,都超过美国本土学生的原因吧,因为奖金才5500刀,美国随便去哪实习也应该比这高吧,还期望工作40小时,倒是如果转成人民币之类的倒还值些钱。不过今年算是我最后有时间参加这个比赛,也算是完成了自己的一个梦想,走上了码农的一个巅峰啊。
如何参加
其实这篇文章也是想宣传一下GSOC,因为我之前也是通过别人的博客知道这个比赛的,只是那人的博客已经不存在了,所以也相当于是传承了(笑),而且听群里的人说有几个也是看pluskid的博客才知道这比赛的。而更多的同学都不知道这个比赛,因为不知道而没能参加这样的比赛还是挺可惜的。
其实把GSOC叫比赛并不好,最好是叫项目,因为它并不存在要熬几天夜去写代码马上实现某种功能,相反它有三个月时间让你完整地接触一个开源项目的方方面面——交流、修bug、写文档、写测试。所以这可是真正了解开源项目的好机会。还有5500刀的奖金,换成人民币还是挺不错的,而且参加这个项目会专门有开源组织的mentor来指导,实习时可没这种待遇啊,况且完成后还能跟别人吹吹牛B,何乐而不为呢?
不过这项目有个限制就是必须是在读学生,不过不管是本科、硕士或是博士都行。如果你不是学生而是开源项目的贡献者也可以志愿当项目mentor,当然mentor就只有500刀的奖金了。我今年的mentor就是前两年以学生身份参加GSOC,今年以mentor身份参加。
之后如果有人想参加GSOC并且有疑问的欢迎联系xudifsd (AT) gmail (DOT) com,我会尽力帮你,当然下一次项目得一年后了,而且每年Google都会说不确定第二年会不会继续举办。
总的来说,Google Summer of Code还是很值得参加的,不仅对学生的工程能力有很多提升而且确实能吸引很多学生进入开源项目,现在很多项目都是靠GSOC来拉新人了,而且很多学生也挺靠谱,不仅当时贡献了代码,也成了项目的长期贡献者。
希望能有越来越多的中国学生参加GSOC。