打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
维护一个大型开源项目是怎样的体验? | 知乎精选

【尤雨溪的回答(660票)】:

谢邀。先介绍下项目吧,前端视图层库 Vue.js: vuejs/vue · GitHub

目前在 GitHub 上 7300+ star,issue + PR 总计 1400+,生产环境中使用算是有不少(应该... 其实我也统计不完全),前端包管理系统里面只有 npm 有统计的,每月下载量 14k 左右,并不清楚 bower 和直接下载的量多少。

对前端熟悉的同学应该多少有所耳闻吧。本质上 Vue.js 做的是两件事情,数据绑定和视图层组件化。技术上的细节就不在这里啰嗦了,不了解但感兴趣的同学可以移步这里:Vue.js:轻量高效的前端组件化方案-CSDN.NET。Vue.js 和其他库/框架不一样的地方主要在于 API 的简洁和不对高层架构做过多约束。这也是为什么我通常不把 Vue.js 叫做框架,因为它是一个很专注的工具,只解决它该解决的问题。这是我从一开始就坚持的一个理念,那就是不做大而全,只做小而美。一方面是因为个人偏好,另一方面是因为作为一个个人项目,在竞争激烈的前端库领域里想要生存,最好跟那些由团队维护的大框架有明显的差异性。

印象深刻的事情

这个项目一开始纯粹是作为练手的轮子,因为当时想要研究 Angular 数据绑定的实现。研究的时候觉得脏检查实在是个不优雅的实现,于是就琢磨如果只支持 ES5 能不能用 getter/setter 实现无缝的依赖追踪。如果算上那时候的第一个 commit,距今已经两年零三个月:initial setup · yyx990803/vue@83fac01 · GitHub 正式对外发布是 2014 年 2 月的事情了。当时也算是抱着『搞个大新闻』的念想小小策划了一下,同时在 HackerNews、Reddit、EchoJS 等地方发了帖子,还给 DailyJS、JavaScript Weekly 等媒体发了自荐。发布后幸运地在 HN 首页呆了一段时间,第一周后拿到了 615 个 star。我对第一周的一些数据做了些统计,还写了篇博客:First Week of Launching Vue.js

当时 Vue.js 其实非常的不成熟,但有一个公司胆子很大地把这个个人项目用在了生产环境里:Optimizely。这家公司国内知道的人可能不多,但他们 B 轮融了 a16z 的 55m,其实是一家准独角兽公司。他们当时的新前端 lead 上任做的第一件事就是把他们基于 jQuery + Knockout 的旧前端用 Vue.js 重写了,还邀请我去过他们办公室聊天。现在回头看来,当时的 Vue.js 问题很多,但多亏了这家公司,让我第一次觉得『卧槽,原来我写的东西还真有别人用!』

另一类有趣的用户则是一群法国的交互开发者。这些人大多是在广告创意类的公司工作,主要的任务就是把网站做得要多酷炫有多酷炫,很多都是从 Flash 背景过来的。对于他们来说 Angular 完全是 overkill,但 Vue.js 却正好。加上对于动画的良好支持也算是 Vue.js 的卖点之一,所以他们用 Vue 还做了不少得奖的交互类网站,比如:Louis Ansa - Interactive Designer (国内可能加载很慢)

再往后不知为什么 Vue.js 在日本也有不少人开始用了,东京一家叫 Cuusoo 的公司有个工程师把他公司的前端用 Vue.js 改写了,翻译了日文文档,居然还组织了 Vue.js meetup... 然后他现在升任他公司 CTO 了 orz... 总之听说 Line 和 Nintendo 也有一些项目用了 Vue.js。

今年 5 月份的时候,Laravel 的作者发了条推,大意是说『我尝试学了下 React,觉得好难用,决定改学 Vue.js 了』。然后 Laracast(一个 laravel 教学视频网站)的创始人做了一系列 Vue.js 教程,于是 Vue.js 突然就在 Laravel 社区火了,貌似现在最活跃的用户都是 laravel 社区的人...

开发中的体验

现在想来,才明白为何一个项目所谓的『成熟』需要时间。今天回头看两年前的代码,那就是一坨渣渣啊。这期间经历了很多摸索着做了个能用的实现,然后去研究其他库的源码,于是恍然大悟为什么他们要这么设计,再把自己的设计改写的过程... 为了这个几乎所有开源的前端库实现我都研究过了,很多次在做大改动的时候心里都会觉得很慌:『之前那么蠢的设计居然还有人用!』0.10 到 0.11 的升级是一次完全的重写,实在是因为 0.10 的设计太幼稚,维护不下去了...

为了能『可持续发展』,不得不强迫自己形成代码洁癖。每一个函数,每一个 hack,每一个 edge case 都要写上注释,怕的就是哪一天自己都看不懂自己当时在干嘛。为了不在修 bug 的时候导致更多的 bug,只能强迫症一般地保证每一个 commit 之前都是 100% 的测试覆盖率。总的来说,能自动化的东西都基本自动化了,比如发布一个新版本也是一个命令自动跑完所有测试,按照 semver 升级版本,然后 push git tag + npm publish。另外还在持续集成服务上对每一个 PR 自动检查代码格式 + 跑单元测试...

另一个很有意思的转变就是从一开始完全想怎么设计就怎么设计,到今天需要考虑各种用例、稳定性、浏览器兼容、向后版本兼容、社区意见等等,整体的设计过程也变得越来越社区化了。以前想做个新功能直接上就是了,现在基本上都会先开个帖子征求下社区意见,大家一起讨论着做。比如这次 0.12 ~ 1.0 的升级,大部分 breaking change 都专门开了 issue 征求社区意见,新的绑定语法更是经历了漫长的几百条评论的讨论...

Issue 和 PR

现在基本上每天起床第一件事就是看邮箱里面有没有新 issue。我用 Inbox 把 Vue 的 issue 专门分了个类别,就当是 todo list,修掉了就勾掉。有时候一口气修了几个 bug 啪啪啪勾掉一堆的时候感觉还是很酸爽的... 当然更爽的是有时候一觉起来一个 issue 也没有 -.-

说到 issue 的类型,实在是一把辛酸泪。刚开始的时候有人开个 issue 就觉得受宠若惊了,到后来时间紧了之后,就越来越体会到对开 issue 的方式对维护者体验的影响。举例来说,有些人开 issue 永远只有一句话,甚至有些直接就是标题:"xxx doesn't work",然后无内容。早期碰到这种的还会记在心上,现在遇到这样的就直接挂个 『请给重现』的 tag,如果几天以后还是没重现就直接关掉。另一种极端就是一些很认真的同学,一个 issue 分几个小标题,『问题描述』、『重现步骤』、『可能的原因』,有些甚至把应该改哪里都帮我指出来了,就差直接开个 PR 了。每次遇到这样的 issue 我就特别想拥抱一下开 issue 的人,希望大家都向这样的同学学习!

印象最深的一个 issue:

最奇葩的 PR:

mini change: removed unnecessary spaces by Jinjiang · Pull Request #1165 · yyx990803/vue · GitHub

^ @赵锦江(勾三股四) 为了混 contribution 已丧心病狂!

对工作和生活的影响

首先,维护这个项目对于个人的技术成长显然是有着巨大的好处的。为了保持项目的竞争力,我需要时刻关注前端最前沿的东西,研究别人的实现;为了保持项目的可维护性,我需要进行各种工程化的实践...

有一个有一定知名度的项目自然在很多事情上也会比较方便,比如当时去 Meteor 面试就是做了个 Vue.js 的分享然后聊了聊天就给 offer 了,并没有叫我翻转二叉树什么的...

生活上,对项目过于投入有一定的负面影响。因为 Vue.js 毕竟是个个人项目,所以经常需要占用工作外的时间,代码写太晚被老婆训斥也不是一次两次了... 还好我在写 Vue.js 之前就已经找到了老婆,各位单身的码农挖坑前还需谨慎!

【季索清的回答(16票)】:

尤雨溪同学介绍了一则在软件开发领域比较有代表性的范例;那么我就说说一个大家不太熟悉并可能稍感神秘的领域中的大型开源项目:在天体物理领域中(目前也在逐渐扩展到多学科)的数据分析和可视化软件:The yt Project.

这个项目(包括使用文档)的源码都放在BitBucket上(yt on Bitbucket),目前有约18,000的commit,2000的PR和1000+的issue。由于专业特点,我们个人有些代码出于各种原因是不能公开的,因此提供无限免费私有仓库的Bitbucket是一个很方便的选择。

目前yt在天体物理领域取得了较大的影响力(很可惜,这一点在国内尚不明显;因此我也计划在国内通过给talk的方式做一些初步的推广工作);yt支持天体物理中多种广泛应用的(数值模拟/观测)数据格式,大量的论文是用yt进行数据处理和可视化的,其中包括一期《自然》杂志的封面。一些可视化的例子可以在The yt Project: Gallery我个人主页上的Visualizations上找到(部分在YouTube上视频可能被墙)。

与软件领域的开源项目相比,yt Project有其特殊性:

  1. 相当一部分的模块要求维护者有专业的物理知识;
  2. 使用者为编程能力相对(与程序员相比)薄弱的物理学从业者,因此在使用文档和拥护支持方面有较多的工作。
维护这个较为大型的开源软件,一个人的力量是远远不够的;约20人的团队(The yt Project: Community)以及从始至今共108位contributor都为这个开源软件做出了贡献,其中包括像我这样的博士生、博士后和教授。项目的维护主要有以下几个方面:

代码设计与debug

这个是最主要、也是最基本的工作。每隔一段时间,当一个阶段的工作比较成熟之后,我们就会推出一个新的版本号。我这周刚参加了这个项目的mini-sprint,大家针对全新设计的立体渲染模块进行了最后的代码冲刺,并即将推出3.3版本。

代码测试

测试包括通过运行一系列测试脚本,检测代码各个模块能否正常运行,以及改动前后的版本的输出(数据、图像等)是否一致等等;后者在科研中是很重要的,否则今天一个结果、明天另一个结果,论文就没法写了。这个本应是一个繁重的工作,然而团队里的一位成员为这个项目写了一个测试机器人;每提交/改动一个PR,机器人就会自动针对变化运行测试、重新编译使用文档,并在PR页面留言:

同时在团队的Slack上的即时聊天组里也会发信息:同时在团队的Slack上的即时聊天组里也会发信息:

话说我去年刚开始成为这个项目的成员时,还惊讶于这个人为什么每次都如此勤快,后来才觉得它应该是机器人…

用户支持

如前所述,由于这个项目的特殊性,我们在用户支持上做了较为完善的工作。我们撰写并维护了非常详尽的使用文档yt Docs;通过yt的使用者邮件列表,每天都能收到几封邮件并都能得到及时的回应。此外,第二届使用者workshop将于明年二月初在加州理工学院举办(正式的通知将在最近发出),有感兴趣的同学可以保持关注或者联系我。

团队组织

由于大部分团队成员在不同的研究机构,我们每周会在Google Hangout上进行PR Triage集中分拣审核提交的PR;此外还有团队会议,着重讨论更宏观的项目发展规划(yt Enhancement Proposals)。

此外说说对我个人的影响吧。做为未出茅庐的博士学生,我更多的精力在科研工作上,在yt项目的投入与团队中的博士后们相比并不算多;然而团队成员评价说我的开发工作具有high impact,得到这样的肯定也是非常开心的。由于yt项目较大的影响力,我通过这项开发工作结识了本领域中各个大学/研究机构里许多优秀的开发者和使用者,其中有些研究者向我发出了访问或者讲座邀请,这无疑是提升自己研究工作的知晓度的绝好机会。

最后,如果有同学有兴趣愿意尝试使用yt(不局限于天体物理专业),欢迎与我联系~

【孙飞的回答(66票)】:

曾经用易语言开发了某百万级网游外挂程序(穿越火线),独创了很多新功能,都是客户端级别实现的功能,不会被查出来,当时也hack过老外早期发布的模拟版服务端,感觉这些功能官方做至少也要服务端同步才能实现,比如一枪毙命,飞天,遁地,隐形,封包修改商城数据/游戏结束后统计数据,后来招代理,二级代理,开CF卡盟,很是火爆,赚钱至少也超过7位了,也知道自己不能继续下去了,想赚更多钱的代价可能是所有钱都被追回然后坐牢。为了避责,卖掉源码给几个外挂网站,直接开源到github了,然后就是外挂最疯狂的时候了,很多人二次销售我在github发布的代码,那时做一个外挂就是加一个壳,基本新手就能做到,然后当年就被抓住好几伙所谓的制作外挂团伙。

那是四五年前的事了,现在绝大多功能都被封掉了,但是内存透视还是用的我的代码。

github上已经被腾讯举报删除了,网上能搜到很多透视源码,基本都是无修改我11年发布的版本。

我这个项目应该不算是大型,也不算是维护,如果说单纯算收入,不论合法不合法,绝对超越此贴其他项目。

【刘彦玮的回答(1票)】:

我也来说一个吧。babybluetooth,一个用oc写的ios蓝牙库。现在只有300+星,但是已经是github上新最多的ios蓝牙库了。

coolnameismy/BabyBluetooth · GitHub

写这个库的初衷是因为原生的corebluetooth蓝牙库委托太多,不断嵌套着委托和方法的调用,代码写起来混乱不优雅。所以干脆自己写了一个。刚开始写的时候,工作了远远超过了自己的预期,比较是corebluetooth库的封装,得兼容全部的原生方法,在按照自己的逻辑和生命周期去处理。这部分就写了1周,接着又是写中文文档,英文文档,测试等做了很多工作,终于有了第一个可以使用的版本,放到github上。

维护项目:

任何项目的第一个版本都是不成熟的,自己不停的思考有哪些好用的功能适合加进去,也写了一些蓝牙教程在blog和分享到cocoachina上(英文不好很吃亏。。)也建立了一个qq群用来讨论蓝牙开发的相关问题。

对生活的影响:

这个开源项目目前基本上都是自己一个人在写。但是已经有不少人再尝试用babybluetooth去写蓝牙程序,babybluetooth的qq群里每天不断的有人在讨论babybluetooth的使用中的问题和解决方法,也会有人再群里或者发邮件问我一些ios蓝牙开发的问题,这部分每天需要花费不少时间,但是群里都是具有开源精神的工程师,他们也会相互的回答一些问题。也有很多人标示对我项目的支持,也很感谢这些人的支持和提出修改建议,才能让我有更多的动力去把项目完善。

对个人的成长:

github开源项目的维护能力+1

拓宽程序猿朋友圈+1

感觉自己小有成就感+1

和hr谈薪资+1

。。。。

【骁波的回答(11票)】:

一点也不大型,但star1000+

https://github.com/racaljk/hosts

【知乎用户的回答(0票)】:

@韩天峰

等大神来答!

原文地址:知乎

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
开源推荐:一个超级好看的开源的后台管理框架,附源码!
开源作者删库“跑路”,是玻璃心还是另有隐情?
将代码上传到GitHub上
GitHub开源项目总结
vue的安装
13个优秀的 Vue 开源项目及合集推荐
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服