在 Web 开发中有一个“C”字我们没有给予足够的关注。不,我说的不是“持续集成”,甚至不是“CSS”。我说的“C”字是“约束”。了解约束是构建在目标环境中尽可能发挥最佳作用的软件的重要组成部分。然而,这项任务的难度会根据我们开发的系统而有所不同。
当我还小的时候,超级任天堂游戏是那个时代的潮流,没有比在相当简陋的约束下构建不可思议的事物更好的例子了。SNES 游戏的开发者受到以下因素的限制,包括但不限于:
- 16 位色。
- 8 通道立体声输出。
- 存储容量以兆位而不是兆字节为单位的卡带。
- 在某些游戏中,有限的 3D 渲染能力,这些游戏在卡带中嵌入了一个特殊芯片。

尽管存在这些限制,游戏开发者还是制作出了令人难以置信和令人难忘的游戏,这些游戏将超越我们的一生而流传下去。然而,SNES 开发者面临的限制是静态的。你只有一个平台,它具有一组固定的功能。如果你能保持在这些功能范围内并最大限度地发挥其潜力,你的游戏就可以在任何拥有 SNES 主机的玩家手中玩到——并受到喜爱。
另一方面,PC 游戏必须在一个更灵活的约束范围内开发。我记得我玩的第一批 PC 游戏之一的盒子上侧写着其系统要求范围:
- 至少拥有一个 386 处理器——但更推荐使用奔腾处理器。
- Ad Lib 或PC 扬声器 支持——但Sound Blaster 是最好的选择。
- 至少拥有 4 兆字节的 RAM——但更多更好。

如果你当时没有一个顶级系统,你仍然可以获得愉快的体验,即使在某些方面体验会下降。
主机游戏和 PC 游戏开发分别是静态约束和可变约束的典型例子。前者强制购买单个硬件配置以参与,而后者允许在各种硬件配置上参与,并提供不同的性能结果。
这听起来熟悉吗?
可以说,Web 开发者面临着最难以应付的约束。因为我们必须协调三个不同的变量才能创建快速网站:
- 网络。
- 设备。
- 浏览器。
随着时间的推移,我对在这些约束范围内工作的挑战性有了更多了解。这是我在每一个项目、每一个客户以及我评估的每一项新技术中不断学习的经验教训。
应对 Web 强加的约束是一项艰巨的任务。我内心厌恶我们发布的 JavaScript 量,难以判断何时太多就是太多。开发者体验在我们的日常工作中扮演着重要的角色,我们需要适量的体验来让事情顺利进行,但也要避免损害用户体验。因为,正如我们的基础文档告诉我们的那样,用户优先于一切.
那么今年我学到了什么呢?
我每年都会重新学习同样的事情,只是每次以一种微妙的不同方式:我们的技术选择会产生成本和权衡。今年,我重新认识到——以清晰而直接的方式——我们的技术选择如何将我们锁定在可能损害用户体验(如果我们没有轻微地采取措施)的架构中,而且当我们必须退出时,这些架构也变得越来越难以退出。
我学到的另一件事是,使用平台是一项艰巨的任务。然而,我使用得越多,我对其抽象的理解就越深刻。直接使用平台并不总是最好的或最可扩展的工作方式,但定期使用它而不是安装任何可以解决我当前问题的软件包,有助于我更深入地了解 Web 的工作原理。这是一项宝贵的知识,会随着时间的推移而发挥作用,而没有它,构建有用的抽象就变得更加困难。
最后,我今年再次认识到,我们的约束是可变的。如果某些事情在所有地方都没有像预期那样好地工作,这是可以接受的——但我们需要非常清楚这些事情是什么。这些疏忽对我们对公众责任的接受程度取决于我们提供的功能。如果这是一项至关重要的功能,我们需要格外小心,并充分考虑用户。如果今年的失业率上升和远程学习教会了我们什么的话,那就是互联网不仅仅是用于商业.
我希望 Web 在 2021 年比过去几年变得更具适应性。我希望我们开始对用户体验有相同的期待,就像我们小时候玩 PC 游戏时一样——体验可以在保真度上有所不同,以适应速度较慢的系统——这对 Web 来说是一件非常好的事情。当然,这比期望每个人都体验相同的体验要灵活得多,无论他们是在使用 iPhone 12 还是 Android Go 手机。