array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 怎样做好一个开源项目 - 爱码网
jackyfei

沟通创造价值,分享带来快乐。这里是程序员阅读时间,每天和你分享读书心得,欢迎您每天和我一起精进。

作者:十三

解读:张飞洪

现在的很多程序员基本上可以说是面向GitHub编程,遇到新项目要启动就会到GitHub上一顿猛烈搜索,然后采用拿来主义,这对那些想要做开源项目,甚至通过开源来收割韭菜的人来说,开源就是一个非常好的机会。

十三从2017年二月份开始开源之旅,差不多和他的博客之路同时开启。根据他个人的体会,开源的辛酸和挫败从一开始就伴随着他,中间有好多次想打退堂鼓。原因很简单,不要以为自己开源了,就会有人看,你要坚信就算你真的是拿出你的家底出来,可能还是有99.99%的人听都没听过,更别提去关注和了解你。

三个阶段

十三提到他做开源的三个心理阶段:

第一阶段:要不要做?

总是在犹豫到底要不要做开源,我为什么要做开源,能和自己的预期一样吗?

第二阶段:能坚持吗?

不知道要做什么,坚持不了怎么办?没有人关注怎么办?最后十三是这么想的:“我不怕千万人阻挡,只怕自己投降”。

第三阶段:如何做好?

既然下定了决心,那么就要开始思考怎么做了,这个也是本篇要谈的重点。

如何做好开源?

  • 前期规划

既然开源是一份需要持续投入的工作,那么开头的规划就非常重要了。十三帮我们罗列了他的做法,比如说:

  1. 要做什么项目?
  2. 要选什么题材?
  3. 什么类型?
  4. 一年内大概有几个版本?
  5. 最终的形态是什么样的?
  6. 这个项目是为了解决什么而出现的?

这些一定要想清楚,好的开源项目有以下几个标准:

  1. 访问量
  2. star数量
  3. folk数量
  4. clone数量
  5. issue数量

明确以上的指标,你的开源之旅就可以开启了。

  • 迈出第一步

第一个项目主要使用spring和spring mvc加mybatis框架整合实践项目ssm-demo,这些框架都是大部分公司的常用框架,稍微修改以下就提交到开源仓库了,所以开源好像也不难。这里开源的并不是底层框架性的基础架构,而是基于知名科技进行业务整合。这种方式确实对一般3-5年的程序员都不是问题。

  • 升级迭代

接下来就和我们平时开发一样,按照最小功能清单进行版本迭代。如此这般,坚持了三年,中间因为spring boot的出现,进行了底层框架的替换。包括常用的后台攻略心跳,资讯发布系统,博客系统,商城系统,以及由此衍生出的各种项目。

每次升级都会在博客里面进行宣讲,让你的关注者有所期待,能了解你的动态和决心,这是和读者互动的重要窗口。

  • 双赢心态

从整合自己手头的项目开始,通过文档编写既能梳理自己的知识,加深理解,也能帮助那些需要的朋友,这里难能可贵的是利他心里,只有利他才能得到他人的帮助,开源的本质其实就是分享。

设身处地去想一下,你去开源项目网站上搜索项目时,是不是为了解决自己目前所面对的问题呢?如果你搜到了一个开源项目,但是代码不全,文档不完整,下载之后根本用不了,那么这种项目你还会使用或者分享给其他人吗?所以我们如果做开源项目,那么这个项目一定要能用,要帮助别人解决当下的问题。我认为这是衡量一个开源项目最基本的标准,也是非常现实的一个标准。

十三基于spring boot技术栈为主的新风商城项目,因为代码和相关的文档非常齐全,帮助了很多的开发者快速掌握spring boot,并使用spring boot技术栈去开发一个大型的商城项目。而且项目帮助了很多在校大学生完成毕业设计这个难题,也帮助了很多的Java求职者找到了工作。

  • 文档+示例

好的开源如果缺失文档,对读者是很不友好的,所以成功的开源都是以程序员为中心,想对方之所想,反过来思考,我们阅读开源项目的时候,也会希望对方如果有配套的文档就更好了。

有了文档再加持示例和Demo,整个体验就会是立体的,你要尽可能把开源当作产品来打磨,否则很难获得成长,所以开源真的不容易,需要持续投入时间和精力。

失败的示范:

  1. 当你进入他的仓库时一时想不通这个项目是干嘛的,或者他能够帮助你干什么。
  2. 项目文档虽然有,但是就几句话,或者只有初始化项目时的默认文档,还没什么排版。
  3. 写好代码并且开源出去就会有人来关注,来看你。

良好的示范:

生活中我们都知道第一印象的作用,我们自己做的开源项目也是这样,当别人打开我们的仓库,那一瞬间就可以看到详细的文档和恰到好处的图片,他可能才会进一步的去了解和研究这个项目,而不是直接点击关闭按钮与我们擦肩而过。

所以总结来说,就是要明白项目基础信息展示的影响力。

具体操作十三介绍了以下几种方式,概况来讲就是:

  1. 一句话介绍我们的项目
  2. 项目的特性和优点
  3. 项目所使用的技术栈以及合适的图片
  • 降低预期

认清自己,并且降低自己的心理预期,这也是一个很真诚的建议。我们并不是开源世界的大佬,也不是流量很大的牛人,在开源项目发布出去的一段时间,不要急功近利,不要给自己设立一些难以实现的目标,这样只会给自己压力,而且徒增烦恼。

开源是为了分享和交流,分享者一定要放宽心,如果没有很好的成绩,我们就继续努力,我能做的就是不断的进化,不断地进步。

我很相信那句话,酒香不怕巷子深。

可能你会觉得我这个人有点傻乎乎的,傻是傻了点啊,但是不痛苦,也没压力,轻装上阵,跑得快。

关键点总结

以上就是十三通过个人经历的分享,另外他也给我们分享了开源项目给他带来的收获:

  • 摆脱由学生身份转变后的一个纠结状态;
  • 认识了很多志趣相投的朋友;
  • 经常受到各种公司的面试邀约,人也自信了一点;
  • 接收信息的渠道增加了,接收到的信息更多了,对自身的进步有很大的积极作用;
  • 在机缘巧合之下,也开启了副业,写起了专栏,写起了书;
  • 最重要的是我发现了一个更大的世界,活得不再闭塞。

十三的GitHub:https://github.com/zhenfeng13

 

相关文章:

  • 2021-08-06
  • 2021-08-06
  • 2019-11-22
  • 2021-08-16
  • 2021-11-01
  • 2021-11-29
  • 2021-11-14
猜你喜欢
  • 2020-03-23
  • 2020-04-26
  • 2021-08-15
  • 2021-04-22
  • 2019-10-09
  • 2021-11-14
  • 2019-02-20
  • 2021-11-28
相关资源
相似解决方案