learn-tech/专栏/超级访谈:对话毕玄/04淘宝消防队:真正最优秀的程序员不应该是英雄.md
2024-10-16 11:00:45 +08:00

23 KiB
Raw Permalink Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        04 淘宝消防队:真正最优秀的程序员不应该是英雄

你好,我是叶芊。-  - 上一讲我们简单聊到毕玄进淘宝后做HSF的经历以前他做网站访问量10万不到上来一下到200万再直接跳到1亿他的心情也从“信心爆棚”直接跳到了“上线爆雷”毕竟刚转正就让公司出了严重故障他表示压力山大但是自己心态还行。-  - 今天我们接着他的经历聊,当时在淘宝他还有一段相当有趣的经历——淘宝消防队,在这里他锻炼了自己的解决问题能力,也结识了阿里的知名大神多隆,但是在采访中他却说这种机会对公司来说其实是个恶性循环。-  - 为什么他会有这个看法?淘宝消防队的经历对他来说究竟意味着什么?我们开始今天的对谈。

 - 极客时间看你的经历HSF做完你就去淘宝消防队了

毕玄不是淘宝消防队是一个插曲就它是个民间组织。因为09年淘宝经常出问题出问题以后当时的最大问题是没有人去解决。

以前我们就一个系统如果出了问题大家都会去看看是不是跟自己相关但是我们在09年以后有100多个系统大家都觉得如果出问题了肯定不是我的问题所以就没有人查问题导致那段时间很糟糕客服感觉明明有很多用户在投诉但技术这边反馈很慢都不大去解决就很混乱。

后来我们运维线有一个人很不爽,就拉了个群,这个群的名字叫“消防队”,群里拉了一些我们觉得愿意去解决问题的人,后来只要出问题,这个群里的人就会去解决。

极客时间:噢没有组织上的约束,那这些人确实没有责任必须要处理问题。

毕玄:没有。只是这帮人觉得问题老没有人解不好,当然还有一个原因是这帮人比较喜欢解问题,有这个爱好,以前你想解也没有问题,现在你一进这个群简直了,只要想解,问题一直有。然后我们就有一帮人进了这个消防队。

这个群以前有个默认规则是不允许M线的人进来。阿里是P线、M线M偏管理。后来有一个副总裁不小心被拉进来但很快就被踢出去了然后他就问为什么要把我踢掉我们说因为解决故障的时候不需要你解决故障的时候需要P线的人而不是M线的人。他也很无语。

极客时间:副总都能直接踢吗?这个操作挺勇的。

毕玄这个群慢慢大家都知道了因为大家发现只要反馈给这个群问题是会被解决的就形成了效应加上又没有官方组织。可能半年多的时候不知道为什么群被更多的高层知道了因为我们最早说一不允许M线二要低调最好没有人知道这个群的存在尤其高层。因为我们要操作生产环境理论上肯定是有点违规性质的权限会过大所以我们也不想太高调。

但被知道了以后,在淘宝年会上,公司临时决定要给这个虚拟组织颁奖,好像是总裁特别奖之类的。我们就突然被通知你们的群得了个奖,颁的时候我们印象都很深刻,因为是临时的来不及订奖品,就从现场,当时在黄龙体育中心,找了一个灭火器,颁给了这个消防队,然后颁奖的时候还跟我们说,等会儿下来,记得把这个灭火器还回去。

极客时间:所以是给了虚拟团队一个虚拟奖。

毕玄:就是给一个荣誉,我们都笑死了。

后来公司知道了,觉得不能靠虚拟组织,这个事情还得官方化,所以成立了官方的消防群,那就不一样了,进群的责任有一条就是处理问题。但尽管有官方了,我们有少数几个人被列在了某个名单里,那个名单里的人被特批拥有全部权限。但这是因为我们过去做了很多事情。

反正当时对我来讲挺好的,借机学了很多怎么解决问题,而且多隆也在里面,我跟多隆就是那样熟起来的。以前我只知道他很神,但不知道哪里神,但在消防队我充分感觉到了为什么,很多问题很难被解决,但多隆基本都能解决,而且几乎横跨所有领域,这太夸张了。

极客时间:这种解问题也是非常锻炼人的机会吧?因为我看你写自己的技术成长过程,总会提到在淘宝消防队的这段。

毕玄:因为这是个训练。我后来跟多隆总结出来就是“卖油翁,唯手熟尔”,你越被喂就越熟练,越熟练就越被喂,就像打游戏一样。但这是个什么循环?你可以认为是个良性,也是恶性。

对个人就是良性循环,比如说你解多了,公司很多人都觉得你解问题不错,所以大家有问题都找你,你被训练得越来越惊艳。但恶性就是公司其他人没有机会了,因为处理问题通常都是很紧急的,大家一定会第一时间想,谁能最快解决,就找谁。

 

 

极客时间:你淘宝消防队的这段经历,是不是给自己赢得了很多信任,也为你后面的很多机会做了铺垫?因为像你这种刚开始出于兴趣去做,后来被问题训练得越来越强,这种人,在技术的人眼里应该会相当受认可吧。

毕玄通常来讲技术圈里每家公司大家觉得最牛的那个人多数是解决问题能力特别强的公司的很多危机时刻是他出来把问题解了鲁肃当年就是这种。很神奇阿里有多隆Google有Jeff Dean百度据说也有个这样的腾讯也有好像每家公司都会有一个神一样的存在大家觉得没有什么问题是他解不了的。

后来我们说还有另外一种,但这种不显眼。因为解决问题就很像英雄,出了问题然后你出面把它解决掉,另一种人是他写的东西几乎没有出过问题,就不会被暴露出来,但这种人其实是真正要挖出来的。因为前面的不挖他就在那了,不需要挖。

极客时间:英雄和这种不出问题的,是不同的能力水平吗?

毕玄:程序员的技能水平我一直说可以分成三段。

第一段是你的基本技能,比如做这个业务要写相应的代码,那这个代码相关的东西你得非常了解,包括背后的细节。我们觉得这是程序员的第一关,迈向职业化。

说实话这跟公司中、小、大没有任何关系,关键看你对自己的要求,公司可能不会明文说你要怎样,尤其是中小公司,因为说实话,每家公司不对个人成长负任何责任,反正你没成长,公司大不了换一个人。但你自己应该有追求,用到的所有东西都应该去了解它背后是怎么回事,否则现实讲很容易被淘汰的。

极客时间:这里想多聊两句,你有没有什么衡量自己了解程度的具体方法?你是怎么做的?

毕玄:写文章和分享。我觉得分享是很大的挑战,有些东西你觉得自己很懂,真正讲两个小时,你可能就挂了。

以前博士(王坚)给我们上课,讲怎么判断一件事是不是个问题,因为大家会提出一堆公司可能存在的问题,他说,你们如果能就这个问题讲一天,说明这真的是个问题,如果不能,说明这根本不是个问题。

因为吐槽一个公司的问题很简单,关键是这是不是真问题,而且对高级别的人来讲,肯定也要想怎么解,如果你能讲一天,这才是公司值得重视的问题,说明解法很复杂,这就真是个问题。如果很简单,公司肯定会解的。

这就像技术分享博士会挑战我们你们不是觉得自己很牛吗觉得对这个很精通吗给我做个分享。很多人发现上去只能讲两个小时这其实就是你掌握的全部我以前在内部讲JVM最早也只能讲两个小时后来我能讲两天。

这是可以训练的。所以最重要的是先把一个东西讲厚当然另一个技能是能不能把要讲一天的东西5分钟讲完但首先要有讲厚的能力不能上来就讲5分钟。

博士那一堂课是我们有史以来最受教的一堂课,因为这是一个很简单的方法,但所有人都可以被衡量出来。

那之后我们就懂了后来跟很多技术线的人说检验自己的能力有一个很简单的方法就是分享你讲多久能把自己讲空掉就是你能力的极限。很多人用中文随便能讲两个小时一换成用英文讲10分钟就讲完了这一看就不靠谱这其实就是你的技能。

 

极客时间:好,第一段是把基础打好,程序员技能水平的第二段是什么?

毕玄:第二种,在程序员世界里,通常容易被认可的就是解决问题的人,就是英雄式人物。但这确实也有一个问题,因为解决问题的能力,目前看必须靠问题训练出来,很难靠自学,除非你给自己造一些问题,但还是非常难,最好有实战的机会。

极客时间:有问题出现的这种机会,是每个公司都有的吧?

毕玄:对,因为每家公司都会出问题。你看好了,出现问题的时候,关键看有哪些人,跟这个事情一毛钱关系没有,他还冲上来,掺和一下,一定会有这样的人,每家公司都会有。

虽然开始掺和的可能也没什么用,但他掺和多了就不一样,这个人慢慢就会得到信任,然后他的机会越来越多,就会进入良性循环。这种人会慢慢成为程序员圈里的大牛,大家都会知道他,而且大家都会特别服他,不服不行,因为你真的干不过他。

就像多隆,你们不服对不对?来呀。因为我们老说阿里最神的技术人是多隆,后来阿里有些新人不认识他,内网就有人说凭什么?他做了什么?结果炸出来一堆老员工,全部出来喷上面的新员工说你们知道啥。

多隆很低调不像我们这些很喜欢在台前的人但事实上他解决问题就是比很多人强很多这是经过事实论证的。程序员要服人还挺难但解决问题绝对是一个大家正面PK两人一起解决他就是比你快那你还说啥你说你能力比他强那不可能。

 

极客时间:所以第一关先把个人基础能力搞好,再当一个喜欢掺和的人用问题全面锻炼自己,那第三种呢?你前面说的不出问题的?

毕玄:第三种程序员,那是真正职业里最优秀的程序员,因为他写的东西很稳定,就是我们说的鲁棒性特别好,不大会出问题,但这种反而特别难挖出来。

做一个程序员写正常逻辑不难,正常逻辑就是解问题,因为人脑是串行的,串行写下去非常简单,只是从说话变成了代码而已,是个翻译过程。翻译的好坏是另外一个要求,需要你对背后机制很了解,可以做到性能很高。

但是一段代码,在现在正常的环境下可以跑,同时环境稍微有点异常,如果你这个代码还能跑下去,那太牛了。这是最牛的。

这多数是因为他经历过前面,见过很多问题,也解决过很多问题,他才知道噢我写代码的时候,这里要注意一下,那里要注意一下。所以很多优秀程序员的代码,正常逻辑可能很少,其他都在处理一堆你觉得不可能发生的事情。

极客时间我记得你前面讲HSF的时候提到性能是一个很重要的要求但为什么你这里说稳定性能做到是最牛的

毕玄:对程序来讲,性能当然很重要,但其实最最重要的肯定还是鲁棒性,因为我们没有办法非常好地预判这段代码运行环境到底是什么,你现在设计的时候是这样,但过段时间环境可能就变了。

所以大家说看代码绝对能看出一个人的功底,只要秀几段代码,我们很快可以判断这个人的大概水平。现在我没写很多年了,但我还是能看一眼看出差别,为什么他写那几行代码,你看起来没有意义,但出问题的时候,因为有那关键几行,他的就保住了,而你的就挂了。

阿里以前出现很多Bug比如说最简单的用一个数据结构去缓存所有用户信息以前写的时候他觉得这公司用户量不可能到100万所以那个缓存没问题但很快量就突破了然后缓存的内存就爆了结果整个系统全挂了。但写得很好的他一开始就会设一个保护到了多少会直接自己异常掉不会把整个系统搞挂这就是有经验的人这就是差别。阿里出过很多次这样的故障都不是一两次很多很多次。

后来很多人写接口也是这样比如说我给你一个函数输入XYZ你随便输入因为很多人的意识是我已经在设计文档里告诉了你X不能大于1000但是你还是输入了超过1000然后我挂了他觉得那是你的责任。

但事实上一个好的程序不是这样的,我不是靠文档,文档上既然这么写了,我的代码里就会控制,如果入参给超了,我一定会给你一个异常,这样整个系统不会出问题,这就是一个非常优秀的程序员。

极客时间:但要做到这种程度,考虑到可能存在的各种异常,然后写处理代码,这是不是也有时间成本?

毕玄这就看追求有些时候比如中小公司很多人就会说这个概率很低不会出现所以他觉得我为什么要浪费时间写这些1/10000或者1/100000的事情但我们说这就看你想不想做一个好的程序员。

 

极客时间:如果我们总结一下你的这段消防队经历,你是一个喜欢解决问题的。

毕玄:对,因为我喜欢做英雄式的人,我本来以为很多人应该都喜欢,后来发现不是,像多隆就不是,很神奇。但以前我跟多隆比较过,我是能看出差距的,而且这个差距是很难弥补的。

极客时间:看到差距了,你和高中那会一样选择接受,也不挣扎?

毕玄:因为我碰到过几类这样的程序员,我必须说他们可能天生就是应该做程序员的人。

就像我解决问题是要有现场在的,比如一段代码有问题,我要能看到现在输入了什么,执行的过程中出了什么问题,然后我来排查,但像多隆这种人他是可以大概推测的。因为现场经常就没有了,对我来讲就很难,我需要再等,但多隆不是,以前跟他一起排查,我告诉他这段代码可能有问题,然后多隆拿去看,过段时间来告诉我,你试一下把参数改成什么,然后跑一下看看会不会出问题,就真的会出问题。

这就比我高了一个档次。这种人是可以在自己大脑里运行代码的,像我们这种就不是。

极客时间:这种能力,不能多看案例训练出来吗?

毕玄很难训练这真的应该是天生的。我们还见过更牛的。CPU可以多线程同时运行但人脑最大问题是单线程我们程序员写代码又经常要写多线程的并行代码就导致查问题特别难因为我得在脑袋里模拟计算机的并行。当时我们碰到一个并行问题一帮人想了很久头都要晕过去了但以前阿里有个女程序员她就可以在头脑里同时并行跑代码猜出问题来。

我们都承认这就是天生差距,是无法弥补的,其他的我可以靠后天不断地解决问题把技能堆上去,但碰到这种,我说我认了,那我认输了。

这种人你想写代码的质量自然会更高很多相当于在自己的脑袋里可以先跑一遍这太恐怖了以前传说Jeff Dean有个笑话如果Jeff Dean写的代码跑不过肯定是编译器出Bug了这简直了。

有些人会觉得自己学得很累,但还是很难跟别人比,说实话,这真的是天分,所以我们会跟很多人说不要都做程序员,有些人并不适合,或者做到这个份差不多就可以了,然后就躺平多爽。不用纠结一定要成为多顶尖,这个世界上这么多程序员,最终顶尖的就那几个人,你没法跟他比,也没必要去跟他比,想成长可以理解。

 

 

极客时间:你喜欢解问题当英雄,所以从这个角度看,你在阿里之后的很多段转岗经历,好像背后都能用喜欢解决问题的逻辑来串,你看到一个问题,然后去解决?

毕玄:对,我觉得跟每个人的定位有关系。我是想过我自己的相对优势的,因为每个人的优势是不一样的。

后来我对自己的判断就是我很难成为一个非常专业性质的程序员做非常深度的比如操作系统、语言这种因为我也试过一段时间我带过JVM团队他的特质是必须在一个很小的问题上持续钻研可能只提升了一点点他也很愿意钻研。所以说实话多数程序员都不适合干这个。

极客时间:这种持续钻研的专业性程序员,是不是有点像搞科研?

毕玄你可以认为这一定程度偏科学家性质。科学家就是这样在一个很小问题上当然影响可能很大但看起来就是一个很小的点上不断地突破他觉得突破0.1都是有意义的。但我不适合做这种,真的呆不住,解决问题型的人可能都有这个毛病,够用就结束了,得靠不断解决问题升级。

我更适合做宽,就是广度,因为相对来讲我对各方面都有点兴趣,都愿意去了解一下。另外我可能的优势是可以大概判断,做什么事情是对这家公司相对更有意义的。这其实是需要肯思考的。

所以综合起来我可能适合的是把一个事情从0分做到80分但我不适合从80分继续做到90甚至更高。因为说白了做到一定阶段再往下突破会很难我需要找别的人但我觉得既然最后要靠我找的那帮人那干嘛不让他们来我就不想干了无力感会太强烈。当然这是个人判断。

极客时间:比起更偏专业技术的钻研,你喜欢在各种新领域横跳探索,是不是更偏业务一些?

毕玄一家公司的高管越高层级包括到副总裁以上其实是需要这种人的因为从80分带往90分带往更高你可以组建更专业的团队让他们来解决就好了然后你专注在各方面业务层面。

极客时间:啊你很清楚自己更适合做什么,但能像你这样想得这么清楚,感觉也挺难的。你有什么方法吗?

毕玄:当然刚毕业的时候,你不用纠结这个问题,因为刚毕业你的长短可能不是很突出,另外你其实也不知道你的长板真正在哪里,所以刚毕业的话,你也许可以多试几个角色。但是最后你一定会发现,在某个角色上你是相对轻松,而且同时干得也不错的,一定会有这样的角色,不可能没有,每个人都会有。

所以不用纠结我一定要在程序员上比他干得更好,没必要,因为你可能怎么干,都是干不过他的,这就真的不用纠结。每个人还是要想清楚自己适合的,还有你的长板。

但这也不一定是好事。以前阿里就有人跟我讲,你给自己画了个框,将来你是很难突破这个框的,因为你已经限定了自己,但如果把这个框去掉,想象空间变无限,就可以什么都干,尤其在大公司。

我自己的看法是,如果你很年轻,确实不要给自己画框,但你如果职业生涯有限,我觉得画个框不是坏事,因为你到中后期肯定是发挥自己的长板,短板就不用在乎了,没什么好在乎的。

极客时间:尤其大公司不要画框,那小公司不一样吗?

毕玄:小公司我觉得完全不一样。因为小公司难道还需要一个人帮忙吸引人才,然后他啥也不干,就指望下面干活?这个人一定会被砍掉的。但大公司不一样,大公司需要有人能凝聚一帮人干成事,因为大公司管理有各种各样的问题,所以这样的人反而适合走向更高级别,他需要接受自己不是那个真正解决问题的人,但他的优势是能凝聚一帮专业的人来解决问题,这也很牛。

老马就是这样的人马云就是我有一个想法然后有一帮很专业的人都拜依你的想法为你拼命。我也很佩服我觉得这是不一样的但我很难接受。所以后来我换的每一步都是我认为这家公司现在分比较低的一个领域比如可能是0或者60分我觉得我去可以做到80。所以导致我在阿里换了几个位置。但后面更被动前面确实是主动的。

极客时间HSF做完像你后面做的HBase、T4都是主动换的

毕玄后面的HBase就是因为HSF我觉得已经很难把它带到更高了我不知道该做什么了再做这个Leader就很不好因为如果Leader都不知道去哪里其他人肯定挂所以我觉得没有必要。

 

水友讨论区

到这里对谈就暂时结束了,在淘宝消防队处理各种故障的过程中,毕玄的编程能力也突飞猛进,也为他之后找到自己的优劣势埋下了种子。

今天对谈的重点是程序员能力三关,从基础能力过关的“职业程序员”,到解决问题高光出场的“英雄”,到写的东西不出问题的扫地僧“宗师”,每一关都能让你的编程能力实现阶梯式的提升。至于如何衡量你每个阶段的掌握程度,毕玄也给了一个简单又实用的方法——分享,看你能多久把自己讲空掉。

最后是今天的自由发言环节:

对于程序员的能力阶段,你是怎么看的呢?你有哪些好用的知识积累技巧吗? 毕玄解读了他认为做广和做深,他更擅长做广,回顾学习/工作生涯,你有发现自己在某个角色上是相对轻松,同时干得也不错的吗?你觉得自己的优势是什么呢?

欢迎留言交流,说不定今天就是你的小宇宙觉醒之日。

下一讲我们聊毕玄在淘宝的第一段转岗经历做完中间件HSF他居然又跑去做数据库和容器了下一讲见。

拓展阅读

如果你处在程序员的第一关,关注如何精进自己的代码基础能力,毕玄之前总结了一套方法可以参考:- 程序员的成长路线- 程序员的成长路线(续)- 程序员的成长路线Remix- 怎么提升写代码的能力- 高质量的工程代码为什么难写- 又是一年校招季,我是这样考察学生的