作者 | Jared White
译者 | 弯月 责编 | 郑丽媛
出品 | CSDN(ID:CSDNnews)
最近,网上流传着一些讨论现代 Web 开发的文章,我看后很生气。
我记得,作为一名专业 Web 开发人员,第一次感觉自己失去对现实的把握是在 2010 年代中期。多年来,我愉快地使用 Ruby on Rails 技术栈向客户交付了有价值的软件。Ruby 很酷,浏览器和开放网络标准终于变得越来越好了,响应式设计和渐进式增强等概念也流行起来了,网络开发变得越来越有趣了。
然而,突然之间,我听到许多有关 AngularJS 的传闻(初版 AngularJS,不是后来全部重写后的那版)。与我之前遇到的许多视图库(比如我个人最喜欢的 Knockout.js)不同,并不是说你在网页上加几行 AngularJS 代码,就可以获得一些新的交互能力。
人们说这是一个前端框架,是Web开发的未来。你可以用 AngularJS 构建整个应用程序,你可以将服务器的基础设施转变为 JSON API,甚至不再需要服务器渲染 HTML。在 JavaScript 完成渲染之前,你看到的页面整个空白,这不是错误,而是一个功能!
有人甚至告诉我,作为 Ruby on Rails web 开发人员,我的技术已无法在“现代”开发中立足。我必须加入 AngularJS 阵营,否则就会被时代淘汰。我记得,当时在从旧金山回湾区的路上,我与一位 Rails 开发人员进行了长时间的交谈,我们谈到了对于必须成为“AngularJS 开发人员”并放弃 Rails 的想法,我个人是非常抗拒的。
多年后,我才发现作为一名 Ruby on Rails 开发人员,我掌握的技术比在 2014 年转为全职 AngularJS 开发时更有价值。
那么,如今掌握编写 React 应用程序的开发人员,会不会像 10 年前编写 AngularJS 应用程序的开发人员一样,在漫长的技术发展史中走入绝境呢?谁也说不好。
但我非常肯定,这完全有可能。
这就是为什么我非常反感下面这样的争论(注意,下面这些言论引自 Laurie Voss 的文章):
React 节省了开发人员的时间:随着时间的推移,React 之类的框架可以节省开发人员的时间,这一点毫无争议。
React 可以帮助你解决很多问题:网络效应是我们选择 React 的部分原因,无论这门技术的优点在哪里,目前这是许多基本应用程序的最佳选择,因为React 生态系统提供的已有解决方案和具有良好文档的样板文件可以帮助你完成80%的目标。
你可以雇佣掌握 React 的人:React 开发人员更容易招聘,了解 React 的开发人员不需要太多入职培训,而且使用自己喜欢的框架可以让开发人员更快乐,所以 React 开发人员也不容易跳槽。
开发人员的时间比一些客户更有价值:如果网站设计需要让每一个地方、每一台设备上的每一位客户都有完美的体验,那么开发人员就需要将全部时间都投入到优化工作上,永远没有时间发布任何新功能。
现状是在开发人员和客户体验之间寻求平衡:我们观察到的现实是现代 Web 开发牺牲了用户的体验,我们的模型解释了为什么:X > Y,其中 X 是“成本” 开发时间”,Y 是“客户流失成本”。
你做得很好:小伙伴们,不要觉得自己很愚蠢。不要被花言巧语所蒙蔽。你一直在为自己和用户的最大利益做出明智的决定,不需要因为使用流行的框架而内疚。这些框架之所以受欢迎,因为它们都很优秀。
请等一等,为何这些话听着如此耳熟?你知道我在哪里听过吗?没错,就是 10 年前兜售 AngularJS 的大佬们!
我很生气,因为在过去十年中,Web 开发有许多像我一样的人都觉得我们反复成为煤气灯效应(一种心理操纵的形式,其方法是一个人或一个团体隐秘地让受害人逐渐开始怀疑自己,使其质疑自己的记忆力,感知力或判断力,其结果是导致受害者的认知失调和其他变化,例如低下的自我尊重)的受害者,而且这些人还拒绝承认已经造成的伤害。
前端 JavaScript 框架吞噬 Web 世界的时代,SPA(单页应用程序)等等,这些想法的出现并不是因为一些好心的开发人员发现了很棒的开发体验,全心全意地支持并推广了,而是因为我们被欺骗了。
有人大肆宣扬以 HTML 优先、SSR 优先、逐步增强的心态编写应用程序,使用我们喜欢的语言/技术,统统过时了,而且对用户很不利——然而,这不过是个谎言。
有人宣扬说,完全使用前端 JavaScript 编写应用程序会减轻我们的负担——这句话也是谎言。
注意,没有人会因为选择 React 而责备或辱骂开发人员。
有一个小而强大的“影响者”生态系统在网络上兜售一种“流行文化开发者抽象”的精神,无论是 React、CSS-in-JS、Tailwind CSS、“无服务器”还是“微服务”,都是他们为了制造煤气灯效应而编造的以假乱真的谎言。
说到底,这根本不是 React 与竞争对手的问题,甚至不是框架的问题,而是一个你是否信任开发者社区的问题,因为这些开发者社区经常被虚假和误导性信息给淹没。
达尔曼曾说:“信任需要数年时间才能建立,而打破只需要几秒钟,而且永远无法修复。”
再说一次,本文没有针对任何人,但由于我需要反驳一些人的看法,所以不得不指出下面这条评论:
世上不存在由一群魅力四射的大人物组成、试图摧毁整个世界的秘密团体,也不是说这个世界没有这群人就会变得完美。我们不能因为事态的发展而责怪任何人,是我们共同创造了这个世界。
我们?我们是谁?下面的列表包含了几个主要的 Web 开发社区,多年来他们一直在努力对抗前端 JavaScript 带来的恐惧和疑惑,以及基于 NPM 的构建工具带来的冲击:
Ruby / Rails
Python / Django
Elixir / Phoenix
PHP / Laravel
SSG,比如Jekyll、Hugo、Eleventy以及最近的 Astro 等
我们并不是要求你一时头脑发热放弃自己最喜欢的前端库,成为一名 Rails 开发人员、Phoenix 开发人员或其他开发。我们只希望你们承认,多年来你们霸占并主导了 #WebDev 的话语权,忽视了我们反复尝试指出的 JS/SPA 方法的潜在缺陷和谬误,有时你们甚至嘲笑我们在技术栈/语言/等方面的选择。
上面的评论说道“世上不存在由一群魅力四射的大人物组成、试图摧毁整个世界的秘密团体”,我真的很想知道平日里你们都与哪些人交流,因为日常与我打交道最多的项目和客户都认为这个世上确实存在这样一群人。
我们认为,“Tech Twitter”以及其他地方的大人物一直在营造一种氛围:要么选择 React 要么失业。他们不仅因此赚了大钱,还获得了大量社交媒体关注。各个公司的高管纷纷加入了他们的行列,拼命蹭热度,因为他们认为这样很酷,而且能够快速招揽到技术人员。
这些做法当真可笑,风险投资商从许多以消费者为中心的失败应用程序转向开发人员工具,因为这其中有钱赚,兜售基于“管理复杂性”的解决方案,还说现代网络应用程序变得异常复杂。但事实完全不是这么回事!
所以,恕我无法赞同“我们自共同创造了这个世界”这样的说法。是你们——JS 框架的铁杆粉丝——有意创造了这个世界,并将我们这些对此持怀疑态度的人永远排挤在外,到头来还表现得宛如一切都是自然进化的结果。
Web 是多语言的。这意味着,构建网站的语言和工具可以由任何语言编写,可以在任何类型的服务器、任何类型的操作系统上运行,可以通过任何类型的硬件,在世界的任何角落运行——因为 Web 的构建基础是协议和标准。
没错,你需要了解 HTML 才能从事 Web 开发,但 HTML 可以由任何工具生成,可以由任何平台提供,而且任何应用程序都可以使用 HTTP。
如果想从视觉效果呈现 HTML,你需要了解 CSS,而 CSS 的构建、编写和提供非常灵活。说到底,HTML 和 CSS 只不过是某个地方的某些文件夹中的某些文本文件,你可以利用任何技术框架动态呈现。
请注意,以上我没有提到 JavaScript,因为构建网站其实并不需要了解任何关于 JavaScript 的知识!
构建简单网站不需要 JavaScript。JavaScript 只是一种“附加”技术,是与 HTML 和 CSS 并肩的 Web 前端第三大支柱。我们需要的是 HTML、CSS 和JavaScript,而不是 JavaScript,JavaScript 和 JavaScript。
如果想成为一名 Web 开发人员,基本上你只需要了解 PHP/Ruby/Java/C#/Python/Go/Rust 中任何你喜欢的语言,再加上 HTML 和 CSS 就齐活了。
如果服务器端也使用 JavaScript,也没问题。但是,如果你要求 JavaScript 作为唯一的服务器语言,搭建起一个框架/构建系统/托管基础设施/模块生态系统的庞然大物,使用的语言是 JavaScript + JavaScript + JavaScript + JavaScript(以及现在的TypeScript + TypeScript + TypeScript + TypeScript),不仅会给全球 Web 开发行业带来巨大的负担,还极端排除异己。
这种思想基本上就是在说每一位不了解或不想了解 JavaScript 的程序员都应被排除在现代 Web 开发之外!这也太荒谬了。不仅如此,这种思想还违背了网络作为开放技术平台的精神。
Web 浏览器本身就不接受这样的思想,HTTP 不支持,服务器也不支持。
提供证据的责任不应该落在优先考虑 HTML、多语言服务器、极简主义前端、独立友好的 Web 开发实践的支持者身上。为什么他们要证明其方法应被视为行业的默认方法,并成为常见规模的网站和应用程序的最佳推荐实践?举证的责任应该由优先考虑前端框架社区身上,他们应该证明自己的架构是合理的。
坦白来说,我们不再信任你们了!我们厌倦了你们长达十年的洗脑。
每当我看到 JS 框架的铁杆粉丝又在我耳边吹风“你应该使用 SSR 以获得更好的性能”时,我都会翻白眼,因为这样的话我们早在 2014 年就听过了。
每当我看到 JS 框架的铁杆粉丝又开始唠叨,利用“孤岛”来分离不同页面上的库和代码包时,我都会翻白眼,因为在页面正常显示之前设法避免加载或执行巨大的 JavaScript 包,这是 2014 年炒作的话题了!
每当我看到 JS 框架的铁杆粉丝又开始抱怨:“约定优于配置”、“快速加载时间”以及“服务器直接访问数据库”以及所有热门的开发者经验时,我依然会翻白眼,因为 2014 年的非 JavaScript 全栈框架中早就有了这些功能!
我与 Ruby 社区中的很多人交谈过,前端世界中越来越多的人开始尝试使用“普通”的技术,回想这些年来 Web 开发一直在大量重新发明轮子,我们都会摇头感到沮丧。“JavaScript 疲劳”不仅仅是一小群技术宅男中流行的表情符,这是一个实实在在的问题!
所以,每当听到下面这样的言论:
“全球有数以千万计的软件开发人员,他们的工作都相对独立,而且他们会以不同的优先级、资源和权衡谋求最佳利益。结果造就了我们眼前的世界,尽管这不是一个完美的世界,但因为种种理性原因,最终达成了某种平衡。”
对不起,我认为这纯粹是胡说八道。我根本不相信这个世界存在,我认为的世界是这样的:
一群自以为是的 JS 框架铁杆粉(尤其是 React)认为“每个人”都在使用 React,而且大多数人都喜欢这个框架,所以能有什么问题?!
与此同时,大多数从事各种其他技术栈、语言和应用程序的人则认为“React 正在吞噬世界”之类的运动很疯狂,而且不利于 Web 的发展。我与多位初级开发人员交谈过,他们觉得在学习 React 的时候感觉自己像个白痴,与其他更靠近底层硬件的 Web 开发形式相比,React 不仅令人倍感困惑,而且毫无意义,而他们还会因为不理解 React 而遭到批评。许多“后端”开发人员讨厌前端开发,但我发现他们不一定讨厌前端开发本身,而是讨厌所有荒谬的复杂性。总的来说,这些复杂性是不必要的,只是因为 JS 框架的铁杆粉在背后推波助澜。
还有如下 Voss 的这句话:
我绝对不会说大量使用 JavaScript 的单页应用程序对性能有好处,因为它们确实对性能没好处。这些应用程序的加载速度很慢,渲染速度也很慢,而且还占用了很多资源,通常比普通的 HTML 和 CSS 更脆弱。我认为 JS 框架的开发人员普遍能够接受这些限制,这就是为什么服务器端渲染是现代框架的重要特性的部分原因。大多数 React 支持者会告诉你,并非每个网站都需要是 React 应用程序。我认为开发人员并不愚蠢,所以他们知道在选择 React 时需要做出这些权衡。
什么?!我认为大多数 React 开发人员没有做出任何权衡。我认为大多数 React 开发人员都没有评估这个框架!他们之使用 React 是因为有人告诉他们必须使用 React,所以他们使用了 React。
如果真的是开发人员都花了数小时、数天、数周甚至数月的时间来评估各种前端框架以及构建 Web 应用程序的其他方法( Ruby on Rails、Elixir Phoenix等),最后得出一个结论,从各种需求和用例以及个人喜好的角度出发,他们认为React 绝对是最佳工具……
太可笑了,我真的很难相信有人能够做出这样严肃的声明!
我眼中的 Web 世界完全不同。我认为,Web 开发的世界充斥着质量低劣的内容,很大一部分都是错误的,还有一群有影响力的大人物、教育工作者以及企业中坚力量,他们不遗余力地向每个人灌输某种特殊的技术,或许他们知道这种技术本身就有问题,或者他们并不知道,但无所谓,最终结果都是一样的。
我不相信很多使用 React 的团队真的是因为出于技术的考虑,而有意选择了这个框架,也不相信选择这种技术能够帮助他们更好地构建系统,还说这种技术有广泛的研究、测试以及事实的支持。
说到底,这不过是拼人气,简单明了。而人气随时可能发生变化:10 年前,人气之王是 AngularJS,而如今是 React。明天还不知道是谁呢,因为这是不可避免的。
不过真正的问题不在于 React,也不在于某个人——问题是这个行业充斥着错误的思想,人们错误地认为:
流行技术之所以流行是因为技术本身很好;
即便到了 2023 年,Web 平台仍然很匮乏,因此高度抽象的前端框架仍然是提高程序员幸福指数的必要条件。
这两种假设不仅大错特错,还非常危险,因为这样的思想正在引导成千上万的年轻开发人员走上错误的道路。他们没有选择学习软件开发的基础知识:网络、HTTP、多语言 Web 服务器、HTML(包括自定义元素)、CSS(包括自定义属性),以及 JavaScript,而是努力学习 React/TypeScript。
我相信,到了 2033 年,作为一名 Ruby Web 开发人员,我掌握的技术远比学习 React 获得的任何技术更有价值。
到时候,我肯定活得好好的,但那些只知道 React 代码的新手程序员呢?也许他们的工作岗位早就消失了。
电话:400-123-4567
传 真:+86-123-4567
手 机:13800000000
邮 箱:admin@eyoucms.com
地 址:广东省广州市天河区88号