Summer 2020 从申请到结项

Posted by

非常荣幸能够参与这次的暑期活动,参加了 Oi Wiki 的内容维护,编写和完善了一些算法与数据结构的页面。这篇文章记录一下我整个Summer 2020活动的过程。

大一一学年以及2020年总算做了点事情吧,没有碌碌无为(大概),自我感觉良好。大一刚入学的时候是打算直接参与 Google 的 GSoC 的,但是因为我太菜了,并没有什么信心去准备。并且大一投入了一些时间到算法竞赛中,没有仔细去了解工程这方面的东西,于是大一的一大半段时间都在咕咕。

项目浏览与选择

在五月份,表哥发给了我一个网站链接,是此次中科院软件研究所的Summer 2020的活动网站,进去浏览了一下得知是一个类似 GSoC 的活动,并且今年是举办的第一年。五月中旬的时候大概有两百多个项目在招收学生了,到后面六月初项目总数增长到了300+。我将两百多个项目的标题都看了一遍,发现大多数是我看不懂的东西,诸如深度学习、操作系统、编译器功能编写等。都是我不会的东西,然后找了一些感兴趣的标题点进去看了一眼项目要求,发现我十分不符合要求…比如一个做前端网页的项目吧,需要的是JavaScript的东西…

翻着翻着就在列表里翻到 Oi Wiki 了,这个站点我还是清楚的。先前高中自学Oi的时候有看过里面的内容,不过当时内容十分少,后来大学学模拟退火算法也是在这里学会的,里面的算法流程还是比较清晰的。于是就点进去看项目技术要求和产出要求了,如下:

产出要求:

  • 编写完整而易于理解的文档,能使初学者快速了解到算法或数据结构的主要思想
  • 使用 C / C++ 完整实现所选的算法数据结构
  • 设计 testcase
  • 协助解决目前项目中存在的 issue

技术要求:

  • 能使用 Git 进行协作开发
  • 熟悉 C / C++
  • 热爱算法与数据结构

更详细的内容可以参见这个页面,发现其实我还是蛮符合要求的,并且先前也在博客水过几篇文章,于是就准备做这个项目了。

其实我考虑过可能不会被 Oi Wiki 选中,和表哥交流过后准备报两个项目的。第二个期望的项目是AOSC的一个打包软件的项目。技术要求是这几个方面:Liunx的软件包管理,软件测试方法,Python。想想Ubuntu也用过几年了,Python也能写几行,测试方法么一两个月总是会学会的,于是也准备写这个项目的申请书。

事实上,很多项目要求的东西虽然看上去十分高大上,但是整个项目是在三个月内完成的,完全可以用一部分的时间去学习技术要求的那些东西,并在后续的时间参与开发。所以我现在认为,当时有许多项目我是可以参与的(不过最后只能选一个哈),应该不止这两个项目。

项目申请书的编写

活动要求是要自己和导师邮件联系的,表哥作为过来人建议先咨询期望项目的报名情况,因为有一些项目会在直接决定好学生的。于是我分别给项目的两位 mentor 发送了邮件。得知撰写已经有同学在咨询了,但是没有合适人选;打包没有人报名;Wiki的另一个项目已经定好人员了。

编写项目申请书的过程大致流程就是自己先起草一份,发给导师询问哪里需要修改的,再根据导师的建议修改,当然会不止一次修改,改到导师一个满意的版本后就可以作为报名的那一份。

由于此次活动的模式是仿照 GSoC 的,那当然直接根据 GSoc 的模板编写最好啦。表哥将他当年 GSoC 的申请书以及其他几位大牛(记得其中一位是骆粱宸巨巨)的申请书发给我作为参考。需要包括这几个方面:个人简介;对当前项目的概述包括存在的问题,自己的修改计划等;具体时间安排等。

这一份是我的初稿,mentor 觉得我的时间安排并不是很合理,以及计划安排上存在问题,我就回去修改了。第二版我细化了时间安排,并且添加了一个更新清单,mentor 觉得还不错表示非常喜欢,这时候大概率就已经决定是我做这个项目了吧。我首次询问项目的时间是5.26,编写第一版申请书并给mentor看的时间是5.28,改出mentor满意的版本的时间是在5.31,Summer 2020报名开始时间是6.1,截止时间是6.20。其实在6.1~6.20期间完全可以帮助社区开始施工的,不过当时因为要期末考了,就没有去搞,如果直接开始施工当然入选概率会更大吧。当时我是这个项目第一个提交申请书的,一直到6.10前这个项目的申请人数一直是1人。

按 GSoC 的传统,写申请书的过程是需要疯狂找导师套磁的,帮助修修issue啊之类的,展示一下自己的能力啥的。同社区的一位老哥,从五月开始帮助wiki修东西了,当然最后也成功入选了。不过俺当时啥都没干(其实是准备写一个 树的直径 的内容的,不过岛娘巨巨先交了pr,于是我就找不到什么事情可以干…),甚至连咋交pr都不会…

为了防止Wiki那边的项目被筛掉,我在5.31写了打包的申请书,也发给那位mentor了。初稿也是不满意的,不过我也没有去修改,因为觉得Wiki那边还是比较稳的。到了6.14我发现Wiki撰写的报名人数已经有6人了,害怕被刷,于是就按照mentor的意思重新修改了打包的申请书,并且提交了报名,后来一直到报名截止这个项目都只有1人报名。

筛选环节

这里主要导师比较各个申请书了,看谁的时间安排和计划更为合理,然后选择一位参与暑期工作。打包那边只有一份申请书,mentor为了考察我的代码能力,叫我用Python写一个下载器。我查询了一些资料后花了一个下午实现了,发给mentor,他觉得还不错,于是打包这边我就入选了。

然后Wiki这边的mentor也发邮件询问我是否会去他们这边,因为如果我拒绝的话,撰写这个项目就没有人了。那最后我还是答应去Wiki了,毕竟算法竞赛我更熟悉一些。(对不起AOSC,qaq)

施工过程

这个时候就是帮助社区按照项目申请书的内容开始施工了。7.1~7.4和导师商量了一下具体的执行步骤,然后复习(重新学习)了一下Git的命令操作。在7.5提交了我的第一个pr,是二次剩余的内容。当时有两位reviewers帮我点approve的,我看到一位reviewer的id,然后就习惯性开始社工了一下…发现位神仙,居然是最强大脑脑王nano(zlk)!当时真的是给吓到了。后续的许多文章也是nano点的approve(感谢!)。社区里还有许多巨巨,OI金牌爷、国家队、PKU等很多的,卑微的我…

其中还有一些插曲,比如直接用master分支交pr啊啥的…不过后来Git能力就突飞猛进(大概)了。并且认识了一位西交大的同学(和我一样,不会Git…)。

然后具体施工过程可以参见我的commit总共写了2800 line,提交了四十多个commit,可见咕咕咕十分严重。后来mentor还邀请我加入Oi Wiki 的organization并且成为editor了。然后最后提交的一篇是最小直径生成树,9.28因为开学了并且一些烦人事情(朱震霆的论文太难懂了,我好菜qaq)就和mentor那边说先结项了,11月后会再参与的。

后记

这次能被选中还是非常幸运的,因为是第一次活动,各个项目报名的人数都很少,竞争不是很激烈。据说明年还会有Summer 2021,GSoC进不去的话可能会考虑一下?

Oi Wiki那边会持续参与的,因为的确是个很好的算法学习网站。然后接下来学学数学和巩固一下先前学过的东西吧,在GitHub上找一些项目交几个pr,争取明年能进GSoC吧。

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注