【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

为什么开源适合 LinkedIn

  • 2015-06-23
  • 本文字数:2413 字

    阅读完需:约 8 分钟

开源软件不再局限于解决小问题、底层问题,否则也不会有公司花代价去创建开源软件。如今,创建、部署开源软件的社区日渐成熟,他们代表着世界上最大的几个技术公司。为什么有此变化?为什么公司应该把一些精力花在开源软件上?为何要开源?

初衷就是开源软件能使你的工程师变得更强。随着他们的作品呈献给整个社区,他们的技艺也在精进。

他们能写出更好的软件

为别人工作,比起为自己公司工作,更能写出好软件,这听起来有点矛盾,但事实上却很有道理。当开发人员写一个“内部”软件的时候,他们倾向于在一些环节上偷工减料——我也是如此——尤其是在文档、代码的可读性和可重用性,以及编写完善的测试用例方面。但开源社区有多种选择,如果你的代码太晦涩,他们不会有耐心去搞明白它究竟在干什么。而公司内部则没得选。

在开源项目中,开发人员的名字会和他们创建的软件绑在一起,整个社区都在审视他们。这就好像给网上的代码和声誉配上一张面孔,每个人都能看到他们的设计取向和 bug。这大大激发了他们去完善自己的软件。开发人员都希望自己的名字和设计精良的美好事物联系在一起。

每个优秀的工程师永远在不停地学习,他们想跟上自己专业领域的发展步伐。直面那些自己公司之外的开发社区,能帮助他们看到最新的趋势,以及帮助他们学会如何利用社区带来的价值。而且,如果他们自己是一个开源项目的所有人,他们的“技术领导”技能也能得到长足的进步,因为他们必须要选择接受或拒绝来自社区的补丁。一个成功的项目,应该是贡献者齐聚,各种观点争鸣的社区。但不是所有的问题都有更简洁更好的技术解决方案的。他们必须决定选择什么,放弃什么,这很难,但在这种困难中,他们锻炼了新的技能。很多开源项目的留言板上充斥着偏激言论,口水战经常处于一触即发的边缘。

从公司的角度看,它能帮助打造“研发品牌”

研发品牌意味着一种公司特有的开发能力的烙印,就好像给产品贴个标签,上面写着“这是我们制造的”。打造这种品牌有很多方法。开源是一种很好的和其他开发者共享代码的方式。它可能无法完全揭示一个公司的内部运作机制,但肯定能展现出跟这个项目相关的各个方面。这也是资深员工给应聘者的一个展示窗口,一个企业向未来雇员发出的明确信号,即,如果他们来这儿工作,不仅能获得个人技能的提升,并且能充分利用那些他们喜欢的软件系统,而不用重新发明它们。

当然,在那么多支持的观点之外,也有一个反对的声音,那就是,开源并不适用于所有公司,也无法解决所有问题。

不要因为缺少人力而开源

在早期这是个常见的错误观点。这个观点的逻辑是,如果我有一个优秀的项目需要额外的帮助,那么开源它会吸引全世界的开发者为它做贡献。这是错误的,原因有二:如果项目成功了,它会从外部社区收到无数的需求,需要耗费额外的精力和时间把代码写出来,而这些需求很有可能跟公司创立这个项目的初衷相悖。如果项目没有成功,前期花了大量的资源去包装它就全部白费了。而且,要判断为项目写代码和提交补丁的个人或社区的能力好坏也很困难。毕竟在外部世界什么都有可能。要做出成功的开源项目,需要投入大量的时间来开发、监管和培育。

不要为了开源而开源

这个问题我通常称之为:“做个好公民”,多做做功课。在创立任何项目前,做个好公民,调查一下是否已经有社区在致力于开发类似的解决方案了。然后花点精力去评估一下,是否给已有的项目贡献代码会更好?通常,使用现有的项目并做出自己的贡献,价值远胜于重复发明轮子。

把糟糕的项目拿出去开源,会产生负面影响。人们审视这个项目后会疑惑,既然已经有了一个很棒的开源解决方案,为什么这个工程师或团队还要搞出这么一个水平低劣的东西来。这对于上面所说各种开源的好处,都是一种伤害。

如何创建成功的开源项目

这很不容易。老实说,LinkedIn 早期在这上面也是磕磕绊绊。我们早期学到的一个教训就是,开发团队不能为了开源,简单把代码丢给社区,然后就停止创新了。很多人认为只要一开源,社区会帮你带领这个项目继续前进,这种情况偶尔也会发生。但大多数情况下,你作为项目的缔造者,有责任保障它在开源的模式下继续发展好,并且你要尽可能多花时间在上面,就把它当作还是你公司内部的项目。

我们学到的另外一个教训是,多半的小型项目,应该集成到大型项目中去。LinkedIn 的第一批开源项目是一些小型的搜索组件,我们从自己基于“ Lucene ”项目的主搜索引擎之上创建了它们,但我们却没有和 Lucene 项目的开发者社区保持同步,大多数组件都没有集成到 Lucene 中,最终被丢弃——其实它们中的很多项目都很出色。Apache 社区则是一个极好的正面例子。单独的开源项目是不错,但是如果你能让这个项目抱上 Apache 这条大腿,那么请不要犹豫。一个成熟社区中的开发人员如果有激情去开创新的项目,成功率要高得多。

后来我们创建 Kafka 项目时,从过去所犯的错误中吸取了教训,明智地选择了投入资源,最终它成了我们的最佳开源项目。

最后,如果一个公司决定开源某个软件,他们必须要有心理准备,最后不得不跟这个项目分道扬镳。我第一次不得不给我的一个项目单独拉出分支的时候,感觉就像是杀死了自己的孩子。做出这个决定后,我整个周末都没睡好,感觉很惭愧……感觉自己像个叛徒。但是后来我明白了:一个项目一旦开源,它就有了自己的生命力。它很有可能演进成为一个你根本不想要的东西,并且不再和你的软件系统兼容。这一刻到来时,你别无选择,只能拉出分支单干了。这是一个自然现象,时不时会发生。你的孩子长大成人了,让大人重新过回他们自己的生活吧。

但这不应该把谁吓跑。开源是一件非常值得去做的事情,创建、管理、参与开源项目,其乐无穷。

查看英文原文: Why Open Source Works for LinkedIn


感谢郭蕾对本文的策划。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-23 00:312213
用户头像

发布了 77 篇内容, 共 35.3 次阅读, 收获喜欢 25 次。

关注

评论

发布
暂无评论
发现更多内容

直播 | 服务餐饮商户年交易额超 7000 亿,哗啦啦如何用 StarRocks 搞定实时报表

StarRocks

数据库

分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03

刘悦的技术博客

golang 编程 教程 教程分享 golang 面试

开源一夏 | jQuery对于链和捕获的实战研究

恒山其若陋兮

开源 8月月更

Spring Cloud Stream 消息发送

急需上岸的小谢

8月月更

Unity Metaverse(四)、接入环信IM SDK 实现用户登录注册

CoderZ

Unity 登录验证 环信im 8月月更

超人飞来!Flutter 实现满屏的力量感动画!

岛上码农

flutter ios 移动端开发 安卓开发 8月月更

SRv6故障管理

穿过生命散发芬芳

8月月更 SRv6

微服务架构的核心关键点

阿泽🧸

微服务架构 8月月更

【高并发】别闹了,要实现亿级流量下的分布式限流,这些算法你必须掌握!!

冰河

并发编程 多线程 高并发 协程 异步编程

开源一夏 | 基于 Serverless一键体验FastAPI

六月的雨在InfoQ

阿里云 开源 Serverless FC 8月月更

Linux下Docker安装部署以及云原生的理解

Geek_acae888666

云原生 Docker 镜像

openEuler 资源利用率提升之道02:典型应用下的效果

openEuler

开源 数据 cpu 操作系统 openEuler

深度解读 | 关于SBOM最基础元素,你需要知道的(Part I)

安势信息

开源 漏洞 SCA SBOM 最基础元素

Netty入门 -- 什么是Netty?

Bug终结者

Netty 8月月更

Go-Excelize API源码阅读(四)——Save()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

阿里云数据库PolarDB开源人才培养计划发布!万元好礼等你来拿!

阿里云数据库开源

数据库 阿里云 开源 认证 polarDB

什么是Shell?从小白到入门你只差一个它

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

培训预告 | 企业应用现代化实用教程——DevOps方法论及最佳实践篇 8月11日上线

York

DevOps 云原生 团队建设 降本增效 应用现代化

头脑风暴:打家劫舍2

HelloWorld杰少

算法 LeetCode 动态规划 8月月更

抖音开启“818发现好物节”:电商平台造节活动何时休

石头IT视角

开源一夏 | RuntimeException 子类

六月的雨在InfoQ

开源 8月月更

企业进行知识共享的好处有哪些?

Geek_da0866

经验分享|低成本快节奏搭建企业知识管理系统的方法

Baklib

兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04

刘悦的技术博客

golang go doc 教程 教程分享 golang 面试

借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05

刘悦的技术博客

入门 教程 Go web 教程分享 入门介绍

舔狗至高境界,学会这个技巧让你从舔狗升华到海王【Python趣味爬虫】

Geek_ac6fb9

后端

LeaRun模型驱动开发框架 重塑企业生产力

力软低代码开发平台

MySQL权限管理

武师叔

8月月更

文档管理系统对于企业来说有哪些作用?

Baklib

低代码实现探索(四十七)低的不止前端,还有后端

零道云-混合式低代码平台

如何让您的wiki内容更高级?

Geek_da0866

为什么开源适合LinkedIn_语言 & 开发_曹知渊_InfoQ精选文章