好久不见,前端再见

好久不见,前端再见

断断续续写前端项目也有好几年了,从大二接触 Javascript 和 Vue 时的兴奋,到接触小程序和 React 时的“渐入佳境”,再到这段时间的感到无比疲惫,我希望我在前端开发上大规模投入的阶段先暂告一段落了。为什么有这样的疲惫感呢?原因总结起来有以下几点:

  1. 前端开发面临的大多不是技术问题,是产品问题或美学问题,最终目标是让用户满意;
  2. 前端开发过于琐碎,需要处理的细枝末节极多,每个页面元素都有相应的状态需要管理;
  3. 前端难于抽象,对应到用户上则表现为具体业务需求是千变万化的。

写前端的疲惫感

从技术上来说绝大部分前端应用并不需要考虑代码的优化,而是需要“取悦”用户,这应该是最让我无法忍受的了。因为前端应用面向最终用户,看得见摸得着的应用就会让用户有点评的冲动,而除了基本的程序正确性问题外,诸如“我觉得这里不好看”这样主观且不确定的问题占绝大多数。相较于后端而言,前端应用面向的用户不知道也不关注技术问题,他们对应用提出的问题是不收敛的,且提出问题的同时往往伴随着需求变动。

而回归到技术上,与其说是我选择了前端框架,不如说是我选择的 UI 组件库替我焊死了框架的门,真正做到 面向 UI 组件库的编程 。目前我们普遍使用的 React + AntDesign 的组合已经成了标准配置,图快写出来的所有的应用外观上和代码上都几乎一样,让我有些视觉疲劳和精神疲劳。

疲劳状态下需要转移注意力,换换脑子接触新的东西,近期发现了重编译时的轻量前端框架 Svelte 的确让我耳目一新,简单清晰的 API 和朴素的文件布局和它的名字完全吻合,让人觉得 Web 开发又回到了似曾相识的从前的模样,熟悉又清新。但很快美梦就破碎了,当我准备用它重构自己用 React 写的网站时发现消息提示,模态对话框,表单验证等前端开发常见场景问题都没有太好的解决方案。回顾了 Bootstrap,有刀耕火种的味道。可能我属于“急于求成”“基础不扎实”的前端开发者吧,如果有时间和机会好好打磨 UI 组件,调整样式和布局应该能够达到非常好的效果。但 React + AntDesign 就跟吃快餐一样,风味欠佳但是效率很高。

现在我觉得是实际业务选择了我,前端框架选择了我

当我谈写代码时我谈些什么

当我提到写代码,脑海里想的是借助程序充分利用计算机的能力,达到我需要完成的计算任务。程序的状态应被准确地刻画,程序的输入输出应被良定义,程序的边界应当较为清晰,程序的正确性可以被验证…而这些与前端开发不能说是毫不相干,也可以说是相去甚远。

人是会犯错的,用动态语言写代码错误频出,而因为我能力有限,用动态语言写前端代码只会使得错误跟我玩捉迷藏,更何况还得面对各路用户提出的需求和美学问题。我希望我写代码时能够保持足够长的、不被打扰的专注时间,让我可以设计并实现程序,而不是时不时考虑表格 A 缺了字段,按钮 B 应当换成主色等琐碎的问题。下面这张图就是上个月某两周的代码提交次数统计情况,在前端应用的开发中需要处理的事情和写的代码都是极其琐碎且没有局部性的。我不认为这么多次的提交都具备平均的单位价值,但可以体现写的代码是东一榔头西一棒子的。

当然这些都是我的主观感受,无知者无畏,我只是窥到了前端的冰山一角便自觉全面接触后难以接受想着要逃。我很喜欢 Vue React Svelte 这些项目,也希望有朝一日可以自己可以搭建出这样的框架。用框架写前端应用和实现前端框架是完全不一样的概念,前者针对业务,后者面向系统。我计划在之后的时间里深入到软件系统的设计与实现当中,在可接触的项目范围内开始转向后端于我而言是理想的开端。编写相似的业务代码给我带来的技术提升和成就感与日俱减,尤其是我饶有兴致地用颇为巧妙的方法实现的前端应用被用户主观地认为“不好看”或者“不易用”时,很难避免这些对应用本身的批评转嫁到自己身上,实现得不好可能也有,但是这种因素占比是多少呢?

希望一人独处的念头,始终不变地存于心中。所以一天跑一小时,来确保只属于自己的沉默的时间,对我的精神健康来说,成了具有重要意义的功课。至少在跑步时不需要和任何人交流,不必听任何人说话,只需眺望周围的风光,凝视自己即可。这是任何东西都无法替代的宝贵时刻。

—— 村上春树

写前端的收获

抱怨了这么多,不是想表达我对前端开发的深恶痛绝,而是“爱之深责之切”(?)。我仍会关注前端领域的发展,甚至还会在自己的网站里尝试新的前端技术,但对于我而言它已经成为“庐山烟雨浙江潮”。它给我带来的收获有几方面,最主要的就是产品思维、审美提升和巩固 Web 基础。

首先产品思维就是站在用户的角度思考产品的问题,以用户为中心。而用户就是更注重产品的美观性、易用性而不注重实现方法和程序效率,软件产品本身不仅是代码和程序,美术素材、按钮图标、菜单样式等等都是其中重要的部分。因为前端应用直接面向最终用户,所以前端开发其实也是在做产品,当然如果纯粹机械地将原型图还原成前端应用则另当别论。

审美提升则是主观和隐性的。因为我所做的前端应用大多是 ToB 模式,不同于电商类应用,没有引流新用户的需要,所以几乎所有界面都是简约风格的,久而久之我对应用的设计风格就有了简约的偏好。最直接的影响是发现“丑”的应用数量增多,间接影响是当我听完一段应用的功能描述后可以在脑海里描摹出大致的页面设计方案,何处需要做一些留白,元素如何合理布局,如何让页面观感舒适等。审美的提升不仅体现在页面实现上,也体现在代码风格上,能写美观的地方我会尽量优化,目录结构、文件命名、甚至是注释的写法也要统一(/** *////* */)。

巩固 Web 基础的巩固则直截了当,DOM APITypescript浏览器兼容性 甚至是 jQuery 等杂七杂八的东西都有接触,也开始封装发布自己的 UI 组件和实用工具 NPM 包,成为 NPM 包玩家。Svelte 的出现也把基于 Virtual DOM 前端框架的势头稍微拉回了经典的开发风格,让我体验了一把文艺复兴。

后续计划

前段时间业余时间学习了 Rust,希望能够借助 Rust 的学习路径复习操作系统、计算机组成原理和数据库原理等基础知识。阅读 Rust 的中英文文档及博客后深感深切感受到了大一从 C/C++ 上没有感受到的魅力,Rust 编译器像严格的编程教练,用极为严格的语法要求我们写出合规合法的代码,这样一来通过编译器检查的代码就已经达到较高的标准;Rust 中 所有权生命周期 的机制也十分巧妙,能够最大限度地避免内存泄漏和野指针的问题;作为 Mozilla 推出的现代编程语言,内建的类库和原生的 API 都比较趁手。

3月末 Golang 发布了 1.18 正式版,终于推出了泛型编程的特性,到现在还没有真正上手写呢,是时候体验一番了。

后续计划主要用 Golang 或 Rust 这两种编程语言,配合 GraphQL 搭建可拓展的后端服务;自己整体的工程方向朝着微服务、云原生的方向靠拢,尽量扎进计算机系统的核心和底层。

作者

PowerfooI

发布于

2022-05-09

更新于

2024-08-04

许可协议

评论