• 建立多语言层——Lisp,Cancer和Ruby


    建立多语言层——Lisp,Cancer和Ruby

    By Ola Bini(ThoughtWorks咨询师,JRuby核心开发工程师)

    演讲是关于多语言层,可能会涉及一些技术的问题,主要关注各种语言在不同项目中的应用。我在一个咨询公司工作,主要为一些美国初小企业服务。希望这类的经验能给你们启发。

    首先我想和大家分享一个关于癌症的研究,可能会有一些生物学的词汇,介绍了一些DNA和RNA转录的简单描述。我们为什么会对这个领域感兴趣呢,因为人类的基因序列绘制,这在前几年是成本非常昂贵的,但是这几年有所下降。有以下几个步骤:1、准备好要测序的物质。2、分块。3、测序。4、寻找差异和不同之处。但是这个测序步骤是花费昂贵的,一个在1000美元左右,如果成本降低,将会有更多的人能享受到这样的科技。

    癌症现在是研究的热点,我们希望通过基因绘制去寻找癌症的起因。我们希望能开发一个系统,监测人们的DNA的变化,对一些异常的变化能提前发现,去控制细胞的异常复制。我们知道安吉丽娜朱莉对自己的基因进行的测序发现自己患乳腺癌的几率较大,所以她对乳腺进行了切除。处理这些大量的基因数据是复杂和困难的。

    解决方案

    目前的现状,有大量的数据,但是他们是异构的。有很多机构和组织维护的基因图谱,除了正常的基因数据外,我们需要很多负样本,就是癌症患者的基因。我们维护了一部分美国人的癌症基因样本,但是这类样本可能就不一定适用于亚洲人,这是个问题。所以我们需要把基因进行建模和可视化,对数据进行加工,将低级别的基因样本加工成高级样本。

    我讲了这么多,其实这是应用了敏捷的方法。一开始的时候,我们不知道我们要建立什么东西,也不知道建立的范围。所以一开始的时候,我们四个人组成了一个团队,编写了一定数量的代码,快速地发布我们的版本,这个团队中我们也一样扮演了Dev,BA,PM等角色。一开始我们并不了解生物工程的项目,所以我们必须花费一些时间去学习和实验,我们在前三周就搭建了软件的前后台,开发了三个前台软件界面,然后问用户我们是否走对了方向,我们的前台非常无聊,就是几个菜单,有意思的都在后端。

    下面讲一下多语言的事情。我们为什么要用多语言呢,每个语言都有很多的库,如果这些库对我们的项目有益,我们会立马采用他。有个Sapir-Whorf假说,就是我们用的语言对我们的项目是有影响的。选择语言的时候,我们眼花缭乱,我们每个语言都试了一下,看下哪个最符合我们的要求。Poliglot Testing: Scala, Clojure, Ruby, Groovy, etc. 这些都可以很好地测试JAVA代码。多语言的另外一个功能就是Build Scripting,如果你做Ruby,可以采用很多JAVA的库,虽然我没有编写很多JAVA的代码。可以通过采用服务的方法。那么我们如何在癌症项目中应用多语言呢。Clojure语言非常强大、快速,有1W+的代码,大部分采用的是JAVA的代码。因为我们是从大量的异构数据中采集数据,所以我们采用Ruby。前段我们会使用JS,我们有整页的数据流通过JS处理,后来我们还用了CoffeeScript,我们也不是全部进行转化,而是部分转化压缩。另外在架构方面我们还采用了Python,在部署方便,有一些一致性,我们用BATH。还用了Cypher,一种基于文本的语言,除此之外,我们还采用HTML/CSS。我们一共用了10-20种语言,当然我们很多工作人员在工作时都没接触过这些语言,比如BATH。但是在实际的工作中,他们做的很好。Patterns中主要的要素是DSLs和数据库交互。

    一些要领:但是我们知道我们不能把语言从项目中分离出来,我们希望大家根据自己的需求去选择语言。开发人员要和测试人员协同合作,我们不可能保证都在同一个地方工作,而且生物领域是在不断发展的,所以我们要经常性的和他们沟通。我们可以更好的去了解生物学的东西,让我们把这个项目做好。

    Q&A

    问:你选择使用这么多语言,对用户来说维护的成本是否会很大?用户买单么?

    答:这是个复杂的问题,用户有两个选择,一是自己做维护,二是我们推荐的方法来做。首先客户要相信开发者,二是要让开发者加入这个项目当中,完成后让别人去做维护。比如亚马逊自己开发完了以后,自己会做一些维护,这是他们所选择的方式。

    问:用了很多快捷轻量级的语言,在我们公司用了Ruby,Dephi。但是在招聘的时候,这些小众语言并不好招,只能招JAVA/C++,然后没办法只能转型,或者舍弃一些小众的框架。你们怎么处理这个问题?

    答:其实呢我觉得招募人才总会遇到一些问题,比如你找C++/C#/java,可能会很容易。我觉得这就看你的团队的大小了,你在团队中你可以考虑一些支撑语言,然后再考虑和其他语言的衔接问题。

    问:你们怎么在短时间内快速学到新的语言

    答:我真的不知道该怎么说…语言和语言是不同的,你肯定要在开始的时候学些不同领域的例子和样品,你就可以知道这些领域主要采用哪些语言和库。如果你学会了一些样本和基础,你就可以很容易学会其他语言。我觉得我们还处于语言的黑暗时代。

  • 相关阅读:
    解决 Cordova 打包 vue项目为 APP 后,在安卓平台下 touchMove 事件不生效的问题
    解决微信内置浏览器里,下拉无法捕获 touchEnd 事件
    记录 React-native 项目中的各种坑坑
    内存型游戏外挂讲解
    浅谈数据抓取的几种方法
    php链表笔记:合并两个有序链表
    php链表笔记:链表的检测
    php链表笔记:单链表反转
    使用UUID和int自增主键的区别
    lumen框架使用Elasticsearch详解
  • 原文地址:https://www.cnblogs.com/zhangweilong/p/3284264.html
Copyright © 2020-2023  润新知