Py学习  »  Git

GitHub 为编程世界带来了什么改变?

MacTalk • 6 年前 • 625 次点击  

题图:Github logo 变体

几天不写文章,感觉手有点生。说起来坚持真是件困难的事,每次中断写作之后最顺理成章的事情就是再中断一会,但内心肯定是纠结的,毕竟 MacTalk 一直在坚持输出。从 2012 年 12 月 15 日推送了第一条信息算起,五个年头过去了。弹指一挥间,鬓角的白头发都长出来了,也不知道还有多少读者是 2012 年就订阅的,也许有更多人早就不看了吧。

新年第一篇,写写 GitHub,这个主题很早就想写了。

GitHub 的数据

去年十月份,也是就是「极客时间」上线的那个月,GitHub 发布了 2017 年度的 Octoverse 观察报告,有很多数据非常值得关注。比如:

GitHub 目前已经拥有 2400 万用户,横跨 200 个国家,其中 130 万为学生开发者。另外,GitHub 上还拥有 150 万组织和 6700 万 Repositories。自 2016 年 9 月以来,GitHub 上新增了 670 万名开发者、10 亿次 Commit、2530 万个活跃项目、1250 万个活跃 Issue 和 130 万次新 PR(Pull Request)。

这些数据展示了技术的生命力和开发者旺盛的创新精神。值得一提的时,2017年 GitHub 新增了 70 万中国用户,整个亚洲地区的 GitHub 用户总数是 710 万。这说明了随着国内开源的项目越来越多,质量越来越高,使用 GitHub 的中国组织和个人用户正不断增长。

但这远远不够,比如 MacTalk 的工程师读者,有多少人有自己的 GitHub 账户呢?又有多少提交过代码呢?恐怕比例并不太高,也就是说,GitHub 的增长空间依然巨大。越来越多的人编程伊始,就会到 GitHub 上找项目去学习。2017 年,上百万的学生和老师把 GitHub 当成了学习与教学的地方。

GitHub 正在践行他们的宗旨:社会化编程。很多复制 GitHub 的产品最终都败走麦城,很大程度上都是因为它们不具备社会化编程的特质,也许这些创业者从开始就没想到社会化编程的概念吧。

梵高,海滩上的渔船

社会化编程

GitHub 总部位于旧金山,Logo 是一个猫咪和章鱼的混合体,在这个网站上有很多 Logo 变体,非常有趣,事实上,GitHub 已经在程序员群体形成了一种独特的文化。

https://octodex.github.com

很多人最初接触 GitHub 会以为这是个 Git 仓库的网络公开版本,实际上 GitHub 和 Git 完全是两码事,Git 是类似 CSV 或 SVN 的代码版本管理工具,而 GitHub 提供的是服务能力,除了代码托管,GitHub 还提供了一系列协作功能,帮助开发者或开发团队实现高效率高品质的代码编写。除了开源项目,很多著名的企业都在基于 GitHub 的企业版研发和管理自己的产品和服务。

不夸张的说,GitHub 的出现让现代世界的软件开发发生了翻天覆地的变化,说是一场革命也不为过。

GitHub 之前,出现过很多协作软件,程序员们虽然「文人相轻」,每次有编程语言之争就冲上去和别人打的灰头土脸满地找 bug,但在工具方面却不会亏待自己,他们开发出了各种各样的版本管理软件、bug 跟踪系统、代码审查工具、邮件讨论组、即时通讯工具等等,为了完成一次良好的协作,程序员们把这些工具组合起来依次使用,其难度系数相当于跳水向后翻腾一周半转体三周半。

当二爷这样的产品经理过来询问「上周提了一个 bug 怎么还没修复」的时候,程序员们自豪的说:「我们还在邮件组里讨论由谁来修复」。

GitHub 的出现解决了所有的问题,Git 完成代码托管,Issue 用来进行 bug 跟踪和管理,Pull Request 实现了协作开发、Code Review 和 交流功能,Wiki 和 扩展的 Markdown 格式 GFM 可以编写优雅的开发文档……

GitHub 服务的出现,为开源世界带来了社会化编程的概念,这个概念影响了全世界众多程序员和技术团队。什么是社会化编程呢?就是在自由、开源、民主的环境下,一群陌生的程序员通过网络和协作的方式共同开发和维护一个软件产品。

真正有生命力的开源软件都是基于社会化编程的方式构建出来的,现在很多大公司因为 KPI 也会把自己的一些代码放到 GitHub 上,但那更多是一场代码秀,而不是真正的开源。

话外音:一般来说,每个成功的开源项目都有一些核心的开发者来完成代码 Merge 管理和协作平衡等工作,不过 GitHub 上却有个非常有趣的项目叫做 ChaosBot( https://github.com/Chaosthebot ),这是一个完全没人干预的社会化项目实验。

项目规则是这样的,首先 Fork 一份代码,然后进行代码修改,提交一个 pull request。如果这个 pull request 在社区里获得了大多数的赞同,这个 PR 就会被自动 Merge,然后 ChaosBot 就自动更新代码并重启自己。如果无法重启就算死亡一次,目前 ChaosBot 已经死亡了 16 次。

这个项目获得了 2471 个 Star。

GitHub 是如何实现这种社会化编程的模式呢?这里就必须说一说 Pull Request 了。

Pull Request

Pull Request 采用了一种精巧的设计,让开发者实现了真正的代码对话:Talk is cheap, show me the code.

很多开发者把 GiuHub 当 Git 用,在账户里建个仓库扔些代码就以为是开源了。如果你没用过 Pull Request 与别人协作过,也没有 Merge 过别人的代码,那就不是个真正的 GitHub 程序员。

什么是 Pull Request 呢?举例来说,比如你写了一篇论文,想找人做 Review,你保留了原本,他拿走了副本进行修改。这里的原本就是仓库,拿走副本的行为就是 fork,然后人家基于副本进行修改和批注,叫 commit,最后把修改好的副本提交给你,这就是一次 pull request。你根据副本内容修正原本,这叫 merge。

程序员们常常管 Pull Request 叫做 PR。一次完整的 PR 过程是这样的:

1、你在使用或参与一个开源项目,想要开发功能或修复 bug,首先要 fork 这个项目的仓库,然后通过 clone 命令得到一份本地代码。
2、创建特性分支,编写代码增加功能或修复 bug 并进行 commit。
3、发起 pull request 给原仓库请求合并。
4、开发者们可以基于这个 pull request 分宾主落座并进行气氛友好祥和的交流,比如「你改错了,你妹改对,你代码这么烂还想 Merge,做梦去吧」等等。
5、如果你竟然改对了,原仓库管理员就会把你的代码 merge 到他的项目里,你就成为了这个项目的贡献者之一。你编写的代码就有可能被全世界的程序员使用,这是社会化编程最大的乐趣之一。

GitHub 的 Pull Request 不但能够轻松查看代码的前后差别,还可以针对每一行代码进行评论和交流,细节一览无余。Code Review 变成了一件充满乐趣的事情,同时开源代码质量也最大程度的得到了保障。

PR 的设计为工程师的协作带来了革命性的变化,这种影响不止在开源世界,很多企业开发自己的商业化产品和服务都采用了这种方式,并做出了惊人的商业成就。

所以,一个优秀的开源项目不仅仅要看它的 Star 数,还要看有多少活跃的 Issue 和多少次 PR。

Issue、Wiki、Pulse、Graphs、Network 等都是 GitHub 的功能特性,不再一一介绍。

GitHub 提供了一种更为开放和自由的编写代码和协作方式,势必吸引更多人的人加入到编程领域,我相信未来一定是个人人懂点编程的时代。

做为一个在技术社区和开源世界受益良多老程序员,有必要在新年伊始,介绍和推荐一下这个优秀的代码社区。

2018年,你加入 GitHub 了吗?


文末推荐:我司举办的 AICon 全球人工智能与机器学习技术大会。

2017年 AI 说的大家耳朵都烫了,2018年 AI 何去何从?对于普通程序员来说,到底有哪些机器学习落地案例了?我们该怎么应对人工智能大潮?

2018年1月13-14日,经过半年筹备,AICon全球人工智能与机器学习技术大会即将于北京开幕,极客邦 InfoQ 团队为大家梳理了目前机器学习领域的最新动态,并邀请到了来自 Amazon、Google、BAT、360、小米、京东等 40+ 公司 AI 技术负责人分享他们的机器学习落地实践经验,颜水成、山世光、老师木等大牛都有现场分享。

大会即将开幕,目前倒计时 9 天进行中,购票页面输入优惠码“MacTalk”,原价门票立减 720 元,或扫描下方二维码购票立减。

最新日程已出炉,可点击“阅读原文”了解详情。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/KVsYxfibQr
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/5077
 
625 次点击