许式伟,七牛云存储CEO,曾任盛大创新院资深研究员、金山软件技术总监、WPS Office 2005首席架构师。在接触Go语言后即可被其大道至简、少即是多的设计哲学所倾倒。与团队合著《Go语言编程》。七牛云存储也是国内第一个吃螃蟹的团队,核心服务完全采用Go语言实现。
为此,eoe对这样一个传奇的技术员和团队进行了专访,希望大家看完后能对Go语言有全新的认识,扫除大家学习新技术语言恐怖和障碍。同时许总也谈了如何从一个普通程序员成长为首席架构师,做程序员与做Team Leader与CEO的区别,希望对技术成长和创业感兴趣的开发者有所帮助。
eoe:许总您好,感谢您从百忙之中抽出时间来接受eoe专访,您能简单介绍下您自己和七牛团队吗?
许式伟:大家好!我是七牛云存储CEO许式伟。七牛云存储是专为移动时代开发者打造的数据管理平台。主要托管企业的富媒体(图片和音视频等)文件,为企业提供了一站式在线数据托管、全国乃至全球范围的上传下载加速、以及云端数据处理(如图片缩放、打水印、音视频转码、流媒体播放等),省钱省时省力又省心。
七牛云存储的出现并非我偶然的想法。我从 2000 年加入金山,做的最后一个软件是WPS Office 2005,任首席架构师。2006年开始,整个金山面临互联网转型,在这样的背景下我向CEO雷军申请成立了金山云存储实验室(金山快盘的前身)。刚开始这个实验室有技术研究为主的味道,但很快我发现云存储其实是一个技术门槛很高的方向,并且在可预见的未来有很大的商业价值。从此之后,我的职业规划一直围绕它展开。2008年我离开金山,先在百度的网页搜索部呆了很短的时间,随后在 2009 年初加入了盛大创新院,发起了祥云计划(很巧合现在北京市也搞祥云计划)。
2011年中,感觉到了移动互联网产业蓬勃发展,云计算到了落地的阶段,我决定辞职创业。我主要的创业伙伴来自金山和盛大,都是长期合作默契的同事们。于是七牛就这样诞生了。很感谢我的伙伴们,我们一起在云存储这条道路上已经走了很多年。我们会把它作为需要终生奋斗的事业来经营。
到今天为止,七牛云存储在业界也树立起了自己的口碑,这一点令我很欣慰。但是,未来的路还很长。在产品上我们希望七牛云存储能够与其他大品牌公司产品形成差异化、互补的关系,大家一起努力改善创业者的生存环境。未来七牛会在云存储技术架构,富媒体云端处理的应用,以及数据传输加速层面做更多的优化与创新。
eoe:您是一位开源爱好者,发布过包括WINX、TPL等十余个C++开源项目。做开源项目能对技术人员本身有哪些方面的提高?如果以前没接触过开源项目应该从哪些方面着手?
许式伟: 开源是一种奉献的精神,也是Geek精神的体现。做开源项目主要有这些好处:
1、协作的能力,可以深刻理解开源项目如何进化,如何分工,如何与大家协同合作。
2、软件工程的能力,开源社区往往把做事方法提炼的很好,比多数正规商业公司的研发过程高效很多,这种经历能够提升个人对软件开发过程的理解。
3、与人交流能力,开源过程中可以了解别人的想法,也可以与别人交流自己的想法。
4、推广自己的能力,做好一个东西相对容易,但让别人知道这个东西好,又是另一种能力。
没接触过开源项目也可以从下面三点尝试:
1、勇气,走出第一步很重要,此后就一发不可收拾。
2、如果不知道怎么开始,可以从参与自己感兴趣的开源项目开始,了解别人怎么做的,自己可以参与哪些事情。
3、也可以从自己平常提炼的一些独立模块开始,如果你觉得有人可能需要,就可以把它贡献出来,当然,先要记得去征询下公司的同意,避免出现知识产权上的纠纷。
eoe:众所周知,Go语言是谷歌在07年开始的业余项目。从09年11月正式对外发布到12年3月发布的正式版也经历了近三年时间。而您的专著《Go语言编程》在2012年9月就正式出版。您是从何时开始关注Go语言?又是什么原因驱使您花时间去研究Go语言并把它投入到实际工作和项目中?
许式伟:我从 Go 语言发布之初就留意到这门语言,但是当初只是简单看了下语法,没有深入研究,也没觉得它好在哪里。真正花心思去研究Go,还是要说到七牛。11年5月份,我们决定创立七牛,在为七牛做技术选型时,我重新认真评估了Go语言。我大概花了2周用Go语言写了几个模块,就深深喜欢上了这门语言,认为这门语言将是在未来10年引领潮流的语言,所以当时我给伙伴们发了一封信,说:“创业过程中我们会面临很多选择,必然有一些选择最终会被证明是错误的,但是选择Go语言作为我们的服务端开发语言,很可能会成为我们最正确的一个选择”。如果当初还有人怀疑这一点的话,我觉得今天这个论断很大程度已经被证实。
eoe:七牛云存储是国内第一个吃螃蟹的团队,核心服务完全采用Go语言实现。你们采用Go语言作为核心服务的基础,是基于什么考虑?为什么不采用其它更成熟稳定的语言?如何保证核心服务的性能与稳定?
许式伟:最初去评估Go语言最重要的原因是,我们没有找到一门合适的语言。从云计算领域的主要技术方案看,最受欢迎的是C++和Java。我们知道亚马逊是用了Java。我个人尝试Java做服务端开发是在2007年金山实验,Java的风格比较拘束或严谨,与我推崇的编程风格不合,并且在分布式系统开发上没有显著的优势,所以才会关注Erlang(也因此有了ECUG社区)、Go等小众语言。在我评估完Go语言后,我认为它是云计算领域最合适的开发语言。
性能来说,Go语言作为互联网时代的C,并且是编译型,性能是绝对不低的,完全满足要求,而且可以预期未来会好于Java。
稳定性来说,云计算都是假设单机是可以宕机的,要在单机的不可靠下让整个集群可靠(这种宕机甚至不为用户所感知)。我们并不担心单个进程的稳定性,哪怕Go程序每天会挂一次,对我们而言,也是可以接受的。
eoe:Go语言才推出不久,这方面人才很稀少,而你们团队项目的核心服务又是基于Go语言编写,怎么解决Go语言人才紧缺的问题?是招进来从头开始学习还是需要有相关经验的?
许式伟:Go语言入门门槛非常之低。有任何其他语言的背景,学习Go语言只需要一周的时间。我们面试从来不问你会不会Go语言。我们关心的是开发者的能力与我们业务的匹配度,比如他算法基础如何、是否擅长网络编程、是否适合创业(对事情的责任感)等等。
eoe:许多开发者对Go语言有很感兴趣,跃跃欲试。但又由于目前Go语言还不是主流,他们不敢贸然投入精力去研究。就您学习Go语言及现在工作中的使用经验来看,对想学习Go语言的开发有什么建议或意见?学习过程中有些什么技巧?需要哪些技术积累?
许式伟:我对Go的学习者的建议是:与其观望,不如趁早体验。Go是未来,你的投入肯定有一天会得到巨大回报,而且越早了解,你的优势就越明显,这个回报也会越好。学习技巧方面,兴趣是最好的老师。计算机是实践科学,做一个自己喜欢的项目,胜过做100个习题。我唯一的建议是,项目最好是做服务器相关的,否则和Go目前擅长的领域不合,难度会高一些(但是如果你喜欢挑战也没有问题)。
eoe:您在2000年进入金山,到2008年离开金山时,已经是WPS首席架构师,您是怎样在这8年时间里从一个程序员成长为架构师的?可以谈谈其中的成长历程吗?这其中需要怎样的技术背景和学习技巧?
许式伟:我认为成为架构师并不需要哪些技巧,其实很多是和人的做事方式有关。我个性比较喜欢反思,一段代码写好了以后,会反复进行代码审查,是不是可以写得更漂亮。我一直认为成为架构师唯一的诀窍,就是不断实践+反思的过程。对架构师而言,永远不要忘记需求。架构终归是要满足某种需求。架构能力完全体现在你对需求的准确把握。准确把控需求,不只是要准确理解当前的需求,也要准确理解需求的变化,预见什么会发生,而什么不会发生(防止过度设计)。
eoe:您现在已经是七牛的CEO,能给各位开发者分别谈谈做一个程序员、、Team leader和公司CEO的区别吗?您是怎样在工作中提升自己的管理能力的?
许式伟: 作为程序员,除了不断提升自己的技能,让一件事情完成地又快又好;还需要考虑自己如何促进组织的进化,让整个团队的协作更高效。
Team Leader保障的是整个团队的工作效率,不断改善团队的做事方法,让事情更有序地进行。
CEO这个称呼还是蛮沉重的,因为这是我第一次创业,所以我还算不上一个非常称职合格的CEO。但我明白,作为七牛的CEO:要懂得知人善用,尽可能为员工创造好的条件;与合作伙伴保持良好的合作关系;倾听用户的声音,理解用户的诉求,让用户喜爱我们的产品。
一个好的管理者,首先需要具备长远和全面的发展眼光,其次是在工作中要有自己某方面突出的专业能力,再有就是自身的人格魅力。简言之,要上行下效,只有自己做的好别人才会看得起你并且愿意为你工作。