科學(xué)家的挑戰(zhàn):十年前寫的代碼現(xiàn)在還能否運(yùn)行
2019 年,法國國家信息與自動(dòng)化研究所(INRIA)的 Nicolas Rougier 和國家科學(xué)研究中心(CNRS)的 Konrad Hinsen 發(fā)起了一個(gè)項(xiàng)目:Ten Years Reproducibility Challenge,邀請(qǐng)科學(xué)家重新運(yùn)行十年前或更早時(shí)間寫的代碼。有 35 名科學(xué)家參與了挑戰(zhàn),結(jié)果陸續(xù)發(fā)表在《ReScience C》期刊上。
科學(xué)家使用的語言從 C 和 R 到 Mathematica 和 Pascal,還有人重復(fù)的不是代碼而是分子模型,編碼在 Systems Biology Markup Language (SBML)中。參與者意識(shí)到,曾經(jīng)他們以為能牢牢記住的東西其實(shí)一個(gè)月內(nèi)就會(huì)開始遺忘,要讓代碼能重復(fù)運(yùn)行他們需要記錄相關(guān)的信息,比如使用的參數(shù)值。Rougier 本人再現(xiàn)的代碼需要軟盤和 Apple II 電腦,電腦不是問題,他的辦公室里就有一臺(tái)。意大利科學(xué)家 Sabino Maggi 在 1995 年使用 Fortran 語言建模了超導(dǎo)裝置約瑟夫遜結(jié),用微軟的 VB 處理結(jié)果。Fortran 語言幾十年來基本沒變,編譯代碼沒有遇到問題。問題是 VB。VB 早就死亡了,它就被 Visual Basic.NET 取代了,兩者之間的共同之處就是它們的名字。為了運(yùn)行代碼,他在 Mac 上創(chuàng)建了虛擬環(huán)境,加載了 Microsoft DOS 6.22 和 Windows 3.11,以及從網(wǎng)上下載的 VB,他承認(rèn)安裝私有軟件可能存在合法性問題,表示當(dāng)年他寫代碼的是時(shí)候有合法授權(quán)。另一個(gè)問題是他不記得 VB 的版本了。反直覺的一個(gè)現(xiàn)象是參與者發(fā)現(xiàn)舊的語言更容易再現(xiàn),原因是新語言 API 和庫的變化可能會(huì)導(dǎo)致舊代碼不能正常運(yùn)行,但舊的語言已經(jīng)停止變化,因此幾十年都能保持一致。剛剛停止支持 Python 2.7 被認(rèn)為就是不再變化的高級(jí)編程語言。