likes
comments
collection
share

重新定义“全栈”工程师。

作者站长头像
站长
· 阅读数 8

什么是全栈工程师?

全栈这个词,我也不知道什么时候被提起过。但是这个词肯定不是国内先提出的。应该是外国吧,外企更多的需要是全栈工程师。

说到全栈,大家的第一反应是什么呢?不就是全后端都会写一点嘛。如果你是这么认为的话。那么这就对全栈工程师有一定的误解。

中国大多数的“资本企业家”只是把你当作工具人看待,把你当码农看待。并非是当程序员看待。你只是为了快速迭代版本而产生的工具人。

那什么是码农呢?把功能模块细分到写功能模块的细腻度,整个项目的制作和业务你也不清楚需要做什么,你知道我今天工作量只需要完成这一块的功能模块就好了,或许只需要对接一下后端这个接口,看看这里的操作逻辑是否正确。

但是有没有想过,其实现在的后端写接口他们没有考虑过什么数据结构给前端是最方便的。反正我也不管了,crud直接把数据库的所有信息给你前端就好了,不要来烦我。前端对接的时候很多时候不知道后台业务,反正我只知道对接他个接口就好了,这种模式下就是缺失了全局思维,这无疑是软件工程的最大悲剧。

有打个比喻,微信公众号的文档,和支付宝的开发文档。对接起来的接口完全就是一个天一个地的区别。微信的开发文档更多的偏向自己以为想是这样的,没在使用者和调用者的方面进行考虑。无疑设计这个接口的人是很少去做客户端的工作,他用自己和客户端调用同事开发经验进行设计的接口,缺乏了客户端的经验。导致微信公众号开发文档,和很多接口的调用的时候,你是真的想祝愿这家公司倒闭,但是又很无赖。相比支付宝的开发文档和使用感受是真的舒心太多了。比如antd 支付宝支付文档 还有spring cloud 阿里巴巴这类的工具你使用起来都会相对简单。阿里巴巴是真正站在开发角度解决开发效率的痛点!!!

全栈真的是一个人做完所有事情吗?

国内认为的全栈就是前后端制作,一条龙服务的程序员。但细想一下,人的精力都限的一个完整的系统怎么可能让你一个人制作完成?虽然说你可以一个人把业务一条龙写完,但是站在项目管理学里面,这是不可取的。为什么?

所有的功能都集中在一个人身上无疑是增加了项目的风险,打个比喻,你写代码的时候多多少少都会有些时候会卡住遇到bug,而这个时候你是需要去解决问题的!!。那么这个时候你要去排斥问题的时候后面的项目进度就会有所耽误。这个时候应该有另一个人进行写后端。站在《系统集成工程师》(PMP)的角度这样的做项目的风险是不可取的。

说到这里如果是做后端的人会发现,这TM不就是多进程吗?全栈的开发模式应该就是这样。相互交替的进行工作,因为前后端都懂,所以在开发过程中应该由全队对需求进行设计前后端的功能模块/数据应该如何进行通信。这样在开发的过程中,前端写完的人去对接后端的时候,可以自己排查问题一些问题。

听很多朋友反应有时候当对接一个接口可能等很久(不过这是一件不错的事因为你可以摸鱼,然后把锅甩给后端)。又或者说,你到一个问题,可能是前端的代码问题导致的,但是前端一直会甩锅给后端。后端去排查日志的时候根本就没有排查到什么原因。这也是很多前后分离后大多数企业遇到的问题【甩锅】,是就是缺乏全局思维导致的。

说了这么多,只是想说全栈工程事并非是一个人做一条龙服务,更多的时候是类似多线程一样必行开发的。偶尔你需要进行多线程去对接他人写完的代码,并进行code review 他的代码,阅读代码也是一种学习的过程。但是你实际开发过程中,又多多少少回去code review他人的代码?除非你要拷贝他的功能才会去看吧。

会存在替人擦屁股吗?

有人会问到,如果那个人写的代码不对,或者存在很多问题,那我不就是要为他插屁股吗?这种情况是有可能存在,如果出现这个问题,那只能说明一个问题!那就是团队的代码质量把控存在问题。我只想问单元测试的作用是用来做什么的??

单元测试不就是用来校验他写的功能是否存在问题吗?如果单元测试做好这一步,做一些小修改一般脾气好的人,也就顺手了。毕竟kpi就摆在那,你愿意等你就丢回去给别人去修改咯。

全栈是为了避免开发进度风险

做项目,无疑你会经常遇到一些情况,就是跳槽。这个时候你人员不够的情况你会怎么做???一般的管理层都会委婉的挽留你,这个时候就会叫别人来代替你工作。要么就是加薪问你能不能留下来。无非就这两种结果,国内企业最常用的手段。

那么如果一个月内还没有招到人,你是管理员你会怎么做呢??项目进度就放在那。合同法就在那,你不可能说一个月了不放别人走吧?这个时候你还是会做出以下三种选择

  1. 给离职的员工加,这是简单粗暴的方法。但是你后面的日子也不会好过到那里,工作量必定会添加。中国人只要你不服我,我必定让你xx。

  2. 委屈对接的同时同时写一下 server / fornt 端 code。如果你不经过系统的学习,突然叫你去写一个无知的领域,那对于开发者是一种超级痛苦的事情,就是搜索引擎放在你面前也只是一本天书。但可笑的是,很多企业一旦你接受了这种方式,后面的所有事情就由你来承担,中国人最怕的就是背锅,你就会给你贴上了标签这人是全栈工程师,但并不是,因为没有经过专门的系统学习。

  3. 调度其他项目组的人来协调,可是往往项目组的人员也是很紧缺的。你问我项目组借人,我就借啊?不要忘了项目组和项目组之间也是存在竞争关系的,公司的每个项目组就类似一个小工作室。

说了这么多,全栈工程师其实可以避免这种风险的存在。但是安装国内的吸血资本家的尿性,肯定想你都可以一个人完成了,先省省成本吧。或许你以后都看不到另一个和你一起奋斗的伙伴...。

有时候一个项目如果你请假了,那么为了保证项目可以顺利的进行,全栈工程是可是可以去排查问题的。这种情况出现什么情况?比如运维突然告诉线上有一个bug需要修复。

刚好做这一块的同事请假了。就会出现一个很尴尬的问题就是叫你回公司修复,这是最TM恼火的事情。那么全栈工程师就可以避免这种事情。

编程规范统一

说到这个问题,国内很多人认为的编程规范属于,代码书写统一、格式统一就可以了。但其实不是这样的,编程规范的最终目的是为了保证编程思路统一!!!但是又有多少家企业能做到呢?有那肯定是大企。比如Taro.js他就很明确的表明了编写代码的规范,如果你不安装他的规范进行编写,在webpack进行编译的过程中,或多或少会出现各种奇奇怪怪的问题。但是往往很多在使用Taro.js的开发者并没有去看这一部分的内容!!!实际开发过程中,遇到问题就会一直isset和搜索引擎编程。但凡你认证看一下taro.js编程规范,有很多的问题都可以避免。

全栈能接受他人和顶替他人工作的的前提也是一样的,需要编程规范统一。java js 这个类语言写法千奇百怪百怪。高手和新手的理解不同,写出来的代码也是不同的。为什么python go 这类语言写出来的东西无论老手和新手都能看得懂?他们在设计的开始就已经统一了编程规范,和标准库。框架的作用也是如此,他在设计的过程中已经规范好所有的约束。

相比于其他前后分离的程序员,全栈更多的是需要对系统的全局的的认知,再开发过程中更好的简化开发的痛点。

我不知道大家知道GraphQL吗?这作者如果只是做前端或者后端的话,我估计他是想不到这个想法的。

全栈知识面不精通?

先来看看我面试JAVA 25k的面试反馈。

重新定义“全栈”工程师。

再来看看前端 21k的面试反馈

重新定义“全栈”工程师。

在国内很多人对全栈的认知就是会写代码不精的人,说白了就是码农。这样的人并不能称为全栈工程师。

前后比例失调的全栈都是假全栈

感觉国内的全栈要么就是 前端/比例失调 ,打个比如你会前端80% ,但是后端知识只有20% 。由于现在都已经是jwt/localstore的时代了,大部分的前端去写后端也就写接口这样,但是并没有对后端进行系统学习。这一类自称全栈的人多的是。 估计 cookiet ,seesion 这类的的知识可能面试的看过类似的问题,但是实践的作用是什么呢?在他们的认知里面前后端的开发不应该是对接接口吗?cookiet也只是存数据的工具,但真正实际开发过程中,就真的摸不到边了。

其实我想说的是 jwt 只是一种方式,但是如果你想你的web制作的过程中省力点,你的web端怎么做?如果你有学过nginx的话直接反向代理,然后的web前端可以直接把jwt存在session之中。那你做的web就的有一个可靠的认证管理,过期时间这些都交给session去做。其他端还是原本照样子进行通信即可。我们只需要在jwt校验的地方加一个session的判断jwt获取即可。如果使用session没有那就走header。客户端也拿不到所谓的jwt,因为session的值是存在服务器的。有人会问那不是服务器端很大的压力吗?我也想访问,你们为了要知道jwt的安全性那redis来存有什么两样?你可以把session的存放也放在redis。

又或者说上面所说的离职情况。后端程序员这个工种, 叫你去看看这个后台管理页面怎么修改这种尴尬的问题。 这类人长期在这类环境进行工作的,久了也就误人自己是全栈了,一旦出去之后。其实还是后端,只是比纯后端懂了一点点前端的知识。他的前后比例也是完全失调的。

前端知识和后端的海洋都是深不可测的,这六年来我面试每刻都在读书。

那么真正的全栈都是5 5开,不存在哪方面弱,那方面强。他是一个整体,是需要每一块知识都要熟悉把控(85%)。码农和程序员最大的区别就在与码农只会编码,而程序员更多是做软件工程的工作。

软件工程不是编码更多的是一个项目。做项目就应该有项目章程,项目计划,风险控制。在项目制作的过程中我们更多的是都项目进行需求分析,然后在进行需求实现,那么对于程序员来说到了最重要的一步就是技术选型,如果你对每个知识点不熟悉的话,你能做到最优的方案,那是假的。如果你在前后比例失调的情况下进行技术选型,项目的风险能把控住我是不信的。

如果你说你只会使用进行编码的实现功能模块的制作的话,那不好意思。你是假全栈,如果你把这些知识点都一一攻破的话,当你遇到问题的时候(风险)的时候你不知道如何进行调优来解决问题。当然这场景并非所说的编码过程,而是线上实际的问题。

不以产品经理/项目经理 发展的全栈都是刷流氓。

说了这么多,为什么你要做全栈。其实说白了全栈工程师在软件开发工程中更多的是锻炼全局思维。也可这么说吧是产品思维。

你不是说全栈是互相交换的写代码?零散的代码你还能锻炼全局思维?你忘了一件事,因为你在这种交互的编程模式,你会更多的需要进行code review。阅读代码也是一种学习的过程,你在看别人的代码的时候你会把这个业务在脑海里面学习一次。相信国内的很多朋友编写就是这个功能我写完就完了,code review这些管我屌事?除非是真的太闲了,才会去看他人的代码。

全栈在这种开发模式久了,对一个项目的制作和风险把控的经验才有更深的理解,这种经验只能自己体会,我也不知道怎么说,当你做到了code review 这工作的时候你就自然懂了。当然你平时的沟通其实也是在锻炼一个产品经理怎么和他人进行一个交流的过程。这么做是否合理。

产品经理不就是要把需求是否合理能否实现的需求筛选出来,然后再一次和程序员进行沟通吗?沟通把需求和实现描述清楚也是PM的需要具备的技能。

在全栈的开发的过程中/(非一个人全做一条龙服务)团队之间的协作,沟通还有技术能在这种的交替的全栈开发过程中学习到。这是一面项目团队管理的课程。这里就不详细讲述。全栈开发是对项目的一个整体把控。产品/项目经理都要对一个项目具备整体把控,制作在实现功能的时候,设计功能的模块的时候才能具备更优的方案和工期的把控。

当然国内的用人成本还是相对的低,因为人多,不缺劳动人民,反正你不干大把人干。可以把东西都才拆分都个个部门了,这也是为什么技术出身的人,最高的岗位是做什么多呢?部门经理!!!

你要成为项目经理/产品经理如果不经理这中整体的思维开发。真正要去把控一个完整的项目的实施和风险把控。如果你没有这些思维。是成为不了产品经理/项目经理。

往往最好笑的就是,国内的产品经理是设计师来演变的,经常听到很多ui设计说称自己是产品经理。ui真的懂程序吗??ui不懂程序,我好奇的是,他们设计出来的产品功能能实现吗?如果不能实现这样的风险又谁来承担???

误区

  1. 全栈并不是一个人完成一条龙服务!!!我也不知道谁定义的这种开发模式
  2. 全栈技术并不比前端/后端差 (只是国内的程序员太卷而已)
  3. 全栈锻炼的是全局思维。你可以更好的学习到软件开发的全过程,还有风险的预估,更好的计算项目预估成本。