打跑个人开源转角的“拦路虎”——我的开源之路

news2024/11/26 22:43:19

从参与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

作者介绍:诸葛子房,先后就职于京东和BAT,在大数据领域有多年工作经验,Apache Griffin&&Apache Zeppelin Contributor,dataCompare和dataService作者,微信: zhugezifang001

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Data Distillation: A Survey

本文是蒸馏学习综述系列的第二篇文章,Data Distillation: A Survey的一个翻译 数据蒸馏:综述 摘要1 引言2 数据蒸馏框架2.1 元模型匹配的数据蒸馏2.2 梯度匹配的数据蒸馏2.3 轨迹匹配的数据蒸馏2.4 分布匹配的数据蒸馏2.5 因式分解的数据蒸馏 3 数据模态…

深度探索:Qt CMake工程编译后的自动打包策略

深度探索:Qt CMake工程编译后的自动打包策略 1. 引言(Introduction)1.1 Qt和CMake的基本概念(Basic Concepts of Qt and CMake)1.2 自动打包的重要性(Importance of Automatic Packaging) 2. Qt…

ELK +Filebeat日志分析系统

一、 ELK日志分析系统概述 1、ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少&#xff0c…

我是如何将家里的台式机改成服务器的

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 文章目录 前言准备工作电脑宽带公网ip光猫给成桥接方式设置路由器设置服务器静态ip地址前言 搞研发的伙伴们,都知道服务器是个什么东西,以及服务器的作用、费用,相信都一清二楚。一般,我们用服务器说的简单点就是放一…

自动驾驶车载MCU开发修炼秘籍

目录 车载MCU开发修炼秘籍1、恩智浦 S32K1XX系列2、英飞凌 AURIX TC3XX3、嵌入式实时操作系统-FreeRTOS4、车载实时操作系统-AUTOSAR 车载MCU开发修炼秘籍 1、恩智浦 S32K1XX系列 S32K14X学习笔记(一)–S32K汽车MCU资源总结 S32K14X学习笔记&#xff1a…

启用Windows防火墙后,FTP传输非常慢

我们有一个计划任务,该任务使用Windows命令行FTP程序在两个Windows服务器之间传输大文件(〜130 MB)。速度很慢(大约需要30分钟),有时会在传输完成之前终止。服务器是2003年(发送)和2…

chatgpt赋能python:Python主题设置——让你的网页更吸引人的秘诀

Python主题设置——让你的网页更吸引人的秘诀 近年来,Python在网页开发中的应用越来越广泛。不仅仅用于后端开发,Python也可以帮助我们设置网页主题,使得网页更加美观、易读、易用。本文将介绍Python主题设置的几个方面,帮助您让…

Redis学习手册(实例代码)

在下面的代码示例中&#xff0c;将给出两种最为常用的Redis命令操作方式&#xff0c;既普通调用方式和基于管线的调用方式。 注&#xff1a;在阅读代码时请留意注释。 1 #include <stdio.h>2 #include <stdlib.h>3 #include <stddef.h>4 #include <st…

git合并代码后,目录被删除了

问题&#xff1a; 同事x在a分支使用git checkout b -- test.md命令抽取b的文件&#xff0c;然后把代码合并到merge-c。 同事y在merge-c分支&#xff0c;合并了自己的分支b&#xff0c;然后拉取同事x的分支&#xff0c;发现产生了冲突&#xff0c;解决了冲突后提交。 最后发现自…

独立成分分析ICA

独立成分分析 ICA 1. 算法原理简介2.源信号与混合信号的差异2.1 独立性 Independence2.2 高斯性 Normality2.3 复杂性 Complexity 3.非高斯性的度量3.1 峭度 Kurtosis 参考文献 blind source separation (BSS) 1. 算法原理简介 mixing得到signal mixture过程&#xff1a; x 1…

如何开发背包扩容功能?

UE5 插件开发指南 前言0 数据结构1 数据读取2 事件流程3 小结前言 在背包系统中有个扩容功能,可以增加背包的负重和容量,之前没有细讲,这里针对这个问题进行补充,而快捷栏扩容和背包扩容是同样的思路,所以就不去额外解析快捷栏扩容了。如果大家可以理解背包系统,那么快捷…

【MySQL索引】提高查询速度和效率

1、认识索引 假设现在大家要去 MySQL 书中找索引的内容&#xff0c;大家应该不会拿着 MySQL 的书一张一张去找&#xff0c;而是会看MySQL 书的目录&#xff0c;然后通过目录找到索引对应的页码&#xff0c;再去对应的页码中查看索引的内容 索引的优点&#xff1a; 索引就相当于…

文本三剑客

目录 文本三剑客 grep grep和egrep grep命令格式 grep命令格式 grep运用示例 正则表达式 基本正则表达式 拓展正则表达式 sed 使用sed sed用法示例 常用选项options示例 地址界定示例 编辑命令示例 sed高级编辑命令 awk awk的使用 printf命令 操作符 awk …

【嵌入式烧录/刷写文件】-2.7-将一个文本文件转换为Intel hex文件

案例背景(共5页精讲)&#xff1a; 有如下两个文本文件&#xff08;*.txt&#xff0c;*.ini&#xff0c;*.asc…&#xff09;转换为Intel hex文件。常用于Key密钥&#xff0c;signature签名…的导入&#xff0c;或对一段数据计算出hex记录的最后一个字节的校验值&#xff0c;接…

Text-to-Table: A New Way of Information Extraction

原文链接&#xff1a; https://aclanthology.org/2022.acl-long.180.pdf ACL 2022 介绍 作者受到table-to-text任务&#xff08;用于生成描述给定表格的文本语言&#xff09;的启发&#xff0c;提出了text-to-table的新任务&#xff0c;根据给定的文本&#xff0c;来生成用于文…

分布式基础概念

分布式基础概念 1. 微服务2. 集群&分布式&节点3. 远程调用4. 负载均衡5. 服务注册/发现&注册中心6. 配置中心7. 服务熔断&服务降级8. API网关 1. 微服务 微服务架构风格&#xff0c;就是把一个单体架构按照业务拆分成多个服务模块&#xff0c;每个模块之间独立…

LAMP架构搭建实操(终有弱水替沧海,再无相思寄巫山”大概意思就是,你会遇到很多人,但不会有人像我那么爱你了。)

文章目录 一、安装Nginx服务1.安装依赖包2.创建Nginx运行用户3.编译安装Nginx源码包4.优化路径便于使用5、添加 Nginx 系统服务 二、安装Mysql服务1.安装Mysql环境依赖包2.创建Mysql运行用户3.编译安装4.修改mysql配置文件5.更改mysql安装目录和配置文件的属主属组6.设置路径环…

想知道如何把录音转变为文字?这三个录音转文字的方法和你分享

将录音转换为文字有许多实际应用场景&#xff0c;比如会议记录、学习和研究、采访记录、法律领域、医学领域、市场调研等等。总而言之&#xff0c;将录音转换为文字可以提供便利和效率&#xff0c;使得音频内容更易于阅读、搜索和编辑&#xff0c;并在需要时更方便地引用和分析…

Linux -- 进阶 Web服务器 搭建基于 HTTPS 协议的静态网站 (实验实操)

现在我们想架设一个 互联网网站的话&#xff0c;我们就得想法认证自己是官方的&#xff0c;得产生一个证书 这个证书呢&#xff0c;我们使用的是 X.509 格式的证书 该证书 包含三个文件 &#xff1a; key , csr , crt 。 先介绍下 &#xff1a; PKI&#xff08;Public Ke…

C++中关于引用变量初始化的一些总结

目录 1 问题2 引用初始化的说明3 示例代码 1 问题 函数的引用参数要求比较严格&#xff0c;今天就因为一个问题卡住了。我将此问题简化为下面的演示代码&#xff0c; #include <stdio.h>class CBase { public:CBase() {};virtual ~CBase() {}; };class CDerive :public …