技术开发 频道

Moco框架 一个中国技术极客的开源之梦

  【IT168评论】郑晔,本次受访的嘉宾,自称技术极客,对软件开发有着浓厚的兴趣,个人一直希望将写代码成为终身的职业。除了技术气息浓郁之外,郑晔也颇有表达欲望,面对记者的提问滔滔不绝,总有说不完的心里话,特别是对自己的Moco框架,就像看到自己的“孩子“在一天天成长一样,难掩兴奋。

ThoughtWorks为Moco创立提供土壤
▲ThoughtWorks首席咨询师 Moco框架发起人郑晔

  目前郑晔是ThoughtWorks首席咨询师,做开发已经十几年。先后在东软工作了五年,之后加入ThoughtWorks工作了六年。主要的经历是放在java相关的技术上,其他Ruby,向C++等也涉猎过很多。而且这些年一直在坚持不懈的写代码,持续自己的编程职业。写博客也差不多十年,自己也做过一些开源项目,也翻译过一些书,整个的IT生活显得非常的充实。

  ThoughtWorks为Moco的创立提供了土壤

  在郑晔看来,ThoughtWorks为Moco的创立提供了土壤,也有这样的工作环境,让自己可以不断的写代码。在ThoughtWorks可以接触到很多类型的项目,不同的项目有些问题是通用的,有共同的痛点。当你去解决问题的时候可以适用于很多项目。在自己软件开发的十年里,几乎每个项目都会遇到企业集成的问题,都要解决集成测试的问题。通过一段时间的思考,给出了自己的解决方案,为Moco框架的诞生埋下了伏笔。

  ThoughtWorks一方面提供了各种各样的项目机会,另外一方面这里也有很多实力非常雄厚的软件开发人员,让自己的能力得到提升。ThoughtWorks的微创新,有一个漏斗型的机制:发现痛点、解决问题、泛化桥接、推广宣传。在日常工作中发现问题,留意别人的问题;发挥持续改进的精神,去解决问题。当你将解决方案抽象出具有普适性的概念,这就是一个通用的创新。最后积极地去推广它,让更多的人使用它,并为它提出反馈。”

  发现、总结、提升、应用并分享,Moco就在这样的软件开发过程中诞生并被公众认可,任何一个微创新都有可能产生重要的技术变革,尤其是在软件开发领域。

  郑晔谈Moco诞生的整个过程

  提到Moco的诞生,最开始的目的就是解决公司遇到的困难。从2002年开始做软件开发工作起,就遇到企业集成的问题。自己编写了很多的代码,解决模拟服务的问题。到后来发现在每一个项目里都会用到这些东西。直到2012年,由于翻译Martin Fowler这本《领域特定语言》那本书,想找一个途径,锻炼自己设计DSL的能力。大概10月份我加入到一个新的项目里,那个项目里面刚好有一些类似的需求,就开始尝试解决这样的一个问题。大概写了两个多月,到12月份的时候,Moco最开始的雏形已经出来。

  目前,Moco还是一个非常年轻的项目,8月1号刚刚发布了Moco最新的版本,0.8.1,许多人也是才开始认识到Moco这个框架。

  郑晔表示:Moco是一个开源项目,与许多开源项目一样,它并不是利用工作时间来做的,而更多的是利用自己的业余时间完成的。Moco绝大部分代码是早上5点多到六点半写的,每天给Moco写一些新的特性,提交一些代码,都是利用业余的时间。只要有可能,自己会继续做下去,在一个文件里面,已经列出了很多Moco未来要做的事情。

  虽然公司鼓励开源项目,但是在工作的时间都是为客户的项目服务。我需要的就是写代码,之前没有做Moco时业余时间大多数都是被写代码、写博客,或者是自己写一些东西占据掉,只不过现在把时间放到了Moco上,没有特别的,都是占据了很多的业余时间。

  Moco是一个开源项目,除了自己贡献了绝大部分代码之外,也有其他人为Moco贡献了很多的代码。比如帮Moco修一些bug,或者是帮Moco提一些新的特性。

  如何实现Moco技术架构?

  郑晔:那段时间我是在翻译一本书叫《领域特定语言》,同时脑子里也在思考另外一件事----Java函数是编程,把Java面向对象层的设计和函数式编程理念相结合起来。在这个思考的过程带来了很多新的关于软件开发不同的思路。在构建Moco的时候,把学到的关于函数之间组合的方式,用到了Moco的设计里面。如果看Moco的API代码你会发现它跟传统的Java API设计不太一样,它需要更强的表达性。

  当有一个请求或者是说设计一些东西,函数之间的配置组合变得更容易。比如说当请求来的时候,我要根据URL可以去配置一些内容,根据它请求过来的内容去配置一些内容。比如我又有URL又有内容又该怎么办?在Moco的框架里面,通过进入函数式编程的理念,把组合的选择权交给用户。用户就可以根据自己的需要,自己去配置这些东西。Moco整个的配置非常的灵活,不需要为了有URL,又有内容这些东西设计很多的API,让那么代码量非常的庞大。

  Moco第一个版本的真正的核心代码只有两千多行,引入这种新的编程的理念,把代码量大幅的缩减。因为java是很好的类型系统,如果随便往里加东西,可能代码就没法通过。只要有这些东西写好了,配置好了,就完全没有任何的问题。

  Moco框架的两种用法

  Moco有两种用法,一种是API,在集成的框架里面直接用,这个代码与Java很紧密的绑定在一起。另外一种用法,称之为独立运行的服务器的用法,这种用法只要你提供一个配置文件,然后你在命令行里把它用起来。至于我访问它的是一个Java的客户端,还是访问的是一个.NET的客户端,或者是用Ruby等这些东西没有关系。这里面只是一个独立的服务,现在客户端到底是什么样的,跟这个服务之间没有任何的关系。

  比如我们现在访问任何一个网站,可能后面架设的是一个Apache的服务器,他可能是用C写的,但这个东西跟我没有关系,我只要用一个浏览器它打开就可以了。这样的特点让Moco在独立服务器的情况下摆脱了Java平台本身的限制。

  最近有新的反馈,希望Moco也能够更好的支持其他程序语言,也许未来做这方面的扩展。

  Moco应对移动化 更多的是提供后端服务支持

  现在,移动开发成为了业界的主流方向,很多的技术和框架都在不遗余力的支持移动开发技术。郑晔认为,Moco同样可以为移动开发提供支持。只不过在移动开发方面不是用Moco编写移动应用。而是帮助开发者更好的解决开发中的问题。比如现在很多移动开发者在开发产品的时候,可能通过联网访问一个服务,但是这个服务在开发的时候还不存在,这个时候可以用Moco来模拟这个服务,当你测试这个应用的时候,你连的服务已经存在了,开发者可以顺利的把手机端应用开发出来。Moco的第一次实战便是这样一个场景。

  郑晔自己最开始设计Moco的时候,是给集成测试来用。现在很多的用法,已经超出了最初的想象。真实项目使用Moco是在Thoughtworks成都办公室开发的一个图书馆手机端应用。很多同事愿意编写手机应用,但是服务端应用开发的人相对少一些。这些人就用Moco搭了一个服务器模拟这样的服务。测试手机应用的时候,跟真正的服务器是一样的,展示各种各样的效果。当时自己很惊讶,原来Moco还可以这样用。

  甚至有人把Moco用在前端的开发上,比如说做一个项目,最初阶段可能做一个原型出来,后面的服务还没有开发,可以使用Moco写这样的模拟服务器,整个前端的所有的代码,包括HTML,CSS和Javascript所有这些代码,调用后端的服务,更新前面的页面,展现更绚丽的效果。

  郑晔谈Moco未来的商业化之路

  在谈到未来Moco如何盈利时,郑晔有自己的看法,“做Moco本身,从一开始就没有想到要挣多少钱,更多的是想做一个东西有人用就可以,享受这样的过程。目前为止,还没有把Moco去做商业化的打算,现在是为Moco写代码的阶段。”

  前不久他看到一个公司开发了虚拟服务器的产品,基本上跟Moco的概念非常类似。但是相对来说Moco更简单。通过Moco这个概念,已经有人向着这个方向做商业化的运作,让我相信这个方向是对的。目前来看,解决问题的方向是对的,究竟会不会有商业化的发展,现在回答不了这个问题。目前还没有人为Moco付费,开源软件如果能有用户去替你付费,这固然是好的,片面的去追求这些东西,或许不应该做开源,而是要做一个产品。不过,现在也有很多开源的盈利模式,比如开源产品免费,提供服务收费。

  郑晔谈Moco架构和产品的区别

  郑晔认为,从技术来讲,做架构和做产品没有本质的区别,做好了都是在追求一种平衡,无非对框架而言,这是一种健壮性,可扩展性。关于架构师要有很丰富的经验才能做好软件架构。做架构,要知道这些东西怎么去平衡,有一些可能代码需要做大量的优化,造成有一些代码不能那么容易理解。但是有的时候要求的是代码的可读性更好,可能通过一些编程技法,结果是程序运行得没那么快,也可能会为了追求速度,破坏一些可读性,这都需要平衡。作为架构师,或者是软件开发人员,就要做到其中的平衡,那就是经验越来越丰富的时候,你就越容易知道该怎么去做这些东西。

  透过Moco看中国开发者对开源项目的贡献力在提升

  在开源界,多数的开源技术和代码由国外的技术爱好者们贡献,国内的开发者贡献相对较少。中国的开发者对于开源项目的参与度,相对来说会低一些。但是最近几年看到的一个非常好的趋势,越来越多的中国开发者参与开源项目,或者领导开源项目。一些大的互联网公司开始为开源做贡献,比如,豆瓣、淘宝都有自己的开源项目。

  郑晔认为,这和中国程序员的生存状况有关系。由于开发者处于不同的发展阶段,不是所有的程序员都是真正的热爱编程的极客程序员,他们大部分是把写程序当成一份工作,不能要求这些人为开源做那么多。真正热爱写程序的人,在乎的并不是得到多大的回报,更享受在这个过程中跟别人交流,获得别人反馈,让自己产生新的思考的过程。

  总结

  作为技术开发者,能够始终热爱编程,将其视为一生的奋斗目标,非常值得很多的程序员学习。也正是对编程的热爱,才让Moco的诞生显得那么顺理成章,其实Moco一方面体现了中国技术开发者在技术上的实力,更重要的是体现了他们对技术始终如一的追求。

1
相关文章