周末时间,就不聊具体的技术知识了,和大家分享一篇我最近看到的科技趣闻吧。
几天前,由微软研究院、加利福尼亚大学等组织组成的一个研究团队对全球最大的代码托管平台 GitHub 做了一项调查分析,还蛮有意思的。
经过对 450 万托管在 GitHub 平台的非 Forked 开源项目、将近 48200 万不同代码文件的分析,研究团队发现只有 8500 万的文件是唯一的。这些唯一的文件比例只占总数 17.63% 左右。
这次研究只分析了那些使用 C++、Java、JavaScript 和 Python 这四种语言编写的工程。其中,JavaScript 工程拥有 94% 的具有根据相同文件 Hash 值的超高比例占据榜首。
C++ 第二,重复文件比例为 73%,Python 以 73% 的代码重复率位居第三,Java 最少,仅占 40% 的比例。
为验证这一结论,研究人员同样也分析所有重复文件中的内容匹配度,结果也是如此。
为什么 JavaScript 项目重复性代码占有率这么高,倒也不难理解。原因在于 NPM 的使用,这个拥有超过 35 万数量的 librares、当前世界上最大最流行的包管理器,深得 JS 开发人员的喜爱。
前面都是生硬的数据分析,来看看一个有意思的地方。
GitHub 作为一个使用 Git 版本控制工具建立的代码托管平台,初衷在于鼓励大家使用 Fork 工作流保存项目。然而根据前面的数据,这些大量重复代码并不是通过 Fork 操作产生的,而是由于我们程序员惯用的复制和粘贴文件、甚至整个项目造成的。
我们都知道,在 GitHub 网站,Fork 操作的好处是,协助者可以通过 Fork 某个工程来帮助原作者一起改进和完善开源项目。而搜索到 Forked 项目的吃瓜群众们也能追本溯源,找到项目最初的版本,得到更多有用的信息,正确地使用开源库到自己的项目当中。
如果,没有了 Fork 工作流,大家都是通过 Clone,然后使用这个已经在 GitHub 网站存在的项目重新 Create 一个新的 Project 的话,很容出现这样一种场景:当你打开 GitHub 网站并输入关键字搜索你想要的开源库,然后得到不同项目地址的结果列表,逐一打开之后,发现相差无几,只是换了个名字而已。
近期原创
分享 Android 开发中三个与屏幕有关的小众知识@所有人,我这里可以直接进入这款小程序啦