开源软件的启示

    Lessons from open source

    过去几十年中,开源软件运动日渐兴盛,把商业软件巨头打得落花流水。即将开始远程工作的员工和管理者们从中可以学到很多东西。这是世人从未见证过的、异步协作与沟通的胜利。

    从表面看,这听起来几乎是一项令人难以置信的任务。编写复杂的软件本身就已经够难的了。把其他复杂情况一概移除似乎是谨慎的做法。比如,管理散布在全球的上千个人,有些人所在的时区甚至完全不重合(对于高效协作来说,这是最大的障碍),这些就属于应该移除的复杂情况。

    但是,就像很多直观知识是错的一样,这个想法也是错的。从Linux操作系统到MySQL数据库,从PHP语言到Ruby on Rails,开源软件响亮地打了微软、甲骨文等商业软件巨头一巴掌。

    跟一般的企业使用或普通消费者使用的软件包相比,这些开源软件要复杂得多,参与开发的人也要多得多。如果人们通过远程协作可以成功地开发出世界级的操作系统、数据库、编程语言、web框架和其他各种各样的软件,或许你应该更加仔细地看看他们是怎么做的。

    以我们37signals开发的Web框架Ruby on Rails为例,十多年来,我们一直在持续更新代码库,不断地添加功能,提高代码质量。来自十几个国家、数百个城市、将近3 000人都陆续对代码库做出了贡献,而且绝大多数人都素不相识!一般来说,软件开发是这样的:旧代码+大量新功能+诸多开发者=乱成一锅粥!

    然而,最后的结果很好。天啊,何止是很好,它的成功简直超越了我们最疯狂的想象和期望。它成功的关键跟本书中讲到的很多东西一样,但我们还是看几条吧:

    • 内在动力:程序员编写开源软件,一般都是因为热爱这件事,不是为了钱。钱往往会相伴而来,但它极少是动力来源。也就是说,当你在解决一个特别感兴趣的、令你兴奋激动的问题的时候,你根本不需要有管理者经常从你背后伸脖子过来看看你是否在干活。
    • 一切公开:绝大多数开源软件都是通过邮件列表和GitHub这样的代码追踪系统来协调运作的。只要有人想出手帮忙,就能做得到,因为所有的信息都是公开的。你可以自告奋勇,参与进来。对某块内容最精通的人很容易就能切入。
    • 偶尔碰面:绝大多数成功的开源软件最终都能够召开交流大会,起码也能举办一些讨论会。开发者就有机会见面沟通,这很像公司的聚会和项目冲刺。但这不是必需的,而是锦上添花的事儿。

    所以,当你怀疑远程工作究竟是否可行,或是遇到了阻碍时,想想这个:起码我不用征集和协调分布在全世界的3 000人来做一件事吧。你会立即轻松很多,顿觉眼前的问题没什么大不了的。