图灵访谈之二十六:专访敏捷之父Martin Fowler

Martin是一个看起来有些严厉的人,他会在他演讲时和窃窃私语的人说:“Very distracting.”也会用“I have no idea”回答很多问题。但是我在他身上看到的是作为一个科学家的专注和严谨,在激情澎湃的演讲中他不喜欢被打扰,在回答不了解的问题时他也不想妄作解答。

图灵社区:Martin Fowler先生,很高兴有机会代表图灵公司的几百万读者跟您交流。因为图灵公司是您的代表作《重构》在中国的出版商,所以我们的话题就从图书开始吧。图灵公司一直在引进全球在软件开发,特别是敏捷开发领域的最佳图书,并欣喜地看着这个市场不断成长,相关图书销量稳步上涨。去年,《重构》创造了1万多册历史最佳年销量。请问,这是全球性的现象吗?这是否暗示着敏捷已经成为主流?

M:我也不是很清楚,因为我从来都不知道书的销量方面的信息。这对我来说也是一个新闻,我从来都不知道在中国,这本书销量达到了历史新高。但是由于没有什么可比较的信息,所以也不好作出什么结论。但是这么老的书还能创下销售记录还是很振奋人心的。我一直以来都想写这样的书,纵使已经出版了很多年,其中的很多理念仍然是很受用的。能做到这点其实很困难,因为技术领域的更新总是很快。所以我尽量聚焦在更加根基性的东西上,即使很多其他事情已经改变了。这个做法我也用在了《重构》这本书上,在过去十年间,有很多东西有了很大的变化,但是书中的建议仍然和十年前一样行之有效。

图灵社区:所谓永恒的价值也正是如此吧。

M:没错,能发现事物有这样的特质是很好的。如果你想在软件领域里学些东西的话,你会发现需要学习的东西是数不胜数的,能学习到在很长时间内都有效的知识很让人欣慰。很多语言的细节和框架都不停地改变。十年前,你可能是Rails方面的专家,但是由于框架的改变,你的知识可能现在一点用都没有了。但是如果你有重构方面的技术和设计模式方面的知识的话,这些东西会在很长时间内都有价值,而这些知识和技术也是我的兴趣所在,是我一直以来都希望能够捕捉到的。

图灵社区:您一直积极推广敏捷运动,这项注重软件开发过程的全流程革新运动受到了中国很多重视质量的程序员的热捧。但是也有很多人认为敏捷已经变得有些夸大其词。关于它的推广和衍生概念都有些过热或者说华而不实。您对此有什么看法?您认为敏捷的缺陷在哪里?

M:确实是这样,敏捷处在这样一个阶段,很多关于它的东西有些过热,会让人觉得很多东西都属于“伪敏捷”。但是这也是技术发展过程中无法避免的一个阶段,技术发展的早期会引起很多人的注意并出现一些成功的例子,很多人就跟着进入了这个领域,然后就会产生泡沫,但是泡沫迟早会破灭的。很多人可能会因此有些失望,但是我并没有“那么”失望。有一部分的原因是因为只有这样,这个技术才会吸引很多注意力,这样总比默默无闻要好得多。所以,这只是一个无法避免的阶段,所以我会欣然接受,承认事物发展的正常规律。

图灵社区:我也曾经听到过一些关于Unix发展轨迹的说法。比如它从一开始的默默无闻到很多人都想插一脚,直到最后进入一个相对成熟稳定的时期,Linux也在这期间问世。

M:也并不只是Linux,苹果也是建立在Unix的基础上的,Unix现在已经是很标准化的东西,如果现在看主流操作系统的话,只有Unix和Windows而已。这些都是事物发展成熟的表现,敏捷也会有这样一天,我很期待有这样一天,人们不再谈论敏捷,因为大家都是这么做的。我相信这天迟早会来到。

图灵社区:您在十来年的时间里完成了多本影响深远的著作,成为软件开发行业的里程碑。请问,您在写作方面有哪些方法和秘诀?写作跟工作是如何协调的?

M:就目前来说,我的生活主要都是写作,所以也不用怎么协调写作和工作的关系。在年轻的时候,那时我还是一位全职独立咨询师,在不工作的时候我就会写作。我很享受写作的过程,这是我最喜欢做的事情,这样的效果总是很好的,因为我总是对写作充满热情。对于其他也想写作的人来说,首先是要找到能够吸引你的问题,最好是别人还没有写过的东西。我总是从受欢迎的事情出发,然后找到其中不是很能引起大家注意的部分,深入地研究下去。然后你要意识到写作是一场马拉松,它要比你想象中的漫长,然后还要一次又一次地返工⋯⋯这就是漫长的写作过程,我本人很享受这个过程。

图灵社区:我想这也正是你能写出如此通俗易懂的书的原因,让人可以从头读到尾。

M:很高兴你能这么说,这也是我的目标之一。我一直都尽量写出通俗易懂、对话式的东西。我不知道中国是不是这样,但是在西方有这样一种说法,大意是说话和写作是两件事,写作可不能和说话一样。我总是对此不屑一顾,我写的东西就和我说的话差不多,我觉得这可能是我的书比较易读的重要原因。

图灵社区:中国很多职业程序员都对于紧跟技术发展的方向感到精疲力竭,您是如何在软件开发领域的前沿不断创新的呢?

M:这在很大程度上归功于ThoughtWorks, 很多人都在做很多不同且有趣的事情,我总是倾听大家最近都在忙碌些什么,我猜这就是我的探测机制。我总是从ThoughtWorks的不同部分得到很多有用的信息,知道什么是重要又有趣的技术,我会想:也许我该在这个方面多学习一下了,特别是这些东西在很多其他地方还没有引起重视的时候。所以说这些信号都是从ThoughtWorks中来的,他们是我信息的主要来源。

图灵社区:中国的很多读者都是从《重构》、《UML精粹》这些书中学习到面向对象的精髓,进而从《分析模式》、《企业应用架构模式》等图书对这些模式应用有了一定的了解。请谈谈您自身学习理解面向对象的过程,其中又有哪些或有趣,或枯燥的经历?

M:说到面向对象,在我学习的时候,Smalltalk还是一门很火的语言,我对其中建模相关的方面很感兴趣,这是很多好模型的基础,我对很多形式各异的方法很感兴趣,有很多风格迥异的建模风格。最吸引我的恰是这些不同之中的相同之处,我试图找出这些相同点,然后在UML出现的时候这些就变得很重要,这也是自然而然的事情。但我同时也对编程这方面很感兴趣。所以问题就变成:我既然有了这些建模方面的理念,那么这些对于编程语言来说又意味着什么呢?所以我在Smalltalk上做了很好的改进。我的咨询工作也是如此,我既在建模方面帮助别人,也在编程方面指导别人,所以我把这些都看成一件完整的事情,而非毫无关联的事。我是通过Smalltalk来了解对象的,但是很遗憾作为一种语言它已经变得很冷门,这是一种在很多方面都比其后来者要优秀很多的语言。

图灵社区:您曾经建议过程序员应该每年学习一门编程语言。

M:这实际上是Pragmatic Programmers提出的建议,是他们出版的书中的一条建议,我本人很赞同。我认为应该有意地学习一些新的语言,特别是那些和你所熟知的语言的运作方式相差甚远的语言,所以不要在相似的语言上浪费时间。如果你是一位Java程序员,那么C#对于你来说就太过熟悉了,你需要学习一些很不同的语言,比如说Lisp,或者Clojure;如果你是一位Lisp程序员,你也不需要学Clojure,因为那就是另一种Lisp而已。总之你应该尝试一些很不同的语言。

图灵社区:对新入行的程序员,您有什么建议呢?

M:对于新人来说,这和你想干什么有直接关系,不同的项目适合用不同的语言,这取决于你所处的环境。你需要挑选一种适合的语言,很难说有某种语言是新人的必学语言。但是我认为脚本语言,如Ruby和Python对于刚开始学习编程的人来说是很不错的选择,因为它们都很易于操作,而且你可以用它们做很多事。

图灵社区:您是ThoughtWorks的首席科学家,我们希望能了解ThoughtWorks在工具(比如编程语言,持续集成工具等)的选用上的看法。ThoughtWorks使用的编程语言比较多,C#、Java、Ruby,也有自己开发的持续集成和项目管理工具等等。对于个人测试这是没有问题的,但对于一个企业来说,使用众多工具是否过于混乱?对于企业开发这种以复杂度为重的行业,应该如何选取开发工具呢?

M:在ThoughtWorks我们是通过自底向上的方法来挑选工具的,我们不会说我们一定要使用哪种工具,我肯定不会这么做,完全相反,我会倾听项目组成员的意见。这件事很大程度上取决于不同的项目,项目负责人会根据不同的情况来作出决定性的意见。我们在某些语言方面的经验可能会多一些,比如说C#、Java、Ruby,但是你也应该知道,SQL、JavaScript这些在很多项目里也是涉及很多的,我们的语言选择一直是自底向上的。对于一个企业来说,很难说具体应该如何做,如果声称有一种语言是标准语言是很糟糕的。我觉得应该基于环境选择语言,所以在ThoughtWorks我们也会雇用高水准的各种开发者来帮助我们完成各种不同的项目。

图灵社区:您这次来参加贵公司成都分公司的成立仪式,对公司在中国的发展有什么期盼,在中国你们将如何保证自己的核心竞争力?

M:我对中国的业务不是很了解,所以也不能说什么,但是我们的核心竞争力始终是雇用最好的人才,他们在一起可以很高效地工作,而且我们对人品也有很高的要求。只有这样才能在企业中形成很强的信任度,这些东西一直以来,以后也将会是我们的核心竞争力。我们用“态度、天资、人品”来衡量一个人,一直都是如此,我认为这是我们的核心竞争力。

图灵社区:这些无疑构成了你们的核心竞争力,但是我也听到了一些反面的声音。比如说,以ThoughtWorks为代表的很多真正完整地使用敏捷式开发的公司给人感觉“宗教感比较重”。

M:我认为这是眼下的一些舆论造成的,人们就是喜欢这么说。我在这里并没有感受到那些,我们并没有大肆吹捧敏捷之类的说法,这只是我们工作的方式而已。我认为这是一种很健康的态度。

图灵社区:但是仍然有前员工会抱怨:“生活和工作被揉在了一起。”这是刻意为之,还是说你们希望以身作则?

M:这在ThoughtWorks来说确实是一个问题,我们在生活与工作的平衡上做得不是很好。我觉得这不是应该鼓励的准则,但是我也意识到这是我们工作的一部分。我本人并不是一个很好的例子,因为我很享受工作的过程,所以我也分不清工作和生活间的明确分界线。但是我也知道并不是每个人都这样想。

图灵社区:在美国40-45岁的程序员应该算作老程序员,但是在中国35岁应该就被看作老程序员了,他们面临种种的困境(比如说来自家庭的压力),并自嘲为“码农”。图灵公司为此还办了一份《码农》电子杂志来给大家提供交流平台。可以说,这是大家普遍困惑的问题,您是否能对老程序员的发展提供一些建议呢?

M:程序员是一种专业,就像是医生一样。如果你是一位医生,你会想成为一位“医生经理”吗?正常的思路是你会想变成一个更好的医生,这在其他任何专业领域都是这样。你想在专业的领域有所建树,这应该是一件好事。但是有很多企业并没有意识到这点,它们不知道这些有经验的程序员会给他们带来多少好处,团队中有经验的程序员的效率要远远高于其他人,但是他们总是在引入新人,当然新人的加入是件好事,但是需要一个平衡。软件业在这方面已经意识到了,在很多地区人们对于这点的理解更加深刻,至少在美国的大部分地区是这样的,我希望中国也能在这方面吸取教训。因为如果意识不到这点,真正优秀的程序员是不会出现的,有效的软件开发也很难出现,因为最有经验的人才都流失掉了。他们的价值不仅会直接体现在他们所工作的项目上,也会体现在经验的传递上,他们会把最宝贵的经验传授给周围的人。

图灵社区:那您对这些老程序员有什么建议吗?

M:他们应该找到重视他们价值的企业,这也是我们一直努力在做的事情,你可以一直作为技术人员在企业中保持一个很高的地位,这件事本就该如此。

图灵社区:在中国的出版商中,图灵公司是勇于尝试“敏捷开发”和“持续交付”的。我们计划在今年引进的新书中,采用每翻译完一章就发布一章的出版方式。您对出版业如何应用敏捷,有什么建议吗?

M:太棒了!就应该这样。我正准备出版的书在这方面不是很前沿。但是至少有Safari在线这条渠道,书一生成就可以马上在Safari买到了,我想这和你们按章翻译很相像,可以按章发布。我有一个自动化的系统可以以最快的速度把我写完的部分发送给出版社,虽然在出版之前还要经历一些步骤,但是用我的这种方法还是加速了整个过程的。

图灵社区:这也是我们一直以来努力的方向。谢谢您抽空接受我们的访谈,预祝ThoughtWorks的分公司和您的新书都能在中国取得成功。

M:非常感谢!


更多精彩,加入图灵访谈微信!