Github

文 / github 创始人 Tom Preston-Werner,写于创办 github 的第一年

年末最适合像这样,拿杯最喜欢的饮料,调暗灯光,舒舒服服的靠在火炉旁边,想一想在过去的十二个月里你学到了什么。

对我来说,2008年,我参与设计、开发和运营了github。办一家创业公司是一个充满激情的学习机会。从各种成功与失败中,我学到很多非常有价值的东西,下面是其中的一些。

尽早开始

2007年末,当我和Chris开始着手github相关的工作时,git还是个不太知名的版本控制系统。当然,Linux内核开发者们从git的第一天就开始使用它们,但除此外,很难再遇到一个经常使用它的开发者。我第一次了解到git是经我的好朋友Dave Fayram介绍的,他是我在Powerset时的同事。他是我了解的最早采用git的人,是ruby和其它社区中推广git的第一人。

回想那时,git的前景并不明朗。直到1.5版,git才能被一般人所使用。至于git主机,那个时候仅有repo.or.cz,在我看来它非常有限,笨拙,且设计的很矬。那时还没有一个商业化的git主机供选择。尽管如此,人们已经开始在ruby的聚会上谈论git,说它有多么多么棒。人们对git寄予厚望,希望它成为杀手级的分布式代码管理工具,但如何安全地共享私有代码,却一直存在问题。当时唯一的选择就是在Unix系统上建立账号,作为一种专用解决方案,这并不理想。

github由此而生。在它诞生之初,世界上还不存在付费git主机这样一个市场。我们正在建立这个市场。我记得我告诉别人,“我并不期望github马上就能成功,git的广泛采用需要一段时间。但当这个时刻到来时,我们已经准备好。”Chris和我都不急于求成。那时我还在Powerset做全职的工作,而Chris则做Rails顾问挣了不少钱。这使得我们能够在闲暇时不需要日常开支、没有竞争地去创办一家创业公司,去做这样一种新兴的技术。

适应你的用户

倾听你的用户,但别让他们指挥你。这条建议看起来是有些矛盾,让我来解释一下。

假设用户提出一个功能需求说“Github应该能让开发者用FTP为项目建立一个文档站点”,其实用户的真正想表达的是“我需要一个简单的方式给我的项目添加文档。”人们总是习惯于既有的东西,于是用户用他最熟悉的方式提出需求。我们当然也可以实现一个基于FTP的可怕的方案,但我们看的深入一点,明白了用户的潜在需求,所以我们的方案是:只需简单的推送一个git仓库到你的账号上,就能发布文档内容。既满足了功能需求,又不失优雅。

还有一家能在本质层面上理解这个概念的公司就是Apple。我敢肯定曾经有很多人想要Apple做手机,但Steve Jobs和他的团队们看得更透彻,发现人们真正想要的是:一个漂亮的、易用的、易同步的、“杀手级”的移动设备。这就是秘密所在:不要给用户所要求的,给他们真正需要的。(译注:这句原文是Don’t give your customers what they ask for; give them what they want. 原句太过精辟,鄙人的翻译有些失色。)

享受快乐

我在加利弗里亚的一所名叫Harvey Mudd的很小的学校上的大学。哈,我就知道你没听说过!如果你还记得高中时困扰你的《美国新闻与世界报道》的“最好的学院”那种书(好吧,也许你们一点也不困扰,但是我确实如此。),那么你应该记得,Harvey Mudd被排在工科院校,每天晚上都有N小时的海量的课后作业。是的,比麻省理工学院还多,比加州理工学院还多!就我所知,这是千真万确的。像古怪又复杂的让我崩溃的“质量弹簧阻尼器系统”,以及计算“绕在圆桶上的双螺旋线上的磁通量”等,至今仍然是美妙的回忆。我们当时学得很努力,非常努力。同时,我也们玩得很努力,那是当时唯一没让我们疯掉的东西。

创业正是如此,它有点大学。尽管你做着极其困难的项目,但你有最好的朋友合作,并且你乐在其中(通常情况下)。两种情况下你都得狠狠的玩,让生活平衡。崩溃是非常现实和危险的现象。一个好玩的、有创造力的环境,对你的个人健康和公司健康都是非常关键的。

留意twitter

我发现twitter是极其有价值的即时的信息反馈渠道。如果网站因某种原因变慢了,twitter会告诉我;如果网站在某些国家不能访问了(嘿,中国,说你呢),我会通过twitter知道;如果我们刚上线的新功能非常棒,在浏览twitter搜索时我将会非常得意。

人们有个癖好,一看到你网站上任何的小bug,他们都会在twitter上叽叽喳喳,通常还会加一句让人讨厌的“失败!”。这些信息读起来是挺烦人的,但汇总起来却值得你注意。时常这类看似无意的twitter信息会告诉你一个bug是否值得加到我们的最终修复名单里。我们在twitter上创建了一个github的账号,并有技术支持人回应twitter上的负面评论。通过提供这样水准的服务,几乎总是能把客户从怨言不断转变成开心。

如果你有一部iPhone,我强烈推荐推荐你用Fanzter公司的Summizer。它让twitter的搜索、浏览、回应变得简单轻松。

随意部署

在第一届RailsConf上,我很高兴听了Martin Fowler非常棒的主题演讲。他用了一些非常恰当的隐喻来阐述敏捷开发,现在我将拙劣的演绎一下。

假设你接到一项任务,制造一种由计算机控制的能精确打击50米左右的目标的枪。这是唯一的需求。一种方法是制造一种复杂的机器,在射击前测量每一个可能的影响因素(风,海拔,温度……),然后再瞄准和开枪。另一种方法是制造一种简易的机器,能快速的射击并检测是否击中目标,然后根据上一枪的结果来调整下一枪,使它每次射击都向目标更接近。

两种方法的不同点,在于后一种方法意识到子弹很便宜。采用第一种方法的人刚刚完善风速测量仪时,第二种方法的人已经把武器制造完毕并且击中目标了。

在Web开发中,提供理想的网站的就是你的目标,网站部署就是你的子弹,用户就是你是否击中目标的反馈装置。提供Web服务的第一年,你的用户大多是些早期用户,他们乐于看到每周推出的新功能 。只要这些功能很贴心,即便导致了一些故障,他们也会轻松的原谅你。在github的早期,我们甚至在一个下午里部署了10次,每次都一点点地向目标靠近。

好好的利用第一年,因为一旦一些重要客户涌来时,你不得不非常小心的避免流弹误伤他们。这个游戏到后来,布满故障和补丁的部署就等于是金钱的损失,你不得不更多的依赖第一种方法中的设备,在射击之前详细的检测。

你不需要办公室

所有四位全职的github的雇员都在旧金山地区工作,我们仍然没有办公室。但我们也不是完全依赖网络在工作。事实上,每周总有几次你会在North Beach的一间咖啡馆里看见我们,坐在一个方桌和古旧的折叠式白板周围。这不是google campus,这里的租金实在是便宜的太多,而且饮料也很不错!

这并不是说我们没有找过办公室,奶奶的,实事上我们曾经差点租下一间酒吧。但最终,我们觉得没必要急着稳定下来。我们会等,直到我们找到完美的办公室。在那之前,我们可以把省下来的钱投入到公司中,或者揣自己兜里。至少现在,我还挺喜欢我的沙发和那间咖啡馆。

当然,如果没有37signals的Campfire的网络聊天软件,和非常难找到但却绝对好用的Propane OSX桌面应用容器的锦上添花,我们也不可能做得到。两个软件我都强烈推荐。

在开源社区中招聘

在github的三位合伙创始人之外,我们招聘了一个全职的开发人员(Scott Chacon)和一个兼职的技术支持专家(Tekkub)。

我们雇用Tekkub的原因是,他是github最早的一批用户之一,并且很活跃的维护着超过75个项目,在github的早期他非常踊跃的给我们反馈信息。他甚至会在聊天室里帮助别人,仅仅因为他喜欢。

我遇到Scott是在旧金山的一次ruby线下聚会里。他当时正在展示他无数以git为核心的项目之一。Scott使用git比屋子里所有人都早。他当正着手实现一个纯ruby的git,与此同时,我正在搞我的基于fork/exec的git绑定。我很清楚,事情接下来会是,他要么成为一个的强力盟友,要么成为一个危险的对手。幸运地是,我们之后去喝了一杯,并且成为了朋友。此后不久,Scott开始咨询我们,并且完成了现在大家知道的gist的整个后端。我们明白应该花任何代价去全职地雇用Scott。这完全不需要面试和介绍,我们已经知道所有我们想了解的,于是毫无保留的给他提供了一个职位。

这里我学到的是,基于过去相关经验来招人远比基于对他的预期表现招人更容易,也更少风险。这也有一个必然的推论:如果你想为初创公司(或者这类人)工作,向与之相关的社区贡献力量吧。用你的时间和代码来证明,你是这个工作的最佳人选。

相信你的团队

在我看来,没什么比“微管理者”(译者注:事无巨细都要插手的事儿妈!)更讨厌了。五年前我做图形设计顾问的时候,我的一个客户是一个非常“柏拉图”的微管理者。他让在他办室里里屋的一台老Mac旁边,设计标签、分类和润色泳装模特的照片(这部分倒不坏!)。而当我工作时,他会走过来汪汪汪地叫他的指令,“太红了!你能把文字弄小点吗?把这儿的瑕疵弄掉!”,绝对让我崩溃。

其实这个客户完全可以在一天开始时交给我这个任务,然后去做自己的事,6个小时后再回来。比起把我当作将他的话转换成photoshop操作的机器人,我肯定会设计的更好,并且快两倍。他这样对我,等于是忽视我的设计能力,完全浪费彼此的钱和天份。

微管理其实是一种缺乏信任的病,治疗它的办法就是雇用专业人士并且相信他的判断。在创业公司里,你能用微管理急剧的减缓发展势头,你也能通过给予信任来增强发展势头。当一群有天份的人聚在一起,互相信任,决定做一件大事时,发生的事情一定让你惊喜。

你不需要风险投资

关于风险投资领域的变化最近已经写了不少。这个话题上,我并不想装作一个专家,但我确实已经学到足够多的东西,我能说,一个像我们这样的web创业公司的成功其实不需要任何外部投资。我明白这一点,因为到目前为止我们还没有拿过投资者的一毛钱。我们用几千美元启动了这家公司,在我们向公众开放并收取订金时,我们已经在赚钱了。

最后,所有的创业公司都是不一样的,决定外部投资是否有用的唯一的人就是你自己。可能会有一百万个理由让你去寻找和接受风险投资,但你得确保这是你的最佳利益所在,因为很可能你并不是真的需要它。我辞掉上一份工作的原因之一,就是我可以说“责任到此为止”(译注:原文是The buck stops here,大意是“不必在把责任推到其它地方了,我会负起责任”,有点像“古文观止”的意境,没想到一个非常贴切的翻译。),如果我们接受风险投资,我们就再也不能这么说了。

尽可能的开源

为了让github跟git仓库连接起来,我创建了第一个ruby的git绑定。事实上,这个库已经变得非常完整,于是我们面临一个选择:我们要将它开源吗?或者一直留在我们手里?两者各有利弊。保持私有意味着基于ruby的git主机竞争者的会有较高的技术壁垒,这对我们有利,但开源又意味着……

作者注:这就是文章的结尾,一直没动,直到今天。不久的将来,我打算写一个续篇来说一下github的开源哲学。我可以肯定,这个“不久的将来”够你等的……

via:shello.name