技术开发 频道

消除误解 企业需用开源软件的十大理由

  社区是一个好东西

  这里所描述的这种交互最后就形成了所谓的社区。虽然您可以简单地发出一个寻求帮助的请求或保存一个 bug 报告,然后再返回到用户列表,但是这不是常规做法。订阅了软件项目邮寄列表的大多数用户最终都四处游荡。他们找到了忙着解决相同领域内的问题或是遇到了不 同领域内的类似问题的其他用户。

  虽然看上去简单,甚至有些超理想化,但社区的确是在这些电子邮件列表和支持站点的基础上形成的。在这里,就您的软件问题,您能够找到在别处不 可能碰到的可以为您提供建议的人,或是您能够为之提供建议的人。返回到之前提及的有关 Ernie Ball 的文章:Sterling Ball 的开源体验不只改善了其业务:它还让他有了一种想让遇到相同问题的人知道该如何处理这样的实际问题并战胜该问题的强烈愿望。结果,很多其他的公司都以不同 的方式尝试过 Sterling 和 Ernie Ball 的解决方案。

  开源软件吸收了这类社会性创意。不管是得益于开放电子邮件列表的特性还是因为软件在开放的状态下发展迅速,交互性得到了长足的发展。当然,没 有人会因为自身的原因而强烈反对交互,即便是商业公司也不会。但是对于开源软件,这种交互性又能特别好地培育更进一步的交互性以及用户与用户间的交互性。 这是开源的一个不可小觑的益处。

  开源软件是开放的

  我尝试着避免在标题上卖弄聪明 — 书籍、文章中的章节,凡是您想得到的 — 但是这里,我必须要说明:开源中的 “开放” 并不是可有可无、无关紧要的。假设您有管理层和公司利益需要顾及;本文的第一节本应精心为他们设计。

  但是您不时地光顾 IBM® developerWorks,我于是做另一个假设:您已经至少具有了开发人员的思维方式。也许您还不能随心所欲地编写代码,但是您已经可以像开发人员那 样思考。这是件好事。而且说实话,这也是开源的亮点所在。在掌握了混合方式和社区之后,您的担忧就更多地是技术上的;并且开源可以极好地消除这些担忧。

  自制文档虽然过时,但很有用

  首先,坏消息是:开发人员均不善于为其编写的代码制作文档。这意味着如果想要深入钻研 Xalan-J、Firefox 或 Sourceforge.net 上您感兴趣的项目,您总是会发现找不到真正好的文档。在一个名为 initParser() 的方法名旁边附上一些诸如 “初始化解析器” 这类极无益的说明并不鲜见。那用处不大。

  不过,一个项目及其基础代码越成熟,那么文档也就越好。以 JDOM 项目为例,它已经存在多年了。JDOM 是一种开源的解析用 API,较 SAX 或 DOM 更为用户友好。实际上,很多人 — 来自 NASA,甚至是 Sun Microsystems(现在的 Oracle) — 都在使用 JDOM。之所以有这样的使用得益于其归档良好的 API。比如,清单 1 所示的是 Element 接口内的一个方法的代码。

  清单 1. JDOM 内部文档的例子

  /** * This protected constructor is provided in order to support an Element * subclass that wants full control over variable initialization. It * intentionally leaves all instance variables null, allowing a lightweight * subclass implementation. The subclass is responsible for ensuring all the * get and set methods on Element behave as documented. *

  * When implementing an Element subclass which doesn't require full control * over variable initialization, be aware that simply calling super() (or * letting the compiler add the implicit super() call) will not initialize * the instance variables which will cause many of the methods to throw a * NullPointerException. Therefore, the constructor for these subclasses * should call one of the public constructors so variable initialization is * handled automatically. */

  protected Element() { }

  对于一名开发人员,这非常有帮助。清晰的文档消除了混淆,并且让使用这个类变得简单了很多。当然,很多语言 — 包括 Java™ 语言 — 均允许这类代码级的文档被转变成更为有用的东西。图 3 所示的是 Element 接口的 JavaDoc,它是从上述代码文档直接生成的。

  图 3. JavaDoc 是代码级文档的可视表示

0
相关文章