Martin Fowler谈软件开发

个人简介 Martin Fowler是一名作家,咨询师和软件开发领域著名的演讲家。他专注于企业级软件的设计 – 探索究竟是什么造就了优秀的设计,以及什么技术能将优秀的设计变为现实。他是面向对象技术和敏捷方法的相关领域的先驱者,并出版了多本专业著作,包括“重构”,“UML精粹”,“企业应用架构模式”“规划极限编程”“DSL”等等。在过去十年中,Martin Fowler在IT咨询与定制化软件设计公司ThoughtWorks工作。他的个人网站是http://martinfowler.com。

2012年6月, 值ThoughtWorks中国区成都、上海分公司成立之际,Martin Fowler将来到中国与西南部的程序员们做面对面交流。此次中国行,Martin Fowler将受邀参加成都、武汉、西安等地软件园及各高校演讲活动,与当地软件从业者以及在校学生分享他最新的软件开发思想,并与西南各地程序员探讨充满挑战与激情的软件人生。

   

1. 大家好,我现在正在ThoughtWorks成都办公室,坐在我身旁的是Martin Fowler。我想我并不需要再介绍Martin Fowler,因为他在我们这个行业是如此的知名。Martin,可否简单介绍一下你目前正在做的工作?

好的。不久前,我的新书刚刚写完。该书主要介绍和讲解了NoSql数据库,由我和Pramod Sadalage合作完成,Pramod是ThoughtWorks中一位富有经验的数据库专家。本书希望为那些正在渴望了解NoSql数据库的读者提供一个全面的介绍,并帮助他们做出决策,以决定是否在以后的项目中采用NoSql数据库。因此,本书是一本入门读物,但我希望能够传递更多有用的信息。

   

2. 您刚才谈到了数据库,正好我有一个问题要请教您。最近,我对Greg Young提出的CQRS模式非常感兴趣。我想,我们可以在这个模式中使用NoSQL作为查询需要的数据存储。而正好此时,我又在您的博客上读到您写的文章《ORMHate》。 那么,您是否认为目前是引入nosql数据库以避免ORM的最好时机?

这事实上是人们选择nosql的其中一个原因,他们发现对关系型数据库的映射如此复杂,而NoSql却解决了这一问题。当然,这只有在你了解应用要做什么,NoSQL数据库又是如何工作,并为此寻找到适当的对应关系时,方才有效。如果你具备这方面的知识,才能够更好地使用NoSql数据库,并真正产生有效的映射。

   

3. 最近,我读到一篇发表在InfoQ上的文章。这篇文章介绍了Sauce Lab公司,这家公司为Selenium测试提供云端服务。文章讲到了他们将平台从NoSql迁移到了MySQL。您怎么看这个问题?

这重点在于你需要了解他们使用的方式,他们主要将 MySQL作为key-value存储,就像之前使用文档数据库(document databast)那样。他们更加倾向于MySQL比CouchDB更好的可靠性特征。我并未参与这个工作,因此并不了解具体的应用场景;但是,显然对于NoSql数据库的一种观点在于,NoSql数据库还需改善的一点是没有太多成熟的工具。每个项目都会做出自己的决策。我们所知道的是在ThoughtWorks的几个项目中使用了NoSql数据库,而且感觉很不错,因此这完全取决于每个项目的特征以及选择的NoSql数据库类型。

   

4. 因此,选择应以具体场景而定。

是的,完全正确。我认为最重要的事情是,对于数据库领域,并不是说对每种情形都使用一种数据库

   

5. 我们注意到在许多项目中都引入了多种语言。一些语言具有不同的范式,例如函数式或原型范式。尤其是在JVM平台与.NET平台,这种情形变得越来越普遍。您认为这种变化会对软件设计,尤其是面向对象设计带来怎样的影响?

是的,这种情况越来越普遍,就像使用数据库一样,会为不同的目的选择不同的数据库。这需要了解不同的语言,清楚知道一种特定语言所能够解决的特定问题。我通常对于一种语言能够解决所有问题这一观点保持怀疑态度,为不同的目的选择不同的语言才是正解。

   

6. 这对于程序员而言,就需要学习越来越多的语言。

我认为学习不同的语言是一种良好的习惯。尤其是语言如此的不同,了解语言的发展是一种良好的教育。即使你只使用一种语言进行编程,了解其他语言也能够激发你的许多想法,这是局限在一门语言中所不具备的。

   

7. 但是我也注意到,不同的语言对于设计而言有不同的实践,例如C#、Java与Ruby比起来,对于设计模式就有不同的实现。您的看法是什么呢?

是的,这正是模式的本质,对吧?根据你使用的语言,以及你面临的问题,有不同的实现模式。我想模式的整个要点就在于它们拥有的共性特征,而我们实际上看到的是在不同系统、 不同框架以及不同语言中,这种共性表现出来的种种区别。

   

8. 不过,这对于程序员而言却是巨大的挑战。

不错,但至少模式为你提供了看到这种共性的某种方法。而且我认为,软件开发本身就不是一件轻松的事儿。

   

9. 好的,让我们回到敏捷实践的话题。在我们现在的项目中,我们的持续集成环境(我们使用的持续集成工具为GO)是部署在虚拟机上。这是否代表了运行在云平台是提供持续交付服务的某种趋势呢?

看起来确实有越来越多的项目在往这个方向发展。我认为云具有许多优势,因为你可以很快地创建一个新的实例,可以根据你的需要调整它的负载。但如果要获得稳定的负载,成本会很高。因此,我猜想会出现云平台与非云平台的混合使用。

   

10. 在多年前,您写作了有关模式的著作,包括《分析模式》、《企业应用架构模式》。但是,我现在却注意到许多互联网站更多地关注于系统的质量属性,而非业务建模。那么,我们应该怎么平衡业务需求建模与例如可伸缩性、性能和安全之类的质量属性?

这总是取决于具体情形。你需要了解关于性能以及可伸缩性方面的业务需求,并对你正在做的事情对它们进行平衡,这是一种软件设计艺术。

   

11. 如果我们引入key-value数据库以及Map-Reduce模式,是否可以改善系统的可伸缩性?

当然可以,这取决于你希望达到的目标。它不过是工具箱中的一件工具而已。

   

12. 我们知道,ThoughtWorks每年都会发布一份技术雷达。当然,您对此也做出了极大的贡献。那么,您可否给我们介绍一下您今年关注的几种技术?

事实上,我并未给技术雷达做出什么贡献。技术雷达主要由ThoughtWorks的技术咨询委员会小组推动,并主持编写。它的做法是收集全球的领先技术,并由小组成员对这些技术进行分析与选择,这是更好的信息来源。在技术雷达的会议中,我主要是担当一名聆听者,而非贡献者,因为我写作的内容会来源于组织中其他人正在做的事情。我将ThoughtWorker(即ThoughtWorks的员工)当做我的信息来源。我所做的就是将这些内容组织起来。

   

13. 在ThoughtWorks中国,我们会针对技术雷达开展一些活动,我们称为“Hello Radar”。在这些活动中,我们先后介绍了NodeJS与CoffeeScript。您对NodeJS是怎么看的,因为作为一个服务端框架来说,它现在变得越来越流行。

它看起来确实很流行⋯⋯就我们现在所看到的,我并不清楚的知道,我只是在我们的工作中偶尔会遇到。就我个人而言,我多多少少对此表示怀疑,这是因为我非常怀疑JavaScript这门语言。在服务端,我认为有很多技术比JavaScript实现起来更加地容易。我赞同在浏览器中使用JavaScript这一事实,这是因为我们没有选择,JavaScript就是一门浏览器语言。但是,在服务端,我们有很多选择。我认为有很多比编写JavaScript更加容易地方法。

   

14. 但我认为NodeJS非常适合Web应用程序,尤其是互联网站,然而对于企业应用而言呢?我们可以在企业应用中引入NodeJS吗?

我对此没有任何看法。

   

15. 可否说说您的观点。

我说过,我对此没有任何看法。我没有足够的数据支持。我的意思是,我做出的结论都要基于具体的项目,特别是ThoughtWorks的项目,因为我能够从这些项目获得足够的信息。对于NodeJS而言,我没有任何信息来回答你这个问题。因此我对此不予置评。

   

16. 刚才,您谈到了您介绍数据库的近作。那么,可否透露一下它的出版日期。

我不记得具体的出版日期,应该是在最近的几个月内。我会在我的网站公布本书的进度。事实上,如果你是Safari在线书籍的订阅者,已经有样张可以阅读。当然,正如我说的,我会告知读者该书的进展情况。现在已经在出版过程中,应该很快就可以看到。

   

17. 您的下一个写作计划是什么?

我不知道。我还没有想过接下来要做什么事情。

   

18. 非常感谢!

谢谢。

你可能感兴趣的:(Martin Fowler谈软件开发)