我在上一次的新员工交流会议上,问新员工对全栈工程师了解不,我们的目标是成为一名全栈工作师,而不是做一名只会写代码的码工。最近遇到一些不开心的事,可能是在华为呆久了,发现到底都要会学扯皮。而我性情不太喜欢做一些自认为这些是无意义的事情。虽然有前辈告诉我,扯皮可能的效果会让你少加班几个月。说着说着,有点偏了,扯皮其实是沟通成本。项目越大,沟通成本越高。带个项目的人都会意识到,项目中的人力是1+1<2的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。
减少沟通成本,我们需要全栈工程师,因为各种技术都懂,胸有成竹,自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多。懂你的,你懂的,相互理解,也就少了很多的时间在扯。
那什么是全栈工程师:通俗地讲,掌握多种技能,并能利用多种技能独立完成产品的人。打外比方,全栈工程师就是一个能独立盖一幢10层小洋楼的人,而普通工程师,则是可以和一群人盖一幢摩天大楼的人。较搞地讲,全栈工程师=**丝战斗机=系统+网络+研发+DBA+架构+安全=没女朋友/没男朋友,拿一份工资做三份事情,公司的奋斗者,其它人眼中的牛人,傻X。有人说了,你再牛X,你懂五种技术,你能干五个人的活吗?全栈工程师并不是说一个人能干几个人的活,而是要从多个方面来看这个问题。
我们遇到了什么问题?产品在报怨平台;开发在报怨SE没有搞清需求,规格写得不清不楚,不了解系统实现;测试在报怨开发,问题太多,Story写不好,自测试不充分;开发在报怨测试,不了解系统,机械提单,单的质量低,场景不符合业务。听多报怨,人也会变成急躁不安。心平气和,放下争端,谁都想开心上班,开心下班。报怨也是解决不了问题,反而是有摧卸责任之嫌。
那在华为,全栈工程师能解决上面的问题吗?不能!首先,在华为,细化的分工很难培养出全栈工程师,那你还提全栈工程师有什么用。一名的好的开发者,能缓和一些项目中的扯皮矛盾。好的开发者,即使不是全栈,也要融会贯通多种技术。我从来不认为一个只专精一种技术的人有可能成为好的开发者。从广度和深度的组合看,我认为好的开发者大概有两种类型:__1)手术刀;2)代码专家(来自《人月神话》)。__手术刀是业务驱动的,最需要全栈的人;他们的核心价值在于:懂业务,技术全面,都能拿的起来,而且能选择最合适的技术。代码专家是技术驱动的,即使不够全栈也可以用,但是技能树点的越多当然有好处。
如果你现在是一名开发,那我如何做。而在技术选择上以“关注商业目标”和“关注用户体验”为原则。脱离商业目标的技术都不会得到长期的认可,脱离用户体验的产品终究被淘汰掉。在华为,你做一名开发,首先要__主动关注前期需求分析__。发现问题,洞察需求,才能设计出实现方案,最终的实现也不太大的偏离。我一直比较反感我们想需求,觉得应该是这样的。或者做些用户根本不会使用的需求。但现在组织结构决定了我们不能向客户靠近太多。那我们能做的就是多与SE讨论,规格是一种载体,把问题讨论清楚,澄清准确是关键。开发也要意识到需求分析,设计不仅仅是SE的事。不懂设计的开发也不是一名合格的开发。
__吃自己的狗食。__真正的工程师是能真正明白软件开发不单单只是编码,还更要明白整个软件工程。只明白或是只喜欢编码的,那只是码农,不能称之为工程师。程序员要干几乎有的事,从需求分析,设计,编码,集成,测试,部署,从头到尾。如果你不能切身体会到自己干的烂事,自己的痛苦,你就不会有想要去改进的动机。没有痛苦,就不会真正地去思考,没有真正的思考,就没有真正的进步。
__学会测试与体验。__只有了解了测试的难度,你才明白怎么写出可测试的软件,怎么去做测试的自动化和测试系统。只有自己去使用自己的系统,你才明白用户的反馈,用户的想法,和用户的需求。开发如果都不知道怎么做测试,那还能期望测试能帮助你测试?开发人员本来就要测试自己写的软件,如果开发人员不懂测试,或是对测试不专业,那么这就不是一个专业的开发人员。开发人员了解整个软件的设计和开发过程,开发人员是最清楚应该怎么测试的,这包括单元测试,功能测试,性能测试,回归测试等。开发人员知道怎么测试是最有效的。开发人员的技术能力知道怎么才能更好的做测试。
__切忌摇摆不定。__我们学习技能和知识,不是为了成为某个领域的专家;而是完成自己目标所需要的。今天学C,明天学Java;今天搞Cloudify,明天搞CF。主张“先精后广,一专多长”的流程来学习,不要左右摇摆,先做一件事件再说。你所学,所使用的是要切合当前业务目标的。当然也要清楚地认清任何技术只是服务于市场的,在市场发生变化,如果程序员不能顺应发生变化,就有被淘汰的风险。人的角色也是不断变化的。8/2定律在哪都适用,全掌握20%常用技能的人,但这20%的技能会有80%的几率被用到,剩下那80%不常用的,让我们Google吧。另外具体经验也是相当的重要,任何的项目,你可以思考一下我学到什么经验。更重要的是思维方式和学习能力。项目中总会遇到各种问题,问题摆在那里你就需要去解决,而无论这要求你去钻研什么。这就是我所说的学习能力。
我不生产博文,只是互联网的搬运工。以上观点与内容来源于互联网,感谢伟大的互联网。