图灵访谈之三十五:专访Bob大叔Robert Martin

Robert C. Martin,世界级软件开发大师,设计模式和敏捷开发先驱,敏捷联盟首任主席,C++ Report 前主编,被后辈程序员尊称为“Bob大叔”。20世纪70年代初成为职业程序员,后创办Object Mentor公司并任总裁。Martin还是一名多产的作家,至今已发表数百篇文章、论文和博客,除本书外,还著有《代码整洁之道》、《敏捷软件开发:原则、模式和实践》、《UML:Java程序员指南》等。他最近创办了cleancoders.com网站,专为软件开发人员提供教育视频。

enter image description here
图灵访谈之三十五:Bob大叔和他的《程序员的职业素养》(英文版)

图灵社区:《程序员的职业素养》这本书的中文译者(章显洲)感觉本书和宫本武藏的《五轮书》似乎有些内在的联系?请问你读过那本书吗?或者你是否受过其他东方哲学的影响呢,比如说“禅”?

Uncle Bob: 十分抱歉,我没有读过《五轮书》,但是这本书听起来是我喜欢的类型。话说回来,我倒是曾经学过“柔术”,还学了很多年。这段经历让我学到了很多可以应用到“工艺”上的道理。

图灵社区:《程序员的职业素养》、《代码整洁之道》、《敏捷软件开发》这三本书的封面都和星云有关。如果这不是一个巧合的话,你想通过这些图片来表达什么呢?作为一个集合,这三本书有什么内在联系(也许在未来这个合集会继续扩充)?

Uncle Bob: 从很小的时候开始,我就一直对太空充满了好奇。我记得曾几何时,我们并没有任何行星的近距离照片,甚至连月亮的都没有。我还记得漫游者号在月球表面拍回来的照片。我记得尤里·加加林,艾伦·谢泼德和斯科特·格伦的任务。我也曾见证阿姆斯特朗踏进“宁静之海”的伟大时刻。在我的人生中,我见过每个行星的近距离照片,以及很多小行星的照片。我曾看见机器人在火星表面爬行,降落在泰坦(土星最大卫星)表面的冰壳上,也曾看见它们从金星深深的峡谷中挣扎着发送出简短的信息。我曾见过地球的“暗淡蓝点”,它在“旅行者1号”透过土星环,面向地球拍摄的照片中虽然只占了一个像素,但是这张照片让我激动不已。我们做到了!

星云、星星,以及行星的照片让我书的封面容光焕发,它时刻的提醒着我们大家,当人类全心投入地工作,并用十分的纪律要求自己时,我们可以成就些什么。

图灵社区:你从一位职业的程序员变身成为这个领域的导师,在这过程中有人影响过你吗?在这背后或许有些我们不知道的有趣故事吧?

Uncle Bob: 我职业生涯中的直接导师并不多。我成长的年代中,并没有很多有经验的程序员。所以我的导师都是来自于一个间接的来源——我通过读一些杰出人物的著作来成长,这些人包括Grady Booch(《UML用户指南》作者), Tom DeMarco(《项目百态》作者), Meilir Page-Jones(《UML 面向对象设计基础》作者), Erich Gamma(《设计模式》作者), Martin Fowler(《重构》作者), Bertrand Meyer(《面向对象软件构造》作者), Kent Beck(《测试驱动开发》作者),等等。

我感觉这些教导都是充满价值的,我本能的就想迎头而上。于是,我开始写作。一开始我只是在互联网上的新闻讨论组中写。然后我开始为杂志写文章。然后就是书了。而现在我在为 cleancoders.com制作视频。我也在技术会议上讲话,在此过程中,我发现自己对于站在人前传达信息这件事颇有天赋。你所说的“变身” 对我来说是一个缓慢的过程。我花了整整20年来积累工作经验,又花了20年才做到今天的成就。“变身”从来都不是我意料之中的事,也不是我的目的;但这个过程对我来说是一种享受。

图灵社区:我们都听说过很多功成名就的程序员的故事,他们中的很多人似乎从很小的时候就展露出编程方面的天赋,长时间的工作对于他们来说似乎是一种享受。但是,有很多程序员却没有如他们那样的激情,但是他们也将编程作为自己的职业。这些普通的程序员可以有朝一日成为很棒的“专业”程序员吗?你觉得程序员从某种角度来说是天生的吗?

Uncle Bob: 狗就是狗,猫就是猫。人类却可以成为你想成为的任何人。对于人道来说,没有比这更重要的了。人类可以选择我们想要的结局,也可以改变自己的命运。

你问我“普通程序员”可以变得“专业”吗。当然可以!但是只有他们自己有这样的渴望时才可能。我们产业所面临的最大问题就是发现这样的人才,并让这些人也愿意把自己的意愿传播给其他人。

在这点上我们可以从医生那里学到很多。当有人想加入到我们的行列中来时,我们要学会变得冷酷无情。成为一个“程序员”应该像变成一个“医生”那样困难。因为事实上,我们就是信息科技界的“医生”。而我们文明的生命根源正是来源于我们所从事的科技。在经济交易、工厂运营、每部电梯、每辆汽车、每个闹钟,以及每个微波炉的背后流淌着的都是我们的代码。我们的代码控制着一切。文明也是依附于此。要承担这么大的责任,就要保证“程序员”之名不是简简单单就可以获得的。

图灵社区:在编程语言日益提倡提高程序员生产力的今天,Java作为一门老牌语言仍然没有为提高生产力提供多少语言层面的帮助,您对这一点是怎么看的?您是否认为Java应该发展得更快一些?

Uncle Bob: 语言来语言往。在我的职业生涯中我曾亲历过Fortran, Cobol, PL/1, Pascal, C, C++, Java, C#, 以及 Ruby的发展之路,模式都差不多。它们都曾风靡一时,然后就会滞入发展的泥潭。通过一张波浪起伏的图表就能看得清清楚楚了。而在编程领域让你的事业屹立不倒的关键就是要在这样的波浪中弄潮。

你现在所使用的语言会和你五年后用的语言不一样。所以最好你现在就开始学习那种新的语言!所有在事业上取得长足成功的程序员都知道如何从一个浪尖上跳到另一个浪尖上。他们能够感知到一种新语言的来临,并在很早的时候就开始学习它。而在这种语言正当红的时候,他们就可以是某种程度的专家了。当他们真的变成专家的时候,他们却没有止步不前,而是时刻关注着周遭形势寻找着下一种新的语言。

没有比一个程序员无法完成语言间的转换更悲剧的了。跟随着一种语言直到其覆灭是绝望而压抑的。

Java和C#在很久以前就已经登顶了,而Python和Ruby正在冉冉成为明日的王者。JavaScript和Clojure就像早上初生的太阳,还在它们的地平线上。

图灵社区:敏捷似乎成为了一个很宽泛的概念,图灵出版过很多这个领域的经典书籍,比如《重构》、《持续交付》、《实例化需求》等,也还有您正在实践的《番茄工作法》。有些人(包括Martin Fowler在内)指出现在确实存在很多“伪敏捷”的方法,你有见识过类似的东西吗?这方面有什么经验和我们分享吗?

Uncle Bob: 敏捷其实是一个很简单的概念。四项基本的宣言:个体和互动高于流程和工具;工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。当这些概念被合理地运用时,就会取得成功。但是可悲的是,我见过在很多地方人们使用“敏捷”这个词但是却没有顾及到这些原则。

我们必须要看看这第一条原则。个体和互动高于流程和工具。敏捷不是流程和工具。敏捷是人。Scrum是流程和工具,而Scrum不是敏捷。Scrum也可以是敏捷,但是要有人把它变成敏捷才可以。极限编程是一系列的原则,它不是敏捷。XP可以是敏捷,但是必须要有人的参与。

关于人,我还有一点要说。人们想做让人称道的事。人们也想为自己所从事的事情而自豪。任何工具或者流程如果让人们在自己的工作环境中感到举步维艰,那它就不能被称为敏捷,因为这样的工具和流程并没有退后于人(个体和互动)。这就是“工艺运动”的主要原因。这就是我们为何要把重点放在如何写出优质的代码上的原因。这就是我们常说欲速则不达的原因。任何流程或工具成为敏捷的唯一条件,就是它必须要让人们以自己的工作为傲。

图灵社区:上次Martin Fowler来中国的时候,有人把他认成了您,场面有些尴尬,呵呵。话说回来,有读者反映Kent Beck, Martin Fowler,以及Bob大叔是他们最喜爱的作者。您认识这些大牛吗?在这个领域好书林立的今天,您是怎样定位自己和自己的作品的?

Uncle Bob: 我和Martin Fowler很熟。我们从很早以前就总有机会在一起工作。事实上,在2001年,正是我和他召集了创造出“敏捷宣言”的聚会。Kent Beck和我也曾在一起共事过。在1999年的时候,我们组织了一系列的小型会议和培训课程,叫做“深入极限编程”。这些人既是我的老师也是我的朋友。我非常非常地尊敬他们。

图灵社区:《程序员的职业素养》介绍了许多您亲身实践过的真知灼见,记得《敏捷软件开发:原则、模式和实践》一书是您父子二人合著的,请问Bob大叔最初教给儿子(Micah Martin)的是哪点/些建议?

Uncle Bob: 我把儿子教育得很好,以至于现在他成了我的老板。7年前,他开创了自己的公司,8th Light Inc。这是一家讲求“软件工艺”的公司,正在快速地蒸蒸向荣地发展。去年我获得了 8th Light公司的“老师傅”称号。我很为这项荣誉感到自豪。我觉得时至今日,比起我给他的建议,他应该能给我更有价值的建议。

有一点我曾教给我儿子但是并没有出现在《程序员的职业素养》这本书中的建议是:最好的学习方法就是教授。

图灵社区:在你的书中你说过,一位想成为专业程序员的人每星期应该至少花20个小时学习专业知识,如果有人想依此法行之,你有什么书籍想推荐给他/她吗?你是如何紧跟科技发展新动向的?

Uncle Bob: 我通过每天大量的阅读来紧跟科技发展。我在推特和脸书上关注了很多人,我每天也阅读大量的博客和文章。我一直都在寻找值得一读的好书。

我认为有一本书每个人都应该读一读,那本书叫《计算机程序的构造和解释》,作者是Abelson和Sussman。这本书在互联网上是免费的。你也可以下载MIT提供的讲座视频。如果你从来都没有读过这本书的话,那这本书一定会让你的世界地动山摇。

图灵社区:作为读者,我们急切地想知道你打算什么时候写你的下一本书,有什么值得关注的话题将出现在下一本书中吗?你会考虑一些比较前卫的出版方式吗?比如电子出版、自出版之类的?

Uncle Bob: 我想我会坚持行将就木的传统出版。我的出版社一直对我很好,我不会背弃他们,我会把我们这样的良好关系保持下去。我的下一本书可能会叫做《架构整洁之道》(Clean Architecture)。这本书的内容是关于架构师所要面临的技术挑战。我会在书中解读一个优秀架构师存在的意义,以及作为一个优秀架构师所应该掌握的技能技巧。


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