如果整个团队全是全栈开发人员,不区分前端和后端,似乎是一个不错的主意。但是在这个新时代,没有人能够掌握开发的所有技术。
以下为译文:
全栈的起源
在新千年来临之际,Web工具已发展得极为成熟,创建网站所需的一切都可以通过开源软件组建。我们可以仿照OSI网络模型,简单地将应用程序开发的各种技术分层,而整个开发所需的技术集合称为栈。
LAMP栈就是第一个栈,它包含四层:L表示Linux操作系统,A表示Apache HTTP服务器,M表示MySQL数据库服务器,而P表示PHP脚本语言。随着时间的推移,我们看到了分层概念的优势,因此衍生出了许多其他栈:WAMP、MAMP、XAMPP、LEMP、LEPP、MEAN、JAMStack等等。
有了这些技术栈,我们就相当于免费获得了软件开发复兴的钥匙,对于有兴趣创建网站的人来说,如今的门槛更低了。只要你有毅力和学习新工具、语言和协议的欲望就够了。你不需要使用微软、Oracle、IBM或其他商业软件。这是一个公平的领域,吸引了很多人的目光,以至于90年代后期出现了互联网的泡沫时代。
不久后,浏览器(XMLHttpRequest)引入了 AJAX,从而引领了Web 2.0时代和Web应用程序。但是,开发这些应用程序需要大量的工作,因此开发人员无法仅凭一己之力满足业务的需求。
后来,开发人员开始分工专业化。由前端开发人员处理HTML、CSS和JavaScript。后端开发人员处理主机操作系统、HTTP服务器和数据库。而同时精通前后端的开发人员则称之为全栈开发人员。
全栈时代
专业化是一件好事。但并不会永久。一方面,这意味着团队可以并行工作以缩短开发周期。另一方面,这也意味着我们必须付出更多的努力来传达最初的要求和变更的规范,否则我们就会失去并行工作所带来的优势。
因此,整个团队全是全栈开发人员,不区分前端和后端,似乎是一个不错的主意。
最重要的好处是,团队中的每个开发人员都充分了解每一处代码变更带来的后果。他们每个人都可以正确地评估影响和风险,让管理层清楚地了解成本和延误状况。此外,每当有工作人员离职时,团队可以立即换人,而且新人也可以很快地熟悉工作。然而,随着基础技术的提升,这种美好的景象也失去了原有的魅力。技术栈不再局限于最初的四层:操作系统、HTTP服务器、数据库和脚本语言。
随着应用程序开始处理越来越多的并发用户,复杂度也开始加剧。于是,我们添加了负载平衡器。
我们需要更快地配置新服务器,同时降低灾难性故障的风险。于是,我们开始使用云计算。
我们开始构建面向全球用户的产品。于是,我们开始将部署复制到各个区域的数据中心。
我们发现,拥有大量模式的数据库和复杂的联结不太好用了。于是,我们开始使用键值存储。
我们需要更好的质量控制。因此,我们聘请了专门的测试工程师来编写回归测试套件。
我们想让浏览器控制渲染和合成。于是,服务器端的脚本换成了REST API。
我们了解到良好的代码管理对团队的效率至关重要。于是,我们开始利用 Github 创建工作流程。
随着开发能力的增强,我们开始更加密切地倾听用户的意见:
我们的用户希望应用程序减少提交表单,更为流畅、更加一致、更易于使用。于是,我们聘请了注重艺术技巧和人性的用户界面专家。
我们的用户要求降低完成工作的困难。于是,我们聘请了用户体验专家来研究我们的缺点并设计更好的交互方式。
我们的用户觉得手机更加方便,于是我们为他们提供移动版的大型SaaS应用。
此外,贯穿所有这些需求的基本技术也在不断发展:
HTML5逐渐成熟,开始支持有语义的Web页面、可访问性、service worker以及Web组件。
CSS也在发展,已远远超出了选择器和级联,开始支持动画过度、变量、新的布局模型和分页媒体。
JavaScript呈现了爆炸式的增长,如今发展出了模块化、面向对象类、异步函数,还可以在任何地方执行——可以在浏览器的DOM中、在服务器上,在桌面上也可以。
HTTP发展出了更好的缓存、安全策略、持久会话、多路复用流,头部压缩以及优先级等功能。
全栈时代并没有完全死亡。技术栈的各层迅速发展,没有人可以成为掌握一切的专家。职责多样化和专业化是很自然的结果。
全栈工程师的荣耀已成为传说。在这个新时代,没有人能够掌握开发的所有技术。
2020栈
我们不得不思考:拥有跨层知识和技术力且才华横溢的个人仍有优势吗?我们应该如何对待全栈开发人员带来的项目经验多样化?管理如何才能满足这些需求?招聘人员应如何筛选应聘人员?求职者又当如何凸显自己的技术力?
我们应当重新考虑“全栈”这个术语了。
我之所以这样说,是因为我帮助推广了这个概念。早在2009年,我就曾介绍过这个术语。但可悲的是,时至2019年,这个术语已经成了计算机历史博物馆的纪念物。
奇怪的是,人们对“全栈”这个词的好奇心在不断增加。2009-2019年期间,Google 搜索词语趋势快照显示,在过去五年中,“全栈”这个词的搜索次数急剧增加,而且年年创新高。
但是,如果人们都在寻找下一个趋势是什么,那么我们就来谈一谈吧。为了方便讨论期间,让我们先来给它起一个名字。
我将其称为2020栈。新一代的新名称。
我认为:
首先,我很欣赏那些掌握了各种技术力的人。他们不会陷入“专业化”的陷阱。我们应该避免构建过于庞大的应用程序,那些带有秘密咒语的大师,以及那些随着专业化悄悄渗透的信息孤岛。
其次,我们需要了解到职业发展意味着人员变动。各个组织必须把人员变动当成正常的运营。即便高级职员离职,也不会影响到业务。“没有什么人是必不可少的”。
第三,领域术语削弱了专家之间的沟通。如果专家使用领域特定的术语、首字母缩写词和惯用语,那么他们自身和队友都将面临危险(出自电影《欢喜俏冤家》)。跨领域是保持沟通渠道畅通的关键。
2020栈专家的特征可以总结如下:
没有人可以掌握所有技术,因此2020栈必须由一个团队来分担。不是一群人,而是一个真正的团队。这意味着,当一个人落后时,另一个人就会挺身而出。当一个人拥有出色的技术力时,就可以通过一种机制来指导其他人。当团队的知识库不足时,他们就会寻找一名更聪明的团队成员。
每个2020栈团队成员都必须是跨领域专家。仅掌握了一两层技术栈的人都算不上合格的2020栈团队成员,这类的个人有望成为未来2020栈团队成员,但也有可能不行。但是在他们掌握各层技术栈上的深入知识之前,他们只能作为2020栈团队的候选人。
2020栈团队成员为项目带来的各项技术并未严格分类。与我们到目前为止采用的前端/后端分类不同,2020栈的分类是多种多样的。2020栈团队中的某位成员可能熟悉NoSQL、云配置和持续集成等技术。同时,另一个2020栈团队中可能有一位类似的成员,而他熟悉SQL数据库、Node.js服务器、容器和容器编排。如果我们把他们统称为2020栈团队的后端开发,就低估了他们的技术力。
最后,这个团队最关键的组成部分:每次交流都应该以针对当前问题做出最佳决策为共同的目标。这意味着拥有相同技术的成员之间应该以开放的心态进行交流。成员之间不仅应该互相传达最新的进展,还应该展开讨论。这可以让每个人都变得更聪明,而且还可以防止重新步入专业化的漩涡。团队成员一起成长。
你好,“2020栈!”
下面我们来想想看,如何利用2020栈更好地匹配职位要求与求职者的技术力。项目经理发布的招聘广告可能包含以下内容,他们希望找到适合公司文化的人才:
Rock City Brewing is seeking a “2020 stack” team player with a strong background in testing, documentation, and code management. Applicants should also have cross domain skills in at least two of the following areas: cloud configuration, containers, orchestration, CI/CD, and server-side scripting.
Shape our future by helping us choose the best tools for the job. At RCB, career advancement is part of your job. Share your knowledge with the rest of the RCB 2020 stack each week at Tech Tuesday.
我公司希望招募在测试、文档和代码管理方面具有深厚背景的“2020栈”团队成员。该职位要求在以下领域中,至少拥有跨两个领域的技术力:云配置、容器、容器编排、CI/CD以及服务器端脚本。
通过帮助我们选择最佳的工具来塑造我们的未来。职业发展是每位公司员工工作的一部分。每周二我们都会举行内部2020栈学习大会。
同一个职位的另一则招聘广告则要求应聘者具备不同的技术力:
我们希望寻找一名“2020栈”团队成员,担任回归测试、API文档、Github工作流管理以及开发运维的工作。
如果你掌握了上述技术,请联系我们。
而求职者可以按照如下方式完善LinkedIn信息:
我拥有多年的“2020栈”团队工作经验,拥有丰富的后端开发经验以及最新的2020开发运维知识,包括Gitlab、Kubernetes 和 Digital Ocean。
我是开源和DRY的忠实拥护者,我认为成功重用的关键在于出色的文档。
通过上述描述,我们看到了一名同时掌握了代码管理域和开发运维域技术的开发人员。“2020栈”团队成员比敏捷团队更加成熟。
2020栈的分层
那么,2020栈应该如何分层呢?前端和后端等术语是否足以描述各层的特性?服务器和Web、设计和运维呢?当然,这些类别足够广泛。
同时,我们也不能忽视测试人员,因为我们知道如果没有他们,我们就无法交付质量胜过竞争对手的产品。此外,如果没有营销人员,我们甚至连客户都找不到。
所有这些因素我们都需要考虑。有关我心目中完美的2020栈,请参考这篇文章(https://medium.com/better-programming/2020-002-my-perfect-2020-stack-43be78df37dd)。说到底,2020栈就是跨领域沟通。我相信这是一次全新的文艺复兴。
原文:https://medium.com/better-programming/2020-001-full-stack-pronounced-dead-355d7f78e733
本文为 CSDN 翻译,转载请注明来源出处。
热 文 推 荐
☞斯坦福博士退学,在 3 个领域改变世界,科技狂人马斯克的巅峰之路