本文简单明了的告诉你如何建设专业前端队伍,更多是软性的东西。本文已获得小爝授权转载,原文地址可访问:
https://zhuanlan.zhihu.com/p/21779628
说好了,这周末更新第二部分,其实本来没想分成两段来写,但是无奈周五时间有限,外加上要写的东西太多,考虑到读的人的感受,第一部分就先说一下我们做了什么,那么第二部分就讲讲我们是如何做的。
可能有人觉得根本不屑,因为我们一没开发出来像淘宝,天猫,京东,贴吧,微博那样级别的产品,二来我们没有输出任何值得让人惊艳的开源项目比如weex,fis,vue这种框架,三来我们团队也没有什么大牛大神,所以非要往优秀上套,挺自不量力的。可是我也要说,如何保持专业的态度依然很重要。
没有任何一个团队全是牛逼的人,我们的身边更多的是一些普通的团队,普通的开发者。比如我,以前记得我还是个弱鸡的时候,在曾经的公司,也是20人左右的大团队,就当众表示过,我并不是这个团队核心的开发者,更不是明星程序员,但是我知道我的位置,我明白我在这个团队的使命,我知道我该做什么,因为我不相信优秀的团队都是天才,团队同样需要我这样的人来让团队更好。
没错,做好自己的事情就可以了。
题外话说的有点多,但是我却一直想对和我一起工作的小伙伴讲这个道理,做到自己努力程度最好的状态,也是一种成长。
可能有些人觉得上面都是废话或者鸡精含量太高的鸡汤,但是我觉得大家一定都经历过这种时刻,就是团队里有些人技术非常棒,自己非常弱,周会分享的我很难听懂,完成需求功能开发已经是很困难了,为什么那些人那么厉害,我该怎么做?
我觉得一个专业的团队(就不说优秀了),大家应该是都明确自己的预期和团队目标的,好的leader应该帮助没自己经验丰富的同事解除这些疑惑。
我经常听朋友抱怨,我的老大是个sb,我的主管是个2b,我们领导天天就知道吹牛逼,写ppt,或者朋友圈装逼,见到外面bat的大神就舔跪,看到不如自己的就踩,分配个任务就知道看结果,也不告诉老子怎么做,执行很重要,但是我如果什么都会还在你这里干啥?工资不如卖白菜的,领导还总是说让我操卖白粉的心,创业者心态一类的听起来表面很美好,现实却很骨感的话。
我特别明白,如果身处这样一个氛围里,是什么感受,大家都别说话,我全懂。
转换到一个技术团队,就类似,你丫天天都不写代码了,凭什么指挥我?同事全是辣鸡,换我我就全部重写了,你知道我开发这么一个功能用了多久吗?这个bug你不会解你没资格指挥我,你技术不如我好,为什么你是经理我却天天搬砖?
可能很多人,尤其刚毕业的,天天心里的状态就是上面我说的,只是大家没有拆穿明讲,毕竟拿人手短,吃人嘴短,如果我遇到更好的团队,我一定立刻就跑路,只是我还没遇到,哼,暂且在你这里再忍忍吧。
在我之前,也就是新浪的时候,前端最多的团队也就是12,3个人,大家分工明确,技术虽然有层级,但是其乐融融,大家平时开开心心的,每周分享一些新技术,也挺不错的。没错,我当时也不是什么leader,我就想着我怎么能让自己技术更好一些就行了。
可是一旦,也就是去年从一个开发者转换成一个半开发半管理,到现在纯粹转换为管理者身份,上面那些抱怨,牢骚,内心os,对于我来说,都是我要一一攻破的问题,就像解bug一样,我一开始是束手无策的。
没错,别说专业优秀了,哪怕是按时完成需求功能开发,有时候在一个公司都很难控制,更别说要保证团队的战斗力,技术专业性,换成你,你要怎么做?
没吃过大熊猫,我还是见过大熊猫的。也许是因为之前几年运气好,在一些优秀的团队干过,或者说专业的团队干过,现在换成我了,照猫画虎吧?这也是我刚一开始想的,我技术好就行了,管理很简单,不就是分分任务,评估下需求,开开会,然后就可以划水了?
每个人心里都有一个念头,赢取白富美,找个人傻钱多的公司和职位,安安静静的发大财。
你看我从现在都没有和任何人谈过情怀,因为我知道那是骗小孩的。
ok,分析完了,我简单说说我如何和我的伙伴们一起成长的吧,就不说什么打造专业团队的,反正我也就是个标题党的命了……
1,凝聚力不是靠口号喊出来的。
一个有凝聚力的前端团队,我可能不敢拍胸脯保证所有人心里想的都和我一样,但是我知道,一个人干不成大事,而每个人的需求又都不同,有人图钱,有人图稳定,有人图学到新知识,没有欲望是干不成事的,团队想往专业方向走,必须解决大家的后顾之忧,我个人也不是老板,但是我可以根据不同人的需求和目前的职场阶段,帮助到大家,并且诚心实意的感恩每一个人,说什么为了梦想啊,为了打到bat啊,离一线开发有点远了,但是如果换成说为了个人成长,为了以后能得到更好的就业机会,我觉得凝聚力一下就上来了。
天下没有不散的宴席,低姿态的对待每一个身边的同事,业务需求方是作为leader必须要干的事,并且要帮团队的每个人都成为和自己一样的人而努力。
举几个栗子吧,定期的技术分享,无论是内部的还是邀请外部人员来自己公司,这些都是额外的工作,甚至说和公司业务发展没什么关系的事情,为什么要做呢?因为团队需要凝聚力,需要专业积累,需要告诉一些能力还不是很强的同事(这些同事可能占70%),什么是好的东西,什么是专业的,什么是目前的潮流,只有这样大家才能在开发业务需求的时候,有新东西可以尝试,有新技术可以引入,见到代码知道哪些是写的好的,哪些是写得不好的。
我刚来这边的时候,经常会陪着(现在也是)大家一起加班开发,虽然说我不涉及到具体的模块开发了,但是遇到bug,一定会第一时间出现解决,帮大家一起排查问题,并且拿出实际的代码来解决,最后再和对应的开发一起把这段有问题的代码重构,让他看着我写。虽然现在人多了,做的少了,但是我每天至少20%的时间是在做这些事情。
因为这能让我保持清醒,能让其他人和我一起成长解决问题,能让大家觉得遇到问题了,以后怎么解决,而不是向上面说的,老大就安排我开发一个功能,给我3天时间,根本不管不顾我,有问题问他也不会,就知道天天和大boss吹牛逼。
我不喜欢这样的teamleader,所以我不做。我希望我能影响身边更多的人,这样凝聚力自然就起来了,而不是在微信群里天天喊口号,分享一些别人写得技术文章,再让别人跟着点赞。做这些不如实实在在的帮兄弟们解决问题,解决bug,处理需求。让别人觉得我以后也要成为你这样的工程师,来得实在。
2,专业态度不是靠wiki,规范写出来的(我不否认这2样必须有)。
wiki,规范是必须要有的,这是基础,因为需要依靠这些东西给以后来的人看,但这些不是让你成为一个专业团队的基石,他只能是工作需要,就像你写代码,一定要有注释,写API一定要有测试用例一样,但是如果专业态度不好,注释再漂亮也没人看,wiki再完善,也会过时,API用例再全,性能也不会高到哪里去。
专业态度需要让大家知道什么是专业的,什么是业余的。
我见过一些面试求职的人,做了3-4年的前端开发,css和js都会写一点,甚至后端php,java也会一些,写个基本的需求都没有问题,也能自己做做jq插件,写写框架的扩展,但是你说他是一个特别专业的前端吗?我觉得不是,而这些需要有人来做扫盲工作。
很多人写了N年的js,不知道是广播,js本身设计就是根据广播机制来的,但是很多人写了可能5-6年代码,都没有用过,哎,你别说,他的代码还真的跑的好好的,没什么问题。但是我就会说这个人不专业。
再举个例子,很多人写代码不考虑扩展性和复用性,前端嘛,copy一下就好了,函数嘛,一坨调用就行了,dom操作嘛,浏览器已经那么快了,这点性能不是问题,设计模式是什么?能吃吗?变量命名随便啦,不给你拼音混着英文一起写已经够给你面子了。
这些人也是工程师,但是他们不专业,他们也不想,但是没见过好的代码,这也不怪他们,框架离我太远了,我能力有限看不懂,业务代码随便写写了,反正也不会拿出去开源。就是这些恶性循环让一个不专业的团队,越来越不专业。
怎么办呢?我个人理解,能动手,就别BB。
他不知道什么是好,什么是精,我写一份,给你看。看明白了,以后你可以继续按照你的思路写,往我这上面靠,总行吧?每周的code review,称职的leader会拿出来100多行,精细的给大家讲一讲,哪里好,表扬,哪里不好,以后改正。专业素养不是一天一天培养出来的,但是一定要培养,这就是为什么需要一个技术好的人来影响身边的人,怎么影响?人都是懒惰的,你写给他看嘛,不强迫,但是有后续要求,不求急,但是心里要有数。
你看那些晋升的同事,都是大牛,为什么他们是大牛,因为他们专业,如果你不够专业,那么你最后就会被淘汰(每个人都有耐心,但是每个人的耐心也都不是无限的)。
3,业务需求和个人提升如何平衡。
之前国美+的产品迭代非常的快,不光前端部门,其他部门尤其是核心的bs开发部门,运维部门,APP客户端部门,测试团队,每个大部门都是赶着星星太阳月亮来让产品开发跟上timeline的,这是开发团队的责任,拿人钱财给人消灾,优先级绝对是p0的。但是业务需求是做不完的,个人技术提升怎么平衡?
我想反问一句,为什么做业务,就不能提升技能专业性?我还是拿前端来做比喻,最开始大家就是函数套函数的来写js,后来大家知道构造器了,单例模式了,再后来知道mvc了,backbone了,再后来知道数据前后端分离了,再后来又有了mvvm了,再后来又有了工程化的需求大家开始写脚本打包代码了。
这些不都是从业务中提炼出来的嘛?每写一行代码的时候都问问自己,这一行代码是否还有提升的空间?我每次code review都会重复的强调这句话,细节里出现魔鬼。
我还记得我在手浪的时候帮一个工程师重构一份业务代码,真的就是完完全全的一个运营活动需求,有机会之后我会多发一些我重构前和后的业务代码,这对我自己是一个提高,也对被重构的同事是一次提升,哪怕最后这段代码没有替换线上的老板代码,但是我相信,大家都成长了。我在做leader的时候也是一直这么做的,直到我改不出他的代码什么毛病了为止。
4,想成为一个什么样的工程师。
我问过我老大一句话,你是怎么决定的,要从码农或者高工架构师转为纯管理的?
我老大反问我,那你最终要成为一个什么样的人?
可能刚毕业的时候我会说,我要能把业务都写明白了就好了。后来可能说,我要学一点后端开发的知识,再后来可能会说我想看看app开发的书,再后来可能会说,我算法数据结构不好,想弥补这一块,再后来可能会说,遇到大型项目,排期很吃力,想学下时间管理了,再再最后可能会说,我想了解了解运维和服务器网络协议方面的知识了。
你看,目标和你的期望总是随着时间在变化。就像下象棋一样,你如果不知道你下一步应该怎么走,那你想想你的最终目标是什么?那么你的下一步就非常明确了。
我在私下和很多人这么聊过,我不知道是否每个人都听懂了,但是我都会尽心的帮助你,完成你的下一步,乃至最终实现 “将军“。
5,怎么找到合适你团队的伙伴(招聘)。
一般来说,招聘是hr部门的职责,如果顺桥你的朋友同事,也是程序员,内推一下。这是一般企业的招聘渠道,我们这边也是,大部分还是一些招聘网站渠道,猎头渠道来做撒网。
但是工作了这么久我很早就发现了,正常招聘渠道来的人,就像摸彩票,完全是一件碰运气的事情。
我相信物以类聚人以群分这句话,你是什么样的人,你就会吸引什么样的人,如果你是一名优秀专业的前端,那么你身边一样会有优秀专业的人来找到你。
那么,适当的让别人知道你专业,知道你是什么样子的人,就很重要了。主动出击成功概率大一些,但是做到让别人认可你,更加的重要,尤其是工作4-6年的程序员,换工作是一件非常麻烦的事,如果团队需要大牛,那么大牛一般都会手握N个offer的,待遇是一个方面,可能我控制不了,但是认可度和预期是非常重要的,就像上面说的,你能让他在团队获得或者满足他的欲望,他为什么不来呢?
说白了,如果你的leader不是前端,是个后端,那么他就不会知道你的欲望是什么。如果你的组长是一个后端,或者根本不懂代码的业务经理,那他怎么会找到合适的伙伴呢?因为他根本无法分辨也吸引不来优秀的人。
关于团队人员组成也是一个比较长的话题,这文章已经够长了,就不展开讲了- -。也许还会写写(三)?
6,怎么保证团队技术氛围和沉淀。
除了分享,wiki,项目总结,个人影响,还能做些什么?
为什么需要技术leader?他就是干这个的,保证团队可以在宏观上抽象出技术沉淀。我说的不是天马行空的造轮子,关注业务,关注业务,让轮子为业务服务,根据季度和每个人的时间,分配下必须要做的事情,比如因为业务调整或者性能问题,我们需要优化框架,造一个目前市场上满足不了需求的框架,帮大家统一开发环境,减少低效开发的损耗,给中高级工程师分派带人的任务,这些都是需要计划和一对一去聊的,技术氛围和沉淀也是依赖这些工作开展的。而不是说我分享完了,就完了,大家听一个乐呵,最后还是要落实落地,落地新技术也是一个长话题,当初面美团的时候最后和rank深聊了一些,可以后期再说说我的看法和最近的体会。
技术氛围一定是要leader刻意营造的,不要相信大家自己就把氛围搞起来了,那开完会还要主持人干什么,做需求还要pm干什么?
7,前端开发部在公司到底是一个什么部门。
web页面重构,基于web的交互开发,协同后端做数据渲染,这些是大家每天都在干的事。除了这些,我再说说我个人理解的前端部门应该做的事。
第一点一定要说,创新。我觉得前端是一个可以做很多有意思的事情的部门,当然整个公司所有部门都应该提倡创新,但是前端部门的创业可以最快的在产品形态,用户体验,网站性能上快速落地的,所以说前端开发部应该承担更多的创新工作,无论是交互形态还是内部工具,还是开发方式上,不爱折腾就不是前端。
第二点就是承上启下,前端部是和产品,后端,UI,UE,运营甚至编辑,还有大数据分析部门都会有合作的部门。所以前端除了技术能力沟通协调的能力也是非常重要的,只有做好了承上启下才能更好的发挥前端的作用,我一直认为前端属于开发部门,虽然我是个设计师出身,但是固步自封,闭门造车是非常不好的,本来前端技术就很独立,很少能接触到其他语言和领域,多和其他部门交流能够帮你跨维或者降维思考。
第三点就是bug梳理,不得不承认,依靠测试部门把bug能够完美区分的,我就没见过。。前端一定是最能找bug和bug最多的部门了。可能你找了一圈最后bug是一个接口的返回值问题,或者服务器环境问题,或者是设计文案问题,但是最后bug的第一接手人,一般都是前端工程师,我理解这种痛苦,所以我不会说强调大家bug量要少,但是bug的分析能力也是前端工程师的一个必备技能,而这种分析能力又是承上启下的,不懂后端,我怎么知道是接口?不懂app开发,我怎么知道是协议的问题?这就又要求前端工程师的技能高了一截,所以好的前端不好招,善待你身边的前端吧。
8,最好的管理就是和你的兄弟们一起成长。
除了制度上的约束,公司的,部门的,除了考核指标上的规定,必须遵守之外,定时的check大家的工作和成长之外,我个人觉得,管理就是和大家一起成长。
我不会觉得任何人比我弱,毕竟我干的年头也久,管理说白了就是让一群人帮你实现一个目标,如果自己可以实现,那就不需要管理了,自己干就行了。团队里一定有比你厉害的人,也有不如你的人,跟厉害的人一起飞,带不如你的人一起飞,大家实现共同的目标,不加班,少加班,做到其他部门对你满意度上升,做到大家对你团队的认可,这不就是管理的初衷嘛?
你的兄弟们成长了,你的团队成长了,你也成长了。
---------------------------------------------------------------------------------------
其他想到的之后再另外写文章补充吧,我觉得我还是务实一些,后续团队有一些比较惊艳的技术产出的时候,再来谈那些代码,比如如何写好业务代码,如何封装一个漂亮的javascript类库,如何设计一个前端框架,如何帮助不同阶段的前端开发人员成长和制定计划目标。
后续我的专栏会持续的写一些上面提到没有细说的问题,我还是喜欢务实,虚的鸡汤,一年灌一次就行了。我喝多了也吐。
后记
夜已深,未休眠。《课多周刊》才刚刚起步,很多事情还需要坚持下去,相信这对于前端开发者来说会是一份收获,对于自己也是一份收获,输入地址:https://w3crange.com,立即订阅吧。
言归正传我们在微信群中推出了《早读课》,每日分享一篇我们认真精选的文章(不限于前端开发类),其目的是帮助开发者来学习有价值的东西。想加微信群的朋友,直接添加我的微信号:icepy_1988,审核之后会邀请你入群。想加QQ群的朋友,可以直接添加:418898836,答对问题即可入群。
更多精彩内容可关注微信公众号:搜索 fed-talk ,来关注我们吧,也欢迎你将它分享给自己的朋友。