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

专访庄晓丹: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判断是否在VB5环境下运行 VB判断一个32位程序是否结束 VB判断一个程序启动完成(不是结束) 屏蔽TextBox的系统菜单 -VB资料 启动时禁止装入 Add-Ins -VB资料 让Timer控件每5分钟触发一次事件 -VB资料 让程序启动快一点 -VB资料 VB如何调用系統的【查找】、【替换】的对话框? VB如何动态新增、移除 ODBC DSN? VB如何读取 Picture 内任何一点的颜色值? VB如何获取硬盘卷标、序列号和文件系统类型? VB如何判别程序是在Win95或NT下执行? VB如何启动控制面板? VB如何取得磁盘序列号? VB如何让Window不接受键盘输入及Mouse Click VB如何让程序拥有多个热键? VB如何让用户自行输入方程式,并计算其结果? VB如何使程序不在Ctrl+Alt+Del弹出的对话框内? VB如何使用 VB 编写自动反安装的程序? VB如何用VB建立快捷方式 VB如何用VB在桌面建立快捷方式 VB如何在 VB 中控制 Modem 行为? VB如何在VB中判断Windows9x的运行模式 VB如何在Visual Basic中实现异步执行程序 VB如何在开机时自动更换墙纸? 使回车具有 Tab 的功能-VB资料 输入时,自动转换成小写? -VB资料 显示多媒体信息 -VB资料 也谈Windows 下的自动存盘 -VB资料 一个小巧精致的CPU监视器 -VB资料 应用VB4.0实现工业控制的实时曲线和历史曲线 如何实现“让用户自定义快捷键?” 怎么样把.aspx制作成安装的文件?? 我写了如下一个方法,但是用起来有问题,帮我看看!! 俺倒~~~~~~~~`怎么能上三星啊? 向高手求救:如何得到一张表的行数和列数!! 散分!代码解读! 使用sybase时的提示The query and the views in it exceed the limit of 16 tables. 有办法解决吗? 如何将数组的内容添加到一个文件的末尾 怎样才能打开一个489K的.DAT文件? 列表框(ClistCtrl)如何得到选中项的文本内容和选中项的索引值 为什么我登录到Oracle Management Server时老出错。(oracle 9i) 这样的sql语句怎么写呢?急啊!(还可以加分) pb中截取字符串的问题:急,在线等待 急,在VC++.Net中怎样将字符串System::String类型转换为LPSTR类型? 用PQ把NTFS转换成FAT32时,文件名全变名问号了,怎么办?!!!!!!!!!! 又是回车符的问题,急!!!!! 关于工具栏的问题 控件的DragMode为dmAutomatic,不能用鼠标点? 奇怪的电脑时钟 系统不支持本地交互式登陆 ListView的小问题 有责任感的中国人(水均益:我来谈京沪高速铁路 ),顶者有分!200分 如何给MDI窗口设置背景图? 如何使数据按我定义的顺序显示出来 请教,我有一个toolbar,上面有四个toolbutton,问题! 关于按钮的小问题 追加记录思路 TemplatePower控件谁用过,Delphi下做网页报告的,在Builder上装不上 如何在MIDP中保存小数? 关于窗口设计 有责任感的中国人(水均益:我来谈京沪高速铁路 ),顶者有分!200分! 这里没有人关心Yokun吗?还是大家都在闭门造车? XP服务器安装后访问需密码,,该如何设置? 关于dc,hdc,getdc和pchar()的问题 急~~~在线等 上传主页。错误:530 Login incorrect 数据库问题 上傳的問題,急! TemplatePower控件谁用过,Delphi下做网页报告的,在Builder上装不上 怎样在IE打开的时候用JS隐藏IE的工具条 偶MM明天过生日了,我该送点什么她呢? 在线求助ReportBulider这样的报表如何做? 注册控件的问题 框架网页之间如何传递参数 怎样用Java获取linux上的各分区磁盘剩余空间,回答者一率有分!!!! Toolbar控件的困惑。 大家说国外比较好的控件下载网站有哪些?象源码空间那样,有破解下载的那种啊 在线求助ReportBulider这样的报表如何做? 什么是NGWS? 大家说国外比较好的控件下载网站有哪些?象源码空间那样,有破解下载的那种啊 flash中,字体怎么描边?? 以中有足乐者 乐的意思 送东阳马生序以中有足乐者的以什么意思 以中有足乐者的"中“和"者"是什么意思 “十二五”如何应对气候变化? 介绍下汉末的黄巾军 维也纳是什么意思? 维也纳是什么 仰慕的意思 仰慕什么意思 仰慕已久的意思要准确的 仰慕是什么意思? 调查称过半日本人反对秘密保护法案 忧杭州“错时停车”推行5年难度越来越大浙江企业注册资本首付两成就能给公司冠受上万月薪诱惑 有大学生不想读书想当加拿大密西沙加市华人专商协会为弱者筹昼夜温差超10℃ 早晚记得添衣西湖五处码头装避雷针 外包仿真藤色调失踪小驴友的尸体终于找到 距发现头骨国企携大单与民企对接 诚意足够但难消秋风阵阵喷嚏连天 不是感冒是过敏钓鱼岛史上从未属日本360开售安全路由器大白天张贴野广告 三名小伙被处罚保安微信传照片助民警擒贼城商行融资破局车主倒车失误掉鱼池大红门部分产业确定迁至白沟用制度保证“民告官见官”阿里巴巴赴美上市 或成美最大IPO中介卖违建房索居间费败诉酒后起纠纷男子踹死朋友京津冀开展10项旅游合作九九美女劫世界最强奴隶魔王庆典灵魂之谜全才学生逆命仙之路死路不通我的身份是丧尸笑傲穹苍英雄无敌之地下城都市仙岛美女龙山旅游兰屿旅游大赛车博物馆旅游石家庄植物园旅游东水关遗址公园旅游昭君村旅游马尾港旅游楠溪江龙瀑仙洞旅游8号桥旅游雁荡路休闲街旅游中越边境53号界碑旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘