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

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

Windows Server 2012:令CIO激动的三个新特性 高德和新浪微博战略合作 打通账号互调数据 乐观锁和悲观锁 你更钟情于哪一个? Apple索30%分成 iOS版微软SkyDrive更新搁浅 [简讯] Linux 3.7发布 开源图形卡驱动程序 高效敏捷的十大经验法则 佛瑞斯特资讯公司预测2013年云计算的十个变化 百会中小企业CRM年会成功举办 发布CRM选型指南 诺基亚创新体验中心NEIC训练团正式开班 新威胁:IE新漏洞允许网站跟踪鼠标 少编码多思考:代码越多 问题越多 [简讯] JDK 7u10发布 修复安全漏洞 搜狗茹立云:为何搜狗语音助手比Siri更精准? BlackBerry 10最终版SDK Gold发布 谷歌地图正式登陆App Store 为开发者推出SDK 你的云数据的三个最大威胁 公开叫板:Google不打算推出Win8版Gmail和Drive APP备案风波:开发者何去何从? 32位和64位的JVM 我该选择哪个呢? 黑莓“Got Game Port-a-Thon”活动将于12月22日在北京举行 专访Moti Joseph:浏览器安全的经验之谈 四大开源云平台的命运基因 FPS移动游戏:画质不是第一位,操控才是死穴 微软2013年的五个安全预测 应用成武器 王淮,大城小胖论辩HTML5 局部有小雨 技术人员创业后就不再适合继续编码了? Google Dremel vs Apache Hadoop 低功耗之争:英特尔 VS ARM NEIC-诺基亚体验创新中心 助力开发者创享新移动互联时代 Google地图主管Daniel Graf:新设计,新目标 浴火重生:OpenFeint创始人推开源平台OpenKit 如何使用。MDB文件 由于上一题回帖子的人数众多,导致分数不够,所以再开一帖!继续!关于用vb进行文件的读写问题! 怎样在数据库中输入了许多条记录后, 一次性存盘成功? 改变光驱盘符?很急很急 在Oracle中怎样加已经存在的数据文件? 我想请高手帮忙 !! 请问目前那一本参考书对DELPHI初学者有很大提高? 一个关于udp重发的问题 如何在delphi程序里调用vc写的exe执行文件。 如何将query中的内容输出到文本文件,然后还能将该文本文件再导入进来?急急急!!!!!!!!!!! 急急急!!我的计算机找不到硬盘了45分 如何求任意多边形的重心 紧急求助:请问java有没有比较丰富的多媒体控件?比如录音的控件??? 急急急!!!我的计算机找不到硬盘了,45分 如何把一个字段的内容求和,然后把结果存入另一表! 请教,怎样把一个记录数组用VB读入ACCESS 2000数据库中? 关于货币类型的问题? the script too large ????????我快疯了。 什么地方有Sybase与Oracle的比较资料? 急急急!!!我的计算机找不到硬盘了,40分 问一下大家 复活节彩蛋 win2000 professional下如何配置weblogic6.0 jsp和javasript如何通讯? 急!!!如何把'¥100'字串转化为浮点型100.00 用OleContainer1将一个WORD文档存进数据库后如何将它从数据库中取出??? 关于SNMP的问题(请高手回答,送40分) 谁想过要戒水?戒成了吗?又渴了吗? 我用在各种机器上使用Win2000,从来没有down过, 真是太奇怪了??? 请问如何确定操作系统系统是中文的还是英文的? 向外国用户发注册码时候应该说些什么,才能让别人觉得你比较专业? 如何捕获ADO的异常信息 struct结构的数据存储是用的什么顺序方式呀? 能介绍几本关于BCB的适合初学者阅读的书吗? 高手进来,struct结构的数据存储是用的什么方式呀 高分!高手请进!!! Newton 有关StoredProc的 各位大虾进来看看,Debug时的错误~~~~~~~ First-chance exception 和 User breakpoint ,帮帮我啊!!! 虽然我也回复没有分,但有意思的帖子,但我对分数高的帖子更有热情,我是不是很势利?? 我的服务器是unix 哪位提供最简单的图片存入库中的代码 谁能得到拨号上网所使用的电话的号码? 关于视中图形(非图像)的缩放问题! 想不通啊~~ 谁来帮帮我~~~?? 哪里可以宕到:Robohelp Office(亚洲版),急!! 谁能告诉我PWS怎么用 小弟刚下载了j2sdkee1.2.1 ,但不知道如何配置,那位大哥愿意帮忙,详细讲一讲如何配置。 TOleContainer怎么没有滚动条呀 在哪里可以找到mschart5.cab? 明天在莫斯科将产生2008年奥运主办国,请猜是哪个城市主办!答对者有分!(可加到204) 英语 (用适当形式填空)_______(not make) a model piane.How many students want ______ (be) a doctor? 英语翻译Mr.Green was ill and went to the hospital.A doctor lookedhim over and said,“Well,Mr.Green,you are going to get some injections,andyou’ll feel much better.A nurse will come and give you the first one thisevening,and then you’ll have 英语翻译材料:紫菜 2包 青瓜 2条 蟹柳 1包 蛋 3只 白饭 大量 白醋 2汤匙 萝卜 1条 1)先把青瓜,蟹柳,材料:紫菜 2包青瓜 2条蟹柳 1包蛋 3只白饭 大量白醋 2汤匙萝卜 1条1)先把青瓜,蟹柳,萝卜清洗 关于英语的适当形式填空he came _____(see) the new play.The workers______(work)on the farm when it began to rain.I will go to Beijing _______(visit)the Great Wall next week.英语翻译:这件事不同寻常(usual)我站起来时发现 英语翻译SPACE APPLICATIONInternational Organizer:CP EXHIBITION Rm 1703,Tung Wai Comm'l Bldg109 Gloucester Road,Wanchai,Hong KongPlease fill up the followingdetail:Company (ExhibitorAddress I/We the undersigned wish to participate inthe above exhi 英语翻译大连老菜菜谱1.\x05 溜肝尖 2.\x05 鸡里蹦 3.\x05 猪里蹦 4.\x05 溜鱼片 5.\x05 苏杨大烤 6.\x05 滑溜肉 7.\x05 糖醋小黄花鱼 8.\x05 炒肉拉皮 9.\x05 红油肉 10.\x05软炸虾仁11.\x05 辣肥肠 12.\x05溜肚 英语适当形式填空 英语翻译The Seller agrees to hold the Buyer harmless against liability and direct (not consequential) cost resulting from infringement of any unexpired United States patent now issued,involving any equipment exclusively designed and manufactured 英语翻译 用适当形式填空 英语Do you like the great _____ (music)Li,Guyi 英语翻译1.上周末,我和朋友去隔壁县的一个村寨旅游 2.当我们接近那里时,发现它是模仿古代某个城堡而建的.3.它以养鸟而闻名 英文翻译“多谢你的巧克力” 英语用适当形式填空1.She wants____(go)fishing after lunch.2.Can you pick _______(they)up for_____(he)?3.There______(be)an old tree on the farm last year. 英语翻译我已经打电话向中国西联汇款咨询过了,叔叔在汇款单上填写我的姓名顺序还是错误的,所以导致汇款现在还是取不到;这是中国西联汇款向我提供的美国西联汇款免费专线:800-325-600 用英语翻译:在书包后面有一些巧克力吗? “时间能够证明一切”用英语怎么讲? 英语翻译Well,here we are.About half a year into our relationship.But as to me,it just feels like we have spent many many years together already for I feel I am a part of you.I can clearly remember our first time together,the way you kissed me,the 巧克力对你的健康有利的英语翻译 让时间证明我对你的爱"翻译成英文怎么写? 英语翻译Don't be sorry,I have loved my life.I have a lovely wife,4 children who will do anything for me and 7 grandchildren that are the loves of my life.I just want to say one thing.I am not sure how experienced you are with the internet but don 巧克力包装盒的英文翻译 英语翻译用英语翻译一下,下面简历中提到的工作内容部分【职位】财务PTP应付账款会计【工作内容】1.接收原材料入库单、销售发票,核算、审核付款清单和各种应付账款,审核各项记录;、2. 英语翻译我很希望能为你做点什么,同时我也想成为你的笔友.请尽快给我回信.我也想了解关于你更多的情况. 英语翻译One of the few foods which appeals to people all over the world is chocolate.Developed by the Aztecs in South America,chocolate was brought to Europe by Spanish explorers around 1500 and soon became a fashionable drink.By the 19th century 我的哥哥有点发烧用英语怎么说? 英语翻译你们好!昨天已经在西联取到了汇款,共:$400美元,谢谢大家对我们的关心,奶奶非常感谢simeona,新年假期完了,现在我也回工厂正常上班了,夏威夷的冬天不冷吧?现在家乡的温度只有8℃ 英语翻译 那里有很多饭店的英语怎么说? “xx省xx市人民医院”正规英文翻译 这些美味的蛋糕是给我们的吗用英语翻译 我亲爱的笔友.英文翻译 英语翻译:对XX来说这个太大了 我从不吃像蛋糕这样的甜食英语翻译怎么说 "亲爱的" 的英文翻译 英语翻译 给他买个生日蛋糕就足够了 英语翻译 亲爱的英语翻译是什么? “吃一个有葡萄的蛋糕.”用英文翻译? 玛丽正在等待她的生日蛋糕.英语翻译! 英语翻译在动物园里,老虎们正在打架,猴子正在荡秋千,狮子在跑步,小鸟正在天空中飞翔,海豹正在睡觉,豹子正在爬树,狐狸正在地上打滚,蟒蛇正在吞食食物. 喜欢吃蛋糕用英语怎么说 生日蛋糕用英语怎样说 英语翻译自己自己总是假装坚强连流泪也保持嘴角上扬可是,只有自己知道心里一阵隐忍的疼痛怅然无触摸到已如上古的回忆时间早已无痕地偷走我们的青春可你何时才会知道我喜欢你呢? 我们吃些蛋糕好吗?英语翻译 我想要一个插着蜡烛的生日蛋糕英文翻译 英语翻译:你要在昆明待几天呢? 用英语说出果仁巧克力蛋糕制作方法 英语翻译they _____ the birthday of their motherland _____ _____ songs 帮我用英语翻译一下“昆明泰伦信息技术有限公司” "制作巧克力蛋糕的食谱"用英语怎么说 英文翻译 "祝愿所有11月生日的朋友生日快乐" 英语翻译他们来自哪里 他们来自英国么?他们不是来自英国的 .他们来自法国 用DO形式回答 . 黑樱桃巧克力蛋糕用英文怎么写? 英语翻译注意是将要. 用英语翻译:你来自哪里? 巧克力 蛋糕 巧克力蛋糕英语 翻译 最后,人们吃了她妈妈亲手做的生日蛋糕 在招聘信息中的英文翻译 这是人家发来的招聘信息一部分1. Before on board (please reply me ASAP on this part then we can arrange the physical check for you before Chinese New year, because the following process for your onb 英语翻译You’ll need four eggs three tomatoes one onion a little oil salt and pepper first slice the onion and tomatoes next in a frying pan fry the sliced onions and oil until it turns light brown then add the tomatoes after frying the tomatoes 其实大家都知道,我们都不是彼此的那杯茶 上句求英文翻译..麻烦了
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn