歡迎您光臨本站 註冊首頁

實驗室中的開放源碼

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
Python、Perl 和開放源碼工具箱給科學帶來了許多好處

Cameron Laird(claird@phaseit.net)
副總裁,Phaseit,Inc.
2002 年 10 月

科學和工程實驗室長期以來一直依靠專用產品進行日常數據分析工作.現在,許多實驗室轉而使用開放源碼產品和開發語言,以獲得傳統產品無法向他們提供的特殊技術優勢.
科學家和工程師們習慣使用諸如 The MathWorks 的 MATLAB、Wolfram Research 的 Mathematica 或 SAS Institute 的 SAS/IML 之類的專用產品(請參閱參考資料以獲取本文中提到的這些公司產品的鏈接)來收集、處理和報告研究數據.儘管從軟體角度上,將這些產品集中用於一個更大的「商業智能」或「分析學」種類是很誘人的,但它們各自專註地服務於專門的科學實驗室市場 — 並擁有非常高程度的客戶滿意度.

這些應用程序在財務上和技術上都已經取得了成功.例如,MathWorks 仍在大量雇傭程序員,而 Mathematica 在其符號計算器的每個版本中都添加大量有趣的增強功能,包括「以文檔為中心的介面」及其「演算法知識庫」.

但是,這些應用程序遇到了新一代的競爭對手.尤其是,在許多領域中,對開放源碼軟體的信任正穩步提高.本文說明了為什麼會發生這種情況,及其結果對您自己的工作有什麼影響.本文還推斷,開放源碼和專用產品最終將成為隊友,而不是對手.

圖 1. 由用於數字計算的開放源碼工具 SciLab 生成的 3-D 表面


開放源碼的優勢
科學家及其內部開發人員轉向開放源碼軟體的主要原因如下:

免費許可
簡易的許可證費用管理
更佳的大規模可編程性
更輕鬆的集成


更佳的性能
開發便利
知識產權
更佳的支持
「免費」產品有著顯而易見的吸引力 — 但這種吸引力可能不象表面上看起來那樣重要.相當多的用戶說他們可以承受諸如 IML 和 MATLAB 之類產品的價格;這些軟體工作良好,他們樂意支付許可證費用,這種費用只佔軟體提供的價值的很小一部分.一些用戶甚至聲稱對軟體價格不關心,他們將這個金額打入了研究經費.

但是,免費許可提供了靈活性.研究人員可能會訪問同事的實驗室並希望在主機硬體上迅速完成一個作業.當軟體是基於開放源碼時,只要進行下載即可.即使專用產品的文檔有時也是受限的;關於 Research Systems Software 的互動式數據語言(Interactive Data Language,IDL),Anansi Spaceworks 的 CTO Terry Hancock 說:「我得到完整的 API 副本都有困難.」

但是,使用開放源碼,不必安排採購訂單、尋求授權,否則多少要和相關的財務上的官僚機構打交道.用戶欣賞這一點.有些管理員會告訴您,他們用來配置和維護笨拙的專用許可證管理器的成本比許可證費用本身更高.

對於學生,免費軟體的門檻也很適中.學生當然述說他們更願意使用不花費自己任何費用的軟體.另一方面,供應商通常對學生提供折扣,採購價格確實擋住了下一批預期用戶的觀點很難證實.

圖 2. 用 Yorick 生成的機翼周圍的氣流圖


可編程性
眾所周知的是商業產品能夠非常方便地進行常用數據操作,因此它們能獲得成功.它們可以輕鬆地存儲來自儀器的數據、使數據可瀏覽、對它排序、為它繪圖以及將它包含到報表中.此類操作的準則是,易於掌握並允許忙於負責其自己的數據處理的科學家將精力集中於科學而不是計算技術.



但是,同樣是這些產品,作為計算對象存在一些缺陷.它們的基礎語言不能完全支持更新的、具有更強表達能力的語法(包括面向對象編程和函數型編程).儘管這些工具適合於迅速地合作完成重要的計算,但當大型團隊使用它們從事長期項目時,它們卻變得很笨拙.在許多實驗室中,難以實現代碼重用,因此剪切和粘貼的工作量很大.

當然,團隊協作始終是個挑戰.開放源碼能夠做得更好嗎?

在許多情況下,可以.例如,位於奧爾良的 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 這樣的「膠水」或「腳本編製」語言長期以來也以速度慢而出名,最新發行版中將更強的演算法表示和速度優化組合起來,產生了強大的優勢.

更易於調試
迄今為止,關於開放源碼的討論還停留在開放源碼軟體的次要特徵上.對於一些開發人員而言,開放本身是很重要的特性.Tom Silva 是從事太空梭(Space Shuttle)和其它航天項目研究有豐富經驗的顧問.他簡單而又令人信服地說:「如果我有源代碼,就可以找出問題.我可以添加使我的生活更輕鬆的特性.我可以跟蹤代碼以理解它實際上是如何工作的,而不是了解如何對它編製文檔.」

與此相關的是:人們日漸關注依賴商業軟體的科學適用性.通過使用專用庫取得一定的結果意味著什麼?當發現或結論依賴於一個由第三方作為商業機密來掌握其細節的黑箱時,學者該如何記載這個發現或結論呢?



當然,開放源碼不受這種負擔的困擾.原則上,可以精確地指定關於開放源碼程序的任何事情.它不隱藏任何機密.

一些研究人員喜歡開放源碼的一個原因是更強有力的支持.儘管商業公司雇傭了專業支持人員,但幾種開放源碼技術可以使用「基於社區」的在線論壇構成強有力的競爭.

結束語
Harrington「熱切地期待著有一天可以扔掉我們使用的那些高價而又低能的語言」,並轉向使用開放源碼備選方案,並且越來越多的研究人員抱有相同態度.但還不止這些.儘管針對科學家和工程師的專用產品提供了大量價值,但它們也帶來極高的代價 — 不僅包括採購價格,包括不靈活性、慣有的低性能和困難的開發所帶來的代價.許多用戶已經轉向開放源碼.結果是,他們立即改進了自己的工作.

在這個大趨勢中,存在著幾個有趣的局部變化.戲劇性事件席捲了整個生物信息市場,在那裡,貼著高價標籤的由風險資本提供資金的產品原本很常見,但現在構建在 Perl 上的免費軟體包得到了相當程度的接受和重視,用諸如 Java、Tcl 和 Python 之類的其它語言構建的軟體包也是如此,但受關注程度比用 Perl 構建的略低些.

在其它學科領域,似乎是那些將新舊技術組合起來的開發人員取得了最快的進步.Kleb 的小組在基於 Ruby 的軟體包中封裝了舊 Fortran.有幾個組正在使用 Tcl 來改進象 MATLAB 這樣的商業軟體包的介面.

正在忍受不合適軟體的科學和工程團隊不必等待產品供應商解決其問題.許多項目正在迅速開發各種可以免費使用的解決方案.即使沒有這些方案,具有複製專用價值的元素經驗的開放源碼開發人員也正在成倍增加.目前正在完成一些最佳的編碼,將使免費軟體和商業軟體結合起來,以實現超出任何一方單獨能力範圍的成果.



參考資料

請通過單擊文章頂部或底部的討論參與本文的論壇.


請到 MathWorks 網站了解 MATLAB.


Wolfram Research 的 Mathematica 是數學家和更注重分析的科學家特別喜愛的寵兒,但對於許多主要關注報告實驗室數據的生物學家和化學家來說,它有點太龐大了.


訪問 SAS 網站以了解更多關於 SAS/IML(互動式矩陣庫,Interactive Matrix Library)軟體的信息.


在 Research Systems Software 網站上閱讀關於 IDL(互動式數據語言,Interactive Data Language)的信息.


SciPy Toolkit 旨在替代 MATLAB.


具有 GPL 的 Octave 嘗試提供很大程度上與 MATLAB 相同的功能.


天文學家廣泛地使用 IRAF.


Sather 旨在合併 C、Eiffel、Lisp 和其它著名語言的精華.


Scilab 是免費的 MATLAB 競爭者,它使用成熟的演算法來分析數據和生成可愛的圖形.


分子建模工具箱(Molecular Modelling Toolkit)(MMTK)是基於 Python 的數字(Numeric)擴展.


儘管用途似乎很狹窄,但 Yorick 是一種解釋型科學編程語言,它為科學家和工程師保留了快速分析和顯示研究數據的簡單方法.


閱讀 Cameron 關於 JPL 科學家如何使用開放源碼軟體的文章以及嚴謹的開發實踐,以開發真正以任務為關鍵的應用程序(developerWorks,2002 年 8 月).


請參閱開放源碼是如何返回教室的(developerWorks,2000 年 6 月).


IBM 研究人員涉及多個科學和技術學科,包括化學、計算機科學、電子工程學、材料科學、數學以及物理學.請到 IBM Research 站點了解更多相關信息.


IBM Life Sciences 滿足了特定於生物工藝學、醫藥學、基因組學、蛋白質化學和保健學的 IT 需求.


在 developerWorks Linux 專區中獲取您正在尋找的 Linux 參考資料.



關於作者
Cameron 是 Phaseit, Inc. 的全職顧問.他經常就開放源碼和其它技術主題撰寫文章和發表講演.您可通過 claird@phaseit.net 與 Cameron 聯繫.


[火星人 ] 實驗室中的開放源碼已經有82次圍觀

http://coctec.com/docs/linux/show-post-56505.html