2022-09-04 17:09:15 准备写,预计一周内更新
选择合适的开源项目
怎样选择一个合适的开源项目,这个话题很大,本文仅从提升本科生和研究生做开源这个角度来聊一下这个问题。也会推荐一些项目让大家来参考、选择。
当然,此文仅是我 @edengk 的一家之言,此文也尚有诸多不足之处,还请各位辩证看待。
本科生、研究生做开源
我本意上不是将本科生与研究生割裂开来,只是从客观事实上看,绝大多数本科生有相对更多自由的时间,也并不需要考虑毕业的问题,相反,绝大多数研究生是需要自己考虑毕业问题的,也会因为各种原因没有那么多可以自由支配的时间,所以在此将两者分开论述。
实现类项目、研究型项目
在正式开始讨论前,让我们先统一一些定义,比如本文中将会提到的实现型项目、研究型项目。
实现型项目
实现型项目,主要指的是一些开发类的项目。基本上是已经决定好了要实现这些东西,然后提出一个议题、项目,让人来实现这些东西。
常见的比如:
xxx实现
新增xxx插件
使用xxxxx为xxxx实现xxx
基于xxxx实现xxxxx
xxxx开发
此类项目较多的活动有中科院的暑期之夏、Google的GSoC
研究型项目
这些项目主要是需要人再去研究、做实验论证的一些项目
比如通过研究xxxx使得xxx的效率/性能得到提升,这些项目一般要先研究然后再去实现。
对xxxx进行优化
xxxxx优化
优化xxxxxx算法
改进xxxx算法
此类项目较多的活动有计算机学会的开源夏令营GLCC
本科生
相对于研究生来说,绝大多数本科生有相对自由的日常时间,以及寒暑假可以自由支配。有自己可以支配的时间就代表着可以去做自己喜欢、想要做的事。
如果你是一个还没接触过开源社区、开源文化的同学,可以尝试参与一下开源。
初步参与开源的同学,可以试着参加一下各个组织举办的开源活动,开源活动有很多优点,这里列举两个。
第一个是不受地域限制
比如中科院的暑期之夏、计算机学会的开源夏令营GLCC、Google的GSoC,基本上都是全程远程的。同学们完全在一个二三线的城市的学校校园里,去参加这种全国甚至全球性的这种开源活动。
第二个是它也可以为我们背书
开源本身就是开放的,大家都可以看到我做了什么事,整个社区都是我的见证人。包括以后我们写到简历里,参加了什么样的开源项目、对社区做了什么样的贡献,这些都是有目共睹的。所以开源经历本身的含金量也是非常不错的,但是这种经历肯定是无法和与微软、谷歌、Facebook这种顶尖公司的实习去比的。
如果你在一个很知名的开源社区做了很多突出的贡献,这个背书的效果是远比一般的这种中小公司要好上不少的[2]。
根据职业方向选择
如果你喜欢研究分布式云原生,那么CNCF基金会下面的项目会更适合你
如果你喜欢研究数据库,InfluxDB、TiDB........各种各样的数据库欢迎你
根据技术栈选择
如果你擅长Go,上面CNCF基金会欢迎你
如果你擅长Java,Apache基金会下N个顶级项目欢迎你
如果你擅长C/C++,GSoC2022 中100+个项目欢迎你
.................................
研究生
笔者目前研一,尚未通关研究生阶段,所以此处的想法主要是基于对自己研一一年遇到的问题的思考。首先我讲一下我遇到的问题,然后是基于这些问题的思考和解决方法,可能只适合很小一部分人。
故事可能比较长,如果想直接看结论可以跳到下一部分。
在此处,将研究生导师分为四类,
- 第一类是导师、课题组方向与自己方向一致的
- 第二类是导师、课题组方向与自己不一样还要push自己的
- 第三类是导师、课题组方向与自己不一样但不强求学生的
- 第四类是导师放养的
研一开学后,我面了第一种导师,也就是课题组方向(做开发、不炼丹)和自己一样的。悲剧的是,这个老师明说了,研三下的春招再出去找工作,那还说啥,直接拒了。
然后找了一个放养的导师,大导师平时比较忙,所以让小导师代管。确实很放养。研一一年组会开了三次,第一次(研一上)是见面,第二次(研一上期末)是汇报近况,第三次(研一下期中后)是说要开题了该开始准备了。
然后就很尴尬😅了,研究生的开题,必须要“创新”。
创新可以理解为
用某种新的方式解决了一个很细节的问题
偏实践类型的就是
基于xxxxxxx场景下缓存的研究与设计
或者研究出一个“新”的算法 或对某个算法的优化
基于xxx-xx-xxx的算法研究
基于分布式关系型数据库的xxx算法优化
小导其实人挺好的,商量之后同意我先自己探索,如果自己没法完成毕设的话,就和他学炼丹,毕竟毕业还是要毕业的。
因为自己也不准备冲算法岗(笑死😆,不配),平时自己对分布式有些兴趣,所以就开始找分布式相关的论文开始看。
当时想的是对Raft算法做一些优化,找一个场景优化一下,然后做个比较吹一下自己的优化,大概率就能完成毕设了,和导师商量了一下,他没有反对,而是怕我如果没人指导能不能把这个完成,让我先自己尝试一下。
然后刚好时候第一届的GLCC开始了,我发现了一个和Raft算法相关的项目,和导师商量了一下,因为项目是有社区的导师来提供帮助的,本身也是技术比较厉害的,导师觉得没问题也就同意了我申请这个项目。
这种开源项目一般是对项目有个基本的了解后联系项目导师,然后撰写项目申请书,最后由导师决定哪个学生中选。
开始联系时,凭借之前对Raft算法以及其他分布式算法的了解,和社区导师聊的也还可以,获得了一些指导,然后开始写申请书。
下图是提交初步方案后老师给的回复。
当时想的是如果能中选,这个项目也可以写简历上,毕业设计的题也开了,相当于研二上开学就可以开始准备面试投日常实习了。
终究,终究是自己太菜了,没能达到社区导师的要求,落选了。
收到了感谢信+1,它不是第一封,也不会最后一封。
此时是研一暑假刚开始,没了社区导师的指导以及配套项目,我想自己去试试研究分布式相关的东西。
花了大约一个月,看论文、做实验,没人带太难了,放弃了。
毕业还是要毕业的,然后找了导师,坦白局,没申请上,孩子想和您学炼丹。
然后,就是零基础开始学炼丹,开始卷积,开始神经网络,nlp从入门到放弃。
小结一下
举自己的例子是想提供另一种道路,不依靠(或者无法依靠)学校导师的力量来完成毕业/增加项目经历
第二类是导师、课题组方向与自己不一样还要push自己的
第三类是导师、课题组方向与自己不一样但不强求学生的
对于导师是第二类、第三类的同学,可以通过参加开源活动,来获得额外的机会来做自己想做的东西。
目前体量比较大的主要是三个活动,
中科院的暑期之夏、计算机学会的开源夏令营GLCC、Google的GSoC
暑期之夏、GSoC中的项目更多的是实现型项目,而在GLCC中也有不少的研究型项目,如果做的好也会有很大很大的收获。
下图为社区有意愿辅导学生完成paper。
总结
- 没有其他顾虑的同学可以随意选择自己喜欢的项目
- 需要自己考虑毕业问题/想自己研究喜欢的方向 的研究生可以考虑做一些偏研究性的项目以此开题/毕业
- 所有同学都可以通过参加开源来提升自己的编程功底、拓展社交圈子、增加就业机会[1]。
中间还有一段时间思考了是直接跟导师学炼丹还是自己搞的抉择问题。也问了很多人,暂时没想出比较好的表达方式,后续再更吧。
参考
[1] Why Should You Get Involved in an Open-Source Community?