“全栈模式”必然导致“质量雪崩”!和个人水平关系不大

在经济下行的大背景下,越来越多的中小型企业开始放弃"前后端分离"的人员配置,开始采用"全栈式开发"的模式来进行研发费用的节省。

这方法真那么好吗?

作为一名从"全栈开发"自我阉割成"前端开发"的逆行研发,我有很多话想说。

先从一个活生生的真实案例开始吧。

我认识一个非常优秀的全栈开发,因为名字最后一个字是阳,所以被大家称为"阳神"。

1. "阳神"的"神狗二相性"

阳神当然是牛逼的。

他不仅精通后端开发,更是对前端了解的非常深。这样来说吧:

当他作为后端开发时,他可以是那群后端同事里库表设计最清晰,代码最规范,效率最高的后端。
当他作为前端开发时,他除了比几位高级别前端稍逊一点外,效率和UI还原性都非常高,还会主动封装组件减少耦合。

但是非常奇怪的事情总是会发生,因为一旦阳神不是全职的"后端"或者"前端"时,一旦让他同时操刀"后端+前端"开发任务,作为一名"全栈"来进行业务推进时,他的表现会让人感到惊讶:

他会写出设计糟糕,不规范,职责混乱的代码。

这个现象我把他戏称为"阳神"的"神狗二相性",作为单一职责时他是"阳神",同时兼任多职时,他就有非常大的可能降格为"阳狗"。

为什么呢?这是阳神主观上让自己写更糟糕的代码吗?

不是的兄弟,不是的。

这是系统性的崩塌,几乎不以人的意志为转移。换我去也是一样,换你去也是一样。

2. 分工粗化必然导致技术细节的差异

从前,在软件开发的古老行会里,一个学徒需要花很多年才能出师,专门做一把椅子,或者专门雕一朵花。现在,你被要求从伐木到抛光,从结构力学到表面美学,全部一手包办。

生产力在发展,对人的技能要求也在发展。

因此"分工细化"成为了工业革命之后完全不可逆的趋势。

IT 产业上也是如此。

"软件开发"经过多年被细化出了前端开发后端开发客户端开发大数据开发 等等多种不同的细分职业。

但是现在有人想通过 粗化 职业分功来达到 "提效" 的目的,在我眼中这就是和客观规律对着干。

人的精力是守恒的。当你需要同时关心useEffect的依赖数组会不会导致无限渲染,和kubectl的配置能不能正确拉起Pod时,你的注意力就被稀释了。你不再有那种"针对一个领域,往深里钻,钻到冒油"的奢侈。

当你脑袋里冒出了一个关于前端工程化优化的问题时,身为全栈的你会本能地冒出另一个念头:

在整个全栈体系内,前端工程化优化是多么边角料且无关痛痒的问题啊,我去深入研究和解决它的性价比实在太低了,算了不想了。

如此一来,无论是后端的性能问题还是前端的性能问题都会变得无关紧要。

结果是,只有业务问题是全栈开发要关心的问题。

2. "岗位对立"与"自我妥协"

在日常开发中,前端开发和后端开发之间互相吐槽争论是再正常不过的话题,而且争论的核心非常简单易懂:

前端:这事儿不能在后端做吗?
后端:这事儿前端不能做吗?

可以的,兄弟,最后你会发现都是可以的,代码里大部分的事情无论是在浏览器端完成还是在服务器里完成都是可行的。

但是,总有一个"哪方更适合做"吧?

  • 一个大屏页面的几万几十万条的数据统计,是应该后端做还是前端做?
  • 业务数据到Echarts展示数据的格式转换应该后端做还是前端做?
  • 用户数据权限的过滤应该后端做还是前端做?
  • 一个列表到底要做真分页还是假分页?
  • 列表已经返回了全量实体信息,为什么还要再增加一个详情接口?

这都是日常开发时前端和后端都会去争论思考的问题,身处不同的职位,就会引入不同的立场和思考。

  • 前端需要去思考页面刷新后状态的留存,js单线程下大量数据处理的卡顿,页面dom树爆表的困境。
  • 后端也需要思考并发下服务器资源和内存的分配,可能的死锁问题,以及用户的无状态token如何处理等。

前后端的"争吵"和观点输出是不可避免的。

真理总是越辩越清晰的,后续讨论出的结果多半是最有利于当前现状的。

但如果"前后端"都是同一个人呢?

全栈模式,完美地消灭了这种"有益的摩擦"。当你自己和自己联调时,你不会给自己提挑战灵魂的问题。你不会问:"这个API设计是否RESTful?"因为你赶时间。你也不会纠结:"这个组件的可访问性够好吗?"因为你还得去部署服务器。

这两种思想在你的大脑里打架,最终往往不是最优解胜出,而是最省事的那个方案活了下来。

于是,你的代码里充满了"差不多就行"的妥协。这种妥协,一两个无所谓,当成百上千个"差不多"堆积起来时,质量的基础就酥了。

内部摩擦的消失,使得代码在诞生之初就缺少了一道质量校验的工序。它顺滑地流向生产环境,然后,在某个深夜,轰然引爆。

3. 工程的"不可能三角"

软件开发领域有一个著名的"不可能三角":

快、好、省,你只能选两样。

全栈模式,在管理者眼中,完美地实现了"省"(一个人干两个人的活)和"快"(省去沟通成本)。那么,被牺牲掉的是谁?

雪崩时,没有一片雪花是无辜的。但更重要的是,当结构性雪崩发生时,问责任何一片雪花,都意义不大。

至于"快、好、省"这三兄弟怎么选?

那主要看老板的认知和他的钱包了。

相关推荐
IT_陈寒2 小时前
JavaScript性能优化:7个90%开发者不知道的V8引擎黑科技
前端·人工智能·后端
Eme丶2 小时前
Nginx部署vue以及转发配置记录
前端·vue.js·nginx
大气层煮月亮2 小时前
Oracle EBS ERP之报表开发—嵌入Web中的报表预览、报表打印
前端·数据库·oracle
excel3 小时前
Vue 中 v-show 与 v-if 的全面解析
前端
野犬寒鸦6 小时前
多级缓存架构:性能与数据一致性的平衡处理(原理及优势详解+项目实战)
java·服务器·redis·后端·缓存
回忆哆啦没有A梦6 小时前
Vue页面回退刷新问题解决方案:利用pageshow事件实现缓存页面数据重置
前端·vue.js·缓存
A_ugust__6 小时前
vue3+ts 封装跟随弹框组件,支持多种模式【多选,分组,tab等】
前端·javascript·vue.js
林九生6 小时前
【Vue3】v-dialog 中使用 execCommand(‘copy‘) 复制文本失效的原因与解决方案
前端·javascript·vue.js
yi碗汤园7 小时前
【一文了解】C#的StringSplitOptions枚举
开发语言·前端·c#