本文源自笔者的课程作业,包含了一些粗浅的思考。

一波N折只为了改Angular.js一行代码

我曾就职于一家传统企业的电商部门,从事前端开发。为了提升自己功力,也为了在工作中修bug更得心应手。于是我开始研究起项目所使用的的Angular.js(https://github.com/angular/angular.js)框架的源码。原本以为一个高星项目,有大量的开发者参与,又维护了很长时间。应该不会有肉眼可见的BUG。结果还是让我碰上了一个问题,这个问题可大可小。往小处说,我遇到的问题并不是BUG,只是一句在执行流程中执行了却没有任何作用的代码,无伤大雅;往大了说,这句代码身处Angular.js框架比较核心的,被大量调用的函数中,聚沙成塔,势必会对框架整体性能造成影响。

当时我在工作中看似Git用得很溜,但是在企业内部的开发项目中,实际上就是“三板斧”:pull,commit,push。对于Angular.js这类大型开源项目如何协作,我并不熟悉,只能硬着头皮开始了这次“修BUG”之旅。我首先到Github上提了一个issue(https://github.com/angular/angular.js/issues/14810),然后就收到了项目维护者的“灵魂拷问”:

Do you think this causes problems in the code? Or do you suggest we remove it? The first thing you can do is to check if all the tests pass if you remove the second statement. You can also look in the git history and see when / why this line was introduced and try to see if it is still needed

翻译过来大概就是:

那句代码会造成BUG么?你建议删掉它?测试用例跑过了没?看看谁写的?现在还有没有用?

我赶紧按要求检查了一遍代码提交历史,确认该代码确实是无用代码,试着跑了一下测试用例,但没跑通。把这些信息在issue中comment之后,过了几小时,收到了维护者的回复:确认该代码无效,测试用例在本地未跑通也没问题,PR后官方会再跑一次,你是否愿意提交PR进行修复?

我满心欢喜,预想着鼠标再点个3,5下,就可以在几万星的开源项目中留下我的用户名。殊不知,PR的过程比issue还要繁琐。把项目fork到个人目录,pull,修改代码,commit,push,点击github界面上的pull request之后。我又被googlebot要求签署开发者协议。

Thanks for your pull request. It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

 Please visit https://cla.developers.google.com/ to sign.

Once you've signed, please reply here (e.g. I signed it!) and we'll verify. Thanks.

签了CLA之后,维护者又要求我按项目规范来重新填写commit信息。

Can you please update the commit message according to our guidelines: https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format

按规范填完信息之后,又被打回修改,要求我把代码修改的类型从修复改成重构。

Not quite, sorry. In the commit message, you should write "refactor" instead of "fix".
And ofr the future, make sure that there are no merge commits on the branch (i.e. amend the commit instead)

至此,这趟折腾的“修BUG”之旅终于画上了句号。

工业界开源和学术界开源的差异和一种设想的转化方式

虽然文中记述的这次PR只改了区区一行代码,但是在工业界,确是有一定分量的,有助于升职或跳槽。因为虽然只改了一行代码,但是反映出了作为一个码农的四种能力:1.可与外国开发者准确交流的英语能力2.开源工具的使用能力3.Javascript语言的熟练度4Angular.js框架的熟练度。

有意思的是,我后来又辞职攻读计算机专业硕士,学术界(更具体指高校中评各类奖学金时)对开源行为的评估是另外一种完全不同的导向。高校也鼓励开源项目,但不鼓励学生去参与高星的知名项目,而是要求学生尽量以学校和实验室名义开发项目并自行推广求star。换句话说,工业界看开源看的是开发者的个人实力,学术界看开源看的项目是否提升了学校或组织的影响力。

那么这两种完全不同的导向是否可以相互转化呢?结合我自身的开发经历,如下三种开源行为的工作量大概是相近的。

  1. 从头搭一个1000行代码的玩具项目,获得10星
  2. 为一个500星的公开项目提交20行代码
  3. 为一个10000星的知名公开项目提交1行代码

我们不妨设计一个单位,叫 星行,用来评估一个开发者的某次开源行为的价值,上述三个操作的价值均为10000星行=1000行*10星=500星*20行=10000星*1行。

我想,当工业界和学术界对开源的评估标准趋同之后,更有利于开发者的协同和流动,造就一个更繁荣的开源环境。

工业界开源和学术界开源的差异和一种设想的转化方式相关推荐

  1. 2017 开源中国新增开源项目排行榜 TOP 100

    2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度 ...

  2. 开源中国社区开源项目排行榜

    js excel控件 网页excel 1. t-io:百万级即时通讯框架 t-io 是一个网络框架,从这一点来说是有点像 netty 的,但 t-io 的特点在于,它不仅仅是一个网络框架, 因为它为常 ...

  3. 【分享】2017 开源中国新增开源项目排行榜 TOP 100

    2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度 ...

  4. 年度特辑 | 2017 开源中国新增开源项目排行榜 TOP 100

    2017 年开源中国社区新增开源项目排行榜 TOP 100 新鲜出炉! 这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度 ...

  5. 红帽技术开放日:参与开源社区不只有贡献代码这一种方式

    红帽(Red Hat)是全球最大的开源软件公司,今年是红帽建立25周年,适逢LC3大会在北京举办,6月28日和29日红帽举办了开源社区开放日和媒体交流会,和大家分享红帽的最新消息,并探讨了如何建设开源 ...

  6. 【360开源】2018开源项目汇总

    开源报告 2018年,360一共开源了6个项目,包括前端.大数据.移动端.机器学习.云计算多个领域. 开源项目地址: https://github.com/Qihoo360 ◆ ◆ ◆ ◆ Sprit ...

  7. 一文看懂开源许可证丨开源知识科普

    一文看懂开源许可证丨开源知识科普 1. 一文看懂开源许可证丨开源知识科普 1.1. 什么是开源许可证? ("Open Source License") 1.2. 常见开源许可证 1 ...

  8. 人工智能开源社区论坛----开源助力多领域AI生态发展| ChinaOSC

    ChinaOSC 2022 人工智能开源社区论坛----开源助力多领域AI生态发展技术论坛将于2022年8月20日13:00-17:00在陕西省西安高新国际会议中心召开.本论坛将围绕"开源社 ...

  9. 开源软件和开源社区的反思

    蔡维德 李 磊 北京航空航天大学 引言 当前,许多新型技术凭借开源方式推广.开源 软件的发展由来已久,目前已有数以万计的开源社 区和模型.由于开源软件存在局限性,近来学术界 开始对开源软件和社区的发展 ...

最新文章

  1. CTFshow 命令执行 web54
  2. tf.broadcast_dynamic_shape
  3. 读Google是如何做测试的
  4. 解决 Intellij IDEA 文件图标一直闪烁
  5. 计算机专业介绍范文英文,计算机专业个人简历英文范文
  6. 不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤
  7. 全局变量中断原子操作_操作系统导论02-06章
  8. 精准 iOS 内存泄露检测工具
  9. 细胞亚器文献阅读之酵母液泡与线粒体的动态互作A Dynamic Interface between Vacuoles and Mitochondria in Yeast
  10. Posta:跨文档信息安全搜索工具
  11. linux文件类型elf,ELF文件格式的三种类型
  12. 软件测试性能测试报告完整版,性能测试报告模板
  13. hadoop put命令的格式_【Hadoop篇】--Hadoop常用命令总结
  14. H.264媒体流AnnexB和AVCC格式分析 及 FFmpeg解析mp4的H.264码流方法
  15. Linux扩展ip上限,Linux之iptables添加扩展模块实现封P2P、封国家IP
  16. python如何拼读英语单词怎么写_如何拼读英语单词
  17. java中长整形怎么定义_java中长整型定义
  18. 【面经】TP-LINK 图像算法工程师(提前批)
  19. 【17 提高 1】 给
  20. 李沐精读论文:MAE 《Masked Autoencoders Are Scalable Vision Learners》

热门文章

  1. 对数与指数操作:pow,log,sqrt,exp
  2. [STC89C52RC]LCD1602液晶屏显示
  3. 开发webservice 遇到问题 No message body writer has been found for class
  4. [渝粤教育] 中国地质大学 机械原理 复习题 (2)
  5. 【Android Studio】为Android Studio设置HTTP代理
  6. 性能优化——Android热修复技术,类加载机制详解
  7. 【电子刊物制作软件】名编辑电子杂志大师教程 | 自动翻页设置
  8. 进程、线程、协程?用海贼王的故事来理解它们的差异
  9. AJAX+REA实现前后台数据交互的加密解密
  10. [附源码]Java计算机毕业设计SSM安庆师范大学校园互助平台