转载自 ---- http://www.geekpark.net/read/view/155317
[核心提示]
社会化的浪潮正席卷整个互联网,在软件开发领域也是如此。社会化是如何改变传统软件开发的?同时,版本控制的理念与开源的精神正通过 GitHub 这样的社会化平台向更多的行业扩展,其未来的影响将不仅仅局限在开发领域。
I
want to live in a world where it’s easier to work together than to work
alone… where every part of the software development process is a joy,
And I think GitHub can help make that happen.
在我理想的世界里,协同工作将比独立工作简单的多。在那个世界中,软件开发会是一个充满欣喜的过程,我认为 GitHub 正在推进这一愿景的实现。
— GitHub CEO Wanstrath
最
近 GitHub 因为两件事成为了媒体的焦点,其一是 Wired 的一篇关于 Github 的文章以 Github 上的 Repository
的形式进行了发行,这让人对 GitHub 未来更广泛的应用充满了期待。其二是一名俄罗斯黑客通过 Ruby on Rail 的漏洞获得了
GitHub 的顶级权限,可以对进入的项目进行随意的操作甚至彻底清空,这在开发者界造成了一场大恐慌,GitHub 的流行度也可见一斑。
作为一个非程序员
的我,第一次开始接触到 GitHub
与
版本控制的概念大概是在 1 年多以前。那会儿我正热衷于研究 Firefox 插件 Pentadactyl
的各种设置,而网上能找到的众多插件和配置文件大都托管在一个名为 GitHub 的网站上。为了能够跟踪最新的插件更新,我关注了众多 GitHub
上的项目和开发者,为了管理方便,我开始学着将自己的插件和配置文件放到这个平台上。这不仅为我的配置文件在云端免费进行了备份,同时需要的时候我还能够
方便的回滚到过去某个时间的某段配置代码。经历过几次数据丢失惨剧的我当时的想法是:“如果早知道这个网站该多好。”我当时认识到的,仅仅是
GitHub 的冰山一角…
GitHub – 不仅仅是版本控制
版本控制
这
个概念本身对于程序员来说并不新鲜,从 1982 年的 RCS,到 CVS、SVN,再到现在流行的 Git、Mercurial
等,但凡有规模的软件项目都会采用某种版本控制系统来追踪文件的变化、处理软件分支、避免版本混乱。只要拥有一台主机,任何人都能很容易的搭建自己的版本
控制服务器。如果仅仅是提供一个支持版本控制的代码托管服务的话,那么其本身并无任何特色可言,但 GitHub 并不局限于此。
GitHub
的理念非常简单:社会化编程。像 Twitter 一样,每个人都可以在 GitHub
上发布自己的各种代码,以时间流的形式展现自己的开发进展,可以关注自己感兴趣的项目和开发者,发表评论,了解其最新的开发动态。但所谓的社会化,还不仅
仅局限于此,GitHub 最重要的特征是以一种社交化、民主化的形式进行代码协作。
GitHub 的社会化编程理念可以说将开源的概念发挥到了极致:由于采用了 Git
这种分布式版本控制系统,所有人都可以对任意一个公共项目简单的进行分支开发,而不会对原项目有任何的影响;可以将自己对于项目的功能改进、漏洞修复、或有价值的代码提交给原开发者,一起对项目进行完善。
项目的派生(Fork)和拉拽请求(Pull Request)构成了 GitHub 最独具一格的工作模式,对提交代码的逐行评注及 Pull Request 构成了 GitHub 特色的代码审核。
GitHub
拥有一个非常鼓励合作的社区氛围。这一方面源于 GitHub 的付费模式:私有项目需要付费,而公共项目完全免费。这意味着 GitHub
上的大多数项目都是开源的,任何用户都有海量的开源项目选择可用来分支学习和贡献代码。GitHub
的项目关注、开发者关注、@回复、个人页面的工作项目信息等社交功能可谓完全为开源项目量身打造,大大的促进了用户之间代码的交流,非常适合于开源项目的
沟通和管理。一个意外的发现是,在很多程序员的简历上,GitHub 的个人页面也已经成为了其一个重要的技能标志,这也鼓励了更多的人积极的加入
GitHub 的开源项目中。
对于大多数开源协作项目来说,这无疑是发挥大众认知盈余
的
最好工具。从 Ruby on Rail 框架、Linux 内核、jQuery 脚本、Homebrew 包管理系统、Bootstrap CSS
框架,在众多明星项目的吸引力作用下, GitHub 已经成为最为活跃的开源社区,就连 Twitter、Facebook 等公司也选择了
GitHub 作为其开源项目的首选平台。
社会化如何改变编程
The
power of GitHub I believe is that it allows programmers to share their
work with their colleagues, learn from others, and work together with
others.
GitHub 的最大优势在于程序员可以与他人分享各自的项目,彼此互相学习,并协同合作。
这段对于 GitHub 最大优势的描述在我看来正好总结了社会化对软件编程带来的最大变化。
1.更好的分享已有的代码和算法
很
多时候,我们并不需要从头去重建一套问题的算法,开放的社会化网络为我们寻求现有的解决方案提供了一个极佳的发现渠道。像
jQuery、PhoneGap、Appcelerator’s Titanium 等这样的框架为 Web、App
开发带来了无比的便利,而它们就是从 GitHub 这样的社会化平台上成长起来的。
2.为开发者提供一个最好的成长平台:
像
所有成功的社交网络一样,GitHub 上早期聚集的众多优秀的项目产生了一种网络效应,吸引到更多的项目加入 GitHub
中来。对于入门者来说,这是一个最好的提高自己技能的平台。GitHub
的开放、社会化属性让用户倾向于关注更多的项目、查看更多的代码,看到一个优秀项目是如何一步步成熟的,而这正是开发者成长中相当重要的一个环节:查看优
秀的代码,学习其他开发者如何解决特定的问题,了解一个项目该如何扩展。
就像一本好书一样,查看其他开发者如何解决某个问题的代码可以给我们带来很多启示,为我们提供很多我们也许都没有意识到的解决方案。GitHub 这样的社会化编程平台能够不断为我们带来惊喜。
3.民主化的代码分支与派生:
在传统的开源项目中,对代码进行分支并不是一件得到鼓励的事,Linux、Unix、Android 都是分支过多造成系统分裂的典型例子。在很多项目中,要想对项目进行某个分支,必须征得项目管理者的正式同意才能进行。
而
在 Git 这样的分布式版本管理系统中,每个用户在本地都可以拥有项目的全部代码和修改历史,开发者无需任何批准即可实际进行代码分支开发并 Push
到自己的分支项目中去。如果自己的分支取得了预想的效果,用户可以将变动的代码向原始开发者进行提交请求,而原始开发者可以对这一分支的实际效果进行评
估,确定代码的有效性后合并入主开发线,而不用担心第三方的无组织分支会对项目本身造成危害(这一过程被成为 Pull Request)。这使
GitHub 上的第三方开发者用户对修改和分支现有项目的积极性得到了大大的提高。
如
果我想增加一个新功能,或者想修改代码,我会将代码 Push 到一个新分支,并且新建一个 Pull
Requests。如果我的代码会影响我同事的代码,或者他们对我的代码感兴趣,或者他们时间充裕的话,他们可以查看我的代码。这时我们可以将那个分支发
布到其他机器上,调试新功能,如果一切正常的话,就可以将这个分支合并到主分支去。
— GitHub 员工 Zach Holman
社会化编程 – 不仅仅是程序员的福音
对
于包括 Linux 创始人 Linus Torvalds 等开发者来说,他们的项目对于代码的质量要求非常苛刻,在他们看来 GitHub
带来的更多的是垃圾代码的剧增,并不具有太大的价值。但对于更多资源有限的开源项目来说,更民主化的社会化开源运动为其带来的则更多的是优秀程序员的更大
的贡献。
如果认为 GitHub 这样的版本控制及社会化平台仅仅是程序员的福地,那我们又错了,人们已经开始发掘出 GitHub 能够用于的其他创造性用途。在本文开始提到的 Wired 杂志于 GitHub 上的实验文章项目
里,读者可以自由的进行代码分支、内容更新、翻译,并把结果向 Wired 进行提交;Scott Chacon 在 GitHub 上托管了一本关于 Git 的书籍 Progit
,
在发布的一个月内就开始有分支出现,三年后的现在,这本书已经拥有 647 个分支,被翻译成 10 种语言,另有 10
种语言的译本正在进行中。(有趣的是,作者提到这本书一半以上的流量来自于中国,“无数的中国人因为这本书的中文译本开始学习
Git。而这一切之所以可能,也是因为有人利用 GitHub 的分支提供了本书的中文翻译。”)
版本控制的理念与开源的精神正意外的通过 GitHub 这样的社会化编程平台向更多的行业扩展,其未来的影响必将远远超越其起源的开发领域。
分享到:
相关推荐
在Git的基础上,GitHub提供了一个在线平台,让开发者可以托管项目、进行版本控制、协作开发,同时也引入了社会化编程的概念。GitHub允许开发者创建、分享、讨论和改进代码,推动开源软件的发展。 书中首先会介绍Git...
译者序中提到的“社会化编程”概念,即通过GitHub这样的平台与全世界的开发者进行交流合作,这不仅对开源软件的贡献者重要,也能给企业带来新的工作模式和创新思维。 《GitHub入门与实践》作为一本全面介绍GitHub...
GitHub是一个基于Git的代码托管平台,它在开源软件领域带来了革命性的变化,推动了社会化编程的概念。Git是一种分布式版本控制系统,能够跟踪文件和目录的变化,使得多人协作开发变得容易且高效。GitHub则在此基础上...
- 开源项目:GitHub上有许多活跃的开源项目,如Angular、React、Vue等前端框架,Linux操作系统,Docker容器化平台等,通过参与这些项目,开发者可以提升自己的技能并贡献社会。 - 代码分享社区:如LeetCode、...
正是 Github,让社会化编程成为现实。本文尝试谈谈GitHub的文化、技巧与影响。 Q1: GitHub 是什么 Q2: GitHub风格 Q3:在GitHub,如何跟牛人学习 Q4:享受纯粹的写作与演讲 Q5:代码帮你找工作 Q6:GitHub还在影响一些...
正是 Github,让社会化编程成为现实。本文尝试谈谈GitHub的文化、技巧与影响。 Q1: GitHub 是什么 Q2: GitHub风格 Q3:在 GitHub,如何跟牛人学习 Q4:享受纯粹的写作与演讲 Q5:代码帮你找工作 Q6: GitHub还在影响一些...
#### GitHub:一个学习与分享的平台 GitHub作为一个全球性的开放式社区,吸引了超过1500万用户,并创建了超过3600万个存储库。这些存储库涵盖了各种各样的项目和技术栈,为个人和团队提供了丰富的学习资源。然而,...
1. **代码托管服务历史**:源代码管理工具历经CVS、SVN到Git的演变,随着开源文化的普及和社会化编程需求的增加,Github在全球范围内的崛起,催生了国内代码托管网站的发展。 2. **早期的国内服务**:如svnchina....
6. **接口设计**:为了方便与其他系统集成,IMODE可能提供API接口,允许用户通过编程方式调用其功能。 7. **测试与验证**:源代码中应包含测试用例和验证机制,确保算法的正确性和稳定性。 学习和研究IMODE的源...
**基于Python语言的初中趣味编程课程的设计与研究** 在当今数字化时代,计算机编程教育逐渐成为...通过这样的课程,不仅能让初中生掌握编程技能,还能培养他们的创新思维和问题解决能力,为未来的科技社会做好准备。
Stata是一款广泛使用的统计分析软件,尤其在社会科学领域颇受欢迎。 “模块”通常在编程中指的是可重用的代码单元,这里指的可能是Stata的自定义命令或功能,它们被组织成独立的包,以便于用户下载和使用。这些包...
它支持多种编程范式,包括过程化编程、面向对象编程和泛型编程。C++广泛应用于系统编程、游戏开发等领域。 ##### 为何要选择纯C 学习纯C有助于你理解编程的基本概念,如指针、内存管理等。这对于想要深入了解底层...
- **解决问题**:编程能力可以帮助我们更高效地解决生活和工作中遇到的问题,无论是数据分析、自动化任务还是开发新应用。 - **创造力发挥**:通过编程,个人可以将自己的创意转化为现实,开发出独特的软件产品或...
集体智慧编程是一种新兴的软件开发方法,它借鉴了生物界和社会中的集体行为概念,通过大量个体的协作来解决复杂问题。这种方法强调的是群体的多样性、交互性和自组织性,而不是依赖于单一的专家或者权威。在集体智慧...
2. **Stata编程**:Stata是一种广泛应用于社会科学、医学研究和经济学的统计软件。其强大的数据处理和统计分析能力吸引了众多研究者。通过结合Github API,Stata用户可以直接在自己的工作环境中获取和运行他人分享的...
调解模型是社会科学研究中常用的一种统计分析方法,它帮助研究人员理解中介变量如何影响因变量与自变量之间的关系。 调解模型通常包括三个关键部分:自变量(X)、中介变量(M)和因变量(Y)。在这个模型中,自...
综上所述,"renleishengao.github.io"项目涉及了JavaScript编程、数据收集与爬虫技术、数据分析与可视化、以及社区建设等多个IT领域的知识。通过这个项目,我们可以学习到如何利用技术来处理和展示实际世界的数据,...
- **定义**: 爬虫开发是指利用编程技术自动化地从网页上获取数据的过程。它通常涉及对HTML、XML等网页格式的理解与解析,以及对网络请求的发送与接收。 - **应用场景**: 爬虫开发广泛应用于数据收集、市场调研、...
【描述】"pandemicphysics.github.io" 的描述没有给出具体信息,但根据网站名,我们可以推测其内容可能涵盖了利用物理原理和方法来解释和预测疫情的发展,比如病毒传播的动力学、社会互动对传播的影响等。...