正是 Github,让社会化编程成为现实。本文尝试谈谈 GitHub 的文化、技巧与影响。

  • Q1:GitHub 是什么
  • Q2:GitHub 风格
  • Q3: 在 GitHub,如何跟牛人学习
  • Q4: 享受纯粹的写作与演讲
  • Q5: 代码帮你找工作
  • Q6: GitHub 还在影响一些什么
  • Q7: 除了 GitHub,还可以选择什么?

Q1:GitHub 是什么

A1:一家公司

位于旧金山,由 Chris WanstrathPJ Hyett 与 Tom Preston-Werner 三位开发者在 2008 年 4 月创办。迄今拥有 59 名全职员工,主要提供基于 git 的版本托管服务。

在此之前,它是由 Tom 与 Chris在本地程序员聚会中,开始的一个用于托管 git 的项目。正如每个伟大的传奇都开始于一场冒险,Tom 在这篇文章我如何辞掉微软 30 万年薪邀约,创办 GitHub 中谈到:

当我老去,回顾一生,我想说,“哇,那是一场冒险“;而不是,“哇,我真的很安稳。“

另一位创始人 Chris 也详细描述了 GitHub 初创的前因后果,他说道:

Do whatever you want.

于是,在 2008 年 4 月 10 号这一天,GitHub 正式成立。

目前看来,GitHub 这场冒险已经胜出。根据来自维基百科关于 GitHub 的描述,我们可以形象地看出 GitHub 的增长速度:

今天,GitHub 已是:

  • 一个拥有 143 万开发者的社区。其中不乏 Linux 发明者 Torvalds 这样的顶级黑客,以及 Rails 创始人 DHH 这样的年轻极客。
  • 这个星球上最流行的开源托管服务。目前已托管 431 万 git 项目,不仅越来越多知名开源项目迁入 GitHub,比如 Ruby on Rails、jQuery、Ruby、Erlang/OTP;近三年流行的开源库往往在 GitHub 首发,例如:BootStrapNode.jsCoffeScript 等。
  • alexa 全球排名 414 的网站。

Q2:GitHub 风格

A2: GitHub 只是 GitHub

强调敏捷开发与快速原型,而又的确成功的创业团队,常具备一个重要气质:有自己的文化风格。如 GitHub,又如37signals。通过他们的快速开发,向用户证明了团队在技术上的能力,并且时常有惊喜。同时,通过强调特立独行的文化,将对半衰期过短的产品族群的信任转为对 GitHub 团队的信任。

Gravatars 的创始人(对,就是互联网最流行的头像托管系统)、Jekyll(对,它就是我近几年用的博客系统)作者、GitHub 创始人,现任 CTO Tom 在 GitHub 第一年学到的 10 大教训创业学校演讲中谈到 GitHub 文化的方方面面。我尝试将这种风格总结为以下要点:

  • 专注创作,高创意
  • 运营良好与较高的内外满意度
  • 高利润,较低的融资额或零融资

创业公司多半死在钱上,就让我们先从钱谈起:

高利润,较低的融资额或者零融资

类似于 GitHub 这样的公司,拿到风险投资很难吗?恰恰相反,创始人 PJ Hyett 在 Hacker News 的一篇评论中提到,自从 GitHub 创办以来,已与几十个 VC 沟通过。但是,直到今天,GitHub 的融资额还是为零,并引以为豪。让我们看看 GitHub 官网的自我介绍:

运营良好与较高的内外满意度

在 Quora 上有人问道,GitHub 是否寻找被收购?,还是 PJ Hyett ,他的回答是:No。

GitHub 从一开始就运营良好,员工拥有较高满意度,看看这些不太一样的做法:

  • 每一位 GitHub 公司的新员工,官方博客将发表文章欢迎。
  • 在 GitHub 内部,没有经理,需求内容与优先级由项目组自行决策。
  • 选择自己的工作时间、工作地点。
  • 员工来自开源社区。
  • 能开源的尽可能开源。

富有激情、创意的员工使得 GitHub 得到了社区的广泛认同,从而拥有极高的客户满意度,并从创业一开始就盈利。一份早期的调查表明,GitHub 很快成为 Git 托管首选。

专注创作,高创意

GitHub59 名全职员工仅有 29 名员工在本地工作!不仅仅是工作地点的安排富有创意,GitHub 员工Holman, 详细介绍了 GitHub 的工作方式:

  • 时间并不能说明什么
  • 异步工作方式
  • 创造力很重要

Q3:在 GitHub,如何跟牛人学习

A3:在学习区刻意练习

追随牛人,与他们一起修行

修行之道:关注大师的言行,跟随大师的举动,和大师一并修行,领会大师的意境,成为真正的大师。

正如这首禅诗所言,与其在墙内仰望牛人,不如直接在 GitHub:

  • watch、fork 牛人们
  • 对他们的项目提交 pull request
  • 主动给牛人们的项目写 wiki 或提交测试用例,或者问题
  • 还可以帮他们翻译中文

GitHub 本身建构在 git 之上,git 成为勾搭大师们的必要工具,以下读物成为首选:

如果希望进一步深入,可以阅读已有中文翻译版的材料:

同样,如果希望了解更多 GitHub 自身的知识,GitHub 官方文档值得推荐:

牛人在哪里?

关于学习的心理学研究,常常会谈到一个术语:元认知、元学习、元知识。是的,关于认知的认知、关于学习的学习、关于知识的知识,你对这些信息的偏好与熟练掌握,会让你在学习一门新东西时更加轻车熟路。对一手信息进行回溯,比如作者、创始人、最初文献出处,总是会让你更容易理解知识。

在学习区刻意练习:借助 GitStats 进行项目统计

如何学习一门新的编程语言?——在学习区刻意练习中,我已谈过:

学习编程最好的方式是在学习区刻意练习。

如何进行自我监督?

借助于 GitStats,我们能很好地统计自己的每个项目的工作量,从而看到工作进展。

用法如下,

#复制 GitStats 项目到本地 cd ~/devgit clone git://github.com/trybeee/GitStats.gitpython ~/dev/gitstats/git-stats /youproject public

以下为生成结果示范:

每周代码提交次数:

每天代码提交行数:

如果 Fork 别人的项目或者多人合作项目,最好每人都拥有一个独立分支,然后由项目维护人合并。如何建立自己的分支?

# 分支的创建和合并# git branch yourbranch # git checkout yourbranch 切换到 yourbranch# 开发 yourbranch 分支,然后开发之后与 master 分支合并# git checkout master# git merge yourbranch# git branch -d yourbranch 合并完后删除本地分支

如何将牛人的远程分支更新到自己的本地分支?

# 查看当前项目下远程# git remote# 增加新的分支链接,例如 git remote add niuren giturl…# 获取牛人的远程更新 git fetch niuren# 将牛人的远程更新合并到本地分支 git merge niuren/master

生产力小技巧

codeshelver:给 git 库做标签

观察的项目如果多了,怎么管理?用 codeshelver,安装扩展之后,可以对 GitHub 项目做标签。

gollum:利用 git 与 github 做 wiki

gollum 是一个基于 git 的轻型 wiki 系统。

GitHubwatcher: 监测重点项目

GitHubwatcher 适用于通知不频繁的情景。

GitHub 官方资源

GitHub 官方列出了一些有用的脚本与书签

社区驱动的安装与配置文件

GitHub 中各类配置文件层出不穷,一些常用的:

  • osh-my-zsh:将终端从 bash 改为 zsh 之后,可考虑安装社区驱动的 zsh 配置文件,含有多个插件。可参考旧文 zsh 与 oh-my-zsh
  • gitignore:GitHub 官方出品
  • yourchili:服务器各类安装 shell,比如安装 nginx 等。

Q4: 享受纯粹的写作与演讲

A4:回归创作的初始

写作

早在 2008 年,就有技术图书作者通过 Git 来写作,以下是示范:

你能想到的技术前沿话题,大多能在 GitHub 找到相应的培训材料或者开源图书。

个人写作照样适用。在前文理想的写作环境:Git+GitHub+Markdown+Jekyll,我已经格外赞美过这些美好事物了。

暖色调的灯光,足够宽度的工作台,听着清脆的键盘声音,基于 Git、GitHub、Markdown 与 Jekyll 来写作,不担心写废与排版,只关注最纯粹的写作,是一种享受。我有时候会想,如果 Git、Github、Markdown、Jekyll,再加上 Yaml、Json 的作者,让这些作者们重新来设计今天互联网基础架构偏文本的部分,会诞生一些什么?

个人博客

借助于 Jekyllbootstrap,可以在 Github 上快速搭建一个基于 jekyll 的博客系统。

除了这个简单易行的办法之外,还存在一些其他方法,例如:

演讲

借助于 GitHub,可以享受更纯粹、更酷的演讲。GitHub 2011 年收购 Ordered List 之后,从此可以通过speakerdeck 更好的分享 ppt 文档。

我们还可以:

  • 使用 GitHub 著名传教士、Progit 作者 Scott Chacon 开发的 showoff
  • 来自开源社区的其他演讲库 impress.js

Q5: 代码帮你找工作

A5:GitHub 简历很诚实

NumEricR(非 GitHub 工作人员)基于 GitHub Pages 功能做了一个简历生成器,使用极其简单,登陆网站 GitHub 简历生成器,填入你的 GitHub 网站用户名即可。

fredwu 是 Ruby 中文社区活跃份子,他的开源项目 angel_nest,一个天使投资与创业者对接的网站,适合 Ruby 初学者升级为 Ruby 中级开发者时学习,也在 Hacker News 上被热烈讨论过,让我们来看看他的简历:

http://resume.GitHub.com/?fredwu

正是因为 GitHub 上的代码无法造假,也容易通过你关注的项目来了解知识面的宽度与深度。现在越来越多知名公司活跃在 GitHub,发布开源库并招募各类人才,例如:FacebookTwitterYahoo ...

开始有了第三方网站提供基于 GitHub 的人才招聘服务,例如:

  • GitHire:通过它,可以找出你所在地区的程序员。
  • Gitalytics.com:通过它,能评估某位程序员在 GitHub、LinkedIn、StackOverflow、hackernews 等多个网站的影响力。

Q6: GitHub 还在影响一些什么

A6:让计算机增强人类智慧

很多年前,在某个名声显赫的学府中,两位先后拿过图灵奖的牛人有一段对话:

  • 牛人A:我们要给机器赋予智慧,让他们有自我意识!
  • 牛人B:你要给机器做那么多好事?那你打算给人类做点什么呢?

这段对话来自《失控》。牛人A是明斯基,他最喜欢将人类看做有血肉的机器,他的框架理论成为认知心理学、人工智能入门基础。牛人B则是恩格尔巴特。当明斯基 1961 年发表他著名的文章人工智能走向时,恩格尔巴特还籍籍无名。直到次年,恩格尔巴特发表宏文:人类智力的增强:一种概念框架。提出不同于明斯基的另一条增强人类智力的道路:不要尝试发明自动打字的机器,而是尝试发明鼠标,并且他真的发明鼠标成功了!

从近些年的发展来看,仍然是明斯基占上风,但是,三十年河东,三十年河西,明斯基的人工智能方向又有多少年没有大突破了?相反,来自恩格尔巴特的群件、集体智慧等思想,逐步成为步入 Web2.0 时代之后的共识。无关对错,可以说,恩格尔巴特为增强人类智力,提供了可行的框架。与其去发明聪明的、昂贵的、功能一体化的智能机器人,还不如发明类似于鼠标这样笨笨的、廉价的、功能单一的人类智慧服务单件。明斯基的机器人很容易陷入死胡同,没有上升到哲学的高度。现在慢慢又回到恩格尔巴特这个方向来了。比如现在 IBM 开始宣传认知计算

从 git 与 GitHub 设计与解决的问题本质来看,明显加速了代码生产流程,促进了卓越智力产品的诞生。这就是一种典型的 web2.0 对智力生产流程的改良与人类智慧的增强。同样,某种意义上,小说写作网站也起到类似作用。但是,学术界尤其是社会科学类的智力产品生产似乎还停留在一个古老阶段。在开源领域,好想法层出不穷,极客影响极客,最终产生的是酷玩意。这些酷玩意抛弃浮华,直奔问题本质。那么,有没有科学界的 GitHub?

类似问题层出不穷,以下为其他领域产品不完全名单。

学术研究

数据

科学计算

  • opani:雏形中,支持R、Python 等多种。

教育

  • OpenStudy:一个社会性学习网络,通过互助来更好地学习,主题涉及到计算机、数学、写作等。
  • openhatch: 通过练习、任务等帮助新手更好地进入开源社区

Q7:除了 GitHub,还可以选择什么?

A7:nil

因为进化的需要,多数裸猿存在选择强迫症:哪种程序语言更好?哪个 web 开发框架更好?当然,最令宅男技术男们羡慕的问题是,高白瘦御姐还是青春小萝莉好?:D

除了 GitHub 之外,

  • 中国山寨品是不是更好?(为什么不写他们名字,你懂的,山寨品总是善于争论谁是第一个山寨的,各自的排名先后:D)
  • 免费的 BitBucket 是不是更适合 Python 程序员?
  • 作为一名折腾族,我不自己搭建一个 gitlabhq,是不是对不起自己?

我们可以理解,正是因为无数条分岔路口,让人类不再受制于某种基因、特定疾病、独裁家族,从而拥有无限的可能。但是,这种选择强迫症与远古时代可怜的信息量相比较,

  • 今天这个大数据时代,它还会有助于人类作为族群的整体进化与作为个体的幸福吗?
  • 今天一位一线城市 30 岁大学毕业生经历的选择与孔子整个一生经历的选择,纯论数量,谁多谁少?

生命如此短暂,为什么总要将青春浪费在不断的选择之中呢?罚你,回头阅读心理学家施瓦茨(Barry Schwartz)的 TED 演讲:选择之困惑——为何多即是少,1 百遍啊 1 百遍。请记住施瓦茨的演讲要点:

  • 更多的选择不代表更多的自由;
  • 更多的选择导致决策的延迟和降低的满意感;
  • 快乐之秘诀,在于降低自己的期望值。

如何高效利用 GitHub的更多相关文章

  1. 如何高效利用github提升自己

    作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户,是开发者打开程序开源大门的一扇窗口,也是开发者快速提升自己的一个重要途径.本文将从两个方面介绍github的使用方式. 和逛微博 ...

  2. [No00005D]如何高效利用GitHub

    原文地址:http://www.yangzhiping.com/tech/github.html 正是Github,让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHu ...

  3. 如何高效利用GitHub

    是Github,让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHub是什么 Q2:GitHub风格 Q3: 在GitHub,如何跟牛人学习 Q4: 享受纯粹的写作与演 ...

  4. 【转】如何高效利用GitHub——2013-08-28 22

    http://www.yangzhiping.com/tech/github.html  正是Github,让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHub是什么 ...

  5. 怎样高效利用GitHub(非常多资料可供下载)

    正是Github.让社会化编程成为现实.本文尝试谈谈GitHub的文化.技巧与影响. Q1:GitHub是什么 Q2:GitHub风格 Q3: 在GitHub.怎样跟牛人学习 Q4: 享受纯粹的写作与 ...

  6. 转: 如何高效利用GitHub

    注:写了很多使用哲学,有意思 from: http://www.yangzhiping.com/tech/github.html

  7. 高效使用github

    下面两个资料是我在github上面整理出来的repo,不断进行更新,将遇到的有帮助的文章尽量整理到上面,方便初学者也方便回顾学习.如果恰好你也有一些资料文章,欢迎fork - modify - pul ...

  8. 从 0 到 1 合理高效使用 GitHub 的资料

    来自:https://github.com/xirong/my-git/blob/master/how-to-use-github.md 说明 作为一名开发者,Github上面有很多东西值得关注学习, ...

  9. 利用github pages创建简单的网站

    github.com 作为最流行的源代码管理工具已经风靡全球,同时在依托于github也衍生出了各种各样的应用,比如可以利用github搭建博客系统等等. 先换个话题,我们每人手头都或多或少有些&qu ...

随机推荐

  1. HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)

    Jam's problem again Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. EF批量添加,删除,修改的扩展

    在EF各版本中,没有相应批量的添加,删除,修改,在用ORM 处理数据时直有个尴尬.在网上,也接到了很多网友的询问这方面的情况,特此今天把这方面的相关扩展分享一下,(这里只做批量删除的例子,添加和修改的 ...

  3. MTA---smtp(25,postfix,sendmail),Pop3(110,Devocot), MUA(foxmail) IMAP(server,client rsync)

    利用telnet进行SMTP的验证 =========先计算BASE64编码的用户名密码,认证登录需要用到=========== [crazywill@localhost crazywill]$ pe ...

  4. CMDB内功心法,助我登上运维之巅

    很多70.80后甚至90后都在金庸.古龙.梁羽生先生等武林大家熏陶下成长的,这么多年过去了,我的武侠梦依然不曾散去.曾几何,梦想有一天练就一身绝学,搂着小师妹花前月下,仗剑走天涯,快意人生.可每次的酣 ...

  5. (2.12)Mysql之SQL基础——存储过程条件定义与错误处理

    转自:博客园桦仔 5.存储过程条件定义与错误处理 -- (1)定义 [1]条件定义:declare condition_name condition for condition_value;[2]错误 ...

  6. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  7. R语言基本语法

    R语言基本语法 基本数据类型 数据类型 向量 vector 矩阵 matrix 数组 array 数据框 data frame 因子 factor 列表 list 向量 单个数值(标量)没有单独的数据 ...

  8. sprintf函数的用法

    说明1:该函数包含在stdio.h的头文件中,使用时需要加入:#include <stdio.h> 说明2:sprintf与printf函数的区别:二者功能相似,但是sprintf函数打印 ...

  9. 限制可编辑div只能输入纯文本

    本博客转载自张鑫旭大神的一篇文章:小tip: 如何让contenteditable元素只能输入纯文本,原文地址:http://www.zhangxinxu.com/wordpress/2016/01/ ...

  10. (10)场景转换(Transitions)

    Cocos2d-x最爽的一个特性之一就是提供了在两个不同场景之间直接转换的能力.例如:淡入淡出,放大缩小,旋转,跳动等.从技术上来说,一个场景转换就是在展示并控制一个新场景之前执行一个转换效果. 场景 ...