周爱民,现任豌豆荚架构师,国内软件开发界资深软件工程师。从1996年起开始涉足商业软件开发,历任部门经理、区域总经理、高级软件工程师、平台架构师等职,有18年的软件开发与架构、项目管理及团队建设经验,曾任盛大网络平台架构师、支付宝业务架构师,是 Borland Delphi 产品技术专家,也是 Qomo 开源项目(JavaScript)的发起者。2003年5月被美国 Borland 公司授予「Borland Delphi 产品专家」称号,并授予「论坛特别贡献奖」。著有《大道至简——软件工程实践者的思想》、《大道至易——实践者的思想》、《Delphi 源代码分析》、《JavaScript 语言精髓与编程实践》等专著。程序员
关于选择面试
“既然我已经答应夫人要走,就不想作别的选择了。”编程
问:您从何时开始接触编程?网络
我从1994年的时候开始学习编程,最开始接触电脑是学习WPS,DOS之类的,其中有一门课程是DBase,这是早期的编程语言。个人专业不是编程,我学的是机械电子。当时我其实更喜欢文学,可是我认为专业做家早晚会被饿死,因此我就选择了计算机,至少搞计算机不会饿死。架构
我发现您的职业经历也很丰富,在成为架构师以前,您好像还得到过Borland公司发的奖?我在去盛大以前的经历都是在Delphi圈子里,当时Borland一下发了两个奖给我。一个是Borland产品专家奖,由于那个时候我已经出了第一本书《Delphi源代码分析》。那本书是讲Borland产品内核的,从对Delphi的了解程度来说我是能够拿这个奖的。另一个奖叫作社区专家奖,这是由于我是Delphi早期社区的活跃者。我去盛大以前面临了两个Offer,一个是Borland China,请我去作产品工程师,一个是盛大的。Borland在中国没有开发,因此他们只好叫作产品工程师,能够理解成售后服务。我当时以为虽然Borland公司的title能够,但不是我想作的事,因此我决定去盛大。框架
问:您曾经是一位Delphi专家,也曾做为架构师就任于盛大和阿里巴巴,您职业转换的缘由和动机是什么?编程语言
我在郑州待了9年,我在那里的最后一份工做是软件部的负责人,带项目兼作开发。我离开郑州的缘由其实很简单。当时我有一位很是好的朋友,他也是个人开发团队中的主力工程师。他说他拿到了微软的Offer,想问一下个人意见,我就告诉他:做为朋友我建议你当即去微软,这对你来说是事业发展的大好机会。他向我提出离职以后,次日我就向老板提出了离职。那个时候,我忽然想明白了一件事,对于软件开发人才来讲,郑州不是一个好环境。当咱们把一我的培养得很成熟了,他就会受到更大的环境(好比北京)的影响,人才会流失。在郑州这样的环境下搞软件或者软件企业受限太大了,而这样的现实不是我能改变的。我今天会面临朋友的离职,我若是继续在郑州作下去,过一两年还会面临一样的问题。学习
我开始意识到整个产业环境对局部地方的影响,对于人才的影响,对于公司企业规模的影响。当时咱们还在作一些项目,面向移动、金融、电信这些企业。很是明显,咱们做为本地企业,拿到的永远都是小骨头。从北京来的其余公司,人没有你多,素质不必定有你高,可是报价会比你高不少。从北京来的公司只要说他们后面有怎样的一家大公司在支持他,他就会拿到比你更大的东西。spa
离开郑州后,我去了盛大,盛大对于我来讲,是做为架构师的第一个阶段。为了处理一些家务事,我2008年离开盛大。2009年去支付宝,2011年8月份左右离开支付宝,由于保密协议的问题我等了一年,没有在工做。插件
对于选择这件事,除了离开郑州以外,我都没有更充分的动机和理由。我从盛大离开是无可奈何,由于有私事必需要处理。从支付宝走的时候是想换一个环境,不想在那样的环境下生活,不想在那样的工做背景里面工做。
问:您能归纳讲一下为何不喜欢那样的环境吗?
这只是诱因,不是结果。我夫人当时在杭州病得特别厉害,她严重失眠,一个多月只能睡到20个小时,基本上天天一个小时都不到,已经抗不住了。我就跟她讲咱们回郑州吧,由于咱们家安在郑州。以后咱们就搬家了,她的病也在渐渐好转。当时阿里金融给了我一个offer,让我去阿里金融作架构。可是既然我已经答应夫人要走,就不想作别的选择了。
问:您来豌豆荚的时候有没有什么特别的缘由呢?
我在来到豌豆荚以前也有一些其余的offer,最后促使我选择豌豆荚的缘由也很简单。我来豌豆荚面试的时候跟创始团队一块儿沟经过,个人感受是他们很诚恳,这种诚恳的具体表现就是:知道就是知道,不知道他会告诉你。你会从他们那里听到:咱们正在创业,咱们面临了不少的竞争,有些问题咱们也许没有想清楚,可是咱们须要像你这样的人过来帮助咱们一块儿作事。大多数创始人不会这样作,这样诚恳的人是很可贵的,这是我当时很感动的地方。
第二,当时的豌豆荚还有不少事情没有人拎起来作。不少事情就直接打包到一个团队里面,由团队往下推动,或者打包到一件事里面当成一件事作。在我看来整个体系不成形,杂乱无章。我感受在这样的背景下面有不少架构工做要作,我架构的能力和背景必定可以帮到这家公司,有我施展的地方,因而我就选择了豌豆荚。
架构师
“真正的架构师是没有title的。”
问:您是如何成为一位架构师的?
人生有不少巧合,不必定非得要预测一个途径。我离开郑州的时候就有一份简历是投到盛大的,面试经过以后他们就发了一份offer,上面写了架构师。缘由是我在Delphi圈子里比较资深,盛大给我发offer的时候,以为高级工程师已经不太适合了,就只能是架构师。
我去盛大的时候没有架构师,包括我本人在内没有人知道怎么作架构。当时是2005年,架构师在国内仍是比较陌生的名词。CTO给我安排的活儿是但愿我能给某个东西作架构,把底层作起来。我到了以后就按照这样的思路去作,按照本身的理解去推动、实施,用了2个多月,初步作出了原型。虽然最后这个数据底层处理系统没有用,可是这个过程让你们看到,架构的作法跟原来的开发方式不太同样。因此他们很快把我调去了盛大机顶盒的系统,作平台架构。在去盛大以前我已经工做9年了,我基本上把过去工做的全部东西所有汇总,变成了我技术架构上的基础。
若是说在我作平台架构以前,已经大概知道如何作架构了,可是什么叫作平台架构仍是没人知道的事。那个时候国内能够出来说平台架构的人尚未几个,相关的理论知识也没有。我该如何定义什么是平台?想要的东西是什么?我怎么去作?我怎么影响那些决策者?我如何把他们想要的东西描绘出来推动下去?因此,作平台架构也是摸索着往前走,在盛大这件事我大概作了两年。后来盛大为将来5到10年规划的是叫作OMMO的大型多人在线游戏项目(也就是后来的“零世界”项目),因而我在盛大工做的最后半年时间,就在作这个项目的平台设计。
那个时候开始,我已经在作架构了,可是没有范本,没有理论和数据告诉我怎么作。我按照本身的想法去实施,按照本身的方法造成本身的体系,不断地去修改、适应它。
问:您对架构的理解经历了几个阶段?
最先的架构师就是某家公司没有合适你的title,就给你一个架构师作。坦率地说,这是不少公司架构师的出处。我在盛大前两个月左右的时候,第一个项目作得不错,正有一点自得,当时被称为盛大首席架构师的一位同事就要离职了。他跟我聊了一件事,他说他其实半年前就想走了,可是CTO找到他说:你看盛大还有不少事情,你也有不少能量没有发挥出来,咱们真的不但愿你走,接下来你作盛大的首席架构师吧,把你的能力释放下来。他当时以为能够留下来,等过了半年再来看这事的时候,他忽然醒悟了,他说不是公司想要作架构,也不是我能作架构,而是公司想把他留下来,又找不到适合的理由,因而须要一个合适的title把他留住。
我当时听了他的解释就一阵透心凉,我来盛大作架构也是这样的,找不到一个能够给个人title,可是又想把我留到盛大,因而让我来作架构师了。我跟盛大或者整个行业都经历了这样的阶段。架构师就是一个title,为了挽留一些人,或是为了在某些场合下能够跟别人递一张名片。
在盛大作了两年多以后,我进入到第二个阶段,从架构的结果到架构过程的领悟。最先作架构怎么作呢?去Google搜各类各样的架构的文章、各类各样架构的图和材料,例如要作数据的架构只要搜一些国外大公司数据架构的文章和图就好了。我最初的两年时间也经历了这样的过程。最终我从学习架构的作法获得了忽然的领悟:若是那些东西是架构,那么它们是怎么得来的?后来《架构之美》这本书出版的时候,我写了一篇序,里面有我关于架构的第一个感悟:架构是一个过程,而非结果。水管滴下来一滴水,从它滴落到裂开的过程,中间有多少形态的变化?你们只会看到水在地上绽放的结果,不会想到在中间的过程是什么。咱们只看到了架构师画出来的东西,而如何获得它才是架构师最重要的部分。这是我2008年左右从盛大离开时的感悟。
从支付宝离开的时候,我又感觉到了变化。过程即使也是能够被描述和展示的,也不足以说明架构自己,也就是说,这个过程是不具备灵魂的。假设,我是一个老石匠,我有一位学徒小石匠,我雕石狮子的过程他看得清清楚楚,请问他照着我作一遍就能够成为老石匠了吗?这个过程是能够被仿造的,能够被形式化,可是并不具有灵魂。个人第二个感悟是:过程是不具有灵魂的,真正要学的应该是架构师思考方式。我在《大道至易》里面花了很多工夫去分析架构的过程和结果,可是核心的部分是给你们讲什么是架构的思惟,怎么用架构的思惟思考。因此后来孟岩写序的时候,说爱民是在用架构的思惟看这个,看那个。管理也好,技术也好,架构自己也好,我都是站在架构思惟的视角去看的,可以看到这本书的后半部才能把这本书看明白。这是第三个阶段,思考架构在思惟阶段怎么造成,而不是怎么把石狮子雕出来,或者雕出来的结果漂不漂亮,这二者已经偏向于末端了。
问:孟岩曾在《大道至易》的序中提出了一个有趣的问题:组织架构跟技术架构之间的搭配如何才是合适的。可是您在书里面并无深刻地讨论这件事。您如今对这个问题有没有更深的理解?
这个问题是没有通解的。任何一个系统,我将要实施的架构和该架构所在的这家公司中间必定存在着总体系统的视角,系统中不一样的东西确定会有矛盾和冲突。这种矛盾和冲突在不一样的背景下表现是不同的。这个东西自己没有通解,可是问题是彻底一致的:如何能让你实施的架构跟这家公司的组织结构及其推进方法协调。你要么改变A,要么改变B,采用的手法是在实施的技术架构上作调整。
举个例子,某个架构的实施须要500人,可是这家公司原本才200人,显然是实施不下去了,可是你还得想办法实现怎么办?你能够去买一个500人实施出来的产品把这个坑填掉,你的架构自己是没有变化的,只是实施的手段变了。第二,咱们不要这个架构了,能不能作一个更简洁、轻便,可以适应200人规模的架构。第三,调整公司和架构,这200人不是不够吗?我能不能再买一个500人的公司过来,若是能,我能够把这个放进去。因此调整哪个都有可能,这是实施手法的问题。
我跟孟岩没法造成共识的问题是:到底什么是冲突的自己?孟岩认为系统多是不可预设的,也许一开始作架构这件事就错了,由于你预设了系统。而个人观点是系统是能够预设的,我认为架构的发展和须要作的事情是能够按照这个设计往下走的。若是我假设系统能够预设,必然会产生了刚才所讲的矛盾,咱们解决矛盾的方法要么是演化,要么是改变。
问:颇有趣的分析。您来到豌豆荚以后遇到最大的技术挑战是什么?
这个问题的答案其实也是我刚才问题的。也就是说,若是技术框架跟公司层面存在了一个矛盾,它会有挑战吗?其实没有。因此在架构的层面讨论刚才的问题,是永远不存在技术障碍的。由于我永远能够有其余选项,我能够不作它,或者我能够不用如今作它,我能够用各类方法把这个问题消化掉。因此若是在架构层面上存在技术挑战或者技术上不可解决的问题,就是你架构作错了,只有架构作错了才会存在这样的矛盾。
因此从技术的角度上讲,老是可以解决,尽管确实永远存在能力的问题。人多了以后就会存在的第二个问题,就是组织问题。人少不存在这样的问题,一我的开发永远不会打架。因此从这个角度考虑,技术上存在的最大挑战每每第一是须要人来解决的部分,咱们的人力以及相应的能力不够。第二,人多了以后,存在的管理问题是须要经过非技术方法来解决掉的,好比说组织结构的调整,管理方法等等。
问:若是想从一个普通的程序员成为一位架构师,须要学习什么?
跟你老板搞好关系,让他给你一个title(笑)。
问:那要成为一位真正的架构师呢?
其实真正的架构师是没有title的。首先你要想清楚你在作的东西是否是架构,你是否是会作架构。问题自己就是要让一个愿意学习的同窗(不必定是工程师)可以理解到怎样作架构。第一,认识架构最重要的事:你要知道你所面对的是一个系统而不是一件事。你可能天天会面对一堆待处理的事,若是你看到的只是事的过程和结果,而非事情自己,你就仅仅是工程师,一位实施者。跳出这个框子,你面临的实际上是一个系统,你看清楚这个系统以后,还要看清楚这个系统里面的关键要素。
我经常使用过河来做例子。一我的在河的前面想过这条河,有一条船放在那里,若是你认为过河是一件事,你的第一件事是跳到船上想办法把船划过去。你遇到的第一个问题多是你没有划船的技能。可是若是你是一个架构师,你的第一个问题是:这是什么东西?你能够定义其为一个障碍,河这个东西对你来说是阻碍,你跨过阻碍的方法不必定是划船。我架一个桥不行吗?我直接跳下去,游泳过去不行吗?另外,这条河是否是障碍仍是一个问题,若是它很浅呢?你非要认为它是障碍就制造了矛盾,系统中也许不存在这样的矛盾。
因此从架构思惟的角度来说,第一件事是要看到这是一个系统,第二件事是定义问题,第三件事是看到这个问题是否是真实存在。找到这个问题跟方案之间的关系在哪里,你就会作架构了。
至于作多大范围的架构,就是我在《大道至易》里面提到的领悟、领袖和领域能力的问题了。第一个部分就是领悟的能力,知道划船不是第一要素,思考问题和定义问题以及否认这些问题的整个过程就是架构思惟。第二个部分是领域能力的部分,你得知道河流,你得知道船,你得知道桥,这些东西是属于领域的部分。第三部分是领袖能力,你真的想要造一座桥的话,你得组织一群人把桥造出来;若是大家是四、5我的,你的决策是我往上走一千米尝试一下寻找源头,那么你怎么让其余4我的跟着你往那一千米的上游走,这是领袖能力。不然你就会本身变成排头兵,“大家你们等着,我去上游看看”。若是你是领袖的话,能够安排一些人去上游看看,另外一些去下游看看,半个小时后在这里集合。这就是领袖,把你设想的解决问题的架构实施下去。
豌豆荚的动力引擎
“也许今天这艘船很小,是一叶扁舟那么小,我也给了它一个超大能力的引擎,有一天当它成长为很是大的船的时候,同样是能够用的。”
问:您提出的架构师的三种能力(领袖,领域,领悟)反映在您在豌豆荚作架构的过程之中,您更倚重于哪一种能力?
我认为是平衡力的问题,不是多少的问题。假设你作技术架构在你的团队使用,你选择了一个插件的框架或者数据流的框架,总共就影响四、5我的,你须要的领袖能力无非是你站起来拍板说我已经调查过的,这个技术绝对没有问题,大公司都已经用过了。这就是你的领袖能力。可是你要想影响到一个行业,好比咱们如今正在作的应用内搜索,这是整个行业的一部分,你可能要跳出来讲之后整个搜索就是以应用内搜索为核心的,但你怎么可以用领袖能力使得全部人相信未来应用内搜索在这个领域里面是一个方向呢?这就是领袖能力。
你须要在你的能力之间找到一个平衡,而不是考量解决多少问题。领域能力也是如此,全部这部分的能力的要素其实都是能够放在别的角色或者是别人身上的。举个例子,豌豆荚要作应用内搜索,并不等于说CEO须要把应用内搜索全部的领域知识了解得很是清楚。最终他在这个领域的能力是如何构建的呢?是豌豆荚的全部工程师、各个角色在这个领域的集合,支撑了他来讨论应用内搜索可不能够成为行业方向。对于他来说,这个领域能力就被分解在不一样的角色和不一样的团队上了。
真正不可或缺的部分变成了领悟能力。好比在决策上豌豆荚为何要选择应用内搜索做为咱们在移动领域上面的方向,在这样的问题上,领悟能力的部分才是架构思索不可或缺的部分。必定要有一个理论体系来支撑这个决策,而其它两个(领域能力和领袖能力)只是在实施手段中所须要找到的、平衡总体能力的部分,能够把它嫁接到别的团队,别的人身上,这会造成一种结构。
我在架构师的能力上面提到的三种能力并非要集于某一人身上,而是你必定要理解架构所须要的能力,须要多大能力的集合才能把这个系统消化掉。
问:您初到豌豆荚时曾提过您对不少豌豆荚的组织和文化的来源不是很清楚,而您有一个观点是认为组织结构和文化是跟架构有关系的,对这些来源,您如今有没有更清楚?
确实是更清楚了。组织方法和文化氛围的造成,都是有历史渊源的。一个公司如何成长为如今这样?用什么方法来推动它的事和产品?这些都有习惯性的方法和思惟在里面。
一家公司作事方法的历史根源,是值得你花必定的时间和精力追本溯源的,有一些信息是须要你去挖掘的,这也是我在豌豆荚一年多的工做里面比较关注的事。豌豆荚由于特别公开、透明,我可以从文档上面看到两三年前,或者是更早时期他们的一些工做过程。这是一个关于信息的问题。
第二部分是文化的造成,这部分不像刚才那么容易。我在《大道至简》那本书里面说到过,一个公司或者一家企业或者一个组织的造成是与那些核心人物有密切关系的,那些创始者和初期团队的构建者的行为、方法、习惯和思惟方式都会留下痕迹,这是由人带来的一种气质和影响。因此,更多的是要经过了解这些创始者、创始者团队和早期的团队来理解公司,理解方向,理解他们在作的事业。这个东西不是信息,不是你在过去的文档里面能搜到的东西了,须要你跟他们碰撞、了解、接受、感悟。这一年多以来我在团队融入上的投入使得我可以对豌豆荚的文化和现状有更深的了解。
问:您曾把豌豆荚的组织结构形容为 “开放、透明”,这样的组织对您的技术架构有影响吗?
有影响。无论你怎样作架构,最终是在系统里作实施,这个系统的文化、组织,以及工做方法,必定程度上都影响了你如何去设定这个架构,你不能作出这里面的人没法接受的架构来。必定要掉过头来看这些人习惯并想要用什么样的方法作这些事,在架构实施推动过程当中要可以再去调整它。
作架构这件事跟公司的组织和文化有一个漫长的协调过程,你须要在你设定目标和为了达到目标而演化出解决方案的过程当中思考。因此一个好的作架构的人必定是对组织、文化、工做方法、项目管理,对整个系统的各个方面都很是了解的,他不必定会作,可是要看到方方面面。
处在扩张阶段的豌豆荚用人须要很大,不少应届毕业生也对豌豆荚很感兴趣,大家须要什么样的年轻开发者?只要有才,惟才是举。首先我以为要对软件,产品,或者是对你所选择的方向、视野有热心和激情。在一家公司里面不只仅是要招架构师,也要招软件工程师,各个方向都要招各类各样的人才。人才的定义可能会受到外界的影响,可是由内到外的孜孜不倦的精神,别人一眼就能看得出来。若是你在这件事上具备那样的信心、欲望和力量,这可能会激发每一个人的创造力、动力和想要达到一切目标的原始驱动。这是我所但愿的定义。
虽然我以为能力很重要,可是你能够认可本身的不足。咱们不会要求刚毕业的学生有多么强的能力,由于这件事原本就不靠谱,我认为在你的背景下面具备合适的能力就好了。拿学生的背景和履历跟经验更丰富的人比较是不公平的。我以为若是你对本身所作的事,对现有的履历有足够的信心和热情,你愿意去了解豌豆荚并加入到咱们的事业里来,这就够了。
问:若是把豌豆荚比喻成一艘大船,您在上面的角色是什么?
一艘船由不少部分组成,船上的全部人都是不可或缺的,抛掉了谁都是不能够的,但同时,也不是缺了谁就不行,不是缺了厨师长你们都没有饭吃,缺了船长就没有人知道方向了。对于我来讲,我愿意定义的是我可以作到什么,个人能力是哪一个方面,我不想把它拟人化、职务化。
我以为我应该是动力引擎中的组成部分,由于架构师这个角色所提供的是能力。我不提供这个船的船体,船体不是我工做的目标和对象。也许今天这艘船很小,是一叶扁舟那么小,我也给了它一个超大能力的引擎,有一天当它成长为很是大的船的时候,同样是能够用的。可是若是一开始作得很大的话,这个小舟可能装不下,我愿意作其中的一部分,从小舟开始一直到船很是大的时候都存在,而且起到它的做用,这就够了。我不但愿的是,今天咱们的引擎是动力0.1版的,只做用于一艘小船,明天我把这个东西扔到海里,换一个大的,那不是我作动力引擎的方法。架构师更倾向于构造一个可扩展的,能够长期影响这个结构的引擎。
来源: 图灵社区