实验室中的开放源码 |
|---|
| 作者:Cameron Laird 2005-01-19 10:04:03 来自:IBM DW中国 |
科学和工程实验室长期以来一直依靠专用产品进行日常数据分析工作。现在,许多实验室转而使用开放源码产品和开发语言,以获得传统产品无法向他们提供的特殊技术优势。 可编程性 但是,同样是这些产品,作为计算对象存在一些缺陷。它们的基础语言不能完全支持更新的、具有更强表达能力的语法(包括面向对象编程和函数型编程)。尽管这些工具适合于迅速地合作完成重要的计算,但当大型团队使用它们从事长期项目时,它们却变得很笨拙。在许多实验室中,难以实现代码重用,因此剪切和粘贴的工作量很大。 当然,团队协作始终是个挑战。开放源码能够做得更好吗? 在许多情况下,可以。例如,位于奥尔良的 Centre de Biophysique Moleculaire 的高级研究员 Konrad Hinsen 认为:MATLAB“没有超出函数级别的结构化代码(例如,没有模块),而且根本就没有可定义的数据结构。不可能构建抽象……Matlab 是 Fortran 的交互式等价物:一切都是矩阵”。 象 Python 或 Ruby 这样的开放源码开发语言,使用内置面向对象和模块封装弥补了这种数据结构方面的缺乏。 William Kleb 是美国国家航空和航天局兰利研究中心(NASA Langley Research Center)的计算方法开发领导。可重用性对他特别重要。他是一位专门研究“高热”(大于 5 马赫)飞行的航空工程师,几年前,他就开始仔细地研究使用计算机的更佳方法。Kleb 说:“我们已经厌倦了不断地剪贴代码,因为它已经变得很脆弱了。我们还开始认识到,作为团队从事单段软件开发时,我们的团队显得很笨拙。因此,我们转向了软件工程/开发社区,以寻求最佳实践。” 结果如何?Kleb 说:“现在,我们正在使用 Ruby 来创建用来支持一些我们的 XP(极端编程)实践(如自动化接受测试和单元测试)的定制工具。我们还设法为 Ruby 强大的文档编制工具 Rdoc 编写了 Fortran 95 接口,以提供自动化 API 文档编制。我们还将 Ruby 用于 Fortran 代码生成、条件编译,并将它用作将各种代码元素合并到有关各种学科的黏合剂。我们正在向着用 Ruby 封装几乎所有的 Fortran 事务的目标前进。” 这些区别很重要。即使对于并无软件背景的科学家,可编程性也很重要。每个使用工程工具箱的开发人员都会进行抽象;但唯一的问题是工具箱对这种操作的支持好到什么程度。此外,有些商业产品(包括 Mathematica)以拥有良好设计的语言而自豪。但是,总的来说,开放源码语言,包括象 Sather(请参阅参考资料)、R 和 J 这样晦涩的语言,都强调了进行长期维护和重用不可或缺的抽象表达能力。 图 3. DomainFinder 应用程序 — 一个用于确定和刻画蛋白质中的动态域的程序 在开放源码中,至少有两种显而易见的用于解决科学问题的不同途径。象 Octave 这样的项目(请参阅参考资料)打算在替代 MATLAB 时,大大减少其功能。它们的全部功能都集中于科学数据分析方面。有几种免费软件包甚至更为专业化:例如,图象压缩和分析工具(Image Reduction and Analysis Facility (IRAF))在天文学方面被广泛使用(请参阅参考资料),象人类学、高能物理和基因学这些学科也都有类似的应用程序。这些应用程序往往有宝贵的预制例程库,但正如康奈尔大学的 Joe Harrington 描述 IRAF 特征时所言,它们通常都是“糟糕的基础语言”。 其它项目开始使用通用语言,包括 Perl、Java 和 Python,并基于这些语言构建了“垂直的”工具箱。在这些项目中,SciPy 发展特别快(请参阅参考资料),其实际成功的记录在不断上升。SciPy 是一个基于 Python 的项目,它旨在再现 MATLAB 的所有功能,优化其性能并简化与其它软件的集成,同时仍保持完全免费以及至少和 MATLAB 一样易于使用。在 SciPy 兴趣小组的上届物理学会的六十名与会者中,有来自以下机构的代表:Cal Tech、国家生物医学计算资金(National Biomedical Computational Resource)、位于劳伦斯利弗莫尔(Lawrence Livermore)和别处的国家实验室、Lockheed-Martin、贝勒医科大学(Baylor College of Medicine)、太空望远镜科学研究院(Space Telescope Science Institute)以及斯坦福线性加速器中心(Stanford Linear Accelerator Center)。集成了丰富的专用模块集的完全通用的编程能力,是这些与会者希望获得的理想产品。 容易的接口 相反,众所周知,开放源码语言乐于将其自身与其它部分组合到一起。程序员为诸如 Python、Tcl 和 Perl 之类的通用语言编写了数以千计的扩展。对于许多组织而言,这是至关重要的。但无论组织如何喜欢商业产品的外观或库,他们都肯定无法承担将专用外部系统结合到“与世隔绝的”软件包的高昂代价。开发人员发现用更容易集成的开放源码工具箱更好。 关于可编程性的最后一个问题是性能;许多研究人员会告诉您,当对专用软件编制完脚本时,它的执行很糟糕。尽管特定操作得到了精心的优化,但通用语言特性通常还是很慢。即使是象 Perl 这样的“胶水”或“脚本编制”语言长期以来也以速度慢而出名,最新发行版中将更强的算法表示和速度优化组合起来,产生了强大的优势。 更易于调试 与此相关的是:人们日渐关注依赖商业软件的科学适用性。通过使用专用库取得一定的结果意味着什么?当发现或结论依赖于一个由第三方作为商业机密来掌握其细节的黑箱时,学者该如何记载这个发现或结论呢? 当然,开放源码不受这种负担的困扰。原则上,可以精确地指定关于开放源码程序的任何事情。它不隐藏任何机密。 一些研究人员喜欢开放源码的最后一个原因是更强有力的支持。尽管商业公司雇佣了专业支持人员,但几种开放源码技术可以使用“基于社区”的在线论坛构成强有力的竞争。 结束语 在这个大趋势中,存在着几个有趣的局部变化。戏剧性事件席卷了整个生物信息市场,在那里,贴着高价标签的由风险资本提供资金的产品原本很常见,但现在构建在 Perl 上的免费软件包得到了相当程度的接受和重视,用诸如 Java、Tcl 和 Python 之类的其它语言构建的软件包也是如此,但受关注程度比用 Perl 构建的略低些。 在其它学科领域,似乎是那些将新旧技术组合起来的开发人员取得了最快的进步。Kleb 的小组在基于 Ruby 的软件包中封装了旧 Fortran。有几个组正在使用 Tcl 来改进象 MATLAB 这样的商业软件包的接口。 正在忍受不合适软件的科学和工程团队不必等待产品供应商解决其问题。许多项目正在迅速开发各种可以免费使用的解决方案。即使没有这些方案,具有复制专用价值的元素经验的开放源码开发人员也正在成倍增加。目前正在完成一些最佳的编码,将使免费软件和商业软件结合起来,以实现超出任何一方单独能力范围的成果。 (编辑:zhou_rm)
|