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

专访庄晓丹: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 注:请将#改为@。)

gt(pos)-JQuery API index(subject)-JQuery API length-JQuery API lt(pos)-JQuery API size()-JQuery API CSS-JQuery API css(key, value)-JQuery API css(name)-JQuery API css(properties)-JQuery API height(val) -JQuery API height()-JQuery API width(val)-JQuery API width()-JQuery API DOM-JQuery API addClass(class)-JQuery API attr(key,fn)-JQuery API attr(key, value) -JQuery API attr(name)-JQuery API attr(properties) -JQuery API html(val)-JQuery API html()-JQuery API removeAttr(name)-JQuery API removeClass(class)-JQuery API text(val)-JQuery API text()-JQuery API toggleClass(class)-JQuery API val(val)-JQuery API val-JQuery API after(content) -JQuery API append(content) -JQuery API appendTo(expr) -JQuery API 为什么会出现这个问题呢??急救??? 在不同操作系统出现不能正常运行的问题,和默认字体语系乱码问题 C# 静态类成员 新手请求各位前辈帮助 如何查询我连接到哪个数据库? 哭着请求帮助。。。。。页面显示问题!!在线等着 网络技术到底是指什么???? 我想在<<三国九>>里输入正确的中文,有法子么? 能帮我改改么? 紧急求助,请高手支招 请问在JTABLE中如何将某几行设置成可以被选择的,其他几行设置成不能被选中的? 请问怎样修改SDI框架的标题及去掉最大化按钮??? 在自定义的用户控件上公开引用windows控件的事件怎么做啊!!谢谢 2003中为什么IDE设备只能用PIO模式? 在FAQ里见到这样一句,不明白什么意思 怎么我用vc 的 odbc 做数据库时,工程名为try ,在工程工作区的“class view”面板里没有tryview类的? 不能使用xmldocfile() 文档对象的问题 关于键盘纪录,高手 如何使用IPAddress控件? 初学者问:怎么用UpdateAllViews()? 无法创建asp.net应用程序 大家帮帮我吧,我都快崩溃了 中文乱码的问题 !!谁在VMWare 3.2里装过RedHat 9.0和RedFlag 3.0,请看看这些问题(100分)!! 如何使在输入框选中的文字在提交后仍然显示在输入框中? 无法创建asp.net应用程序 高手在上,请问怎么样在win2k中实现关闭程序和绘图[内详] 初学者问:如何在listview中查找其中一行? 怎样在调试窗口中看到变量值? 郁闷中,狂散分。。。。。。 DCOM怎么使用? 想做一个地区门户一般要包含那些栏目?? 线程 怎么能让DELPHI编出来的程序最小化以后进入到系统托盘? C++问题,请进来帮忙! help me ~!!! 以下行为究竟是关闭端口还是使用端口 callzjy(【剑客西门吹雪原来是仁者帮帮主...】) 怎么翻了这么多老帖子出来了??? 求原代码下载 大家都在干什么? 有什么东东大家可以一起研究研究? 初学者问:如何在listview中查找其中一行? fortran语言的高手请进,分数不够再加 我是一个刚刚步入JAVA世界的小鸟 恳请得到大家的帮助 。。 ActiveForm发布问题。 怎么能让DELPHI编出的程序像QQ一样可以自动隐藏? 一个关于dll的例子,运行不了,请帮忙看一下。 程序打包 BCB产生调试符号的问题 为什么要4张1寸的,1张2寸的照片?要这么多干什么/ 请问怎么样用C#遍厉注册表? 先有母鸡先有蛋? 6,图中改的不一定对的 某广场是一个正方形,沿着边缘走一圈是600米,这个广场的面积是多少公顷? 雪花在天空中()要生动 求详解 图中改的不一定对 除了绿色的树叶,绿色的小草,还有绿色的什么? 简谐运动平衡位置不平衡的情况 对于给出的一组权w={10,12,16,21,30},通过霍夫曼算法求出的扩充二叉树的带权外部路径长度为A.89 B.189 C.200 D.300 一个平行四边形相邻两条边的长度分别是12厘米和18厘米,其中一条边上的高是15厘米.这个平行四边形的面积是多少? 看图写一段话,100字 有一组权值(7.5.2.4)对应的哈夫曼树的带权路径长度是多少? 可以写约等于吗,初中老师说就算是近似值也要写直等于, 传动惯量是什么意思 已知长方形的长、宽、高分别为3cm、2cm、1cm,用三块这样的长方体木块可拼成一个大的长方体.还有哪些不同的拼法?画出示意图,并注明必要的数据;(2)在以上拼法的长方形中,表面积最小的 甲、乙、丙分别出资7万元、8万元和35万元,成立了一家有限责任公司.其中,甲、乙的出资为现今,丙的出资为房产.公司成立后,又吸收丁出资现金10万元入股.半年后,该公司因经营不善,拖欠巨额 平行四边形ABCD底边BC高是3cm,梯形ABCD与三角形ECD的面积是15cm2,长多少厘米? 请大神帮我翻译贸易条款2/2 SETS OF ORIGINAL INSURANCE POLICY OR CERTIFICATE ,BLANK ENDORSED ,COVERING ALL RISKS AND WAR RISK FOR 110% INVOICE VALUE SHOWING CLAIMS PAY ABLE IN INDIA . 三人合办一企业,共投资143万元,投资最多的与投资最少的钱数的比为5:3,问第三个人最多投资多少万元?最少投资多少万元?要过程 请帮忙看图写话 去外地上初中需要什么条件?问一下我和我哥们要去上学.需要什么条件啊?必须把户口转过去吗? 在△ABC中,∠BAC=90°,AB=AC,点D丶E在BC上.若BE=2,ED=√5,CD=1,求∠EAD的度 怎样使二氧化碳更多的溶于水中 把两个长、宽、高分别为3cm、2cm、1cm的长方体先粘成一个大的长方形,然后再将其切成大小相同的两个长方体则这两个长方体的表面积之和比开始的两个小长方体的表面积之和最多大多少 注册100万公司分期出资,第一次是30万,其中10万是自己的资金,20万是借款,注册下来后要还那20万怎么做账注册了个100万的公司,因资金紧张分期出资,开始是30%,也就是30万,其中10万是外面股东自 为什么二氧化碳溶于水中使水密度变大 给定实数集:8,5,13,2,6.试构造具有最小带权外部路径长度的扩充二叉树,并求该树的带权外部路径长度这个外部带权路径是什么意思 甲乙丙三人分别投资50万元、30万元、20万元成立股份公司,一年后亏损12万元,甲提出每人承担4万元你认为是否合理?为什么? 在三角形ABC中,点D是BC的中点,DE垂直AD,角EAD=角BAD.当角BAC=90,AB=8,AD=5时,求线段CE的长. 数据结构题:对于给出的一组权w={10,12,16,21,30},通过霍夫曼算法求出的扩充二叉树的带权外部路径长 去年5月,妈妈、李叔叔、陈阿姨三人分别投资了5万元,20万元,10万元,合资办了一个有限责任公司,今年5月经过核算,公司可用于分配的盈利为6.3万元,他们三人合资时约定:“公司每年可用于分 其中小球1固定在碗低A点,小球2可自由运动,平衡时小球2位于碗内的B位置处,改变小球2的电荷量把他放在图中 数据结构:具有n个结点,其路径长度最短的二叉树具有n个结点,其路径长度最短的二叉树是()A 哈夫曼树 B 完全二叉树 C AVL树 D二叉排序树B,可我觉得A,B,C,D都不对,树形不同最短长度是不一样 如图,在△ABC中,AB=AC,BC中点为E,BD⊥AC,垂足为D,若EAD=27°则∠ABD= 如何更换显微镜的目镜 翻译成英文 请问加磁环的线材比不加磁环的有什么好处? 什么时候使用低倍儿镜什么时候使用高倍镜(显微镜) 总经理秘书 怎么翻译 如图,△ABC中,E、D为BC上两点,且AB=BD,AC=CE,∠B+∠C=70°,则∠EAD的度数是多少? 什么时候显微镜的目镜成正立放大的虚像不是成道理放大的虚像吗 霍夫曼是谁 甲乙丙三人投资55万元办一个工厂.甲投资总数的五分之一,余下的由乙丙承担,且乙比丙多投资20%.乙投资了 已知,如图,在△ABC中,点D是BC的中点,点E事BD的中点,AB=BD,求证:∠CAD=∠EAD 长是3cm,高是2cm,宽是1cm.表面积是() 三人合伙做生意,甲入股11万,乙入股11万,丙入股3万,利润8万,甲乙丙三人如何分 数据结构哈弗曼树,哈弗曼编码?已知字母{ A(7) B(2) C(2) D(5) E(7)F(10)}求哈弗曼树求哈弗曼编码求帮忙讲讲解题思路 请问d为什么不可以?在a的非惯性系中,b受向左的惯性力,垂直斜面方向上对b的支持力增加吖.理科女+自学非惯性力, 甲乙丙三人共出13元合买了一批薄本.没人出资数相同.由于甲比丙少拿21本,乙和丙每人都要给甲1.4元.三人共买了多少本薄本? 是先有蛋还是先有母鸡 World中画圆,怎样在圆内编辑字,且字能与圆一样有弧度? 如下图,在竹竿左侧刻度4上放4枚棋子,在竹竿右侧刻度4上放()枚同样的棋子才能保证竹竿平衡;如果在竹竿左如下图,在竹竿左侧刻度4上放4枚棋子,在竹竿右侧刻度4上放(4)枚同样的棋子才能保 是先有了母鸡还是先有了蛋? 在2007PPT中如何做出有弧度的文字就是公章效果的文字,使文字有弧度,我知道在2003PPT怎么做,但是07的不知道如何处理,请指点迷津, 傣族的风俗习惯简介100字内快~ PS剪切蒙版怎么做就是比如一个线条的笔刷 随便做一个花色 是纯色的 然后怎么做成彩色的 我说的是用蒙版做 不用渐变 如图这个字体后面的背景是彩色的 弱科用英语怎么说 根据中文名取英文名 吴迪(男) 不要取wody,woody之类的 先有母鸡还是先有蛋 怎么在一个月内把英语这科补回来..要求自学...我从初1到初2都没听过英语课...现在就快到初3了...我想在这个暑假里补回来... 福州到厦门的动车经过站 挪威拒绝美国请求 将不接收销毁叙利亚法列车餐车迎来“美食新革命”告别冷三日本东北大学被评“黑心企业”校长强烈杭州推出\"助残爱心岗位\"信息平台金正恩出席朝军2万人连长大会 发表历英国发布王室成员全家官方合影 凯特母棱镜门记者:英意情报部门为美国之帮凶美八州长签署协议 将向市场投放330伦敦顶级餐厅呼吁客人勿在餐厅内抽电子美加州三名亚裔居民涉嫌种植窝藏销售大报告称美成年人阅读及数学能力排名均靠美窃听各国使馆 韩外交部未抗议被指哑日内阁通过特定机密保护法案 将提交国美国女孩公园寻宝挖到3.85克拉钻石报告称美国成年人阅读及数学能力排名均美国三名亚裔居民涉嫌种植窝藏销售大麻克里叹美政府关门损形象 他国外交官欲60克拉绝美粉钻将拍卖 或成全球最贵美军1美分贱卖超级航母 曾爆炸致百余美媒:斯诺登掌握美搜集中俄伊朗等国情中国最好的音响师揭秘如何制造好声音预算法三审稿拟适度放开地方发债胡晴舫专栏:生命不可承受之轻现场下单已鲜见利薄疲于价格战李铁李明二选一?陶博会老矣 尚能办否?德美化工:拟向4银行申请8.5亿元贷偷盗疑犯被围捕 驾车疯狂撞民警塞西VS萨巴希 两人对决埃及大选纸箱厂凌晨失火 幸无伤亡一月休一天 请假还扣钱娱乐专栏@今日话题榜8382户登记第2批公租房杨江华兼任市公安局督察长太空种子,你种过吗?中山口岸客流增49.7%街头快拍举债走私油被查 废品佬跪求放过高血压病情进展 眼底最“先知先觉”知识产权司法保护是创新驱动发展的重要多云天气继续
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘