你用Ruby干什么?你是如何参与Ruby社区的?
Dave:在过去的8年中,我用Ruby做所有的事!我们整个的线上业务都是用Ruby写的。如果你成为我们的作者,我们用来形成一本书的软件也是用Ruby写的。所以可以说Ruby就是我们公司的全部。另外,我几乎每天都会写Ruby脚本,这是我生活的一大享受。我的记性很差,如果我生活中能找到任何可以自动化的步骤,我一定会把它自动化,这样我的生活就会更加简单。
在开始的时候Ruby社区人很少,第一次聚会的时候大概只有30人。所以参与这么小的社区其实只是和朋友打交道而已。说到开源社区的贡献,我大概写了有4、5千行代码,有一些文档,也提交了一些补丁。另外,我经常参与Ruby大会,并且乐在其中。
你对其他Rubyist有什么建议?你对对Ruby这门语言感兴趣的人有什么建议?
Dave:好问题!我最大的建议就是参与进来。这就意味着找到一个你需要做的事,每个人都可以做到,不是非要是个编程大牛才可以。只要找到一个小bug或者你使用的库没有做你希望的事情,那你就可以做一个新版本出来,或者把补丁发给作者。如果有一些功能完全不存在,那么不要只是做出来给自己用,打个包发布给大家。如果这么做的话,你就是社区的一员了。这种回馈不仅会让你感觉很好,也会帮助其他人。同样,这么做也会帮到你自己,因为你有了名誉和声望,你在社区中也有了自己的位置。
你是怎么成功地作为程序员、作者、出版者工作的?这些东西占据的比例是怎么样的?
Dave:我睡得不多(笑)。作为一个出版人,我的团队非常出色。首先,我们都要感谢自动化,我们可能是世界上自动化程度最高的出版公司。我们整个公司没有一张电子表,这些都要归功于Ruby。比如我知道很多出版商如果要发布一本书的新版本的话,需要在之前工作一两天的时间,而我们只需要……大概5秒钟。自动化是关键点之一,通过高度自动化,我就有了更多空余时间。另外有很多杰出的人才和我们一起工作,他们工作得比我好。我很幸运,他们可以帮我完成很多工作,所以我有时间空余出来。虽然有一些我必须做的事,但是大部分时间我可以做我喜欢做的。也就是去了解新的科技,和有趣的人交谈,继续探索,说实话……这种生活真的很享受!
我们没有办公室,每个人都在家工作。所以我早上起床之后,查查邮件,遛遛狗,回来再做事……所有事都是生活的一部分,所以我不用把我的时间分割成8小时工作和下班。其实我每天的工作时间多于8小时,但是事情都是分布在各种时间段里,所以感觉起来不像是在工作。当天气晴好的时候,我可以坐在外面边晒太阳,边打字,这样的感觉很好。
Ruby和移动开发结合比较热门,松本行弘本人也专注去做mruby了。请问对Ruby与移动开发的前景有什么看法,需要逾越那些障碍?
Dave:对于移动方面的开发最大的挑战就是没人知道怎么去做。但是没关系,因为我们在不断努力尝试,犯错误,然后从中学习。我认为移动不是重要的,而是唯一至关重要的开发。它并不只是手机,而是分布网络下的各种东西。人们讨论的因特网一样的连接,我认为这种实现的到来会比我们期待的更快。所以我们要找到一种编写系统的办法,这种办法可以支持成千上万处理器,它们出现在各种地方,进进出出,然后把他们整合到一起,在需要的时候还可以拆分开来。比如当我走入一个房间,然后我的手机,或者设备就开始和这个房间对话,它会告诉我需要知道的信息。我认为这将在不远的未来就可以实现。
在这样的未来中,Ruby的领域在哪里呢?松本在做mruby,这是一种模块化设计语言,所以你可以选择你需要的功能。你可以选择运行,或者把它变得更加轻量。我昨天和他通话时谈到了mruby,他说有一家公司在使用mruby做他们的渲染器,他们把它设置成有45kb的内存印迹,这真是难以置信。这就是Ruby应该发展的领域吗?我不确定。Ruby最开始应用的领域是比刚才所说的退一步的地方,也就是设备之间的接口。所有设备只是骨架上的皮肉。回归这样的位置也许更好,我希望Ruby可以从一种杰出的Web开发语言的定位上移开。它并不只是一种Web开发语言,不能因为rails很红就说它只属于Web开发。Ruby并没有改变!它只是用来写Web应用很顺手而已。我觉得Web应用在未来可能会降温,所以我也希望Ruby可以回归本源,并且与时俱进。
听说您正在写一本关于用Elixir编程的书,能告诉我们Elixir最吸引你的地方是什么吗?
Dave:因为我喜欢!这其实就是最根本的原因。Elixir能让我微笑,所以我愿意和别人分享这样的快乐。对于Ruby来说也是这样,我想和别人分享这份愉悦。
从另一个层次说,软件世界在发生变化。每隔两年,计算机的数量就会翻一番。为了适应时代,我们必须改变计算机工作的方式。在过去,我们做的就是让计算机变得更快。现在,计算机里的处理器更多了,我的笔记本是四核的,也许明年就是16核或32核的了。所以作为软件开发者,我们没有选择,我们需要写出在这些机器上运行良好的代码。这又回到移动设备上的问题,这些代码不仅要在不同的设备上运行,还要在同一设备上的不同处理器上运行。用传统编程语言,比如Java、C#或Ruby,要写出多核运作的正确代码是很困难的。Elixir是一门以Erlang为基础的语言,Erlang已经诞生了30年。这门语言的很大一个部分就是Erlang虚拟机,它可以支持数以百万计的处理器,它们以极高的效率相互通讯。它可以很有效地调控这些处理器,如果其中一个坏掉了,仍能在不影响其他处理器的情况下继续工作。它也可以改变处理器,而不需要影响到正在运行的应用。所以在电话中转中,很多软件都是用Erlang写的。启动转换之后,运行不会停止。这些都是很好的特性。但是,Erlang语言本身却十分丑陋。虽然确实有人喜欢这门语言,但它对程序员并不友好,至少可以说独树一帜到令人担忧的程度了。
Elixir是将与Ruby类似的句法,放在Erlang虚拟机上。这样既可以得到虚拟机的好处,又可以写出更加平易近人的代码。不仅如此,Elixir还可以利用虚拟机做到Erlang也做不到的事。在Elixir里什么都是可以改变的,程序员会觉得很有趣,还可以避免Erlang里的重复代码。所以你写出来的代码会更短,也更容易改变。在未来,我觉得Elixir可以用在大型分布式系统上面,它可以用在大容量,大量事务的环境中。它也可以为创业者们服务,为他们完成用传统方法无法完成的事。创业者们永远都在找从前无法实现的事,具体是什么呢?我不知道,如果我知道的话就去创业了。他们可以尝试从连接所有东西,和很多东西交互的角度来考虑(比如和洗碗机,或者洗衣机交流)。我对此充满了期待。