5W1H聊开源之Why——为什么要参与开源?
中国开源的发展速度发展加快,个人和组织对于为开源作贡献有着前所未有的激情。据《2020年IT行业项目管理调查报告》,约四成受访者以自己开发开源项目、为他人提交项目代码、作为成员开发维护项目、捐助开源项目等不同形式参与到开源项目中;在《2021中国开源发展蓝皮书》中,参与过开源项目的比例为32%,且呈增长趋势,我国开源生态正迅速形成。
创建和维护那些被广泛使用的开源项目每年可能需要耗费数千小时,为什么开发者会愿意花费时间和精力编写这些免费公开的代码?为什么企业会愿意让他们的员工编写代码,开源让其他公司甚至是竞争对手都可以使用?个体参与开源会得到什么?
个人为什么要开源?
1.提升代码质量
参与开源项目是提升个人代码质量的好方法。一方面开源会激发程序员的“耻感”,一旦清楚这些代码是要公开给别人看的,就会自觉将代码写得更加整洁、干净,加更多注释。另一方面,如果项目有一定的影响力,其他关注、参与的程序员也会给予更多建议,这样可以博采众长,无形之中约束自己的代码规范,改进自己的代码质量。
开源运动旗手 Eric S. Raymond 就曾说过:“只要经过足够多双眼睛的审查,所有的 bug 都将失去藏身之地。这就是 Linus 定律。”
2.展示个人代码
一个小时的面试可能只能展示你掌握的某些底层基础或者前沿知识,但如果有开源项目傍身,就可以从你长期的代码中看出代码质量如何。而且参与开源项目还能展示出你对技术的热爱,向面试官展示你引以为傲的开源项目,这将是个不错的加分项。而深度参与知名开源项目的开发者,从来不缺工作,参与开源的经验不仅能帮助他们获得更广阔的职业机会,而且能拓深职业发展空间。正如
jQuery 的创始人 John Resig 曾说过的那样:“不管在任何时候,只要涉及到招聘,相比普通的简历而言我更看重的是应聘者在
GitHub 上开源共享的东西。”
3.建立个人品牌
正如上述两条,代码质量提升和简历的加分项都会指向同一个成就:打造个人影响力,建立个人品牌。最为典型的就是Git的发明者Linus,尽管他的自述是“只是为了好玩”,但从他的名声大噪来看,倒是有些“凡尔赛”了。现今活跃的很多技术大牛往往是在大公司工作过的顶级工程师,凭借开源贡献在软件社区当中积累起人气与声望,摆脱公司标签,成功打造个人品牌。
企业为什么要参与开源?
1、改进代码和功能
大多数的组织和个人首先参与的是他们正在使用的开源项目,主要目的是想让项目/软件变得更完善,更便于自己使用;或者直接打造自己所需的工具并将其开源,也就是常说的“造轮子”。
这部分改进的功能当然可以自己使用不提交,但继续分享才是让利益最大化的方式,因为如果不贡献自己的代码,就有可能面临新版本这些功能不再工作的风险。
2.获取竞争、招聘优势
在程序员的世界中,开源虽说不上是多么崇高的事,但整体形象确实是正面的。开源意味着企业愿意与其他企业和个人共建生态,这个企业的大体上来说,是有拥抱开放的这样的倾向的。所以参与开源有助于提高组织和企业的声誉,且更能吸引志同道合的求职者共同发展。此外,这种行为也有助于提高组织和企业的声誉,提升品牌形象,特别是在开发者之间的口碑,带来的好处就是利于招聘和留住人才。
3.开源商业模式直接获利
开源不抵触商业,开源的目的是分享共享,但不是做慈善事业。具体盈利模式有技术支持、培训、高级功能、云服务等方式收费。不同的软件、不同的领域有不同的盈利模式,但所有模式的基础都是用户数。只有用户数量达到了一定的规模,才有成其商业化模式的可能。
商业开源是通过更多人的参与,减少软件的缺陷,丰富软件的功能,同时也避免了少数人在软件里留一些不正当的后门。企业通过开源的商业模式可以直接获得经济利润,开源软件最终还会反哺商业,让商业公司为用户提供更好的产品。
赠人玫瑰,手有余香。开源最美妙地方就是不必花时间解决同样的问题,当你遇到的大问题已经有人做了开源项目时,一定感觉如释重负。同样,当看到你的开源项目为其他人解决了问题时,巨大的成就感也是一种巨大的激励。
所以参与开源的原因或好处,除了上述具体因素,也有各种心理原因,也包含其他诸如降低开发成本、促进行业标准、支持开源价值观甚至纯粹的享受开源乐趣或回馈开源项目等因素。参与开源的“动机”当然可以“不纯粹”,也不讲究“默默无闻,无私奉献”,参与即贡献,开源领域的发展与每一位开发者都息息相关,进一步有进一步的欢喜。
5W1H聊开源之Why——为什么要参与开源?的更多相关文章
- SourceTree的基本使用---团队开发/参与开源
1.实践入门-团队开发 如果你看到第二部分关于“参与开源”的内容,而你的需求是团队开发,你会发现几个不方便的地方: 1.1.组长建项目,组员每次提交,都需要组长审查同意merge 如果你觉得麻烦,组长 ...
- 如何参与开源项目 - 细说 GitHub 上的 PR 全过程
目录 一.概述 二.为什么要参与开源项目 三.为什么我想介绍如何 PR 四.我想参与开源项目,怎么开始? 4.1.寻找一个合适的开源项目 4.2.寻找贡献点 五.我要提交 PR,怎么上手? 5.1.第 ...
- 参与开源之夏 x OpenTiny 跨端跨框架 UI 组件库贡献,可以赢取奖金🏆!这份《OpenTiny 开源贡献指南》请收好🎁!
大家好,我是 Kagol. 近期有几位朋友在 OpenTiny 技术交流群里询问我们在开源之夏(OSPP)的项目,希望能提前做一些准备工作. 这里给大家简单介绍下开源之夏. 开源之夏是由中科院软件所& ...
- 2017云计算开源峰会 你是想听Linux谈开源还是想听OpenStack谈开源?
2017年,善于把握机遇的企业们不是正在开源,就是走在去开源的路上-- 开源是不是就意味着免费? 开源企业就是要当"活雷锋"? 开源项目究竟如何运作?如何参与开源社区? 如何获得最 ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- 积极参与开源项目,促进.NET Core生态社区发展
今天早上在微信群里聊天聊到百度的SDK 已经支持.NET Core, 百度已经在3月份就支持了,想起当时还是我在他们的github上提的issue: https://github.com/Baidu- ...
- 【搭建开发环境】在 Windows XP 中参与开源项目,搭建 git 和 cygwin 开发环境
引言 只有一台 Windows XP 家用机,却想在诸如 Git@OSC 之类的开源社区参与开发,本文提供一个入门级的开发环境搭建指引. 涉及工具:Eclipse,EGit,Cygwin. 欢迎来到 ...
- asp.net MVC 5 Scaffolding多层架构代码生成向导开源项目(邀请你的参与)
Visual Studio.net 2013 asp.net MVC 5 Scaffolding代码生成向导开源项目 提高开发效率,规范代码编写,最好的方式就是使用简单的设计模式(MVC , Repo ...
- 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...
- 使用github参与开源项目
github上有很多非常优秀的开源项目,作为开源项目的受益者,你否想过为开源项目贡献自己的代码?
随机推荐
- python第五章pta习题总结
四.编程部分 1.sorted函数: sorted(iterable, cmp=None, key=None, reverse=False) #iterable:可迭代的对象 #cmp:比较规则 #k ...
- MyBatis实现多行合并(collection标签使用)
举个栗子 现有如下表结构,用户表.角色表.用户角色关联表. 一个用户有多个角色,一个角色有可以给多个用户,也即常见的多对多场景. 现有这样一个需求,分页查询用户数据,除了用户ID和用户名称字段,还要查 ...
- VS Code实现SSH远程开发
最近收获一台新台式机,但是个人主要还是使用自己的笔记本,用了几天远程控制,感觉各种不方便,最终决定配置一下VS Code实现SSH远程开发,特此记录. 首先介绍一下环境,控制端是Windows 11, ...
- 项目实战:医疗流式细胞术数据文件(.fcs)导出excel表工具
需求 解析医疗实验室数据文件*.fcs. Demo导出数据 医疗流式细胞术数据文件标准(.fcs) 流式细胞术数据文件标准于1984年发布,以促进流式细胞术数据分析软件与在不同类型的 ...
- 进度条模块之tqdm
导入模块 from tqdm import tqdm import time ''' desc 描述 ncols 进度条总长度 可修改 range(1000) 封装迭代器 ''' for i in t ...
- proc_sys_reset 复位时序
proc_sys_reset 模块时序 下面为仿真时序,这里做一个record , 后面有使用问题可以参考该时序: 点击查看代码 module test( ); bit slowest_sync_cl ...
- 在Bind DNS Server中添加一个开发环境的域名
1.Create Master Zone 我们的开发域名约定为dudusoft.cn 输入2个字段,然后提交 2.在域名里面,添加主机记录 点击上图的"Address(0)",出现 ...
- java字节、位移以及进制转换
数据存储方式 众所周知,java中的数据都是以二进制的形式存储在计算机中的,但是我们看到的数据怎么是10进制的,因为java提供了很多进制自动转换的方式. 位移 向左位移是*2的幂次,一般都是正数操作 ...
- 【Azure Redis 缓存】Azure Redis加入VNET后,在另一个区域(如中国东部二区)的VNET无法访问Redis服务(注:两个VNET已经结对,相互之间可以互ping)
问题描述 为了保护Redis资源,把它与VNET集成后,实现只能通过VNET内网访问.在东二的区域中部署两个Redis服务后,发现一个奇怪的现象:东1区中的VM资源通过全局对等互联(Peering)实 ...
- 【Azure 应用服务】在Azure上部署一套VUE框架的单页面应用,有什么可以参考的文档呢?
问题描述 在Azure上部署一套VUE框架的单页面应用,有什么可以参考的文档呢? 问题回答 Azure官方上并没有VUE框架的实例代码,但是可以参考Node JS项目,来进行设置. 在 Azure 中 ...