不只是 JavaScript

自从我们决定使用 JavaScript 作为 Ruff 的主要开发语言,就有“好心人”给我们建议:硬件跑 JavaScript,难道不是已经有 Espruino 了吗?

随着时间的推进,更多人开始涉足 IoT,更多的“好心人”也给了我们更多的建议,只不过名字变成了“JerryScript”,“Smart.js”等等。作为 IoT 领域的奋斗者,我们早早就知道了这些名字。这种内省的问题,我们早已在心中问过自己无数遍了。对于我们来说,真正要回答的问题只有一个:我们是不是愿意用那些工具开发硬件?答案是不愿意。

给出这样的答案并不是因为敝帚自珍。我们拥有优秀程序员的美德,尤其是懒惰,若要有人能够做出我们满意的东西,我们一定会去用。为什么现有的东西无法满足我们的需求,我们非要自己动手打造一个 Ruff 呢?因为除了一个能在硬件上运行的 JavaScript,我们还要求更多。

在不同的场合和一些做软件的人交流,我们问了这样一个问题,你知道什么是 GPIO 吗?我们得到的是一副见了鬼的表情。

这就是软件人对于硬件开发的理解,它们根本不知道什么是 GPIO,哪个叫 I2C。如果不是要做一个硬件开发平台,我们可能一辈子都不知道这是什么东西。启动 Ruff 之初,我们几个合伙人就坚定了一个信念,做一个让更多软件人能使用的平台。既然我们不懂 GPIO,就不能让其他人第一眼就面对 GPIO。

翻一下各家 JavaScript 硬件平台的文档,就可以知道,所谓的封装,完全就是直接的硬件操作。我们会被吓跑,相信很多软件程序员也会被吓到。所以,这不是我们要的东西。

找到一个合适的抽象模型并不能一蹴而就,我们工作的前几个月除了打造基础,用了大量时间思考程序员面对的接口。直到有一天,灵光一闪,我们有了这样的代码:

$('led').turnOn();

几个月后,当我们在一个经验丰富的程序员面前演示 Ruff 时,他不屑地说,硬件开发挺简单嘛!深受鄙视的我们内心充满了喜悦,因为在他眼里,这就是一个普通的程序库,完全没有什么硬件的概念。

如果真的要成为一个硬件开发人员,你早晚要知道 GPIO,但等你先入了硬件开发的门再来了解也不迟。