1. 今天很高兴邀请到Coding.net的CTO孙宇聪先生接受我们的采访,按照惯例请您先自我介绍一下,虽然之前已经是老朋友了。
孙宇聪: 我叫孙宇聪,07年大学毕业之后加入了Google中国,在Google中国做了一年半,调度到Google美国做了一段时间,今年年初回来创业,目前在Coding.net做CTO,我在Google里面比较关注的是SRE,就是运维相关的东西,同时程序员生产力也是一大关键点。Coding.net吸引我的一个主要目标就是它特别关注于生产力群体,就是程序员群体,提高他们的生产力,给他们做更好的工具,更好的社区,来帮助他们成长,甚至我们最近推出了Coding码市,能够让程序员在上面用自己的知识和工具来赚取一些外快,这也是挺好的一件事情。
2. SRE这块您也分享挺多,运维之前我们采访也聊到不少,所以今天采访就主要聚焦在我们团队最近的一些改良、优化上面。您刚才也提到,你们现在要推出的码市这个产品。那现在你们团队是什么样的情况,你们在上海和深圳好像是都有?
孙宇聪: 目前我们码市团队和主要团队暂时还是分开,是两条不同的产品线,每个产品线都有自己的产品经理、设计,包括开发。说起来挺有意思,当时在说要搞码市这个事情上,我们一开始就组建了一个像敢死队一样的小组来做这个事情。因为创业公司,可能不光在创业公司,大公司里也是这种模式,就是任何一个新的产品要想上线,初期都是有很多不确定的因素在里边的,如果想用比较成熟的体系去套用这个事的话,会导致它的进展一般会比较慢。那很自然,我们要做一个新事情,就要组建一个新团队。这个团队有的时候是从外部招进来的人,但是更多这次我们选择是从内部挖掘这样的人去做这个事情,把新招来的人用来补充老团队,把老员工替换了一部分去做这个事情。事实证明这也是非常好的,他把之前团队里面的一些成熟的经验,工具都带到新的业务上去了,这样就避免了现在初期遇到的这些问题。可以详细说一下,我们码市在刚刚开始组建的时候是这样一个模式,中间运行了一段时间,也出现了一般团队都会遇到的问题,就是新项目的团队,他会采用一些不同的技术,或者是新的想法,逐渐会跟老的团队要分离。我觉得一般如果对这个关注不高的人,他可能就觉得无所谓,只要新业务还是正常发展,老业务也正常发展就没什么事。但是对我来说,其实我是很长时间都睡不好觉,我觉得这个对以后来说会是个很大的问题,因为我在Google里面最大的体会就是,整个Google里面的开发环境,研发体系是一套,只有一套研发体系,所有的人都在为同一个目标在努力,不管他做的任何的事情,最后都贡献到了Google自己这一套研发体系中。这样的话就是大家劲往一处使,是这种感觉。码市之前,举个最简单的例子,我们的编译系统的采用上,Java可能除了maven,就是gradle,可能现在还有bazel这类第三方的,如果采用的不一样,实际上你采用maven或是gradle都可以,它俩的功能其实是一样的,没什么大区别,但是你在maven里面得到的这些经验教训,甚至是best practice,你就不能很好的apply到gradle项目里面去。码市这个事情我们也遇到了几个问题,第一我们Java的编译系统就不一样,至于为什么不一样?有可能是因为他们刚开始的时候,觉得原来那套用烦了,想换套新的。包括javascript的编译,主站用的是grunt,码市用的是gulp,也不一样,这个按道理来说也没有什么区别,都是可以的。但是逐渐逐渐,当两个系统都在往前前进的时候,你就会明显的感觉到,大家要重复踩两次坑,在这边踩一次坑,在那边也要踩一次坑。所以对我来说,作为CTO,不像CEO,CEO他觉得挺好,他觉得码市发展非常好,你工作做得挺好。但是我对自己很不满意的,我觉得如果一个小创业公司都做不到统一开发环境,统一研发体系,最后就会造成力量极大的分散。为什么有些公司它事没多少,但是人特别多,好几百个开发人员,甚至是好几千个开发人员,就因为他所做的事情不通用,可能大面上都是Java,但是它里面的细节太多了,很多很多问题,所以我觉得这个事情必须要扼杀于萌芽之中。
3. 很多开发者,尤其是有点想法的,创业的公司里头这样的开发者特别多,有机会就想试试新来的东西,我觉得这个也很难说把它扼杀,哪怕说用老的成员去开发新的项目,那老的团队可能也对老的那套东西不满,想要试点新的东西。
孙宇聪: 我觉得你说的特别对,不可能完全杜绝这种情况,这也是为什么我们当时决定还继续前进,还是允许他们这么做的原因。因为第一,你一个organization必须要尝试新的东西,否则你永远没法进步,你老用旧的这些破烂,可能用了一辈子Shell脚本还是Shell脚本,没有进步,你看不到外界的好处。你看我们换了gradle,其实gradle很好用。但是最关键的一点,你要定时把大家Hold在一起,说我们要讨论一下,未来要怎么发展,有这样一个conversation,你要说gradle什么样,maven什么样,我们未来应该往哪个方向发展。就跟种花一样,你要让这个花园随便长,但是长到一定程度,你要开始砍,不要的你就砍掉,长的不好看的,你就砍掉,最后选出几种来是专门要做的。最后不管你是规定到一种也好,两种也好,这都无所谓,但是你一定要有交流的过程,要大家理解你做的项目,现在是你做,以后是别人去维护,那别人做的项目以后是你来维护,这都是一样的。人的调动是很自然的,你的兴趣点转变,然后你什么都变。当你有这种意识,我们讲主人翁意识,就是所有你写的代码是公司的财产,他写的也是公司财产,就好比你家后面有个公园,你去了每次都是把垃圾带回来,别人去了总是把垃圾留一地,对你来说也不好,所以我们搞了很多这样的session。作为CTO来讲,我能做到的事情就是我能顶住CEO的压力,我说我们这周可能就做一些产品上的事情,我们要留出一段时间来做架构上的整理,改进,统一,我给他们留出资源,给他们创造条件去做这个事情,把程序员聚到一起,他们自然而然就会产生出这种想法来,觉得这个东西特别好,就推广吧。这个东西很少的是一个共识状态,这是可以争论很久的。美国有个词叫bikeshedding,就是你的车棚要修成什么样,你可以刷各种颜色,但是最后它还是个车棚。这个也是一样,我们要做到最后有几点,第一我们一定要统一,统一成一个或者两个都可以,但是一定要统一,统一就是你不要乱七八糟的都来试,或者是你浅尝辄止。你把那边拿到的新的想法,在这个里面去实现。因为现在的很多工具,基本上都是万能工具,只是用法的区别,而不是他自己能不能做到的区别,所以你只要把好的想法放到这个几乎是万能的工具里面来,你就能把它用好,这是一点。第二点就是你一定要有计划的去推进,有计划的投入力量。比如讨论之后说我们要统一,以后我们全用gradle了,那你就要老项目,新项目都留出一部分时间来,让他们一起去做这个事情,把这个事情真正贯彻下去。经过一段时间之后,你真正能够做到从外部学到一些新的东西,最后能应用到自己的老系统上来,这个才是研发环境健康的一个标准。否则的话,你的产品线越来越多,你的工具越来越多,复杂度越来越高,人就没办法流动,最后公司基本上就是不可持续的状态。所以开过几次会之后,我就逐渐能睡好觉了,慢慢的我看到了一条未来的出路。未来我们深圳两个团队和上海的一个团队,我们都在推行同一套编译系统,一套代码的组织方式,我们还有一些静态分析工具,一些best practice,增强沟通让大家都有。只有研发体系能够做到这个程度,这才是让大家劲往一处使,自然而然就把沟通体系建立起来。我们讲研发力量是技术公司的发动机,发动机自己转才行,必须得是合力,我招更多的人进来,我希望它是产生一个合力去推动整个发动机的运转,而不是单独的一个小零件自己在那转,对其他的业务没有任何帮助。
4. 之前您也提到Google在工具流程统一方面做得很好,我们现在看到的情况是它统一很好,可能是因为它有很好用的工具,然后经过这个过程,逐渐形成了这么一个习惯。但是在最早期的时候,可能工具也不是一生出来都好用的,然后流程规章大家一开始遵守的时候,都会觉得好像很死板的样子,这个早期的工作还是有一定的挑战性的?
孙宇聪: 这就是我说的一个技术公司,你要有这个准备。工具不是你所能拿到别人外边的一个工具就能把它用好的。最近我看了Twitter的CEO他写的一篇文章,他说他们也存在这个问题,所有的公司都存在这个问题。就像养花一样,第一不能限制住大家的创新,让他随便去试,想怎么试就怎么试,Facebook和Twitter都有创新出来的工具,都是不一样的。只要你能够有一个核心力量,比如说我们公司有20人,我从中抽出两个人,这两个人不干业务,就关心事情怎么能做好,对他们来说,这是他们的主要目标,他们是吸收别人的微创新,然后把它转化为真正可以实现的目标,推广到所有的项目里去。任何一个组织里面都应该有一个这样的力量,程序员不只是全力写业务的程序员,还应该有一些是做架构的,有一些是做基础开发的,哪怕有一个人,也要比零要强很多。
5. 你觉得你们现在的规模就设置类似于开发工具的团队,给内部开发团队服务的会不会太早了?
孙宇聪: 我觉得独立的一个人可能是做不到,你可能没有那么多的人,或者没有那样的能力或精力,更多的是我们要把大家聚集起来,每个人抽一点时间一起来做这个事情。比如说我们现在搞了一个类似于兴趣小组的东西,就是一些人,每个人都做了很多的不同项目,这些经历比较丰富的,有很多想法的人坐到一起做个兴趣小组,定期去讨论这些事情,从中来搞出一些火花来。最近我还跟他们说,我们搞了一个类似Google的20%的时间,这个20%的时间特别好理解,就是一周你可以抽出一天的时间来思考一下你要干什么事情。你平时可能很忙,但是我一周给你一天或者半天的时间,你去真正想一想,为什么不能把它搞的更好一点,下次在改的时候,能不能改的更好,能不能删掉一些没用的代码,能不能把编译的警告改一改,就是类似于这样的东西。这是一个逐渐的过程,因为不是所有人都对这个感兴趣,但是他们都有想法,公司里都有吐槽的人,也有能把吐槽转化成真正目标或者力量的人,作为CTO,或者作为管理层,我觉得我们就是要给这个地方推一把,建立起一个这样的讨论的氛围,然后从中找到一个合适的人去推进这个事情,这个事情才能进步,否则的话,如果放任不管,那肯定是长的乱七八糟的。
6. 而且还有监督他推荐的结果。
孙宇聪: 还回到刚才那个花园的比喻上,公司就是一个花园,你园丁是干什么事呢?园丁不能让花长,他只能除草,也只能施肥,在合适的地方施加合适的压力,然后合适的地方Say no,这样才能把花园搞得很好,你对花的生长是没有控制的。你把自己当成一个园丁,管理一个技术团队,也是一样的道理。
7. 一个是激励一个是设限?
孙宇聪: 争取让大家把力量聚在一起,往一个方向努力。
8. 那您现在考虑比较多的事情,或者是现在有什么需要解决的问题,可以跟我们分享一下吗?
孙宇聪: 刚才说的码市研发团队的统一是一个问题。另外一个就是我们给工程师创造出一个更好的环境,比如说10倍,甚至20倍的提高我们工程师的生产力,这也是我们关注的一个目标。比如说我们上海的工具团队做了很多生产力的工具,尝试了很多,哪些是我们真正能用到自己身上的;比如说我们最近在搞一个静态分析的Coding set这个东西,它可以像ID一样,在网页上就看到所有的变量之间的关系,它的操作流程,代码的流程,这个东西特别好,它就是搜索。那我们下面第一步就是推动在公司内部先用起来这个东西,还有就是我们搞的MR,就是代码评审工具,我们自己也在用。设计东西肯定要满足我们自己的要求,也满足用户的要求。我们所有的开发管理,所有的代码全部是放在Coding平台上的,所以服务器坏了对我们影响是最大的,所以我们总是先于用户知道哪个地方有问题,哪个地方不好,这是特别好的一个点。
9. 那今天十分感谢宇聪接受我们采访。
孙宇聪: 谢谢,非常荣幸。