Java Champion Dick Wall 谈基因、Java Posse 和替代语言第一部分

作者:Janice J. Heiss

2012 年 1 月发布

本系列访谈聚焦获得业界、学术界、Java 用户群以及更大社区中 Java 开发人员的特别认可的 Java Champion(本文是 Dick Wall 访谈录的第一部分,该访谈录共两部分。在第二部分我们将介绍他目前对 Scala 感兴趣的部分。)

Dick Wall
Dick Wall

Dick Wall 是一位拥有 15 年以上经验的 Java 程序员,他最开始使用 Symantec Cafe 在 Mac 上编写 Java 小程序。他曾参与能源配送系统的大型模拟和地理信息系统工作,并在 Google 积极倡导使用 Android。目前,他在 Locus Development 使用 Scala 研究人类基因。他还与 Bill Venners 合作在 Escalate Software 提供 Scala 培训和咨询,目前他几乎只使用 Scala。此外,他还创办并与他人共同主持了广受欢迎的 Java Posse 随身播,并领导了硅谷的湾区 Scala 爱好者 (BASE)。

Oracle 技术网:您是 Locus Development 的开发人员,在您的自传中将其描述为“一家很小的公司,从事一些令人生畏的与人类基因有关的科学和数学工作(借助 Scala)。您先前效力于 Navigenics — 一家为人们提供“基因洞察”以“促进行为改变”的公司。在此之前您在 Google 工作。是什么促使您更换职业的?

Wall:实际上,我们在 Locus Development 的工作是对我们在 Navigenics 开始进行的工作的延续,在 Navigenics,我们开始提供个性化的基因检测和分析服务,而在 Locus Development,我们在科研完整性方面延续这一工作。可以肯定地说,我们都相信基因分析是人们了解和改善健康状况和生活质量的一个重要力量。我们正在构建支持基因分析的能力,但对我而言,意义并不限于此。该工作很吸引人,在数学以及数据的大小和复杂性方面极具挑战性。简而言之,这个工作非常有趣。

我总是在寻求具有挑战性的工作。对我而言,与编写另一个大型电子商务网站或另一个 Web 框架相比,现在的工作更有意思。原先的工作都不错,但它们不能激发我的兴趣。我以为 Google 会更有趣、更有挑战性,结果却不是这样,于是我推断唯一能够满足我所需要的那种激动人心和富于变化的地方是在小型公司身上。

Oracle 技术网:能否谈谈您使用 Scala 进行基因分析希望实现什么目标?

Wall:一般来说,从 Locus Development 的角度来看,我们的目标是有助于提高临床医师在实践中可以使用的基因信息的广度和质量。目前我无法说得更具体(也不应说得更具体)。我们希望这项工作最终能产生真正好的结果,我们有一些世界最棒的人员在从事这项工作。

Scala 使我们能够前进得更快。它为进行数学分析、处理大型数据集和利用并行处理提供了强大的平台。它在实现中还提供了许多安全和保障功能。例如,使用在托管环境中运行的语言编写并且使尽可能多的数据不可变的程序就极少受注入攻击的影响。在这一问题领域,Scala 看起来是个很好的选择,并且我们注意到其他几个著名的致力于基因工作的组织也选择了 Scala。

Oracle 技术网:能否谈谈您是如何在基因工作中使用 Scala 的?

Wall:在 Locus,我们使用 Scala 进行各方面的开发工作。它不是我们唯一使用的语言,但它是主要语言。我们使用它进行相当普通的活动,如通过用于设计引子(合成 DNA)的分析管道将数据模型存储在 SQL 数据库中,并且我们计划最终使用它进行大型数据集上的大规模计算运行。我们离这一步还有点距离,但 Scala 对此已做好了准备。

Oracle 技术网:您对自己的基因缺陷有哪些了解?

Wall:当我在那里工作时,我用过 Navigenics 服务,发现我确实需要更好地关照自己的心脏,并且发现我的黄斑状变性(一种影响视网膜的症状)风险有些增高。因此,我现在加强了锻炼,更注意营养和健康。同时,我开始多吃一些绿叶菜(有助于缓解黄斑变性),我还在每次视力检查时安排检查视网膜是否有出问题的征兆。我很高兴地说,目前还没有任何征兆,我打算坚持这么做下去。我等不及看到 Locus Development 服务通过医疗系统审核,好让我可以了解更多。我喜欢数据 — 它帮助我做出正确的决定。

Oracle 技术网:有人说人类基因组计划令人失望,因为自从绘出基因组图谱以来,在将此新知识应用于疾病治疗方面还鲜有进展。您对将基因技术应用于医疗保健的未来有何看法?

Wall:我强烈反对这种说法,但确实还需要一些时间。从编程的角度看,考虑以下事实:

人类基因组长约 30 亿个碱基对,这类似于我们有一个 400 兆的二进制文件,但没有反汇编程序也没有手册可以用来读懂它。目前我们手上最好的工具类似于 grep,grep 表达式需要几个小时才能产生一个结果。这将需要一定时间,但对人们的努力视而不见或称其为失败,都不会使前进的速度更快。现在,我们认为我们已经了解这个二进制文件的某些重要部分,而且偶尔可以找到确实产生差异的位置,但随着时间的推移,整个领域将不断进步。它只不过是缓步前进。

大部分医生想要知道的第一件事是家族史。这是因为健康风险通常是通过 DNA 从父母遗传的。家族史就是描绘您的风险基因图的粗画笔。我们正在尝试使画笔笔触变细,使它们更准确、更精确。

Oracle 技术网:Java 开发人员应了解有关基因和信息技术的哪些内容?

Wall:可能什么都不需要。但对于对基因感兴趣的人来说,我可以推荐 Matt Ridley 的《Genome: The Autobiography of a Species in 23 Chapters》一书,这本书内容丰富、引人入胜。除此之外,也可以在 google 上搜索与基因有关的主题,还可以查阅 Wikipedia。

JVM 上的替代语言

Oracle 技术网:关于 JVM 上的替代语言,您能告诉我们些什么?

“混合使用许多不同语言的项目所面临的问题之一就是如何将其全部一起生成。混合使用语言时,您可能会遇到先有鸡还是先有蛋的问题,也就是说哪个先编译。”

Dick Wall
Java Champion

Wall:这些年来我用过许多语言。我用过 Groovy、Jython 和 JRuby,尤其是 JRuby,现在我专注于 Scala。实践证明,JVM 确实十分灵活,能够托管许多不同的语言。混合使用许多不同语言的项目所面临的问题之一就是如何将其全部一起生成。混合使用语言时,您可能会遇到先有鸡还是先有蛋的问题,也就是说先编译哪个。

例如,如果您在同一项目中混合使用 Groovy、Scala 和 Java,并且在每种语言中调用其他语言,确实比较难解决应首先编译哪个的问题,这种排序解决不了,就不能确保实际正确编译所有内容。Scala 对 Java 的理解程度足以生成 Java 代码的符号表,因此如果首先使用 Scala 编译所有内容,之后再编译 Java 文件,则可获得成功。但是,在混合使用更多语言时,难度就更大了。

Andres Almiray 已成功将 Groovy、Scala 和 Java 与 Griffon 一起运用于同一项目。但是,对于更完善的解决方案,我们可能需要一种大家都认同的有组织的、两阶段可插拔的编译器。第一阶段是为所有语言提供一个生成其符号表并尽可能多地完成一些工作的机会。接着,第二阶段将基于生成的符号完成所有语言的编译。这项工作的量很大,许多人必须达成一致的标准,因此我倒不觉得紧张。

Oracle 技术网:请给我们评价一下新一代的 JVM 语言,如 Ruby、Python、Clojure 和 Myrah。

Wall:Ruby 和 Python 本身就是成熟的语言,它们独立于 JVM 运行得很好,在 JVM 上也运行得相当不错。Clojure 很有趣,有很多优点,特别是对不可变性和软件事务内存模型有强大影响。但作为一个改良的 Lisp 开发人员,我担心 Clojure 最终会变成千百万种方言的基础,就像 Lisp 曾经的那样。Myrah 是在 JVM 上运行的一种受 Ruby 影响的静态类型的语言,它也很有趣,我认为它证明了静态类型的价值,即使是对于传统动态类型的语言。还有许多其他语言,我就不一一罗列了。

“什么时候学习另外一种语言都不会是浪费时间。它总是会扩展你的开发领域和技能,即使你最后并不是每天都使用它。”

Dick Wall
Java Champion

什么时候学习另外一种语言都不会是浪费时间。它总是会扩展你的开发领域和技能,即使你最后并不是每天都使用它。目前,我正在研究 Haskell,因为我认为这是磨砺函数式编程技能的最佳方式。但最后 Scala 成为第一个使我一见倾心的的语言,我觉得它将是我在可以预见的未来继续使用的语言。

Java Posse 内幕

Oracle 技术网:关于 Java Posse,您有没有什么独家内幕新闻愿意与我们分享?

Wall:在录制节目的时候我们喝了不少,但大部分听众已经知道这件事。这么多年过去了,还是觉得很有趣,而且不管有时候听起来如何,我们都是坚定的、最好的朋友,实际上,我们产生的许多争论通常正是因为我们是非常好的朋友。现在我们彼此熟悉到无话不谈的程度。我希望有更多时间来做这件事,希望我们可以回到每周一集的时候,但现在现实生活中有太多事情正在进行。

Oracle 技术网:有关 Java Posse 发生的最离奇的 事情是什么?

Wall:在我的记忆中,最离奇的事情可能是我们的第一次实况录制,发生在 2006 年的 JavaOne 大会上,我想是的。我们没有料到会受到这么多关注,因为当时随身播是相当新的事物,我们以前并不很出名。实际上,当获准录制节目时,我们感到很吃惊。我记得当时我还超级紧张,担心没有人来,或者即使来了也会讨厌我们。结果却发现只有站的地方了,来的人太多了,非常有趣。开始他们自发地唱起了歌,这样就定下了该节目后来的基调。后来一大群人步行穿过旧金山街头到达 Katie O'Brien’s 酒吧也是一大奇观。当然,我们当时戴着硕大、松软的牛仔帽,我记得 Joe 和一个有点晕晕乎乎但热情洋溢的人在街上跳舞,还戴着他的大软帽。这真是很奇特。更奇特的是围绕 posse 的个性文化。我们只是一些每隔一两周记录下我们之间进行的聊天的开发人员。至少在 Java 领域,它的演变不仅令其他人感到惊奇,也使我们感到惊奇。

Oracle 技术网:请谈谈 Flubber 程序的情况。

Wall: Flubber 是我创建的一个简单工具,用于在录制随身播时标记错误。它已经历了几个版本。我现在用得最多的是我创建的 Android 应用程序。它节省了许多后期制作的时间,现在每集 Java Posse 仍在使用它。而且,所有需要它人都可以免费得到它,但如果您不是录制随身播并使用 Audacity 进行编辑,它的用处可能没那么大。对我来说,它帮了大忙。

Java 的惊人之处

Oracle 技术网:关于 Java 平台的发展,最令您感到吃惊的是什么?

Wall:JVM 的持久本质肯定是最令人惊奇(和高兴)的事情。围绕 Java 语言和 JVM 打造的生态系统也给人留下了非常深刻的印象。其他开发生态系统会很羡慕 Java 和 JVM 生态系统的多样性、能量和规模。

Oracle 技术网:您希望使用 Java 实现哪些目标?

Wall:所有技术存在的目的都是(或者说应该是)改善生活质量。有时人们似乎忘记了这一点。宗旨应是“人高于技术”,因此在我看来,任何改善生活质量的事情都是好事情。

Oracle 技术网:如果您可以完全控制 Java 语言的未来,您有何期待?您希望从 JVM 得到什么?

Wall:我在为 Java Magazine 写的关于 Scala 和 JVM 的文章 (http://www.oracle.com/technetwork/java/javamagazine/index.html) 中概述了许多重大项目。尾调用和类型具体化很好,但没有它们我们也做得很好,我宁愿在添加这些功能时加得对而不是加得快。至于 Java,我认为现在是添加函数字面量和闭包的时候,但之后可能就需要看看其他 JVM 语言需要提供些什么了,而不是尝试将更多东西放到 Java 中。

编码过程

Oracle 技术网:您在写代码时听不听音乐?

Wall:听,我什么都听。我收藏的作品相当广泛(从古典音乐到鞭挞金属,以及介于二者之间的各种风格),经常昨天还爱听的,今天就不想听了。在解决难题时,音乐可以帮我分忧,不知不觉就已经解决了正面硬碰难以解决的问题。有时,我安静地工作,但大部分时间我都开着音乐。

Oracle 技术网:工作受阻时您怎么办?

Wall:遇到难解的问题时,我喜欢骑上公路自行车或山地自行车。去年在 Crested Butte 时,我穿着雪鞋行走在半山腰时解决了一个在 Locus 遇到的重大问题。我妻子 Jackie 注意到我忽然容光焕发的面容,她说:“你是不是解决了一个问题?”因此她在这方面对我很了解。换个环境在解决问题方面的作用被严重低估了。

Oracle 技术网:您觉得编程过程的哪个方面最有趣?

Wall:我认为在任务的多样性方面。我容易厌倦,因此我喜欢多些变化。看到你一手创建的东西能够实际发挥作用是一种美妙的感觉,看到你为之编写代码的人喜欢它的感觉更妙。有时,我喜欢跟踪一个非常棘手的缺陷,有时我喜欢通过设计绕过一个真正难解的问题。总之,我想我喜欢软件开发的大多数方面。

最喜爱的技术见解

Oracle 技术网:对您而言,关于 Java 编程语言最重要的技术见解是什么?

“我以为我知道的关于 JVM 优化的几乎所有事情都是错误的。”

Dick Wall
Java Champion

Wall:跟 Brian Goetz 交谈总是一件有趣的事情。我以为我知道的关于 JVM 优化的几乎所有事情都是错误的。例如,当我开始在 Scala 中工作时,我担心许多额外的不可变对象(当您经常使用不可变数据时创建的)将导致垃圾回收器多做许多工作。与 Brian 谈了之后,我认识到事实上常常是相反的。短暂存在的不可变对象通常存在于 JVM 内存中一个称为 Eden 的特殊部分。从这里将内存释放回池几乎无需任何开销。只有提升到 JVM 主堆的长期存在的对象才会成为垃圾回收器的沉重负担。因此,许多小型的、短暂存在的对象实际上会帮助减轻垃圾回收器的负担。不可变性还有其他方式可有助或有损于性能,但最终,我决定首先考虑编码的风格和正确性,只在性能出问题才考虑性能。Brian 经常提倡这种办法,实际上,我后来发现自己几乎从未再担心性能问题。

Oracle 技术网:对于您来说必不可少的 Java 类是……?

Wall:我认为,从标准 Java 库的角度来看,ConcurrentHashMap 高居榜首,虽然我认为 Guava MapMaker 更好。在 Scala 中,collections 类是我的最爱,虽然我有点难以从中只选出一个。

Oracle 技术网:最近平台有哪些改动使您的生活更复杂?

Wall:在 Java 2 Platform, Standard Edition 5.0 (J2SE 5.0) 中引入了泛型,一般而言它们是好东西,但我认为通配符使事情比以前更难了。当然这是一段时间以前的事情了。最近平台的改动没有那么多,没有一个我认为可能会使事情更糟。在 Java Platform, Standard Edition 7 (Java SE 7) 中缺少某种闭包解决方案有点令人失望,但那时我的主要工作在 Scala 上,因此对我的冲击并没有那么大。

Oracle 技术网:在您使用 Java 技术的过程中,最有趣的是什么?

Wall:如果算上 Scala,那么毫无疑问就是我为 Locus Development 做的工作。在人类基因方面的工作胜出,因为它是一个如此有趣的领域。至于 Java,我最有趣的经历可能是我在 NewEnergy Associates 所做的工作,在那里我们进行了一些相当大型的模拟或计算任务,通常是用 Java 执行的。

Oracle 技术网:您能否描述一下编写代码的过程?

Wall:我不知道这是不是你想要的答案,但我每次在编写一段代码时都会尝试学习一些新东西。因此,对我而言这一过程总是涉及学习。我还喜欢在提出方案之前先在头脑中想象该解决方案。在 Scala 中我经常用的一招是使用 REPL(交互式 shell)试验我的想法。我用它搭起一个粗糙的原型来解决更难的问题,然后将其付诸于代码。

有时我还用“先测试”的办法。我并不迷信它,但如果我与一位领域专家一起工作,而该专家给过我一些我可以为其编写测试代码的好的具体目标,我就会这样做并让它来驱动开发的其余部分。我总是喜欢这样做,但发现该方法并不适合所有任务。我不相信软件开发有什么绝招;我认为应依赖于多种解决问题的办法。

Oracle 技术网:您对 Java Platform, Enterprise Edition 7 (Java EE 7) 有什么期待?

Wall:冒昧地说,我想看到有人使用 Scala 企业版做点什么。在某些方面,许多库(如 Akka)已经接近有类似的功能,我认为在未来的一两年里我们可能会看到更多面向使用 Scala 的企业开发人员的完整解决方案。

另请参见

关于 Dick Wall

Java Posse

Locus Development

Escalate Software

Scala 编程语言

Java Champion

Java SE 7 下载页面

展望 Java SE 7 和 8:Oracle Java 语言架构师 Brian Goetz 访谈

Java Magazine