Appearance
为何要亲手构建一个手势库?
在上一章,我们了解了手势库的价值——它将我们从繁琐的底层事件中解放出来。此时,一个理性的声音可能会在你脑中响起:“既然已经有 Hammer.js 这样成熟的轮子了,我们为什么还要自己再造一个?”
这是一个非常好的问题。在软件工程领域,“不要重复造轮子”(Don't Reinvent the Wheel)是一条广为人知的准则。它告诫我们,要善于利用社区现有的、经过考验的工具,以提高开发效率。
然而,这条准则的后半句却常常被忽略:“除非,你想学的不仅仅是轮子的用法,而是如何造车。”
这正是我们这次旅程的核心目的。我们并非为了“重复”一个轮子,而是为了通过“建造”它,来获得更深层次的成长。
1. 最好的学习,是“用创造来学习”
学习一项技术,通常有三个层次:
- 第一层:知道如何“用”。这是大多数开发者所处的阶段。我们阅读文档,学会 API,并用它来完成业务需求。这就像学会了如何驾驶汽车。
- 第二层:理解它的“原理”。我们通过阅读源码或技术文章,理解了这个工具内部的工作机制。这就像不仅会开车,还通读了汽车的维修手册,知道引擎、变速箱是如何工作的。
- 第三层:能够亲手“创造”。我们能够从零到一,实现这个工具的核心功能。这就像我们亲手组装,甚至设计了一台汽车。只有到达这个层次,我们才敢说真正“掌握”了它。
直接使用 Hammer.js,我们停留在第一层;阅读它的源码,我们能达到第二层。但只有当我们亲手构建一个 mini-hammer.js 时,我们才能真正到达第三层。在这个过程中,那些原本模糊、抽象的概念——比如状态机、事件流、适配器模式——都将变得无比清晰和具体。
2. 获得“庖丁解牛”的自信
许多开发者在面对一个庞大而复杂的代码库(比如 React, Webpack)时,会感到无从下手,心生畏惧。这种畏惧,源于未知。
而“造轮子”的过程,正是克服这种畏惧的最佳方式。当你亲手实现了一个手势库的核心架构后,你再去看 Hammer.js 或者其他任何一个手势库的源码,你将不再是“仰望”,而是“平视”。
你会发现,尽管它的代码更完善、边界处理更优雅,但其核心的设计思想、模块划分,都与你亲手构建的 mini-hammer.js 有着异曲同工之妙。你将能够快速地定位核心代码,理解其设计意图,甚至发现其中可以改进的地方。
这种“庖丁解牛”、洞悉本质的能力,是衡量一个开发者从“初中级”走向“高级”的重要标志。它给你带来的自信,将远远超越你完成一个普通业务项目的成就感。
3. 乐趣,源于创造本身
最后,但同样重要的是,创造本身就是一件充满乐趣的事情。
在日常的业务开发中,我们更多的是在“实现”需求。而“造轮子”,则让我们有机会像一位真正的“建筑师”一样去思考和创造。我们可以自由地设计 API,规划模块,实现算法。在这个过程中,我们是自己世界的主宰。
从一个空白文件开始,随着你的代码一行行增加,一个鲜活的、能够响应你指尖交互的“生命”逐渐诞生。当你在屏幕上,用自己写的库,第一次成功识别出一个“捏合缩放”手势时,那种纯粹的喜悦和成就感,是任何语言都难以形容的。
所以,让我们暂时放下“效率”的执念,以一种“学徒”的心态,开启这次的建造之旅吧。这趟旅程或许不会直接产出你下一个项目所需的“轮子”,但它会为你打造一套未来能够建造任何“车辆”的、宝贵的“工具箱”。