NetBeans之父Jaroslav Tulach谈软件框架设计
Interview: Jaroslav Tulach, Author of “Practical API Design”
2008-8-11
Jaroslav Tulach(见图),NetBeans之父、NetBeans API首席架构师,《软件框架设计的艺术》一书的作者。
此次访谈,Jaroslav Tulach会介绍他的这本书,并与大家分享关于设计API的一些独到见解。
你好,Jaroslav,你是不是先作个自我介绍啊?
好,我懂。让我提到自己的是 NetBeans 之父,就是想吸引读者都来看一看这本书,对吧? 。但是,如果一个人的名字让说英语的人完全看不懂,要想达到这个目的可不是那么简单的。我遇到这个问题可不止一次了,在设计这本书封面的时候就碰到了。想了解我的读者,下面就是我的一些背景资料。关于这本书,我想说:我在这本书里真的讲了很多有用的东西,而且我也尽了全力把枯燥的内容讲得更好玩一些。
也许你现在正在书店里,手里拿着这本书,问自己:“到底该不该买呢?”让我来告诉你:如果你写过很多代码,而且其他人要在你写的代码基础上编译他们的代码,那结论显而易见:“你早该想一想怎么设计API这个问题了,而本书就是你的得力助手。”
请注意,这可不是一本“5天掌握API设计”之类的书。而且你不可能“只用3天就能看完!”。假如你想找一本简单的参考手册,本书不属于那种类型。不过,要是你对深入了解API设计非常感兴趣,不仅仅满足于怎么设计,还想进一步搞清楚为什么那样设计,那在你把这本书放回书架之前,先听一听我的自我介绍,好吗?
我叫Jaroslav Tulach,我是 NetBeans 的创建人和首任架构师,NetBeans不仅是一个广为人知的IDE,也是第一个用Java写的模块化的桌面应用程序框架。这本书是在我过去10年工作笔记的基础上写成的。10年来,我的工作就是设计和维护 NetBeans API,并把相关的知识传递给其他的开发人员。这本书是来自 NetBeans 核心开发一线的工作实录,其中描述了我们曾经面临的问题,对这些问题逐步深入的理解,以及我们的对策和实施结果。虽然我们的经验来自于 NetBeans 的开发,但这些经验对大多数软件项目都是非常有价值的。
掌握正确设计API的知识,是在21世纪成功实现软件项目的根本所在。希望本书能在你设计世界级API的过程中助你一臂之力!
Jaroslav Tulach
http://wiki.apidesign.org/wiki/InvitationForReaders
介绍一下,为什么要写《软件框架设计的艺术》?
原因很多。在动笔之前,我也时不时地会产生写本书的冲动。但真正促使我下决心写书,还是在一次家庭聚会上。我当时跟表弟谈到想写一本书,他问我:“既然你知道一些别人不知道的东西,也有那么多写书的素材,连出版社都是现成的……,那你还犹豫什么呢?这样不对啊,赶紧写吧!”于是,我决定联系一家合适的出版社,写作和出版这本书。
说说这本书吧。什么是API,准确地说?
“准确地说?”好吧,API就是沟通。你可能会感到意外,我说的沟通不是指开发人员与计算机之间的沟通,而是人与人之间的对话。正因为如此,“什么是API”这个问题才会有各种各样的答案。一切有助于开发人员之间沟通的东西,都可以或者说都应该称为API,比如数据库的结构、硬盘里保存文件的路径、文件的内容、应用程序监听的端口,以及服务器的URL,等等。
那这本书的读者对象就是那些设计API的人了?
这本书适合所有希望跟其他人对话的开发人员。不用说,只要是编写代码并需要与团队其他成员共享代码的程序员,都有必要看一看这本书。我把这本书分成三在部分。第一部分介绍一些与API有关的面上的知识,包括API相关的术语及评价其质量的方法和标准。接下来的部分进入实战,讨论了不同的API设计模式。最后一部分更进一步,展示了前两部分的建议在实际中的应用、如何组织API设计团队的工作,以及需要在哪些问题前作出妥协。除了这三部分,书前书后的前言和后记为这三部分提供了背景和上下文。
读者看了这本书能学习到什么?
我以前一位领导常说:“正确的决断源于经验,而经验源于错误的决断。”我相信,从这个意义上说,NetBeans 团队已经掌握了非常高的API设计技术。然而技术虽高明,却不是什么魔法。我们能对API设计有这样深刻的认识,完全是因为10年来犯过了许许多多的错误。读者通过看这本书,有可能会避免重犯我们犯过的错误,提高自己在设计API时的决断力。
能不能通过一个例子展示一两个建议?
一两个建议还真是很难给,因为这样很容易让人觉得这两个建议比其他建议更重要,搞清楚这两个建议就万事大吉了。所以,我给不出两个这样的“魔法”建议。
不过,如果必须要找两个结论讲一讲,我可以推荐下面这两个:
- “API的第一个版本绝对不会完美”
- “不可能知道使用你的库的所有人”
这两个结论道出了构建带有API的库和构建内部系统之间的根本差异。API就像是星星, 一旦被人发现,就要永远悬挂在苍穹,发出永恒的光辉。星星不能突然无缘无故地从人们的视野中消失。如果一个库随便跟用户玩消失,你的信誉何在?这违背了正确设计的规则。库应该根据API设计领域的规则不断地改进。
你希望本书读者通过这本书获得哪些知识?
各个方面的知识,我在书中讨论的都是广义的API设计命题。我相信,这些话题触及了任何API设计的本质,对开发现代软件至关重要。但大家对这个问题的重视程度还远远不够,对设计API与设计常规的内部系统有什么区别也没有认识到位。欢迎大家访问http://wiki.apidesign.org/,跟我和其他人分享自己的经验。
我注意到,越来越多的(主要的)开源库需要更多开发人员。我希望能够为所有这些框架的维护人员节省一点时间,让他们不要再重蹈我们的覆辙。希望大家积极地分享经验,而且都能使用切实有效的工作方法。这样,才能开发出更好的库,只有开发出更好的库,才能在它们基础上构建出更好的应用。
最后,我想再强调一下,前面提到的一个人不可能预知所有用户这个结论是很重要的。即使是开发内部系统,即使你真的知道所有用户, 这个结论也是非常有用的。从编写代码之初就准备好应对未来的变化,可以为将来发布新版本避免很多麻烦。对于那些30几个人或更多人组成的开发团队来说,本书讨论的API设计方法绝对是非常有用的。
谈谈写这本书的感受?花了多长时间?你觉得写书是一件好玩的事吗?
写这本书的素材我已经收集了10年之久了,因此我知道这本书绝不可能在短时间内写完。自从去年夏天,我表弟促使我下定决心之后,写这本书大概花了整整一年时间,包括整理笔记和修改润色。我很欣慰,现在,过了一年,这本书已经上市了,在此我想感谢所有帮我把出书这件事做成的人。如果大家想知道都有谁,可以看看这里:http://thanks.apidesign.org。
对其他想写编程类图书的作者,你有什么建议?
我发现很多讲编程的书没有使用语法高亮。比如,关键字没有加粗,运算符和字符串与常规的文本也没有区别。虽然是意外发现这个问题,但这让我思考怎么在自己书里的代码示例中加点“高亮”。做到这一点不容易,因为出版社还没有注意到这个问题,也没有什么现成的解决方案。不过,我相信我们最终成功了。本书中所有代码的“颜色”是灰色,这样至少要好一点,而且读者看起来也会感觉更自然。我的建议是:如果你想写编程方面的书,别忘了也给自己的代码示例加点“颜色”。
还有其他话想对大家说吗?
分享!我是说,大家一起分享。我自认为对设计API有一定的研究,但同时我也深知,我对设计API仍然还是知之甚少。如何设计API,还需要大家共同探索,希望大家踊跃加入我们的发现之旅。如果你有什么提示、建议、想法、模式,欢迎到http://wiki.apidesign.org发表。大家需要这些知识让将来的软件开发更简单,也更可靠。