Why we are learning Clojure

在Gaslight,我们广泛地在工作中使用Ruby和Rails,也充分地经历了从JQuery到Ember再到AngularJS及其他所有关于JavaScript的一切。不过有时候我们为了学习和成长,需要脱离舒适区。我们如何赶上未来的趋势和机会呢?

那就是绝不停止学习。在过去的几个星期里,我们的开发团队决定作为一个小组去掌握Clojure语言。我们尝试构建了关于这门技术的主要知识点,所以当我们在一个客户项目中采用Clojure的时候,对自己技术的深度和熟悉程度很有自信。

为什么我们会选择Clojure呢?

填补了Ruby和Rail没有顾及的空白

我知道我们不可能永远用Ruby编程。另一个语言和环境一定会到来并取代它。我只是希望它真的比我们现在所拥用的更好。 —— Doug Alcorn

我们依然热爱Ruby,依然认为Rails通常是构建web应用的最佳方案。但是,它和其他工具一样,有长处,也有短处。

  1. Ruby的并发并不健壮。是的,你可以使用JRuby和Celluloid,但是可变性在根本上妨碍它走向并发。同时,很多你想要使用的库都不是线程安全的。
  2. Ruby和Rails几乎总是足够快的。几乎总是,但不尽然。
  3. 对象关系映射(ORM)不总是正确的。
  4. 面向对象的语言也不总是最佳的解决方案。

函数式编程是一种不同的思考方式

函数式编程是一种编程范式,一种构建计算机程序的结构和元素,它把计算看做数学函数的求值,同时禁止改变状态和可变的数据。——Wikipedia

函数式编程语言是一种有别于我们平常在Ruby和JavaScript中编程的编程范式。学习这一范式使得我们能学习崭新且不同的技术来解决问题。这些技术可能不太容易去学习,如果我们沉浸在自己舒适的命令式和面向对象的语言范式当中。

Clojure运行在服务器端

Clojure实现它的目标,通过:拥抱一个行业标准的开放平台——Java虚拟机;现代化一门古老的语言——Lisp;树立带有不可变持久化数据结构的函数式编程;同时通过软件事务内存以及异步代理提供内建的并发支持。这一结果是健壮的,顺手的和快速的。—— Clojure.org

Clojure运行在Java虚拟机(JVM)上并且利用了其提供的优势:高质量的垃圾回收,高性能的本地线程以及可扩展的移植。Clojure又在其上增加了高效的不可变持久化数据结构。Clojure带来了有趣的并发模型Core.Async。另外,这里还有很多其他有趣的库供开发,逻辑编程,模式匹配,optional typing和好多我们想要尝试并理解的东西。

Clojure运行在浏览器端

一个具有扩展,移植和多供应商支持的开发平台,一场在各个新设备上实现精巧工具的优化军备竞赛以及一个对更丰富且更精巧应用的呐喊。开发者们还有什么想要的呢?一个不同的语言,这就是了。—— ClojureScript Wiki

ClojureScript编译成JavaScript运行于浏览器。它提供了一种全新的方式去思考编写客户端应用程序。JavaScript并不是开发者社区里广泛青睐的语言。但是Clojure是设计良好,精密且具有很好异步支持的成熟的Lisp。它也可以和其他的JavaScript类库交互。所有这些都为我们提供了一个在客户端和服务端使用相同的语言却不需要做任何妥协的机会。

管理本来就具有状态的客户端应用是件尴尬的事,不过像React和Ember这些JavaScript框架正在着手解决这个问题,我们开始猜想如果一种更加基本的改变方式值得深入研究,那么是否可能有一种更好的语言和这其中的任一已经存在的框架配合来为我们提供一种途径使得可以更好地控制复杂性呢?Clojure允许我们朝着这个问题寻找答案。

我们不相信银弹,但是我们真的喜欢这样的事实,Clojure包含了客户端的需求。

朝冰球要去的地方滑

我追逐冰球要去的地方,而不是它所在的地方。—— Wayne Gretzky

Clojure会帮助我们填补创建特定类型的应用程序的沟壑。那些需要响应或者处理大规模数据的程序。我们已经身处多核CPU的纪元,但是传统的语言还未追赶上这些计算机的架构。函数式编程提供了一种新的编程范式允许我们更简单地使用这种架构写程序。Clojure提供允许我们高效地处理大规模数据的工具。它使得传递和转换数据接近实时。这些特性会使我们比从前更高效地解决问题。

不过不是Bleeding Edge

“什么会被认为是bleeding-edge的技术,”sez Lucas。 “没被证实的用法,高风险,只有早期采用成瘾者才感到舒服的东西”—— Thomas Pynchon, Bleeding Edge

此时,Clojure被发布超过5年之久并且似乎在开发者社区里获得了不错的想法分享。在新锐技术上掉坑的采纳曲线上这不算太早了。Clojure利用了已存在的技术如已经被开发超过15以上年头的java虚拟机(JVM)。它也可以利用很多已经存在的高质量的Java类库。

一些新东西让我们保持兴奋

自从学Ruby以来,还没有学习一门新技术让我如此激动! —— Michael Guterl

在Gaslight,我们想在行业中吸引和保留最好的技术。为了做到这一点,我们需要给大家提供学习和提高其技能的机会。Clojure帮助我们提供了这样的机会。它是一个带有一系列工具的崭新范式。不过最重要的是,它允许我们处理新的且有趣的问题。还没有什么能比解决有意思的问题更让我们高兴的呢。