从「后端现在已经看不懂前端了」说起

2020-01-07 21:22:41 +08:00
 djyde

原载于我的独立博客: https://lutaonan.com/blog/to-frontend-prejudicers

V2EX 这两天有一篇这样的帖子:《说句实话,我后端现在已经看不懂前端了,太难了》

原文内容是:

看不懂惹,肿么办,最近在学 react,完全抓瞎。

然后又附加了内容:

一直用的 jquery,手动找位置然后对应 dom 操作,现在各种前端各种依赖,一会 route 一会 webpack 的 给爷整蒙了都。

类似这样的帖子多年来数不胜数,但这次评论区的评论比较典型,所以我决定这次不再沉默。当然,本文并非针对帖子作者。

对于那些抱怨前端「看不懂」的网友,我们应该问他们一个问题:为什么前端就应该是谁都能看懂?

这些网友从来不会抱怨别的领域的代码看不懂,比如他们不会说「我一个前端已经看不懂后端了」,或者「我一个后端已经看不懂 iOS 」了。

所以在这些网友心中,前端代码就是要谁都看得懂才是正常的。因为谁都应该看得懂 HTML, 谁都看得懂 CSS.

显然,这群人对前端的认知还活在过去,他们一边享受着用 Web 技术做出来应用,一边意淫着这些包含复杂业务逻辑的 Web 应用靠 HTML 和 Vanilla JS (原生 JS) 就能写成。

换句话说,这群人最大的问题在于,他们意识不到 GUI 开发 (Graphic User Interface Programming) 是一个从图形界面被发明开始就一直在被研究的独立领域,而 Web 前端只是 GUI 开发的其中一个分支而已。

这群人没有意识到到底什么是「前端」。前端就是写 HTML / JavaScript / CSS 吗?不,前端应该泛指那些需要编写 GUI 的技术。在我看来,写 iOS / Android 应用和写 Web 前端没有本质上的区别,区别只是语言和平台,背后处理的问题是一模一样的:如何实现视觉和交互 -> 交互如何触发逻辑 -> 逻辑如何影响视觉的变化

所以,如果认为浏览器识别的是 HTML 所以认为前端应该谁都能看懂、门槛低,进而得出前端目前的工作流是问题复杂化的结果,就如同因为 Android 的 UI 是用 XML 写的就认为 Android 门槛低一样不成立得可笑

对 GUI 开发难点的不了解是导致这种误解的最主要原因,以网友「 avastms 」提出的评论为典型:

这是前端圈长期逆淘汰的结果。

模板混代码里这种 PHP 宗教行为就别提了。

个人认为因为 javascript 语言的部分原因,前端很少有人懂什么是继承,什么是类,实例到底啥意思,更别谈良好维护引用了。

什么 redux,什么 vuex 根本就是莫名其妙,不就是事件监听吗,像 Node.js 那样 EventEmitter 多么清晰,非得自己造概念。

画虎不成反类犬,凡是有这套什么状态管理逻辑的,代码完全不可读。

前端自己也是不争气,不用别人的这些狗概念,自己就不会写代码了吗?

没有什么 redux,自己就不会管理自己的属性了吗?

他说:「模板混代码里这种 PHP 宗教行为就别提了」,想必他在说 JSX. JSX 刚开始出来就充满争议,但人们最终会发现,JSX 是函数式 GUI 开发最易读写的方案。实际上,他完全可以选择不使用 JSX,这样去写代码:

const Component = h(‘div’, null, [h(‘p’, null, ‘hello world’), h(‘p’, null, ‘I am Randy’)])

但是,这位网友大概更愿意读这样的代码:

const Component = (
	<div>
		<p>hello world</p>
		<p>I am Randy</p>
	</div>
)

觉得这样的写法恶心,多数是因为不知道 JSX 这个语法糖的背后是什么。

事实上没有人阻止任何人不用 JSX, 或者看看 Flutter 就大概知道没有 JSX 的 React 会是什么样子。

作为补充,这是希望 Flutter 引入 JSX 的相关讨论:Consider JSX-like as React Native · Issue #15922 · flutter/flutter · GitHub

至于提到的 Redux 和 Vuex, 证明这位网友根本不知道 EventEmitter 和 Reactive 的区别。这里就不展开讨论了。

为什么我们宁愿用 JSX 这种折中方案也不愿意放弃函数式编程,是因为声明式(Declarative) 是编写 GUI 最好的方法。复杂的 GUI 应用包含复杂的状态,人脑在处理复杂的状态绝对不比计算机在行,我们尽可能地把这些状态交给计算机做,函数式编程就是我们实现这个目标的工具。

Elm 的作者写过一篇名叫 Concurrent FRP 的论文,讲述了函数式响应式编程 (Functional Reactive Programming) 在 GUI 开发中的历史背景和应用。

那些喜欢说「 jQuery 一把梭」的网友,要么遇到的业务很简单,要么是在自虐。我见过写外挂用易语言一把梭的,但没听说过 Adobe 写 PhotoShop 用 Visual Basic 一把梭。

有些人,能接受 Maven, Gradle 的不完美,也知道什么场景应该用什么技术栈,但一旦开始写点前端代码,就认为应该有一个神一样的、完美的、还没有学习成本的构建工具,然后 Twitter, V2EX 抱怨一番,却不愿意认真学一学前端这个领域的知识。

不要妄想有一个睡醒就突然会用的构建工具。说实话,Webpack 不需要任何配置就能用,再不行试试号称 zero configuration (零配置) 的 Parcel, 用 TypeScript, 引入 CSS / LESS / SASS 通通不需要配置,跑起来就行。但那又如何呢,那些不愿意学习又想出活的网友们不懂的不是运行 webpack dev 这个命令,而是根本不懂这个命令背后解决的是什么问题。

一个人要锤子锤个钉子,结果大家都说雷神的锤子很牛逼。这个人听了,上来就要用雷神的锤子,结果拿都拿不起来。然后网上发个贴:「根本不懂为什么雷神要搞个这么重的锤子,给爷整蒙了都」。底下评论:「我工具锤一把梭!」楼下再附和:「雷神搞这个锤就是为了装逼」。

奉劝各位,把抱怨转化成求知,没有一个领域是不需要学习成本的,不管是做技术还是技术以外的领域,是分工和市场经济让各位觉得一切理所当然,然而像磨刀这样看上去简单的动作,也不是每个人都能磨好一把刀。

28949 次点击
所在节点    程序员
230 条回复
YenvY
2020-01-08 03:22:36 +08:00
其实很中文网络上理科生的莫名优越是一个意思,说是看不懂,其实是看不起
KuroNekoFan
2020-01-08 06:20:05 +08:00
看到有人提 qt,觉得挺有意思
现在用 qt 的多吗?感觉都是 electron 吧
(从另一方面说明自绘是没有前途的,别下注 flutter 了
Shazoo
2020-01-08 07:48:04 +08:00
@KuroNekoFan 很多。中型厂商开发跨平台商用软件首选,没有之一。

用 electron 和 flutter,等着填坑吧……
loading
2020-01-08 07:53:17 +08:00
所以你发这帖子目的又是啥?点个“忽略主题”不香吗?
KgM4gLtF0shViDH3
2020-01-08 07:59:29 +08:00
@hyrepo 主要是国内的各大厂商天天做活动,特别是阿里,京东,美团,不知道国外的那些和游戏无关的软件会不会堆一些无聊的游戏
chinuno
2020-01-08 08:22:38 +08:00
等下。难道前端追求的是到最后谁也看不懂,或者只有 1%的人能看懂吗?
前端本来就是计算机程序设计的一部分,以前也没分什么前端后端都是一个程序员去搞定的,后面为了节约成本任务细分才出来的前端吧。
你考虑一下这种情况:就不加前端这部分了,单纯说后端。一个后端程序员,过去一年都在写基础库,没有接触到什么 web 框架没有写后端程序对外提供接口。现在工作变动需要重新写后端服务了。为了方便叫他 a 吧。
刚开始写,发现过去一年内出现了好几个 web 框架,而且全世界都在用。网上找找后端服务的源码想参考一下,都是用的这些框架写的。
a 想了想,不就是重新学个框架吗,分分钟上手。他挑选了个看起来好多大项目都在用的 axx 框架准备上手,然后发现文档特别复杂。编译就需要另外装个编译系统,配置上百个参数。打包发布也需要编译系统上再配上百个参数。
看到单纯配置环境就这么麻烦了,他想换个不需要这个编译系统的框架,结果发现全世界的框架配置起来都这么麻烦,最后决定还是用回 axx 框架。
a 找了几个 axx 框架的项目源码想参考一下,发现用 axx 框架还需要学一门新的语言叫做 t 语言。然后编译器再把 t 语言编译成 Java 代码,Java 再编译成字节码在虚拟机运行。a 还算是个求知欲比较强的人,并不抗拒学个新语言。但是项目排期只给了一个月,还要学个新语言项目肯定做不来了。
对比了其他的几个框架,a 另外找了同样许多大厂在用的 rxx 框架。rxx 倒是不需要学新语言了。但是 rxx 还需要写 jxp 文件。a 想了想,jxp 在代码里混合 Java 和 html 不就是以前的 jsp 吗?好不容易都前后端分离了结果现在又把他们搞在一起了?不过又不是不能用,想想剩下半个月的工期,a 还是用了 rxx 开始写程序了。
rxx 的编程思想确实有点与众不同,一套思维方式需要花点时间才能消化。对于聪明的 a 来说不是什么问题,3 天就完全摸懂 rxx 的编程思想了。
a 发现 rxx 虽然用起来不错,但是功能太少啦,许多明明可以集成到框架的基本功能 rxx 都不提供。于是 a 不得不自己进行扩展完善了许多基础功能。这个时候工期剩下一个星期。
a 想着这下终于可以真正开始写业务代码了。这时 rss 订阅列表出来了一篇新文章:“我是如何一星期把项目移植到 vxx 框架的”。a 有点好奇 vxx 又是什么?搜索了一下,发现又是一个新框架,上个星期才刚出来的。gayhub 上一看,最近一星期的新项目已经是 vxx 的天下了,最近一星期只有一个新的项目用了 rxx 框架。
a 看了看网上对 vxx 框架的评论,发现 vxx 并不像 rxx 一样基础功能都要自己实现。看了看自己刚加班那么多天写的 rxx 那些基础扩展,陷入了沉思。。有这么多时间直接用系统 api 写个简单的 socket 监听返回结果都没这么累
April5
2020-01-08 08:42:50 +08:00
@chinuno 不让你用 vanilla.js 了???
idealhs
2020-01-08 08:44:16 +08:00
@tyrealgray 你告诉我笔记本能不能写.java .cpp ?说这种话是脑子有包?
liuxey
2020-01-08 08:56:58 +08:00
你不是针对帖子作者,你是针对所有人
BacGa
2020-01-08 08:59:42 +08:00
不要搞语言 前后端 鄙视链了,按工资排名吧,挣得多总是有道理的。
gccdchen
2020-01-08 09:09:56 +08:00
现在都成体系了,前端有前端的体系,后端有后端的体系,运维有运维的体系.
这样换人就方便了,需要哪些技术栈,面试就那些技术栈.成本风险相对降下来了.
cigarzh
2020-01-08 09:11:26 +08:00
说的挺不错
Tdy95
2020-01-08 09:17:52 +08:00
@chinuno
难道前端追求的是到最后谁也看不懂,或者只有 1%的人能看懂吗?
----------------------------------------------------------------------------
前端的复杂度不是凭空发展,是因为业务复杂度的上升,为了解决业务而产生的解决方案。你要是不会,或者说你没有这些业务场景,完全可以用原生 js 撸一把,既想享受现代前端的便利又不想承担学习成本,是想 pechi 吗。

后面一大段的东西总结下来无非是黑了前端技术迭代快、学习成本高,关于技术迭代,只要不是做一天和尚撞一天钟的程序员,学习曲线并不会陡峭,无非是翻看 api 的时间会多一点。

学习成本高,还是那句话,没那复杂度,您可以原生 js 一把梭,何必自找不痛快。



以前也没分什么前端后端都是一个程序员去搞定的,后面为了节约成本任务细分才出来的前端吧。
-------------------------------------------------------------------------------------------------------------
是因为 web 的发展,由单纯的信息展示转变成平台如博客、社交网站( SNS )、P2P、即时消息( IM )、基于地理消息服务( LBS )等等,承载的复杂度上升,一个工种玩不溜了,才会产生专职的前端。
hyy1995
2020-01-08 09:23:04 +08:00
写得好,凭什么前端就应该是谁都能看懂。说实话互联网歧视链一直都存在,搞后端的看不起前端,却又不想、不敢承认前端这几年的发展,这类搞歧视的人,经常说的一句话就是:“前端再复杂,也没后端复杂,对比后端就是小儿科”。V 站这种人真心不少,现实中是“全干工程师”,网络上还真把自己当成“全栈工程师”了,会点皮毛前端就敢指点江山,也不看看自己待的是哪家公司,是 BAT 还是 TMD ?还是其他知名公司?


前端所能做的东西越来越多,也一直在变好,跨平台开发、桌面应用、Node.js 等等这些,早就已经不是当年的切图仔了,有些人思想是多陈旧、目光是多狭隘?才会觉得前端就是小儿科。讲道理,说自己“会”前端的后端开发,并且瞧不起前端技术的,大多数只是懂得用 Vue 开发后台系统,直接套 UI 框架那种,稍微深一点的技巧就不会用了,这类人敢说自己不是这点水平?


我是前端,以前在大学做毕业设计的时候,用的是 jQuery+PHP,前后端分离,PHP 没用框架,直接撸的。工作之后我也偶尔帮后端改代码(工作 3 年,对接的后端都是 PHP ),但我从来不敢说自己会后端,因为我会的很皮毛。如果换成是 V 站某些人,会这点皮毛就早把自己当全栈了吧。
hyy1995
2020-01-08 09:25:18 +08:00
@Tdy95
他那种就是典型的 V 站歧视链选手,“为了节约成本任务细分才出来的前端吧”这种话都能说出来,可见水平。。。现在的 web 需求,有本事 JSP 一把梭,我看他能做出个什么锤子东西来。
zzlove
2020-01-08 09:28:16 +08:00
@tyrealgray 我也能拿记事本写 java hello world 啊
areless
2020-01-08 09:30:25 +08:00
html 起源于印刷领域。切图才是纯正的 html~~~这些邪道最后都会消失。而 html 不会
duanxianze
2020-01-08 09:35:10 +08:00
前端门槛低 但现在上限很高 我认为迟早有一天会统一 所有 GUI 界面 包括手机电脑手表 甚至各种嵌入式设备
toma77
2020-01-08 09:36:07 +08:00
@ayase252 react SSR 要改
FaiChou
2020-01-08 09:41:40 +08:00
@avastms
我们公司, 前端 ClojureScript 后台 Clojure, 前后台都 FP . FP 流行起来应该不成问题, 前端 FP 的讨论也越来越多了. 有兴趣多讨论讨论.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635922

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX