塑造软件开发的九种不太可能的趋势
我们对JavaScript、SQL、微服务、云、Docker、Java和“现代堆栈”的其他部分的期望正被实地事实所破坏。

信用:aappp / Shutterstock
“让你陷入困境的不是你不知道的东西。这是你确定的,但情况并不如此。”马克·吐温写这些话时,他是否在想软件开发?
软件以多种方式进步。主要是,我们刻意努力改善事物,并在机会出现时抓住机会。有时,我们为了挑战本身而应对,就像爬山一样“因为它就在那里”。也就是说,有时我们被项目中固有的可能性所吸引,只是去追求它。
在这种混乱的混合中,我们经常以令人惊讶的方式重新加工、重新发现或重新利用想法。最令人惊讶的是,有时这些方式会倒退——一个旧的想法再次崛起,超过了一个新的想法。这里有九个这样的例子,现在正在展开。
普通的JS击败了TypeScript
就在你认为某件事已经成事了,一个死定的确定性时,宇宙就会粗鲁地反驳你。很明显,TypeScript将吸收互联网的整个代码库。在JavaScript中添加类型的简单想法使其成为程序员和企业非常受欢迎的选择。
但现在,我们似乎正在走向一个JavaScript将吸收TypeScript的未来。不仅努力使受TypeScript启发的打字成为JS的功能(“类型作为注释”),而且还努力将TypeScript变成类似IDE中的林林步骤。这是新的“类型剥离”方法,像Node.js这样的运行时在运行时用空白替换类型,将普通的旧JS作为可执行文件,并完全消除了笨重的编译步骤。
简而言之,TypeScript正在成为JavaScript的花哨的linter。
SQL击败ORM
SQL发明于20世纪70年代,是数据管理领域的一个重大突破。与其他一些基础技术一起,它帮助推动了互联网的扩张。但与COBOL等其他基础技术不同,SQL具有我们经常忽视的特殊特征——它是操纵信息的一种基本、不可还原的方式。
当然,SQL并不是处理数据的唯一方法。但关系数据结构为我们提供了一种严格和通用的方法。因此,可以理解,令人惊讶的是,在硬钟摆向NoSQL数据库和对象关系映射层(ORM)摆动后,SQL正在复苏。
有些人认为令人反感的特征,即原理的严格性,使SQL成为一个稳定的平台。SQL现在通过WebAssembly(Wasm)进入浏览器,在整个网络上提供单一的数据成语。SQL也正在回到服务器端代码库,与Hibernate等ORM相比,像JOOQ这样的更简单的包装器提供了对SQL的更多直接访问。
为什么?仅仅是因为抽象不可避免地会增加摩擦。用SQL的即时性换取ORM的广泛力量是一个危险的计算。
本地IDE击败了云开发环境
云IDE是本地开发环境的明显继承者。那么,为什么我们仍然被本地的IDE所粘住呢?
这不是惯性。这不仅仅是因为那是我们习惯的。其中一部分是与云部署相反的“购买与租赁”心态。其中一部分是当地IDE的高度个人化感受。
但事实是,现代笔记本电脑绝对是野兽。即使是一台普通的商务笔记本电脑,也会给开发人员带来闪电般的IDE迭代。尽管开发人员仍然倾向于依赖远程人工智能后端来满足对人工智能能力的普遍需求,但系统的其余部分舒适地适合本地资源,RAM和SSD几乎可以提供即时的结果。
Monolith击败了微服务
微服务有其地位。当情况需要时,它们非常强大。但是——这是一个很大的“但是”——当肆意使用时,它们是一个过度工程和复杂性的漏洞。
如果“调试Kubernetes”这个短语不足以让你不寒而栗,请考虑微服务本质上意味着每个服务边缘的网络延迟。整体服务器模型从一开始就消除了这两个缺点。
当然,人们仍然需要正确构建一个整体服务器,否则复杂性也会压倒它的实现。此外,我们必须承认,解决高可用性和其他QoS问题会增加移动部件的数量。但整体堆栈(数据/服务/用户界面)的分层相当于一个更简单的心理模型。
这并不是一种“要么/要么”的情况。如今,大多数应用程序都会包含一些远程服务(无论是内部应用程序还是第三方应用程序),即使使用中央服务器端堆栈。但潮流已经扭转,势头从微服务转向整体。
在实践中,这只是确定阻力最小的路径——解决问题的最小复杂性——而不是尊重被认为是“道路”的问题。对简单的渴望自然而然地引导建筑师在适当的时候进行整体设计。
快乐之路胜一成
将测试良好的工具集成到一个有凝聚力的整体中比构建一个全面的定制解决方案要聪明得多......不是吗?
在过去的几年里,“Jamstack”(JavaScript、API和标记)和“现代数据堆栈”(结合了最好的基于云的数据管理工具)体现了这一理念:永远不要构建你能租用的东西。我们被告知要混合搭配十几个专门的SaaS平台——一个用于身份验证,一个用于数据库,一个用于搜索,一个用于托管等——并将它们全部与API粘在一起。
但这种方法的现实是一个压抑的整合负担。高级开发人员没有编写业务逻辑,而是整天编写胶水代码,以保持第三方API相互交换。当一个服务更新其SDK时,分布式纸牌屋会摇摇欲墜。
该行业现在正重新向“包括电池”框架倾斜。Rails和Django开创的理念,并由Next.js和Spring Boot等框架现代化,正在重新确立自己。这意味着我们依赖于一个高度有主见的生态系统——一条“黄金之路”。虽然像Next.js或Spring Boot这样的元框架可能缺乏自己的专有数据库,但它提供了深度集成的脚手架(如NextAuth或Spring Security)。它为开发人员提供了一个有凝聚力的预接线环境。您仍然自带数据库或身份验证提供商,但该框架完全消除了易碎的胶水代码。
经过多年的供应商疲劳,开发人员意识到,服从一个统一的、有主见的生态系统是通往速度的最终途径。
本地金属击败云
当拉里·埃里森嘲笑云“革命”是一种毫无意义的时尚时......他有可能是对的吗?
可能不是。但行业对云基础设施的热情感觉过于极端。有时,它似乎几乎是邪教,仿佛在你拥有的铁上运行过程本质上存在问题。
当然,云有很多好处。但该行业逐渐重新意识到这个永恒的根本问题:“适合这份工作的工具是什么?”
事实是,有时组织最好在内部运行计算、存储和/或网络。在本地运行系统有很多优势,如内部专业知识、成本控制、可预测的计费和数据主权,这些优势可以与配置和管理其资源的需要倾斜。
专业工程击败全栈开发人员
这没什么新鲜事。不可能掌握被称为网络开发的多头九头蛇的各个方面。全栈开发人员的典型工作描述就像整个IT部门一样。这在人类上是不可能的。如果你对CSS网格布局了如指,它将把数据库设计的知识直接从活动内存中推出来。
自然,外面有一些学者会打鼓、弹吉他和吹小号,并且唱得很好听。但对我们大多数人来说,这是不可能的。我们需要依靠他人来弥补差距。无论是该桥是人工智能代理、另一个人还是库,我们都可以使用这些资源智能地组成一个完整的堆栈。
当某人成为高级工程师时,他们将掌握软件技术工具景观的许多不同部分。那显然非常有价值。从这个意义上说,你可以称他们为“全栈”工程师。但我们真正的意思是,他们很好地了解所有部件是如何结合在一起的,并且他们能够有效地结合各个部件。
这也是真正的全栈开发人员通常不会退休的原因。他们成为经理。
Wasm击败了Docker
Docker是一个伟大而有影响力的想法。制作一个便携式处理单元,你可以把它放在任何地方。但在实践中,Docker可能会变得相当笨重,其配置文件可能很笨重。事实上,有时我发现整个心理模型有点笨拙。你有实际的软件及其各种环境需求,然后Docker站在它们之间,作为额外的抽象层。
但是Wasm。Wasm将您的代码归结为可移植的二进制文件(与本机可执行文件類似)。砰!就是这样。它与20世纪90年代在DOS中运行.exe的直接性水平相同。简单。
而且,它很快。Docker必须启动Linux用户空间和虚拟化文件系统,而Wasm运行时的设计可以最大限度地减少开销。他们中的一些人甚至编译成机器代码。
当然,Docker是企业中一个被理解的一部分,它周围有丰富的工具。它仍然是一个重要的工具。但Wasm已经从实验阶段获得了动力,现在正成为一个真正的颠覆性创新。
Java击败了Node、Go、Rust等。
三十岁的Java一直被誉为遗迹。人们说,这是一个笨重、冗长、重模样的大型大物。人们认为,当我们拥有用于异步I/O的Node.js、用于轻量级并发的Go和纯速度的Rust等现代生态系统时,谁还需要“旧Java”或“爷爷Java”。
但事实证明,爷爷知道他在做什么。
当然,像需要public static void main运行一个小程序这样的投诉是完全合理的。但仔细观察,你会发现先进的功能。特别是,使Java成为服务器端巨头的是虚拟线程(以及结构化并发等相关升级)。虚拟线程将线程推入JVM,平台会为您处理它们。这使得并发性成为一项类似于内存管理的服务。
虚拟线程允许Java服务器通过一次导入更改扩展到潜在的数百万个并行请求。此外,虚拟线程与旧线程API完全兼容。
来源:https://www.infoworld.com/article/4225151/nine-unlikely-trends-shaping-software-development.html