從Fortran到arXiv.org,計算機程序和平臺的進步,令生物學、氣候科學與物理學突飛猛進。
在2019年,事件視界望遠鏡向世界首次揭開了黑洞的神秘面紗。但我們看到的那個發光環形黑洞圖像并不是直接拍攝得到的,而是利用來自于美國、墨西哥、智利、西班牙和南極的射電望遠鏡所捕獲的數據,通過復雜的數學變換和計算處理而得到的[1]。在發布結果的同時,該團隊也公開了實現這一突破性成就的代碼,使得科學界詳細理解其實現過程,并以此為基礎更深入地研究。
從天文學到動物學,這樣的研究模式在各個學科中越來越趨于普遍:在現代每一項重大科學發現的背后,總有計算機的身影。加州斯坦福大學的計算生物學家Michael Levitt由于在化學結構建模的計算策略方面做出的杰出貢獻而分享了2013年的諾貝爾化學獎,他提及自己在1967年剛開始這項工作時,實驗室電腦的內存和計算性能只有不到現在筆記本電腦的萬分之一。他說:「雖然我們現在已經掌握了強大的計算資源,但思考的重要性并沒有絲毫減弱。」
這就需要科學家兼程序員。如果沒有可以處理研究問題的軟件,沒有知道如何編寫并使用程序的研究人員,再強大的電腦也會顯得毫無用處。Neil Chue Hong是總部位于英國愛丁堡的軟件可持續性研究所的負責人,該研究所主要致力于持續改善科學軟件的研發和使用,Neil說:「現在的科學研究基本都會運用軟件來進行,它們已經滲透到了研究的方方面面。」
插圖: Pawe? Jońca
科學發現理應是媒體的頭版頭條。但本期《自然》中,我們想要和讀者一起聊聊這些發現背后的故事,一起回顧過去幾十年來極大地改變研究進程的關鍵代碼。
盡管這樣的列表并非絕對,但在過去一年里我們調研了大量研究人員,匯總了不同領域內對科研帶來巨大影響的的十大軟件工具。
編程語言先驅者:Fortran編譯器
(1957)
第一臺現代電子計算機對于用戶并不友好。編程需要通過手動逐個鏈接電路來完成。雖然隨后的機器語言和匯編語言迅速發展,可以讓用戶通過代碼進行編程,但依然需要對計算機體系結構有著深入的理解,這阻礙了許多科學家使用計算機的效率。
隨著20世紀50年代符號化語言的發展,效率慢慢提高,尤其是「公式翻譯」語言Fortran的出現改變了這一局面。Fortran語言是由John Backus與其在加州圣何塞的IBM團隊開發的。用戶可以利用Fortran中人類可讀的指令來編程,例如編寫x=3+5的計算公式,隨后編譯器就可以將其轉化為快速高效的機器代碼。
CDC 3600計算機于1963年送達位于科羅拉多州博爾德的國家大氣研究中心,它可以在Fortran編譯器幫助下進行編程
但編程仍然不是一件容易的事情:早期的程序員使用打孔卡來輸入代碼,稍微復雜點的模擬就需要上萬張打孔卡來編寫程序。但新澤西普林斯頓大學的氣候學家Syukuro Manabe表示,Fortran為非計算機科學家的研究者提供了一種高效的編程手段。「我們第一次可以自己對計算機進行編程」,Manabe說。他和同事們利用Fortran開發了第一個成功的氣候模型。
如今,Fortran已經進入了第八個十年,它依舊廣泛應用于氣象建模、流體力學、計算化學和其他需要復雜線性代數與強大計算能力的學科。其生成的代碼運算高效,依然有很大比例的程序員會使用Fortran。中古Fortran代碼庫仍然活躍在全球各地的超級計算機和實驗室中。「以前的程序員清楚自己在做什么」加州蒙特雷海軍研究生院的應用數學家和氣候建模專家Frank Giraldo說,「他們非常注重內存,因為以前的內存非常小。」
信號處理器:快速傅立葉變換
(1965)
當射電天文學家掃視天空時,他們會捕獲到一系列隨時間變化的復雜信號。為了理解這些電波的本質,他們需要看到這些信號轉成頻率方程是什么樣的。研究人員可以使用一種被稱為傅立葉變換的數學過程來完成這一過程,問題在于它的效率很低,一個N大小的數據集需要N2的計算量。
但在1965年,美國數學家JamesCooley和John Tukey發明了一種方法來加速這一過程。使用遞歸,一種「分而治之」的編程手段(算法可以重復調用自身),快速傅立葉變換(FFT)可以將傅立葉變換的計算降低到Nlog2(N)步。計算速度隨著數據集的增大而增加,1000個數據點的情況下速度提升100倍,而對于一百萬個點的情況則可以提速5萬倍。
英國牛津大學的數學家Nick Trefethen說,這其實是一次重復發現——德國數學家高斯(Carl Friedrich Gauss)在1805年曾提出過這個算法,但他并未發表。然而,Cooley和Tukey為數字信號處理、圖像分析、結構生物學等等領域打開了廣闊的應用空間。Trefethen說:「這確實是應用數學和工程領域的重大事件。」 FFT已經在代碼中實現了很多次,最為著名的是FFTW(西方最快的傅立葉變換)。