说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

专访庄晓丹:Java程序员眼中的Clojure

HTML文档下载 WORD文档下载 PDF文档下载
近日,CSDN采访了LeanCloud后端工程师庄晓丹。谈及为何从Java转向Clojure,他说是为了提升生产效率。同时,他还分享了基于Clojure开发的LeanCloud核心技术以及丰富的Clojure开发经验。

庄晓丹,LeanCloud后端工程师,目前主要使用Clojure语言从事移动服务后端研发工作,曾经在企业信息、Web 游戏以及电子商务企业从事软件研发,主要关注分布式系统、移动后端架构和性能优化、Clojure等函数式语言实践等领域。

近日,CSDN采访了庄晓丹,请他分享基于Clojure开发的LeanCloud核心技术,以及丰富的Clojure开发经验。

“Java语言相比,Clojure的优势我愿意归纳为:生产效率的提升”,庄晓丹如是说。

CSDN:请先自我介绍下,目前所在的公司以及所负责的领域。

庄晓丹:我目前在LeanCloud公司负责产品研发,主要从事后端服务的开发工作。

CSDN:团队现在有多少人?你们是如何分工的?

庄晓丹:我们的研发团队总共有17个人,分成北京和苏州昆山两个办公室。一部分同事主要从事客户端SDK研发工作;一部分同事主要从事LeanCloud后端服务的研发,还有几位同事负责运维和部署等工作。

CSDNLeanCloud是个什么样的项目?主要功能有哪些?

庄晓丹:LeanCloud提供一站式的后端云服务包,涵盖对象存储、文件存储、用户帐号系统、消息推送、移动统计以及聊天等移动开发需要用到的主要功能。此外还提供一些小组件,比如第三方平台登录、用户反馈组件等,来帮助开发者快速开发应用。我们的SDK也覆盖了iOS、Android、Web、Unity3D等主要平台。

CSDN:与其他云服务平台相比,它有哪些优势?

庄晓丹:作为BaaS服务,很重要的一点是以开发API的方式提供易于使用、稳定的后端服务,用户无需操心硬件、数据库软件、缓存、容灾、运维等等后端开发的“琐事”,而专注于利用API来完成所需要的业务逻辑,并且可以轻易地跨平台使用。此外,我们希望提供的是一站式的服务,打包整体开放给开发者,免于各式各样服务集成的痛苦。

CSDNLeanCloud是采用哪种语言开发的?它的核心技术架构有哪些?

庄晓丹:LeanCloud采用了多种语言混合来构建整个后端系统,包括Clojure、Java、Node.js、Scala。其中Clojure构建了整个网站门户、存储开放API、推送、聊天等核心服务,Node.js构建了云端代码服务(类似应用代码托管),我们还使用Scala编写的Spark任务来处理离线数据分析,此外,还有大量的统计类MapReduce任务使用Java编写并运行在Hadoop集群上。不同服务之间使用RESTful协议、RPC框架或者队列进行通信。

LeanCloud的整个后端架构是一个水平可扩展的设计,所有服务都以集群的方式运行,我们可以轻易地通过添加节点来扩容整个服务的处理能力,得益于Clojure的nREPL,我们也能做到核心代码的热替换。

CSDN:你之前是Java技术领域的实践者,为何选择弃Java转投Clojure?与Java相比,Clojure有哪些优势?

庄晓丹:“放弃”Java有点言过其实,在接触Clojure并学习之后,刚好有这样的机会可以在工作里使用和实践,自然而然地慢慢地脱离Java语言,而专注于使用Clojure语言进行开发工作。此外,Clojure程序员无法真正的“放弃”Java,因为Clojure语言本身乃至类库都是寄生于Java之上,换句话说,仍然是每天都在同Java平台打交道,只是用另一种语言。

与Java语言相比,Clojure的优势我愿意归纳为:生产效率的提升。

从表面上看,相比Java,同样的代码片段,Clojure代码总会显得更简洁,我们做过估计,同样的项目,Java的代码行数和Clojure代码行数是5:1甚至更高的比例。

其次,Clojure的不可变数据结构,可以让你避免更多隐藏的修改带来的副作用Bug,鼓励你编写无副作用的小函数组合起来,因为没有状态信息的干扰,这样的代码也将更易于测试。

内置REPL也方便你随时做各种代码尝试,nREPL远程执行还可以实时查看应用的实时运行信息、变量当前状况甚至代码热替换修复Bug等。Clojure的工具链都相当轻量,鼓励一种轻松编程的氛围。

Clojure源自Lisp的强大的宏能力,可以让你方便地编写DSL,包装各类领域问题,写出优雅的解决方案,一个简单的例子比如korma这个类库就是对于JDBC的DSL包装。

从另一个角度看,Java语言及其模式是以对象为核心、以类型体系为基础来做方法派发,利用接口抽象和多态来隔离变化。比如桥接模式,变化有多少个维度,就用多少个接口将每个维度抽象起来,然后将变化隔离到接口实现类中,将业务逻辑表达在接口之间的联系上,将变化隔离在接口的实现上。对象是重中之重,封装了状态,隐藏了信息,附加上类型信息做动态派发,“不堪重负”,并且可变的状态也引入了难以并发和难以测试的痛点。

而在Clojure里,你更多会将变化表现在数据的变化上,数据从用户那里过来,经过每个“阶段”的处理,变化成最终想要的结果,然后返回给用户。每个“阶段”理想状态下都是无状态的、可以单独测试、可以并发执行的,变化的数据本身也是使用不可变数据结构“串联”起来,没有并发修改的隐患。本质上,将业务逻辑表达在数据的变化上。

CSDN:有人说,一个有Java背景的爱好者,学习Clojure具备得天独厚的优势,你怎么看?

庄晓丹:我非常认同这个观点,没有Java经验当然可以学好用好Clojure,但是有丰富的Java经验,会让你更方便、更深入的使用Clojure。就像前面提到的,Clojure语言和类库都是基于Java平台,它的很多类库也是Java类库的直接封装。Clojure提供了方便和快捷的操作Java类库的方式,如果你熟悉Java,在使用Clojure的时候也将如鱼得水。

其次,Clojure的应用也是运行在JVM之上,Java性能优化特别是GC调优、VM参数优化等知识也能帮助你去优化Clojure应用的性能。

最后,Java语言的经验可以让你有针对性地比较两门语言、两种编程风格(面向对象VS.函数式)的优劣势,在未来学习其他语言的时候,这些编程语言方面的认识也将帮助你更快地上手。

CSDN:你最喜爱的开发工具有哪些?在日常工作中会用到哪些?

庄晓丹:工作中主要的开发工具是GNUEmacs。Emacs刚开始的学习曲线比较陡峭,但是在强制自己使用一段时间后,你会方便这是一个非常强大的开发工具。

其次,Clojure开发,Leiningen是最主要的项目构建工具,利用它做依赖管理、构建、打包等日常构建任务。

Cider是Clojure在Emacs里一个交互式的开发环境,结合其他插件,提供了编译、求值、测试、REPL、代码模板和代码自动完成等日常开发所需要的大多数功能。

此外,我很喜欢ack这个代码搜索命令,支持多种编程语言的搜索,提供丰富的搜索模式。在这些主要工具之外,日常更多的是使用Mac上一些优秀的App,比如Alfred、Dash、Mou.app等。

CSDN:给学习Clojure的开发者分享下经验吧

庄晓丹:如果没有其他函数式语言编程的经验,Clojure的学习将是先难后易,一开始会遇到很多新的概念和挑战,很多对Clojure感兴趣的人可能刚开始就被括号、各种奇怪的符号(特别是编写宏的时候)、函数式编程所吓跑,这时候就需要特别鼓励大家坚持看下去,先尝试用Clojure做一些实际的编程小任务,比如实现一些算法、编写一个Web小程序、增删改查数据库等,来慢慢找到感觉。在这里要推荐下4clojure这个做题网站,通过这些题目和其他人的解答,你可以更加迅速地熟悉Clojure语言、类库和函数式编程。

过了这个阶段,你会发Clojure的核心是极其简练的,所谓“奇怪符号”寥寥无几。接下来不妨阅读一些函数式编程方面的介绍性资料,或者SICP这样的系统性的书籍,来加深对函数式编程的理解,你对Clojure的使用将更加得心应手。

除了语言和类库之外,还需要加强对Clojure工具链的熟悉,寻找一个趁手的开发工具并坚持使用,了解各种快捷键和插件。订阅社区的邮件列表,及时了解社区动态。Clojure中国社区欢迎各位加入。如果过去没有过Java开发的经验,你还需要去了解下Java平台的相关知识,有兴趣还可以深入学习下JVM方面的知识。

此外,非常鼓励大家从Clojure.core这个标准库入手阅读Clojure的源码,从中可以学习到很多语言的惯用法,在高阶函数、宏等漂亮外衣之下的运行机理,更深入地掌握Clojure语言。

以上是我对Clojure学习的一点粗浅交流,欢迎交流,谢谢。


如果您也想与他人分享编码趣事(开发经历、编程语言、开发工具等),欢迎与我联系,与他人分享开发经验,不仅可以展现您的才华,还能提升知名度。(联系方式:xiamz#csdn.net 注:请将#改为@。)

VB怎样使我的程序总处于屏幕最前方?(Always on top) VB怎样延迟一个VB程序? VB怎样在VB中控制WORD VB怎样找到鼠标指针的XY坐标? 增加快捷方式到启动组-VB资料 直接呼叫RUNDLL来关机-VB资料 VB制作VB安装程序问答(二) VB制作VB安装程序问答(一) VB制作帮助文件速成 重新验证 Win 95 用户口令 -VB资料 桌面的大小 -VB资料 字体改变事件 -VB资料 自定义组合热键 -VB资料 自动更换墙纸的小软件-VB资料 自动记录应用软件工作时间 -VB资料 自动卷动TextBox -VB资料 自动开始上次关机时关闭的应用 -VB资料 自动装入注册设置 -VB资料 自己编程模拟 MouseEnter,MouseExit 事件 -VB资料 走进VB6啃一块骨头 做成一个时间限制的测试版 -VB资料 PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 HashSet的equals和hashCode重写问题 PendingIntent实现原理和代码 IntentService实现原理及内部代码 AsyncTask实现原理和内部代码 Neither user nor current process错误 ListView的右边滚动滑块启用方法 Live Wallpaper动态壁纸开发 控制软键盘显示和隐藏 用c编写bbs 多线程与clientdataset 主扳、CPU、硬盘、光驱,升级方案大比拚!!!!! 一个极菜的问题:怎么确定文档的大小? zf925(天下哪来那么多高手),你的回答我以看见了,但你的帖子贴的不全,你的原代码的例子没有, 设备管理器里面断口显示的是端口COM1和COM2,但是我的调只解调器里面的断口却是COM3和COM4,到底怎么回事呢?? :哪位大侠有多媒体方面编程的经验?请帮忙查看一下,谢谢。 DELPHI有史以来最大的难题! 二级联动菜单怎么搞啊??各位大虾救急啊!!! 请赐教 如何建立mts與com,dcom,com+通信,其中每種方式有何不同之處? 有个有关j2ee应用服务器的问题,很困惑!(急,一定给分!) 学习c和c++学要学习汇编吗????? 我先试一 下 关于得到文件的名字? 用5行代码就让系统重起的帖子怎么找不着了?谁告诉我?加分了!! 素女经 如何修改SQL数据库表中的数据 在对话框里输出文字?不要控件!!不要static 控件 一个关于打印的怪问题! 如何将数据库通过JDBC接收并将字段关键字连成一棵树(每一分支最多64节点) 救急!!!!!!!小妹我遇到一点问题! 今年就业形势“大好”! ******* 马上就给分,所以给的少了点,大家别介意 ******** 大家给点意见 请关注一个初学者的问题?我学sql但是不知未来的发展趋势!? 图形数据窗口(line 星)点太大,如何缩小 救急!!!!小妹我遇到一点问题! 用bcb制作动态网页 数据窗口 Graph 类型 line 样式 如何学c语言? Delphi中如何获的其它应用程序中的内容? 显示颜色变成只有16色和2色? DWORD 参数传递的问题。 那里有播放AVI文件的程序?谢谢! 参数传递问题!!大侠帮帮我 请帮我修改一下源代码(delphi)请帮忙改一下,让它打印了不往里(数据库)存。 BIOS设置,用电脑是不是可以当闹钟呢? 五笔输入法忽然不能用了 救就我,为什么Frame的客户区变小了?关于切分窗口 怎样查找某一个目录下一个表是否存在? 请问有用过李阳疯狂英语的朋友吗?请说说到底怎么样? 我想向各位大侠请教一个问题? 如何屏蔽TEXTBOX的回车响应? 关于《各位学习编程的目的是什么》的总结 m_pusrrcdset->m_pDatabase->ExecuteSQL("")为什么不行?老是ASSERT错误 请问我刚入bcb的大门,有什么好的参考书可以看看吗? 有没有人知道计算机等级考试四级怎么查分啊? 如何将几个数组的信息写成一个.txt文本文件 笔试题请教? 怎么区分小麦和稻子 海子的代表诗篇?一首最著名的? 填上合适的词语:( )态度 ( )作用 鼓舞( )填上合适的词语:( )态度 ( )作用 鼓舞( )请选择恰当模拟声音的词语填空:毕毕剥剥 扑踏扑踏 嗡嗡 呼呼 笃笃 叮咚叮咚 咯吱咯吱 一块圆柱体木块竖着切成四块,表面积增48平方厘米;横着切成三块,表面积增加50.24平方厘米;削成一个最大圆锥体,体积减少了多少立方厘米? 空气中的灰尘有哪些危害? 已知集合A={α|2kπ≤α≤(2k+1)π,k∈Z},B={α|-4≤α≤4},则A∩B=非常疑惑的是 这里的α是表示弧度角度还是单纯的一个常数呢 好纠结 希望在解决题目的同时能帮我讲讲怎么判断一个数什么时候 小麦和大米有什么区别?为什么? 麦子已经成熟了,真是丰收在望.这句话哪儿错了 阅读“冬日雏菊自芬芳”第三自然段,请问小雏菊生长在一个怎样的环境中?作者为什么要特意写出这样的环境? 有一根圆柱体的木料,如果底面直径竖直平均分成四块,表面积增加144平方厘米.如果平均截成4个小圆柱体,表面积会增加169.56平方厘米,这根木料原来的体积是多少? 用几句花描写麦子成熟后田野的景色,要用上打比方的方法 "我是班长"最后一个自然段起到了什么作用? 已知i,j是是夹角60的单位向量,向量a=2i+j,b=-3i+2j,则向量a,b的夹角为? 将一个圆柱体沿上下底面的圆心切成4块,表面积增加48平方厘米,如果将圆样切成3个小圆柱体,表面积增加50.24求圆柱的表面积 有树有麦子有鸟怎么写句子 设向量a=3i-2j+4k,b=i+j-2k 在a,b决定的平面上 求一个与a垂直的单位向量 经济 发展 .help help我对中国近代经济发展历史感兴趣.(1000字——) 描写棉花成熟时的样子的语句 已知向量a=-i+2j b=-3i+4j 求 |a-b|= 假如大气中没有灰尘,强烈的阳光将使人无法睁开眼睛,这是灰尘的什么作用 灰尘的好处快些,我有急用 已知i.j是两个不共线向量,若AB=3i+2j,CB=i+入j,CD=-2i+3j,那么当实数入为何值时,A,B,D三点共线?解析:已知AB向量=3i+2j,CB向量=i+λj,CD=-2i+j,那么:向量BD=向量CD-向量CB=-2i+j - (i+λj)=-3i +(1-λ)j若A.B.D三点共 用颜色来描写下列:(嫩绿)的秧苗 ()的稻谷 ()的大豆 ()的玉米 灰尘有什么作用? i.j是两个不共线向量,已知AB向量=3i+2j,CB向量=i+λj,CD=-2i+j,若ABD三点共线,求实数λ的值. 灰尘对人类或大自然有什么好处? 灰尘有哪些作用 小麦和水稻啥区别? 在灰尘比较多的环境下工作吃什么对身体有好处 灰尘有那些好处 稻子和麦子有什么不同 在粉尘严重的环境工作,应该吃点什么比较好呢? 灰尘对我们有什么好处说全点,不要抄小学语文课本上的那个 把一个底面半径为5厘米、厚2厘米的圆柱形月饼沿直径切成4等份,表面积增加了多少平方厘米? 我的工作环境污染有点严重,吸入的粉尘多.请问吃什么食物可以排出肺内的灰尘呀. 麦子怎么组词. 把一个半径是5CM 后2CM的月饼沿直径切成四等份,表面积增加多少?(附加理由和算式) 设向量a=3i+2j, b=2i-j,求(1/3a-b)-(a-2/3b)+(2b-a)O(∩_∩)O谢谢解答3分之一a 关于麦子的好词好句 把一个底面半径为5cm,厚2cm的圆柱形月饼沿直径切成四等分,表面积增加多少平方厘米?怎么算,为什么 求一段描写冬天小麦的句子求一段描写冬天小麦的段落 雏菊什么意思 小麦和我们说的大米区别大吗 赞美秋天的诗 雏菊的含义..请问?具体一点 . 将一个圆柱体木块截成2个小圆柱体,表面积增加了100.48平方厘米,问圆柱体木块的底面半径?(岩高切的) 灰尘有什么好处快! 我知道有两个意思,一个是 纯洁 ,另一个可就不那么纯洁了哦,是雏菊的意思.那么我想问雏菊是什么意思 已知向量a=-i 3j,b=3i-3j,则a b的单位向量坐标是 有谁知道海子诗中的“麦地”,“马”,“麦子”,“大地”等各象征什么?他诗里有很多让我困惑的东东,谢谢帮忙! 雏菊 含义他发短信的暗号 稻子和麦子有什么区别? 求海子诗 麦子熟了 读了几变就是不懂 ,喜欢海子的, 雏菊的两层含义!雏菊第一层含义是:离别.第二层含义是什么? 一个圆柱体小木块 切成4块 表面积增加48平方厘米,横切3段表面积增加50.24平方厘米,现将它削成最大的圆锥体,体积减少多少?算式,数字的,快急 求海子经典诗句最好多点 仔细品味一下词语所表达的意思 (1)挺拔俊秀的椰子树,不时在海风中摇曳着碧玉般的树冠.(摇曳着)(2)海滩上玉屑银末般的细沙,金灿灿亮闪闪的,软软地暖暖地搔着人们的脚板,谁都想 已知向量i,j是互相垂直的单位向量,a=3i-4j,a+b=4i-3j(1)求向量a,b的夹角的余弦值;(2)对非零向量p,q,如果存在不为零的常熟α,β,使αp+βq=0,那么称向量p,q是线性无关的,向量a,b是线性相关还是 海子的最经典的诗句 填上合适的词语( )的大厦,( )的香气,( )的椰树,( )的国槐,( )的油松( )的气质,( )的树冠
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn