我的开源实践之路!这一路我遇到的困难和收获总结

news2024/10/6 8:30:15

 Datawhale干货 

作者:诸葛子房,Datawhale成员

从参与Apache开源项目,到凭借业务需求独自开发个人开源项目;从项目开源出来无人问津到至今500+star,多个企业级用户,在开源过程中,我也从走过低谷,一度想过放弃,但仍然选择坚持至今日。

这一路上,我遇到了什么样的困难,又收获了哪些呢?想借此来分享下在我开源dataCompare 的过程中遇到的坎坷和收获,莫让开源转角蹲着“拦路虎”。

为职业发展铺路,开源蓄力

首先来说说自己为什么要参与开源?

  1. 自从进入 IT 行业,行业里很多人认为“IT行业是青春饭”,35岁就会被裁员,之后就没有公司要了。先后也待过几家大厂,包括京东、BAT,也见过不少优秀的技术人员,一直在思考,难道 35 岁就要没公司要了吗?

  2. 也见过不少优秀的技术人才,有人进入快速发展的公司,跟随着公司的发展一路上升;也有人输出自己的技术知识(出书、写博客等等),成为某专业领域的佼佼者;还有参与开源项目而在业界取得巨大影响力而不愁工作,在40岁跳槽仍然是多家公司的香饽饽。

  3. 参与开源对于个人来说,无论是求职还是后续职业的发展都是一条非常不错的道路,说句实话,自己刚毕业的时候非常有幸参与一个 Apache 开源项目,并成为 contributor,后来无论是在求职还是面试中,都或多或少从其中受益。

  4. 因为各种历史原因以及快速迭代的业务需求,在公司里面都是频繁地应对各种需求,厌倦了crud、厌倦了 ”屎山“ 代码,想提升自己

dataCompare开源之路

前段时间因为公司里面的一个需求开发了一个简单工具,当时想着是否其他公司也有类似的需求,就试着开源出来了。

个人开源还是很难做的,相对于企业来说。由于自己是做大数据和后端,已经很久没有做过前端了,导致前端这方面已经忘记的差不多了。这次的开源项目也是借助网上的一些开源框架,避免了太多前端开发工作。所以就不得不去学全栈,不仅仅是会前端、后端、数据,有可能还要会运维。而这些在企业里基本上是一个团队协同参与的。

再就是如何去推广了,这也是一个老大难的问题。正常的一个公司的产品是由一个运营团队来支持的。但是作为个人开源来说,这些事情你都得87做。写产品和使用文档、写代码做运维、甚至包括产品推广运营。而这些工作在公司是有多个团队来支持的,至少也是有一个小团队来支持的吧。最后就是如何保证开源项目的持续更新和迭代,也就是保障项目的可持续性而不是不更新了。

说说我在开源的时候遇到这些问题是怎么解决的吧。

  1. 开发运维,这个可以借助网上的一些工具,比如说用docker快速搭建开发环境,借助一些网上现成的开源框架来规避一些不擅长的技术栈(就像我自己不擅长前端,但是借助开源框架还是完全能实现自己的产品)。

  2. 推广这方面主要是借助自己之前的一些积累,由于长期对于自己所做项目进行总结,在网上进行输出也积累一批粉丝,因此借助这些资源进行推广,同时身边也有不少人的技术开发者,也借助他们进行了一些,所以还算勉强能进行推广。

  3. 再就是撰写产品使用文档,这部分由于经常写博客、做总结,其实还算马马虎虎,写的文档别人能看懂,其后再根据一些使用用户的反馈完善文档中不太全面的地方,这样的话就能保证写出来的使用文档,其他人入手项目的时候无障碍。

  4. 最后一点也是最难的一点,就是一个人精力实在有限,况且还得在完成公司本职工作的情况下去做开源,如果说全职做的话,也许会好很多,希望更多的开发者能进来一起开发。

我这边目前尝试的方式,先开发出项目的核心功能,以保证项目是可用的,然后进行推广获取第一批用户或者企业,这样根据使用者的反馈进行迭代。而不是一上来就开发出大而全的产品,毕竟人力还是有限。

作为个人开源,我觉得要集中力量做大事,即:花费时间在项目的核心点,这样的话,能保证项目有亮点、可用,才能吸引到用户,有了第一批用户之后我们就可以持续迭代了

c7a0763051747ebc185d460bddcff82d.png

现在回忆起来整个历程。如下三点才是一个开源项目的发展的关键:

  1. 能够解决用户的1-2个问题点,然后进行打磨,最好是结合工作中有的需求,然后尝试抽象开发出来,并且完善核心功能,在核心功能上进行打磨。

  2. 合适的推广和运营,“酒香也怕巷子深”,合适的推广运营,让项目能找到第一批用户,然后尝试和用户一起共同建设。通过参与一些开源社区和一些朋友的推荐,慢慢地项目会获得更多的人关注,打磨核心功能,找到第一批用户,这样项目的发展就可以构建出来一个良性循环。

  3. 长期的投入和坚持,通过推广和运营,会获取到一些用户的关注和反馈,这样也会更有动力持续做下去。

c55f44e2484d55a4df9b5496a98bc0ed.png

参与开源的收获和建议

  1. 首先就是对个人能力的提升,开源项目的代码质量非常高,对于自己的成长非常有益

  2. 作为顶级开源项目的参与者或者贡献者,在未来的求职面试也会非常加分

  3. 同时也会了解到一个大型项目是如何运作的,全自动化CI、CD

下面引用一篇文章对于参与开源项目的收获

"参与开源社区可以给个人带来很好的自我提升。如果不是参与开源系统,可能到现在也不会了解到Semantic Versioning 和 Linear Commit History 的重要性, 更不用说如何基于各种社区资源搭建全套工作流程。在 commit 代码的过程中,无论是 review 别人的代码,还是被别人 review 代码, 都可以帮助你纠正自己的很多认知误区,收获的其实是一对一的免费 coaching。而与社区开发者一起沟通 roadmap 的时候碰撞出的思路和想法也是闭门造车不可能产生的。参与开源社区可以获得日常工作比较难获得的高成就感,这种高成就感会形成正向反馈让你更加努力和严谨。当看到来自全球的近 30w 开发者使用着这个项目,来自数十个不同的国家和地区的开发者一起共同工作贡献代码的时候。"

如何挑选适合自己的开源项目呢?

(1)如何选择开源项目

a.选择和自己工作内容相关的领域项目,从自己熟悉的领域进行切入 b.选择活跃度高的开源项目,主要从代码的更新频率、issue修复情况、社区活跃情况来看

(2)如何参与?

首先从项目部署运行和试用开始,再尝试一些简单的问题修复,最后再一步步深入了解项目

(3)新的思路和想法

当我们有自己的想法之后就可以选择把自己功能集成到开源项目里面,下面是我思考的一个关于sql debug 的功能(根据自己的工作经验)

d7cdd17df164e5204cd43ba2230a91ac.png

(4)个人开源项目经验分享

打磨核心功能、借助资源、打造个人影响力,反哺项目推广和运营、找到标杆用户,持续跟进优化

开源项目地址: 

https://github.com/zhugezifang/dataCompare https://github.com/zhugezifang/dataService

作者介绍:

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

d9364d9f5fc50ade2a060fc6eb767d12.png

干货学习,三连

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

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

相关文章

Matplotlib的一些总结

plt.figure(numNone, figsizeNone, dpiNone, facecolorNone, edgecolorNone, frameonTrue) 参数说明: 1.num:图像编码或者名称,数字是编码,字符串是名称 2.figsize:宽和高,单位是英尺 3.dpi:指…

chatgpt赋能python:Python怎么取二进制低三位?

Python怎么取二进制低三位? 在Python编程中,处理位运算是一个非常常见的任务。其中,取二进制低三位也是其中的一项操作。那么,如何实现这个操作呢?本篇文章将为大家介绍Python如何取二进制低三位的方法。 什么是二进…

苹果Vision Pro:虚拟现实走进个人计算机未来

一段时间以来,虚拟现实(VR)这个概念以其无限的潜力吸引了全世界,用户可以进入身临其境的计算机生成的环境中,这些环境通常模糊了数字和物理世界之间的界线。多年来,VR 技术持续以惊人的速度发展&#xff0c…

软考A计划-系统架构师-学习笔记-第三弹

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

yolov4——你总能在这找到你想要的答案

目录 一:前言 二:一些数据增强的方法 三:自提议 四:dropout 普通的dropout yolov4的dropblock 五:Label smothing 标签平滑 六: GIOU,DIOU,CIOU 七: 对网络结构的…

代码随想录算法训练营第五十五天 | 力扣 392.判断子序列, 115.不同的子序列

392.判断子序列 题目 392. 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace&quo…

Mysql 经典面试题总结

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

Flask+pyecharts实现电影数据分析可视化

之前有写过pyecharts实现电影数据分析可视化和Djangopyecharts实现电影数据分析可视化,但是综合起来感觉还是有缺陷,所以我使用Flaskpyecharts重新整合一下电影数据可视化。 下面是完成后的截图 这应该就算是可视化大屏了吧 文章目录 代码结构index.cs…

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置

MM32F3273G8P火龙果开发板MindSDK开发教程3 - Sysclk的配置 1、时钟初始化流程 一般流程为startup_mm32f3273g.s中调用system_mm32f3273g.c中的SystemInit函数完成系统时钟的初始,而system_mm32f3273g.c中函数是空的。 原来MindSdk时钟初始化的流程放到了clock_i…

【ArcGIS Pro二次开发】(37):图层一键应用村规、国空符号系统

在国空、村规的实际工作中,将要素类加载到地图中后,需要将图斑的符号系统修改成国空或村规的样式。一般的做法是使用样式库或已经做好的图层文件进行匹配,这个工具要实现的功能是直接应用特定的符号系统,其实用的方法也就是GP工具…

HTMLCSS Day02 CSS简介与选择器

文章目录 1.CSS32.语法2.1.CSS声明(CSS declarations)2.2.CSS声明块( CSS declaration blocks)2.3.CSS规则集2.4.CSS可读性- 空白( White space)- 注释( Comments)- 速记写法&#x…

【OpenMMLab AI实战营第二期】目标检测笔记

目标检测 目标检测的基本范式 划窗 使用卷积实现密集预测 锚框 多尺度检测与FPN 单阶段&无锚框检测器选讲 RPN YOLO、SSD Focal Loss与RetinaNet FCOS YOLO系列选讲 什么是目标检测 目标检测:给定一张图片,用矩形框框出所有感兴趣物体同…

【系统迁移:笔记本更换硬盘,不重装系统方法】

本人在使用笔记本的时候,C盘空间经常不够用。每次空间满了,就要清理磁盘,卸载一些软件。后来网上搜索一些C盘扩容的办法,列在下面了。去官方下载 diskgenius 软件,点击 here 跳转官网。 电脑型号:联想小新…

操作系统(3.5)--死锁概述

目录 资源问题 可重用性资源和消耗性资源 可抢占性资源和不可抢占性资源 计算机系统中的死锁 1.竞争不可抢占性资源 2.竞争可消耗资源产生死锁 3.进程推进顺序不当引发死锁 死锁的定义、必要条件和处理方法 死锁的定义 产生死锁的必要条件 处理死锁的基本方法 资源…

华为OD机试真题(JavaScript),挑选字符串(100%通过+复盘思路)

一、题目描述 给定a-z,26个英文字母小写字符串组成的字符串A和B,其中A可能存在重复字母,B不会存在重复字母,现从字符串A中按规则挑选一些字母可以组成字符串B挑选规则如下: 同一个位置的字母只能挑选一次&#xff1b…

JS reduce方法对后台数据的处理案例(秒解决)

目录 一、前言 二、案例1 三、案例二 四、小结 一、前言 在我们项目开发阶段,当后端传回来的数据不太理想或者不好直接使用的话,那么此时我们就必须对数据进行处理,这次我就遇到了一种情况,当后端返回如下格式的数据&#xff…

Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离

目录 70. 爬楼梯 Climbing Stairs 🌟 71. 简化路径 Simplify Path 🌟🌟 72. 编辑距离 Edit Distance 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专…

dubbo源码阅读之-java spi, dubbo spi 和 Spring spi 到底有啥区别

java spi, dubbo spi 和 Spring spi 到底有啥区别 SPIJava SPI案例优缺点 Spring SPIDubbo SPI概述案例源码分析 自己实现一个SPI SPI SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由…

北京通信展的精华内容,都在这里!(中篇)

█ 中国移动 中国第一大运营商: 中国移动展出的内容非常非常多,既有应用,也有技术干货: 通感一体化: 6G: 猜猜这是什么: 揭晓答案: 1:2的卫星单元模型: RIS智能超表面&am…

HNU人工智能实验四-基于YOLOV3-DarkNet50的篮球检测模型

实验四:深度学习算法及应用-基于YOLOV3-DarkNet50的篮球检测模型 项目文档工程:https://github.com/mindspore-ai/mindspore-21-days-tutorials/tree/main/ 前言 这个实验要求做一个深度学习项目,做头歌的或者自己在华为云找一个都行&…