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

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

服务好“最后一公里”,高效CDN架构经验 “义军”突起,帮用户夺回大数据控制权 为安全,Google收购基于超声波密码验证技术公司SlickLogin 2014 Shenzhen Maker Faire:国内顶级创客聚会即将举行 若无创新,智能手机将是死路一条 任道远上任VMware中国研发中心总经理 Windows免费,微软方能解救PC市场 Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解 将会出现iCar?苹果应该收购特斯拉的七大原因 广大程序员的福音:Bing Code Search扩展助你方便查找代码 深挖线下价值是当前婚恋交友网站获取盈利的突破点 15个最好的Bootstrap设计工具推荐 Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】 Webix 1.5发布:一个强大的JavaScript UI组件库 四大著名风投:在我们眼中只有技术革新 美女CEO谈AWS:是香水还是毒药 国外一学生发明新计算机系统,用微芯片代替硬盘 《近匠》第12期:Yeelink——智能硬件云服务 三星Galaxy S5:home键内置指纹识别传感器、5.25寸2K屏幕 Google发布Google Glass使用守则 三星将发布新款智能手表 搭载Tizen系统抛弃Android 从Camera360 V5版本发布,看现代相机应用趋势 索契冬奥会API:赛事的数据直播 为什么开源企业的开源大旗正在褪色 尘埃落定 腾讯确认投资大众点评,获20%股份 Unite China·2014:上千Unity开发者狂欢、五大精品课程全面开启 下载4万首歌曲仅需几秒——蓝色巨人IBM发布新传输技术 15核芯片+数据平台,Intel软硬兼备的Hadoop战略 Facebook以160亿美元收购50名员工、4.5亿月活跃用户的WhatsApp 2014年全美最吃香职业TOP100,程序员排第一 LinkedIn向所有用户开放博客发布平台 今天大清早被人诅咒! Delete 多个表时一条语句怎样写?? 请教:如何获取文本框中SQL语句。50分 日期型的格式应该怎样写?? windows xp internet 浏览器的问题 大家帮我看看这段代码:它是如何得到name和phone的值,并写到文件中取得 100分求李维的delphi5.x分布式系统开发的源代码,电子书我已经有 奇怪。为何win2000的搜索选项中的日期控件是Delphi中的样式?欢迎来讨论,给分!!! 请教一个数据库查询的问题! 哥、姐帮帮小第,一生成并打印表格问题(有图片及字体适应),急急,十万火急。 怎样在ASP.NET的页面中,把DataGrid的表头改名??急急急!!! 在线求教:怎样在自己定义的函数里封装自己的MouseMove类??? (高手求救………100分)怎么样用socket(http)实现上载!请提供思路或source code! 怎样调用Dll中导出的变量??? 那位大哥有关于颜色渐变的算法的代码,给小弟一份 小弟万分感谢 颜色渐变的算法 颜色渐变的算法 问一个有关缓存的问题 更换基类的问题? 感谢上学期大家的帮助——散分 一个奇怪的问题,100在线送给你!!! 用rave生成的pdf格式报表,中文字符怎么是乱码? 请进来: windows 2000 能不能用API的方式将Imagelist中的图画在命令按钮(Commandbutton)上? 请各位指点怎么从SQL65升级到7,还有数据备份?请大侠指点迷津? 请问如何解决.exe文件在其他机器上的运行问题 允许DBGrid对记录进行编辑,在线等待,急急急~ 如何在vb.net定义失去焦点事件? 如何读出文章中的部分内容(在线等待) 怎么样在VB中实现象PING -A命令 有没有一个更好的论坛????????????????????有没有人来踢馆?????????????????????????????? 如何访问隐藏共享的硬盘 请大家评评,先谢了 一个有趣的问题: 慢的问题 我在windows下的FormInput里有多个sqlDataAdapter 数据几百条 DataSET.fill慢及了 如何返回当前程序目录的上一级目录? EA,你给我进来,你又欺负我MM啦? 请问PB的DATA window如何实现分页? 关于pb中我在sqlserver中定义的字段类型是varchar(1000),结果在做数据窗口时它总是自动截取为char(255),为什么?如何解决这个问题(除了 IIS出错了,凡是需要数据库的asp程序在执行时出错: 关于下三角矩阵压缩存储问题 求免费下载电影电视剧的FTP站点 模块实现 数据表转换问题. 请帮帮忙. 我种木马了,请问怎么解决?? 急问:"0x77fcb8f4"指令引用的“0x00000000”内存。该内存不能为“writter” 关于文件名问题 delphi6有没有判断字符串是不是全是字母或数字的函数? 顯示日志源代碼,但無法分頁,請高手... 用isql怎样得到数据库里所有表的列表? 请大家帮我检查一下这个公式??? TreeView怎么在脚本中控制是否可以选择其他节点? 将60℃的硫酸铜饱和溶液100克,冷却到20℃,下列说法正确的是将60℃的硫酸铜饱和溶液100克,冷却到20℃,为什么 溶液质量会变小 ,浓度减小,溶剂质量减小?求详解..谢谢谢谢. 请问有没有卖给鱼缸用的使用电池的加热棒?要有温度手工调节的功能注意是使用电池的.5号1号7号充电电池皆可. 我国哪个城市地形最险要古代的地形 为什么钠可以作原子反应堆的导热剂 如何计算加热棒所产生的最大温度我在有一块1.5KG的铁 需要加热到260度 请问需要多大功率的加热棒 (我现在用2根8*60 功率为150W的,但是温控显示只能达到235度 不知道是热电偶没装好还是加 生活怎样才简单 Na,K合金可作原子反应堆的导热剂.为什么 请问茶是发源与中国吗?茶的历史以及西方的茶与东方的茶的简介!希望短小一点,不要将无关的话贴上来, 山势很高2气势雄伟3地形险要那一个 鸦片战争时期中国贫困落后的根本原因 控制温度,我用一个PID控制加热棒,再用一个PID控制冷水,使温度保持恒定,可以实现吗?我想让一个小罐实现恒定的温度控制,想通过以上2种PID控制,是否可行呢? 山海关险要的地形可用什么八字成语 鸦片战争前夕中国落后于世界的原因 为什么最早的化学萌芽在中国 却在西方成为一门正真的科学 怎样在生活中活得简单生活总是给人太多压力,怎样简简单单活着 炼油厂油的燃烧是把化学能转化为什么能 天气温度为5~10度,直接用加热棒加热到23度可以吗?我的鱼缸实际水位为50*25*35MM,天气温度为5~10度,今天刚买了一个300W的加热棒,直接放在鱼缸加热可以吗?我养的是普通的金鱼和锦鲤鱼.加热到几 在生活中你觉得简单点好吗?为什么? 将60度的硫酸铜饱和溶液100克,冷却到20度,下列书法正确的是A 溶液质量不变 B 溶剂质量发生变化 C 溶液为饱和溶液,浓度不变 D 有晶体析出,溶剂质量不变 为什么最早的化学萌发于中国却在西方成为一门真正的科学? 可不可以简单的生活? 将12.5克五水合硫酸铜制成百分之十的硫酸铜溶液 需要水多少克计算式完整一点 再告诉我要不要考虑水合 我国炼丹术西传,开启了西方近代化学之门,但后来我们在化学研究上却远落后于西方,为什么?我国炼丹术西传,开启了近代化学之门,但后来我们在化学研究上却远远落后于西方,这是为什么? 现在,为什么那么多高中生觉得物理难学? 请问五水头孢唑林钠是第几代抗生素,是属于特殊使用吗 中国共产党探索出的革命道路与俄国十月革命道路的异同 英语翻译P1:a friend offers you cigarettes at a party.A:of course you should refuse if i were you,i'd also talk to your friend about the dangers of smoking .P2:children often think medicine is cand and eat it.A:you mut always hide medicine from ch 鸦片战争后中国社会的趋势?从经济上、政治上和思想文化上来说! 分子节构由60个原子构成的象足球的分子模型是什么 英语达人进,If I do,so will he.这句话为什么后面用so will he?请理论解释.就是为什么用willbe 和 have 的区别.就是比如下周有个party,是用will be 还是will have.不只是party,只是举例子……反正就是这方面 忐忑不安的解释 鱼缸加热棒老停鱼缸长方形的,加热棒在一头,估计另一头还没热它就停了,半分钟不到又开了,我该怎么办阿? 初三英语翻译:1,要是他不这么忙,他就和我一起来了If she (were) not so busy,she would (come) ( with) me.是否正确2,在众人面前讲话我会觉得很有自信I feei (nerwus) (talking) in front of many people talking是否争 在酸性溶液中,能大量共存的离子组是A:Mg2+.Fe3+.NO2-SCN- B :Al3-.Fe2+.Cl- ,SO42在酸性溶液中,能大量共存的离子组是A:Mg2+.Fe3+.NO2-,SCN- .B :Al3-.Fe2+.Cl- ,(SO4)2-C:K+,Na+,Cl-,( HCO3)-D:Na+,Ca2+,(NO3)-,(SO4)2- 仿生学是一门怎样的学科? 英语翻译if my grandmother fell dowmstairs and wasn't moving,i'd hurry to call the hospital first ,is that correct?yes,speed is very important,get the medical help first ,then make her comfortable and stay with her.3:what would you do if you burne 抗生素自来水,喝着安全吗 仿生学是怎样的学科? Ⅰ、Complete the sentences with the given words in their proper forms1、_____changes have happened in the past ten years.(drama)2、There are many beautiful pictures on the ______ cards.(play)Ⅱ、rewrite the sentences as required1、You should f 喝自来水安全吗?长期喝过滤过的自来水健康吗? 仿生学例子(1个) 快 是什么地形 物理层与数据链路层的区别 物理的填空题 f是15N吗?加速度是算木板质量的还是总质量? 为什么只能用水对反应堆进行降温?不能用干冰、液氮之类低温的东西么?是会起反应还是其他原因? 常见的物理层传输媒体是什么? 清道夫总是在鱼缸壁上一动不动,是冬眠了吗?冬天鱼缸里没用加热棒,水的温度在17℃.鱼缸里还养的锦鲤,一个星期后水总是特别混,还想问一下是不是锦鲤生病了?清道夫不工作,鱼缸壁上很脏, 氨气和什么生成HCL 忐忑不安什么意思? 为什么总是那么孤单 天生不会与人建立和保持友谊 不会不懂不能与人交流沟通 不知要说些什么患者信息:男 22岁 病情描述(发病时间、主要症状等):在一个环境里面 从开始的不会不知不能 什么反应生成氨气求助:一般怎样的反应类型生成氨气的啊?有什么规律吗?把总结性的化学方程式写出来啊!最好配上几个例子! ------------初中化学! 如何将高压数显上的电流转换成低压电流表的读法? 寂寞是种怎样的杯具我不知道 但我知道……我自己一个人杯具的在电影院里看专扁衰仔 什么与水缓慢作用生成氨气化合物A与水缓慢作用生成氨气和化合物M,其中化合物A只含两种元素.请问A和M分别是什么? 为什么高压电流小低压电流大 学校要求六(1)班第一小队在劳动基地种向日葵若干棵,队长是这样分配任务的:刘利要种10棵和余下的1/10;剩下的任务,由赵楠种20棵和余下棵数的1/10,再剩下的任务,由王强种30棵和棵数的1/1 用什么加热来生成氨气 热带鱼加热棒,在使用时,是否需要将整个加热棒泡到水里,能不能把调节温度的头全浸入水中. A.希望得到 B.索取 C.需要;应该D.重要 E.将要 F.结果 伊朗总统说对核谈前景不乐观南非一村落“自助打黑”烧杀6人中国驻坦使馆谴责不法分子走私象牙行为孙杨无证驾驶前长时间不归队 未经报告菲律宾调查有关美国在菲开展间谍活动消汪洋会见出席中葡论坛的葡语国家领导人巴基斯坦前总统穆沙拉夫再获保释斯诺登撰文称其揭秘行为正确 有助于引穆尔西要求审判军方领导人 称政变是叛随笔:小沙丘 大文章——探访日本最著尼日利亚商贸中心失火 当地消防部门全南非一村落“自助打黑”烧杀6人俄议员称美国创建了大规模全球性监听系沙特开始清查非法外籍劳工叙利亚人权网站称10月共21名媒体人印度北部发生火车撞人事故致4人死亡埃及前总统穆尔西首次出庭受审俄议员称美国创建了大规模全球性监听系斯诺登撰文称其揭秘行为正确 有助于引肯尼亚“追日”记――“昼夜”交替11俄议员称美国创建了大规模全球性监听系彩数字C罗将永远效力皇马朴泰桓进了奥运村教练队医却被拒颜值即正义!开幕式就打性感牌恩爱夫妻刮彩中40万 生养二孩压力骤无敌是多么寂寞? 搞不好谢幕战会演砸无敌是多么寂寞? 搞不好谢幕战会演砸今晚南粤36选7奖池1707万 预计大乐透奖池两期狂涨7000万今晚七星彩奖池471万 预计最高头奖“十大优秀创新慈善项目”出炉悄无声息,周渝民已经当爸了张大大:杨幂佟丽娅李小璐随时待命来助刘嘉玲:现在还会跟伟仔 定期浪漫约会为客代购的彩票中了535万周迅嘚瑟:我其实是一个挺逗的人谁能像他,似疯非疯地活在这人世间南粤健儿 苏炳添领衔:我们准备好了杨奇鸣演绎真人版柯南获赞齐秦式情歌依然温暖中国军团 粉丝放心,起码这一届颜值不
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘