IoT(Internet of Things)是大家公认的未来。但让人尴尬的是,这些代表未来的炫酷产品似乎只存在于业内人士的 PPT 中。真正走进普通人生活的,大多只是一些“带有 Wi-Fi 的普通硬件”。和大多数生态普及过程中遇到的问题相同,IoT 缺少一个关键的系统——应用。应用缺失,自然难以营造用户生态。然而这并不完全是开发者的责任,大多数情况下,开发者都处在臣妾做不到的状态,因为涉及硬件的“嵌入式开发”需要非常多的底层硬件代码基础,这让广大的软件程序猿望而却步。
“Ruff”的目标就是解决这个问题。简而言之,Ruff 可以允许开发者用普及的 JavaScript 语言进行嵌入式开发,他们究竟是怎么做到的呢?且听 Ruff CTO 郑晔慢慢道来。Ruff 是一个硬件应用开发平台。简言之,通过 Ruff,开发者可以使用 JavaScript 开发硬件应用。从行业发展趋势可以看到,IoT(Internet of Things)是大家公认的未来。大家也知道,我国目前在生产制造的水准也是世界级的。但是,从趋势到现实中,中间还欠缺了什么呢?我们看到的是:应用。
我们都在说智能硬件。实际上,所谓智能硬件是一个“硬件应用”,是把硬件和应用场景结合起来。应用的成功本质上是个概率问题,我们之所以还没有看到很多成功的硬件应用,主要是应用的总体数量太少。很多人都能看到这是一片蓝海,但问题是,并不是每个人都有能力进入到这个领域,因为硬件应用的门槛太高了。
这一点类似于 Nokia 手机的时代,很多人都想编写手机应用,但只有很少量的程序员有能力编写手机应用,我自己就曾经希望买 Nokia 手机来做开发,但最后放弃了,也是因为开发太麻烦。后来有了 iOS 和 Android,开发门槛一下子降了下来,大量的程序员涌了进来,才有了我们看到的移动互联网的兴起,也才有了微信、滴滴等爆款应用。
所以 Ruff 就是要在硬件应用开发领域解决同样的问题,降低硬件应用开发的门槛,让更多有应用开发能力的人进入到这个领域里。
有一个前端开发者,他拿到 Ruff,很快就写了一个小应用:用打火机点亮网页上的一盏灯。因为有了 Ruff,这个从来没写过硬件的开发者,就有机会开始编写硬件应用了。这就是 Ruff 降低门槛起到的作用。总结起来,Ruff 就是要降低硬件应用开发门槛,让开发者能够创造出更多有创意的硬件应用。
从现状来看,硬件和应用完全就是两套词汇表,比如,做硬件的人关心的是,GPIO、I2C、时序、驱动等,而做应用的人关心的是,需求、用户体验、高可用性、系统架构等。我问过应用开发者什么是 GPIO,他们的表情就像见了鬼一样;我也曾让硬件开发者讲讲什么是 SOLID 设计原则,很少有人能讲清楚。
这就是软硬件之间的鸿沟,让一个人同时具备硬件和应用两套技能,这是很高的要求。其实,即便是只在硬件开发领域,除了应用以外,做系统的和做硬件的也是不同的话语体系,有人关注进程,有人关注晶振;有人关注嵌入式系统,有人关注 PCB。
让一个人掌握好所有的东西,难度系数会直线上升。即便有这样的人,价格也会非常高,而且能找到的人数量也有限。另外,在硬件领域,重复造轮子的现象是很严重的。很多东西即便开发者再熟悉,到了一个新的环境可能就要重新做一遍,比如,常见的网络协议要移植,常见的驱动要编写。我的这些印象,全部来自一个有20年硬件开发经验的老法师,他将其称为血泪史。
与应用的对接中,硬件开发的过程,基本上是一个瀑布式开发的过程,或者说一个自顶向下的过程,也就是说,把需求确定好了,然后,进入一个开发过程,这个过程往往会持续很长一段时间。从软件工程的实践来看,这是一种低效的做法,因为做产品,最重要的是快速反馈,一年前的市场需求和现在的市场需求是不同的。
所以,在软件领域有了敏捷、精益等方法论,改善这个过程,最重要的就是迭代的思想,不断地对产品进行改进。目前市面上很多有想法的人来自互联网领域,他们习惯了与软件应用开发者协同工作,所以,他们也更习惯采用迭代的思想进行工作,但同样的工作逻辑拿到硬件领域几乎没办法行得通。
举个例子,产品经理希望迭代地看到产品进展,因为他的想法需要反复验证,而硬件开发者希望确定好需求再来做开发,因为在他的逻辑里,硬件是一旦制成就很难改变了。造成这种现象更根本的原因是,是硬件制造商在编写应用。而应用开发根本就不是硬件制造商擅长的。当我们可以把硬件和应用两个概念分开之后,我们就会发现,同样的硬件,在不同的场合下,可以有不同的应用。
举例来说,同样的饮水机,如果你买了回家,它的应用是统计你家的饮水状况,提醒你多喝水;如果把饮水机租回家,它会提醒你按时缴费,保证正常使用。硬件上是一样的,但应用是不同的。解决这个问题最好的办法就是分工,让应用开发者只关注应用,硬件制造商只关注硬件。将二者联系起来,这就是 Ruff 要做的事情。