没有网络的网络
1.
2.
3.
4.
5
1.
我14岁的时候建了自己的第一个网站?那是一个《模拟人生》的粉丝网站。它用的是表格,而且颜色根本达不到任何可访问性(或者说美观度)的检查标准。如果我没记错的话,我先在Dreamweaver里制作视觉效果,然后把生成的HTML和CSS复制粘贴到我自己做的PHP后端(你可以想象一下它内部是什么样子)。
这是一个非常重要的网站,不仅因为它不知何故变得比较受欢迎,而且对我来说也很重要,因为它成了我的个人游乐场。我自学了CSS,让布局更美观,在这个过程中,我积累了足够的设计技能,可以做四年的设计师。我开始用Flash(当时是Macromedia的!)制作横幅和动画。
不久之后,Web 2.0 时代到来,我开始编写 mooFx 脚本,让一些东西动起来,看起来很酷。我不太清楚代码里到底在做什么,而且我非常怀念 PHP 标准库,但我还是坚持了下来。最终我选择了 jQuery,在之后的很多年里,我对 DOM 的理解都基于 jQuery。
我学习了更多关于 HTML 和 CSS 的知识。我学会了如何编写语义化且易于理解的代码。我学会了如何扩展 CSS 架构以避免出现意大利面条式代码。
有一段时间,我有一个个人网站,它就像一个马里奥世界舞台,所有东西都会移动,它使用 CSS 动画和一些 JS 元素来添加无限的云和其他东西。
我爱上了所有我能建造的酷东西。
2.
我最终成为了一位颇受尊敬的前端“工程师”。我经常做演讲之类的。领英招聘人员在问候语上确实下了功夫。真是厉害。我现在只是在吹牛而已。别再说了。
现在,尽管如此,您可能已经注意到,我在工程职业生涯的开始阶段缺少了很多东西。
我不太清楚函数是如何映射到数学结构的。实际上,当我们开始学习代数时,我就放弃了数学。代数不是用来计算等式的2*n > x/3
,而是用来计算范围n
和x
的(我不知道这个问题是否有解,我只是随便想出来的)。
我还在琢磨用 TypeScript 之类的工具能实现哪些更复杂的类型。说实话,我在个人项目中不使用类型。我认为它们有助于使代码自文档化,从而对团队来说也很好。不过,它们太抽象了。
很长一段时间里,我从未使用过任何真正的 Web 开发框架。我完全错过了 Angular 和 Ember 的时代,因为我认为网站不启用 JS 就无法正常工作,这简直令人无法接受。现在有了语义化的 HTML,用 JavaScript 编写整个前端就显得毫无必要了。
3.
我爱 React。我爱 React,因为我对扩展 HTML 和 CSS 了如指掌,深知单文件组件的价值。我喜欢 CSS-in-JS 的方式,它提供了足够的抽象,让你仍然可以使用盲选器之类的技巧,同时还能让你充分利用 JS 的功能,比如容器查询。我喜欢 React 应用的服务器端渲染非常简单,因为它可以全部编译成原生 HTML 而不是 Web 组件,从而有效地将其转化为一个可以运行的酷炫模板引擎。我喜欢 React 的方式,它仍然可以非常有效地通过使用完全语义化的标记来实现渐进式增强,然后让 Hydration 对其进行进一步的处理。
我也讨厌 React。我讨厌 React,因为这些行为并非默认行为。如果你用 div 和无标签的文本框创建表单,并将所有内容发送到服务器,React 不会发出警告。我讨厌 React,因为 CSS-in-JS 方法默认鼓励你编写完全独立的组件,而不是尝试构建一个完整的网站 UI。我讨厌服务器端渲染和渐进增强并非默认行为,而是你必须特意去做的事情。
但我最讨厌 React 的地方在于,它逐步覆盖了 HTML、CSS 和 JS 的领域,并将其替换为“高效”和“干净”的代码。
与原始 HTML 相比,在 React 应用程序中添加类型检查非常容易,以真正确保您不会意外添加,"12" + "8"
因为否则您怎么知道您没有在这里得到 20。通过运行您的应用程序?荒谬。通过拍摄组件快照并有效地及时冻结它们,自动化测试也非常容易,不断发展的 CSS 布局被阻止。使用 CSS-in-JS,您可以忽略那些讨厌的 CSS 行为,如级联。它不像名称中的第一个字母或任何东西。
没有那么多一流的 DOM 操作和强制的构建步骤意味着工程师最终可以开始为其他语言铺平 javascript 的丑小鸭和责任,基于数学的纯粹性和优雅性,如 Elm 或 Reason。
有些人觉得这些都是好东西。另一些人则认为,这些不过是书呆子们的一种自慰方式,他们觉得编写网站代码实在太无聊,需要给它增添点趣味。
4.
我学东西的速度出奇地快。我已经赶上来了。我对这些狗屁东西都了如指掌。而且我有点稀有。我认识的那些最优秀的前端开发人员现在都完全不知所措了。
大多数现代前端代码库都不再关注 HTML 和 CSS。事实上,它们已经与 HTML 和 CSS 相去甚远,以至于那些还关心 HTML 和 CSS、能写网站代码、但还没成为产品设计师之类的人,总共也就 20 个人,根本不知道从何入手。
我们“干净”又“优雅”的前端现在通常后端比前端更干净。我们拥有 20 个文件,类型完美,支持在 JavaScript 关闭时无法使用的表单。我们的 CSS-in-JS 模块带有类型化的 props,隐藏了意大利面条式 CSS,并带有完全静态的 props,作为实现细节。
我们建造的厕所,管道系统是世界一流的,但人们却无法坐在上面。而那些知道如何修理厕所的人,却不知道如何把马桶装进我们的管道系统。
懂 CSS 的设计师无法在 GitHub 上更新某些颜色,否则会破坏一半的测试。产品经理无法在不弄清楚地图组件的 PropType 的情况下替换页面中的一堆文字。无障碍专家无法替换,divs
因为buttons
视觉回归测试表明 Windows Phone 6.5 中的 Opera mini 会在它们周围渲染边框,而我们无法合并更改,直到它们全部变绿。前端开发人员无法实现手风琴折叠面板(说实话,这可能是最好的选择),因为对类型非常着迷的家伙不允许她在 Redux 之外存储状态。
在将前端提升到严肃代码的领域时,我们不仅使事物变得过度设计,而且还烧毁了我们最初用来到达这里的所有梯子。
5
我经常回想自己是如何开始编程的,是如何逐渐理解网络的。那段日子真是疯狂。我很久没碰代码了,却依然在做着很酷的网站。我们只是让一切运转起来。
网络的设计本身就包含着一些“尽力而为”的元素。你会让 HTML 变得可访问且语义化,然后以弹性的方式编写 CSS,这样即使它不可避免地在不同/老版本的浏览器中崩溃,页面仍然能够正常工作。之后,你在上面添加 JavaScript,如果它不起作用?那也没关系,因为它并非正常运行的必要条件。它只是锦上添花而已。
我喜欢 React,因为它让我更快、更轻松地完成我最擅长的工作。我讨厌 React,因为它周围的文化比这个库本身更积极地阻碍其他人发挥出他们的最佳水平。