程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳
来源自:http://www.techug.com/node-js-community
几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于对 NPM 管理层的怨愤,不声不响删除了自己在 NPM 上面的全部代码,其中就包含只有 11 行代码的“Left-pad”,没想到从中国北京到美国硅谷,从大学宿舍学习 Node.js 的新手到 Facebook 的资深工程师,整个互联网界都炸开了锅,他们手中的许多 Node.js 模块,全罢工了。
虽然 NPM 管理员在危机发生后采用强制重新编写发布了 Azer Koçulu 的代码,但是这次 NPM 风波无疑意义深远。
要理解 NPM,首先就要知道 Node.js。Node.js 是基于 Javascript 语言的后端编程框架,开发网站用的语言,可以理解为 PHP 的替代品。Node.js 最明显的特征在于,除了使用 Javascript 语言,同时还拥有许许多多公用的模块,都由来自世界各地的开发者贡献,这些模块使用 NPM 管理,NPM 就有点像苹果的 App 商店,只不过这些模块都是免费的。
Azer Koçulu 本来是 NPM 的热情粉丝,经常为 NPM 贡献代码,其中之一就有个叫 Kik 的模块,但是这个模块可能是功能简陋,也可能是知名度不高,反正用的人很少,没什么存在感。巧巧合的是,刚好有一家公司也叫 Kik,是一款类似微信的社交工具。
Kik 公司也要在 NPM 社区用到 Kik 这个名字,于是就给 Azer Koçulu 发律师函,义正言辞要求他把自己的 Kik 换成别的,否则会有律师找上门。Azer Koçulu 觉得 Kik 公司说的很有道理,然后拒绝了。毕竟取名不应该先到先得吗?凭啥你说什么我就信什么,凭什么你要我做啥我就做啥。而且我又没做错什么,我在刚开始编写 Kik 模块时候并不知道有 Kik 这个公司。
Kik 公司交涉失败,直接就向 NPM 官方投诉了,没多久,NPM 社区管理员没经过 Azer Koçulu 本人同意,就把他在 NPM 上面的 Kik 模块的控制权交给了别人。
这下 Azer Koçulu 简直要爆炸了,对于 NPM 大失所望,没想到 NPM 社区是这种玩意,保护大公司,漠视个人开发者。这简直就是对自己价值观的奇耻大辱。
愤怒难抑,Azer Koçulu 决定复仇,他要和 NPM 决裂,一下子删光了自己在 NPM 上面的所有代码。其中就包括流行组件“left-pad”。这个组件只有 11 行,功能很简单,就是在给定的字符串左边重复插入给定的字符,以达到需要的字符串长度。
这个 Node.js 模块虽然简单,但是应用非常广泛,下载量超过 57 万次。Facebook、Spotify 以及 Netflix 等著名公司大型软件项目中都用到了 Babel 这个模块,而 Bel 本来这个模块又调用了“left-pad”这个模块。同时受影响的还有当今非常著名的 React 框架,这个框架帮助前端工程师更便捷地开发网站界面,全世界同时学习 React 框架的程序员可能数百万,但是突然就都不能用了。据 NPM 官方博客,“left-pad”删除后,受到影响的模块达到数千个。
这就像飞机的发动机突然掉了一颗螺丝,点火时候系统就肯定会报错,但是你却很难定位为题的出处。毕竟 Node.js 采用连环套的设计思想,你调用的模块可能调用了其他模块,其他模块也调用了自己的其他模块,一层又一层,代码量千千万,定位并修复所有的问题代码,实在工程浩大。
这场意外迅速在 Twitter、以及微博上炸开了锅,众多网友反应 React、Babel、Ember 无法使用,数小时后也有网友反映 Babel 已经推出了紧急修补版。
意外发生 4 个多小时后,NPM 社区管理员决定出手,把“left-pad”这个名字从 Azer Koçulu 手中夺了回来,重新写了一个“left-pad”函数,终于才抚平了千万程序员躁动的心。
这次意外发生后,众多开发者开始怀疑 NPM 的管理能力,庞大的 Node.js 社区竟然危机四伏,今后如果有贡献者误操作或密码被盗,全世界无数的 Node.js 开发者瞬间无法工作。同时也有人开始怀疑 NPM 的设计哲学,为什么不设计官方标准库,而是把十来行,甚至只有 1 行的代码设计成独立的模块。比如有个叫 isArray 的模块,下载量达到 88 万次,其实只有 1 行代码而已。
程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳的更多相关文章
- 深受C/C 程序员欢迎的11款IDE
几十年过去了,C和C++作为主要的高级的程序设计语言,在全球范围内仍然广受欢迎,并牢牢占据着TIOBE编程语言排行榜前5名,应用程序和系统的开发离不开这两门语言,现在我们来总结一下近些年来,深受C/C ...
- 别人的双11 & 程序员的双11~
双11,致敬所有的程序员欧巴! 愿代码的世界,只有爱,没有伤害!! 点此参加阿里云双十一拼团活动:https://m.aliyun.com/act/team1111/ 阅读原文
- 腾讯微信支付,程序员是如何让jQuery代码付钱的
微信支付和支付宝支付已经是我们生活中不可确实的两个金融软件了,也是必备的,小编认为小钱用微信,大钱用支付宝. 下面这个图是我们生活中用腾讯微信支付平台的最后一个页面,大家想不想知道这个页面是如果做出来 ...
- 程序员新人怎样在复杂代码中找 bug?
分享下我的debug的经验 1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间. 2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经 ...
- (转)程序员新人怎样在复杂代码中找 bug?
我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的s ...
- alexNet--deep learning--alexNet的11行代码
% Copyright 2016 The MathWorks, Inc. clear camera = webcam( 2 ); % Connect to the camerannet = ale ...
- 11慕课网《进击Node.js基础(一)》Buffer和Stream
Buffer 用来保存原始数据 (logo.png) 以下代码读取logo.png为buffer类型 然后将buffer转化为string,新建png 可以将字符串配置: data:image/png ...
- 代码规范 for node.js with 'npm-coding-style'
npm-coding-style npm's "funny" coding style Description npm's coding style is a bit unconv ...
- 程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
0.别对警告视而不见 相信不少的程序员会使用IDEA,使用它敲代码,有时候会出现警告,那么这时你对警告就不能视而不见了. 我们的目标是,写干净的代码,做风一样的男子! 1.编程习惯 种瓜得瓜种豆得豆, ...
随机推荐
- Helios与Katana的区别
Helios与Katana都是微软开发的基于IIS的OWIN实现. 它们之间的区别很简单:Helios不依赖于ASP.NET Runtime,Katana依赖于ASP.NET Runtime. Hel ...
- JsRender实用教程(tag else使用、循环嵌套访问父级数据)
前言 JsRender是一款基于jQuery的JavaScript模版引擎,它具有如下特点: · 简单直观 · 功能强大 · 可扩展的 · 快如闪电 这些特性看起来很厉害,但几乎每个模版引擎, ...
- crontab定时任务配置记录
一.前言 今天简单记录下crontab的配置 二.crontab目录 /etc/crontab 文件 这是系统运行的调度任务 /var/spool/cron 目录 用户自定义的crontab任务放在此 ...
- Ubuntu命令--CURL用法
curl命令是个功能强大的网络工具,支持通过http.ftp等方式下载文件.上传文件.还可以用来抓取网页.网络监控等方面的开发,解决开发过程中遇到的问题. 常用参数curl命令参数很多,这里只列出我曾 ...
- podspec文件介绍
podspec文件是cocopods引入的第三方代码库的配置索引文件 它的创建命令是:$pod spec create TestFile podspec文件的常用配置字段介绍 Pod::Spec.ne ...
- 搭建wamp环境,数据库基础知识
服务器管理软件php Apache.net IISjava Tomcat 服务器管理软件起到的作用:管理服务器工作,具体的工作如下:1.静态页面用户将请求发送到服务器,服务器中的服务器管理软件将请求发 ...
- python None与Null
一.Python对象 要理解这个,首先要理解Python对象: python对象具有三个特性:身份.类型.值. 三特性在对象创建时被赋值.只有值可以改变,其他只读. 类型本身也是对象. 二.Null与 ...
- 25数据查询的各种小玩法-select上(必学)-天轰穿sqlserver视频教程
大纲:简单查询-选择数据列,使用字符串,改变列标题,使用数据运算 优酷超清地址,为了冲优酷的访问量,所以这里只放优酷的地址了,其实其他网站还是都传了的哈.
- 一道SQL面试例题 if...else 与聚集函数
晚上回来,同学说面试遇到了一个SQL面试题目,自己做了一下,总结总结. 题目如下: 下面是产品数据表(产品id,颜色col,数量num),其中每种产品有1~2种颜色. 求每种产品各颜色的数量差值(对于 ...
- Swift入门篇-集合
一:数组 一:可变数组 定义:数组使用有序列表存储相同类型的多重数据. 格式: 第一种格式 var 变量: 类型[] = [变量值,变量值,...] 第二种格式 var 变量 =[变量值,变量值,.. ...