作者 | Beau Beauchamp
译者 | 弯月
出品 | CSDN(ID:CSDNnews)
我知道写这篇文章会拉仇恨,但是,有些话不吐不快。总要有人将许多经验丰富的软件工程师一段时间以来一直在思考的问题说出来。
我在北美的一些大公司工作了 20 多年,一直是一名开发人员。最近几年,我一直在观察 UI 的迭代,我发现如今的 UI 变得越来越糟。具体来说,我指的是一些流行的技术,我以为那些 JS 和 CSS 框架只会在新手人群中风靡一时,然而如今就连一些经验丰富的工程师也开始“沦陷”,我以为他们会更明白其中的利害关系。
使用这些框架的文化就像滚雪球一样,比如 Angular,人人都陷入代码地狱,看不到尽头,不知道这种荒谬的做法何时才能停止。
每天我都会收到猎头的邮件,无论何种规模的公司都在竞相寻找经验丰富的 Angular 4、5、6、7、8、10、12的开发人员,还要求开发人员拥有至少 5 年此类我们称之为“顶尖”UI 的构建与维护经验。
这不是“顶尖”的 UI,而是一团糟。
几年前,我曾面试过一家公司,在面试期间,他们告诉我他们打算放弃所有的 UI 框架,然后就用最简单的 ECMA(JavaScript)编写 UI。当时我很惊讶,但也很好奇。
现在,我们都知道他们为什么要这么做了。
著名的 KISS 原则指的是 Keep It Simple, Stupid(保持简单,愚蠢),但我不喜欢说某个人很愚蠢,所以我调换了一下顺序。最新版本的 Angular 已经完全丢失了 KISS 原则。它不再只是一个 UI 框架,还是一个后端服务。如今 UI 开发人员不仅需要编写 HTML 模板,而且还需要编写后端代码。有人会说,这是好事!但实际情况并非如此。
Angular 有一些“很酷的”功能,如果你想编写有效而又美观的 UI,或者想打造专业的用户体验,则这些功能完全派不上用场。
单页应用程序已经过时。这类应用不仅难以维护,而且会对依赖 UI 变化的分析和搜索引擎爬虫造成严重破坏。
虽然我们有解决这些问题的方法,但问题就在于此!本来你根本不必编写代码来模仿 Web 原有的工作方式!
另一个流行的技术已经存在一段时间,但我仍然觉得有必要摆脱这些技术,那就是 SASS(软件即服务)和 Less。老实说,我喜欢这些 CSS 框架提供的代码组织形式。但我不喜欢 mixins,它们需要经过编译才能运行。
我不明白为什么浏览器不支持 SCSS,将其作为 CSS 代码的标准方式,但这是另一个话题。
这些 CSS 伪语言最大的问题在于,它们并不能节省我们的时间,而且使用和学习的难度都不小。归根结底,它们的初衷都是为了编写漂亮、整洁、目标明确的 CSS 代码,但是,我们每个人编写的原生代码本来就能达到这些要求。
如果你想使用 Sass 或 Less,并在自己的开发环境中预编译它们,那我无话可说。但是我们永远不应该将这些文件放入 CI/CD 流水线,然后在部署期间进行编译。
任何其他 JavaScript 库或框架也应当遵循这一原则,因为它们最终都会编译为普通的ECMA。
添加到 CI/CD 流水线中的每一个步骤都会导致本应非常简单的部署过程变得复杂和膨胀。我们应该寻找方法来减少流程中的步骤,而不能因为“Jenkins”允许这样做,就越积累越多。
我是 UI 纯粹主义者,但 UI 的当前状态不是“顶尖”,而是乱作一团。我知道Google 的员工很无聊,他们想做点什么,但是 Angular 和其他类似的框架非但没有让 UI 变得越来越简单,而且还在破坏 UI 的简单性。
关键在于,我们根本不需要一个臃肿的框架来编写整洁、优雅的 UI 或构建一个有效的 UX。我们可以使用任何后端提供的原生模板引擎,根本没必要使用难以理解且无法调试的编译 JS,而且还会导致前端膨胀。
归根结底,框架应该降低编程的难度,而不是反过来加大难度。这些框架应该通过易用性为公司节省资金,而不是白白损失大量资金。
然而,这种不幸的事情正在发生,而且 Angular 的运行成本也很高。
不幸的是,Angular(以及其他 UI 框架)导致很多公司白白耗费了大量资金,用于培训和重新培训员工学习和重新学习每年都在不断变化的框架新版本。虽然 Angular 承诺所有新版本都将向后兼容,但每当出现下一个“非常酷”的新组件时,一切都会发生变化,而 UI 也只会越来越复杂。
如果你正在服务于多家企业,而他们使用了不同的 UI 框架,那只能自求多福了。你不仅需要学习和了解 12 种不同风格的 Angular,还需要了解 Vue 和React 的各种版本,一些新手程序员在 4 年前入职这些公司,如今他们已经离开,要开始破坏其他人的技术栈了。
是时候将 Angular(和其他框架)作为失败的实验统统扔到垃圾堆了。
答案很简单,我们什么都不需要。我们应该彻底摆脱 Angular。然后就编写简单、易于使用和理解的 JavaScript。
我不反对使用 jQuery 之类的开源库,或者其他 UI 组件,或者 Bootstrap 之类的 CSS 框架。你只需要一两行代码就可以引用这些框架,它们确实能够减轻开发人员的负担!
但是,需要 Node.js 才能运行的框架,比如 Tailwind,或者由于维护人员年复一年地不断更新,开发人员需要不断地培训和再培训才能使用的框架,我只想问,这些框架除了让你花更多钱,还有什么好处?用起来“超爽”吗?
Angular最大的问题就在于对开发人员的工作毫无好处,这会让公司损失数千甚至数万美元。如果你们是全球 500 强企业,不在乎每年花费数百万美元维护、更新、培训和浪费时间,那就寻找有经验的开发人员来支持这样的框架吧。
我看到很多公司迫切地需要 UI 工程师,但他们总是要求开发人员拥有 3~5 年的 Angular 经验。这太不合理了。我可以使用纯 JS 在更短的时间内构建优雅、功能齐全的 UI,而且还没有 Angular 前端和后端的种种复杂性。
JavaScript 的目的只有一个,而且能够在现代 UI 的复杂性和在 DOM 中保持优雅的简单性之间提供了完美的契合和平衡。
如果使用纯 JS 编写的代码在生产中出现问题,则只需几秒就能通过任何浏览器的开发工具找到问题,而且还不需要安装或包含另一层膨胀来告诉我如何调试已编译的代码。
编写代码的关键就在于其简单性。然而,作为现代工程师,我们几乎完全忽视了这种简单性。面对科技巨头或大学发布的闪闪发亮的新技术,我们不自觉地也开始追求“最顶尖”的技术潮流,完全迷失了自我。
Google或任何一所大学都不会在乎你要为开发人员花多少钱。是时候让 CTO 来负责技术栈。放弃时尚的新技术,让我们所有人都回归简单、便于维护、美观的理性 UI。
图片
网友评论
对此,众多网友的看法不一:
评论1
也不能一概而论吧。毕竟还有 Typescript 之类的框架,比编写单纯的 JS 方便多了,确实减轻了开发人员的负担。
使用纯 JS 编写简单、可维护的代码……可能吗?
评论2
这不是 Angular 的问题,也不是 JavaScript 的问题,或者技术的问题。
开发人员需要不断学习,如果你的代码一团糟,那不是框架的错。无论是否使用框架,也无论使用哪种框架,能否编写出简单、优雅的代码,始终取决于个人。
取决于你的个人能力和技术水平。
那么,你怎么看?
参考链接: