您现在正在浏览:主页 > 下载中心 > 媒体工具 >
 

以Facebook为案例剖析科技公司应有的工具文化

发布时间:2018-01-13 19:30  来源:www.xjshzzy.com   浏览次数

我们都非常推崇一个优秀的技术公司应有有一个非常强势的工具文化。在工具上,我有很深的体会,我说那不如我把我的理解通过Facebook的一些实践例子来阐述一下,希望对科技公司有些帮助。 

以Facebook为案例剖析科技公司应有的工具文化

本文节选自《打造Facebook》

前言

前段时间和大众点评的CEO张涛聊天的时候碰到内部工具这个话题,我们都非常推崇一个优秀的技术公司应有有一个非常强势的工具文化。在工具上,我有很深的体会,我说那不如我把我的理解通过Facebook的一些实践例子来阐述一下,希望对科技公司有些帮助。

不断发展、改进公司的内部工具,可以极大提高每个员工的工作效率,可以减少运营人员的数目;这样既改善了整体协调,又减少了整体开支。

为了帮助工程师更好地进行产品开发,Facebook对于内部工具(Tools)是非常非常关注的。招聘我进公司的总监黄易山,就是这方面一个最有力的倡导者,他极度建议,公司要把最好的人才放到工具开发那一块,因为工具做好了,可以达到事半功倍的效果,所有人的效率都可以得到提高,而不仅仅是工程师。

Facebook有两个工具组。一个叫研发工具组(Dev Tools),专门负责研发工具的开发和维护,所有有助于工程师开发速度和质量的工具,主要服务对象是内部工程师。另外一个叫网站支持和工具组(Site Support and Tools),主要负责公司里面所有的通用工具的开发和维护,关注的主要是方便用户和Facebook的交流以及Facebook内部的沟通,主要都是通讯工具,服务对象是用户和所有员工。

研发工具有哪些呢?

一开始新的工程师加入Facebook,需要分配自己的开发服务器,Facebook就做了一个工具来管理分配所有的开发专用服务器。在一个页面上你可以很清晰的看到所有的开发服务器,包括哪些人是现在的使用者,什么时候申请分配的,服务器的操作系统版本,配置信息等等;对于空余的服务器,你可以一键申请,并自动初始化该服务器。这让刚加入的菜鸟们可以迅速的获得自己的研发活动空间。

工程师最重要的工作就是写代码。针对代码管理,Facebook做了很多工具,这里解释部分工具供参考。Facebook的代码库管理是通过一种叫GIT的开源管理系统,为此开发了一些工具来集成GIT。比如,一个工具是在提交代码之前自动的检测所修改的代码是否符合公司代码规范,如果不符合,该工具会自动警告,但把决定权交给工程师。Facebook提倡对修改的代码写测试案例,在代码提交时会自动检测是否存在覆盖这些修改的测试案例,如果没有,会警告,但工程师仍然可以强制提交。但这种情况下代码若出错给网站带来巨大危害的话,工程师可能会被严厉批评,因为这本是可以避免的错误,是人性的狂傲忽视了工具的提醒。在代码审查(Code Review)方面,Facebook做了一个可视化的工具,现已开源,叫Phabricator [1];工程师可以在页面上非常方便的针对每一段(单行或者多行)代码进行交互讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改,可以提出自己不适合以推出该代码审查,等等。只有代码被明确接受之后才能被工程师提交到服务器端的代码库,这一点集成到提交工具中强制执行。基本理念就是凡是被很多人不断重复的好的习惯,要将其自动化,绑定到工具之中。以“Don’t make me think”的方式来推广好的practice。

Facebook的代码发布是灰度发布,所以做了一个方便设计灰度发布的工具。在这个工具中,工程师和产品经理(也可以授权给其他非研发人员)可以设计新产品发布的目标人群特点(比如年龄,性别,地域,教育,等等方面做出限制)及发布的人群比例(在0-100%之间自由调整),所有的改变不需要代码的改变,只需要在工具页面上点击鼠标即可,让灰度发布变得很轻松。

发布的过程由一个利用点对点(BitTorrent)算法实现的工具进行多线程同时发布,对于更新几十万台机器只需要几十分钟。由于是不间断的发布,对公众的服务不可以停,所以Facebook会将一部分的机器从公众服务状态中拿下来,更新之后再放回,然后继续下一批,知道所有机器都被更新。这样就可以保证在任意状态都有足够多的机器来支持用户访问。整个工程都是通过工具来自动实现。而监控这个发布工程的进展,也有一个工具检测并且将其进度可视化,你可以很方便的看到哪些服务器更新了,现在正在更新哪些服务器,整个网站的进度是百分之几,等等。