全栈之殇

听说“全栈”这个词,还是 2013 年的夏天,在 Coursera 的一门叫“Startup”的课程里见到的。那时朴灵的《深入浅出 Node.js》才出版两年,全世界都在追求能跨所有端的开发能力,前端、后端、iOS、Android,甚至数据库,国内甚至还未起步。

如果说一个人完成所有开发任务可被称为全栈,那么早在单机时代、Java 时代,一切都不是问题。所以这不是新概念。全栈的出现处于 App 时代的末期。也许很多人都读过这样一本书,《App创富传奇》(Appillionaires),是那个时代非常棒的缩影:卧室创业,一两个独立开发者每两三个月创作一款 App,只要其中一款火了,瞬间成了百万富翁!可是 App 的技术体系已经远比曾经的单机应用复杂,在那样的背景下,市场迫切需要支持一两个人独立构建完整应用系统的技术方案,也迫切需要具备独立构建完整应用系统能力的人才,也就是传说中的“全栈工程师”。

全栈所用的技术并不一定等于“H5 + Node.js”。有些工程师自学 iOS、Android、Win Phone、H5,以及 Java、PHP、Python 中的一种,也能形成全栈开发能力。其实对于绝大部分市场需求而言,任何技术的入门教材足以应付,毕竟能形成规模的产品少之又少。一时之间“全栈工程师”遍地开花,学习新语言、新技术框架的潮流不可阻挡。哪怕跟一个刚毕业两三年的新手聊天,如果聊不出 Rust 和 Go 的区别,似乎都是一件很没面子的事情!

然而,也就火了那么两三年。

技术这件事,关键不在于能不能,而在于好不好,技术的品质是通过产品体现的。做垃圾产品的不一定是垃圾技术,但绝大部分技术确实只能做出垃圾产品。如果一个工程师在过往的技术生涯中没有做出过精品,可能是因为运气差;但如果连追求卓越的努力都看不到,那真的是没有未来。所以我在面试中非常看中“追求卓越”的经历和心态。对于全栈也是如此,遍地开花的结果是严重拉低了下限,以至于让很多人失去了信心。

不被主流务实团队采纳的主要原因,更多的源于自身。全栈方案缺乏标准、工程师水平难以评价、费力不讨好,人效的提升建立在损失用户体验的基础上、通过扩大单位工程师职责范围和工作量来实现的。即便全栈团队在各方面都能达到与传统团队比拟的技术标准,那样的团队个个都是会写代码的技术总监,团队的管理、可持续发展、规模扩张都很成问题,现实中几乎不存在。

技术圈一切的偏见与傲慢都源自一个简单的公式:ROI = 收益 / 成本。全栈要挤进主流技术圈,必须解决这个公式衍生出的所有问题。

首当其冲的就是系统复杂度。全栈是由于系统复杂度过高而催生的市场需求,却并没有很好的解决这个问题。系统复杂度大致可表示为:O(核心业务数量 x 技术栈深度)。 如果谁还迷恋 20 年前的 BS 架构,希望“浏览器、Web 服务器、中间件、数据库”这种分层架构能满足互联网业务需求,还是醒醒吧!如今的分布式系统技术栈已经深得令人发指!全栈方案并没有减少这些环节,要想构建多复杂的系统就得做相应多的事,这对于完全依靠自身力量从零构建服务的团队来说是很难跨越的坎。所幸市场给出了一种解决思路,那就是把实现业务所需的技术栈尽可能挤压到业务逻辑层,其他的一切技术环节都由基础设施或者第三方服务商来提供,也就是 IaaS 和 PaaS。但是市场只是解决了各技术环节自身的复杂度,长业务链条所面临的复杂度问题依然维持原有的量级:每增加一条覆盖全技术栈的核心业务链路,系统的配置项、测试项、监控项等方面因素都会成倍增加。在这样的情况下压缩人力成本不太现实。

进而衍生出系统可用性问题。业内让分布式系统长链条业务可用性每提升一个 9 要付出的代价,堪比再创建一套等量的系统,甚至还要多。全栈方案缩减的成本反而很可能威胁到可用性。为什么这么说呢?可用性的提升一般分为故障感知和故障处理两大部分。故障感知一般分这几种境界:全靠用户吼、基础设施监控、核心服务监控、全链路监控、终端用户体验监控;故障处理方式又分为被动响应式处理、主动干预、自动处理,故障处理手段根据影响的用户范围大小而定,从全局服务重启,到局部服务重启,乃至精确故障处理。从“全靠用户吼的被动全局重启”到“基于全链路及终端用户体验监控的自动化精确故障处理”,这中间所需投入的资源与系统复杂度成等比甚至指数级关系。全栈方案对此没有应对措施。好在 IaaS 和 PaaS 也能解决所负责技术环节的可用性问题,但是只是相对缩小了问题空间。

以及系统设计和终端用户体验在业内是一对互斥的技术能力,简称前后端思维矛盾,然而在全栈里要做到面面兼顾,往往却是顾此失彼。这些问题让全栈方案在收益上大打折扣,成本的缩减并不能带来 ROI 的提升,甚至很难满足复杂系统高可用的基本需求。所以在满足卧室创业的独立开发者打造可演示的 Demo 之外,在创造不要求质量的非关键系统之外,全栈几乎没有用武之地,注定边缘化。

这篇文章不是为了给全栈致悼词。任何困难都阻挡不住市场需求,全栈应需求而生,也会有时来运转的机会。是的,时机很重要。人工智能几十年来一直停留在实验室里,直到大数据时代让深度学习成为可能。相信在不久的将来,一定出现新的技术体系来解决系统复杂度和可用性问题,从而消除其进入主流技术圈的障碍。届时全栈开发的主力很可能来自于现在的前端行业,因为系统问题终究是技术能解决的,而端的多样性和环境复杂性,却会持续相对更长的时间,说不定会一直持续下去。

你可能感兴趣的:(全栈之殇)