背景
经常在公司做一些业务开发,公司里面由于各种人员流动等问题,导致代码质量也是参差不齐,最终问题就是很难维护,前期还想着能够优化代码,但是大部分时间都是需求都是倒排期,所以也导致不再想进行代码优化,有了能跑就行的想法,因此就是基本上在原来的代码上缝缝补补,所以越来越对这种代码无感
但是觉得长期这样下去,必然自己能力会越来越差,所以想着看看一些开源项目
参与开源项目的好处
(1)避免陷入上述代码混乱的情况中,所以试着参与开源项目,开源代码都是比较规范、而且代码质量较高,所以在熟悉了公司的项目之后,建议结合自己的工作需要引入一些开源项目进来提升自己的工作效率的同时,学习一下高质量的开源项目
(2)参与开源项目,其实就是熟悉一个新项目的流程,和公司内部项目没什么太大的区别,其实任何一个项目,只有刚进入的时候,学到的东西才是最多的,当自己熟悉了这个项目之后,从这个项目能学到的东西就有限了,就相当于熟悉一个新项目吧,只是项目代码质量更好一些
(3)开源项目一般项目工程量都比较大,里面可能也会涉及到一些算法相关的内容,比如说:
LRU算法在Apache Zeppelin 中的应用
对于经常做业务的同学来说的话,可以感受到项目里面实际使用算法,而不是仅仅是业务逻辑
(4)参与开源项目,会了解到Semantic Versioning 和 Linear Commit History ,知道软件或者项目发版本的含义,以及一些commit 信息的规范,特别是顶级项目,这种规范性更强,还有就是免费获得code review,这一般在公司也是很难收获的,大部分都是为了完成业务,而很少去关注这些
然后再就是设计文档,如果是想引入一个新的功能里面可能需要写一些详细的设计文档
(5)获得成就感或者一些面试求职加分等等
(6)提升自己的英文能力,很多人认为英文能力不强,不能看懂英文文档,说实话,可能前期确实有些难受,看英文文档,特别是在zeppelin的英文文档,刚开始会很不适应,但是随着看多了之后,只剩少量单词不懂,然后就去使用翻译软件来解决,能看到下面关于一个pr的沟通,前后沟通了40-50次对话,全程英文,但是理解起来其实也没有那么复杂,只有少量单词不懂的时候,会去查一下,然后就是怎么去回复别人,一般也是一些简单的对话,所以整体来说,只要上过大学,对于这种沟通,我认为是完全没有问题的
参与开源项目的坏处
也不算说是坏处吧,只能说一些经验
(1)该怎么选择合适的项目,记得选择自己熟悉的语言、熟悉的领域,后面再说下为什么要这么做,比如说:你熟悉java,但是你选择开源项目是python或者go 开发的,那可能前期就劝退自己了,除非你是想新学习一门语言
(2)只有自己熟悉的语言,熟悉的领域,项目前期的搭建和部署才会比较顺利,因为开源项目前期工作量非常大,怎么能让项目能够运行起来,可能需要很多的配置等等,如果不是熟悉的语言,会非常难受
(3)前期投入会巨大,基本上可能1周都在部署和运行项目,然后再花1周熟悉项目、熟悉代码,后续才能去完善自己想做的功能,前期度过之后,后续其实非常轻松的,就相当于我们自己新参与一个项目一样,前期的熟悉会花非常多的时间,突然某天弄好了,那你也就通了
(4)选择熟悉的领域也是非常有必要,不然你只能在开源项目上修修改改一些小bug,很难提出有建设性的建议,甚至如果你不是项目的使用用户的话,连bug可能都提不出来,只能看到别人提bug,别人修bug提pr,除非你参与一个有明确规划的项目,里面放一些功能规划内容,让参与者参与进去,不然非常困难,找不到bug、提不出新的功能点
https://github.com/didi/KnowStreaming/issues
KnowStreaming 项目非常不错,官方人员给了非常多的issue便于大家去参与进去,而不需要自己去找bug、想功能
(5)开源项目其实也没有那么神秘或者神奇,或者对于大家来说那么高不可攀
(6)参与一个社区活跃度较高的开源项目而且尽量找到熟人,不然你提的pr或者issue不会有跟进这么迅速,一旦其中一个commiteer不同意你的pr,你也很难受