从参与Apache 开源项目,到凭借业务需求独自开发个人开源项目;从项目开源出来无人问津到至今500+star,多个企业级用户,在开源过程中,我也从走过低谷,一度想过放弃,但仍然选择坚持至今日。
这一路上,我遇到了什么样的困难,又收获了哪些呢?想借此来分享下在我开源dataCompare 的过程中遇到的坎坷和收获,莫让开源转角蹲着“拦路虎”。
为职业发展铺路,开源蓄力
首先来说说自己为什么要参与开源,自从进入 IT 行业,行业里很多人认为“IT行业是青春饭”,35岁就会被裁员,之后就没有公司要了。先后也待过几家大厂,包括京东、BAT,也见过不少优秀的技术人员,一直在思考,难道 35 岁就要没公司要了吗?
也见过不少优秀的技术人才,有人进入快速发展的公司,跟随着公司的发展一路上升;也有人输出自己的技术知识(出书、写博客等等),成为某专业领域的佼佼者;还有参与开源项目而在业界取得巨大影响力而不愁工作,在40岁跳槽仍然是多家公司的香饽饽。
参与开源对于个人来说,无论是求职还是后续职业的发展都是一条非常不错的道路,说句实话,自己刚毕业的时候非常有幸参与一个 Apache 开源项目,并成为 contributor,后来无论是在求职还是面试中,都或多或少从其中受益。
初识开源,力出一孔
以我自己个人为例,讲一讲第一次参与开源的经历,下面就主要介绍一些自己的一些参与开源的经历吧。
还记得第一次参与开源是刚开始实习的时候,那时候在国内一家知名电商公司实习,参与一个数据质量的项目,是ebay开源出来的。
由于是实习生,很多东西都不是特别懂,但是ebay的同事都特别热心,愿意花时间指导我们进行项目的配置和搭建,能保证项目能够运行起来,并且还去我们公司进行讲解。当时并没有觉得什么,但是现在回想起来,他们和我们都不是一个公司,还这么热心,想想有时候同公司的同事都不一定能够做得到。或许这就是开源背后生发出的力量吧。
最后提交的代码也被合并了,非常荣幸地成为了项目的contributor。
后来或多或少地都参与过一些开源项目,有的是因为想了解一下所使用的技术的原理,有的可能是开源项目有奖励等等。但是能非常明显的感觉到社区的那一群人都非常的热心,愿意花时间去给你review代码,耐心地解答自己的问题,在这过程中,自己也收获颇多。在参与开源项目的过程中,遇到问题,社区的一些朋友都非常乐意指导你如何去做,协助你解决问题,自己也可以从中学到很多。
借力发力破解诸多难题,莫让开源转角蹲着“拦路虎”
个人开源的难点部分,旨在突出参与开源项目实打实的切身经历与实践中发现的难点,尤其是具体有哪些思考。
前段时间因为公司里面的一个需求开发了一个简单工具,当时想着是否其他公司也有类似的需求,就试着开源出来了。
个人开源还是很难做的,相对于企业来说。由于自己是做大数据和后端,已经很久没有做过前端了,导致前端这方面已经忘记的差不多了。这次的开源项目也是借助网上的一些开源框架,避免了太多前端开发工作。所以就不得不去学全栈,不仅仅是会前端、后端、数据,有可能还要会运维。而这些在企业里基本上是一个团队协同参与的。
再就是如何去推广了,这也是一个老大难的问题。正常的一个公司的产品是由一个运营团队来支持的。但是作为个人开源来说,这些事情你都得87做。写产品和使用文档、写代码做运维、甚至包括产品推广运营。而这些工作在公司是有多个团队来支持的,至少也是有一个小团队来支持的吧。最后就是如何保证开源项目的持续更新和迭代,也就是保障项目的可持续性而不是不更新了。
说说我在开源的时候遇到这些问题是怎么解决的吧。
a.开发运维,这个可以借助网上的一些工具,比如说用docker快速搭建开发环境,借助一些网上现成的开源框架来规避一些不擅长的技术栈(就像我自己不擅长前端,但是借助开源框架还是完全能实现自己的产品)。
b.推广这方面主要是借助自己之前的一些积累,由于长期对于自己所做项目进行总结,在网上进行输出也积累一批粉丝,因此借助这些资源进行推广,同时身边也有不少人的技术开发者,也借助他们进行了一些,所以还算勉强能进行推广。
c.再就是撰写产品使用文档,这部分由于经常写博客、做总结,其实还算马马虎虎,写的文档别人能看懂,其后再根据一些使用用户的反馈完善文档中不太全面的地方,这样的话就能保证写出来的使用文档,其他人入手项目的时候无障碍。
d.最后一点也是最难的一点,就是一个人精力实在有限,况且还得在完成公司本职工作的情况下去做开源,如果说全职做的话,也许会好很多,希望更多的开发者能进来一起开发。
我这边目前尝试的方式,先开发出项目的核心功能,以保证项目是可用的,然后进行推广获取第一批用户或者企业,这样根据使用者的反馈进行迭代。而不是一上来就开发出大而全的产品,毕竟人力还是有限。
作为个人开源,我觉得要集中力量做大事,即:花费时间在项目的核心点,这样的话,能保证项目有亮点、可用,才能吸引到用户,有了第一批用户之后我们就可以持续迭代了。
e.如何保保障开源项目的可持续性,在这方面我目前尝试的是小步迭代的方式,首先完成dataCompare的核心功能,然后进行推广,后续发现有一些用户和企业在尝试或者一些需求之后再跟进反馈进行完善,同时构建一个项目的社区或者社群能够更快地了解用户的使用情况,以此来达到项目的可持续性。
其实在刚准备开源出来dataCompare的时候只是个人兴趣并同时结合自己的需求开源出来的,还是比较担心,担心是不是有人会使用会关注呀等等。因为自己本身很久也没有写前端了,所以是采用的layui框架,整体来说前端这块肯定是没有专业的前端开发者做的那么好。于是也是怀的试试的心态,将代码推到GitHub上,然后简单的做了一些宣传,但是发现竟然也有一些人在关注,这就促使自己更有动力去优化了。
最关键的一点是在其中还发现了一个企业用户开始使用dataCompare,就此还和这个用户交流了许久,发现还是有一定的市场的。再就是我还发现有公司的CEO对这个项目也比较感兴趣,向自己抛出橄榄枝。至此,我算是明白了,做开源是真的可以从中收益的。 我觉得做开源对个人收益还是蛮大的,这也是促使自己继续坚持下去的动力吧。
体验新征程:0到1,一小步到一大步
该部分,想与大家聊一聊我参与开源的收获。
a.首先就是对于自己的能力有极大的提升,需要做的事情更多,而不是像在公司只负责一部分的内容。在开源项目的开发和推广过程中,不仅仅需要会写代码、甚至需要会写产品文档以及运营产品,这在公司里面,作为技术开发者往往是不太关注的。但是对于个人的提升是极大的。
b.会认识不少技术朋友、了解同行业公司的一些状况能拓展自己的视野而不仅仅限制在自己公司。
c.发现有别的公司在使用自己的开源项目,还是非常开心的,同时对自己的技术影响力也有蛮大的提升。这样无论在自己后续求职或者作为技术KOL也是一个非常大的加持。
开源实践者践行:个人开源下的“武功秘籍”
这部分算是我个人开源的一些建议吧,希望或多或少可以给你带来思考。
回顾自己从刚开始准备将dataCompare开源出来,到现在能够获得一些用户的关注,并且也有1-2个企业用户在使用和尝试,还是非常开心的。
现在回忆起来整个历程,能够解决用户的1-2个问题点,然后进行打磨、再加上合适的运营、长期的坚持,这三个点是个人开源项目能够发展下去的关键。
从我刚开始推出dataCompare的时候,只是因为工作中有类似的需求,想着尝试开发出来一个简单版本的来辅助工作,提升工作效率,也可以理解为dataCompare 1.0 版本,并没有界面版本。然后开始思考是不是其他公司也有类似的需求,就尝试借助网上的一些开源的平台做出来一个界面,并开源出来,即:dataCompare 2.0版本。
从1.0到2.0版本,整体花了接近1个月的时间,因为担心自己的代码不够完善,开源出来会不会有问题等等,其他人有没有兴趣对于这个项目,当时也是非常纠结的。后面抱着试一试的态度,将其开源出来了,同时也写了一篇文章进行介绍,收获了一小波用户的关注。但是仍然没有实际使用用户,后来有一段时间因为工作繁忙,没有太多时间去继续运营和推广,直到过了接近3到4个月之后,发现网上有看到这篇文章(https://mp.weixin.qq.com/s/3KQdp1smgqwHfLGy1ASK_A)加我的并且想试用下这个产品,至此才感觉到这个产品是有使用需求的。然后指导用户进行了安装和部署,最后结合用户的需求做了一些调整,才算是整体上收获了第一个企业级用户,至此花了大概接近7-8个月的时间,从1.0版本的开发到最终有企业用户。通过以上的用户关注和反馈,能继续推动自己有动力持续做下去。
现在回忆起来整个历程。如下三点才是一个开源项目的发展的关键:
a.能够解决用户的1-2个问题点,然后进行打磨,最好是结合工作中有的需求,然后尝试抽象开发出来,并且完善核心功能,在核心功能上进行打磨。
b.合适的推广和运营,“酒香也怕巷子深”,合适的推广运营,让项目能找到第一批用户,然后尝试和用户一起共同建设。通过参与一些开源社区和一些朋友的推荐,慢慢地项目会获得更多的人关注,打磨核心功能,找到第一批用户,这样项目的发展就可以构建出来一个良性循环。
c.长期的投入和坚持,通过推广和运营,会获取到一些用户的关注和反馈,这样也会更有动力持续做下去。
开源项目地址:
https://github.com/zhugezifang/dataCompare
https://github.com/zhugezifang/dataService