科學家是糟糕的程序員

科學家是糟糕的程序員

《Nature》雜誌 2014 年的一篇論文包含了一個 Python 腳本,其中有一個模塊是根據文件的排序返回值,但 Python 並沒有定義查詢的文件順序。這意味著在不同的操作系統上,該腳本返回的值是不同的。這個 bug 直到最近才被發現,而這篇論文被引用了 158 次,如果這些論文使用了相同的腳本那麼文章的結果很可能是錯誤的。

藏在《Nature》論文裡的腳本 Bug

《Nature》雜誌 1869 年創刊於英國,是世界上最早的國際性科技期刊,涵蓋生命科學、自然科學、臨床醫學、物理化學等領域。對於學者而言,論文能被《Nature》收錄是一種榮耀。許多自然科學、物理化學等領域的學者,在論文創作中也會使用各種編程語言或工具進行數據收集、分析等工作。

科學家是糟糕的程序員

2014 年,《Nature》上發佈了一篇名為《A guide to small-molecule structure assignment through computation of (1H and 13C) NMR chemical shifts》的化學論文,該論文試圖找到對癌症有效的化合物。論文中包含了一個使用 Python 語言構建的腳本。

最近,夏威夷大學的一位研究生 Yuheng Luo (中國人)發現該腳本中存在一個 Bug:腳本中有一個模塊是根據文件的排序返回值,但 Python 並沒有定義查詢的文件順序。他在導師 Rui Sun (中國人)的指導下使用該腳本驗證結果,結果發現無法匹配論文作者的結果。在測試期間,他們發現在 Mac、Windows、Linux 等不同的操作系統上返回的結果是不同的。

他將研究報告寫成了論文,發佈在了《Organic Letters》期刊上。5 年時間過去了,這篇包含錯誤腳本的《Nature》論文已經被引用了 158 次,這意味著如果這些論文使用了相同的腳本那麼文章的結果很可能同樣是錯誤的。對於學術論文來說,這是影響很嚴重的 Bug 了。

Yuheng Luo 在論文中寫道:

原始腳本中這個簡單的小錯誤對大量論文的結論造成了影響,這些論文涉及的話題非常廣泛,很難從已發表的信息中得出結論,因為研究人員很少會提及其所使用的操作系統。使用這些腳本的作者當然應該再次檢查他們的結果,以及使用 [補充資料] 中修改過的腳本得出的任何相關結論。

目前尚不清楚這種故障可能會影響多少篇論文,研究人員通常不會公開他們用於分析的操作系統,因為它應該無關緊要。根據數據顯示,2014 年的這篇論文已被瀏覽過 1,900 餘次,並被其他 158 個研究所引用。但是,並非所有引用該論文的研究都可能使用該腳本。

新西蘭惠靈頓維多利亞大學的化學講師羅伯·凱澤斯(Rob Keyzers)在今年發表的一項研究中引用了該方案,他在一封電子郵件中說,他不知道該 Bug 的存在。他補充說,他並不“過度擔心”自己的結果,因為他的團隊沒有使用包含小故障的腳本。他說:“我當然會仔細檢查我們的數據,以確保我們不會提出任何不當的論述。”

學術界的代碼問題大討論

長久以來,學術界和工業界都是互相獨立的兩個世界。學術界更多鑽研於技術的進步與面向未來的研究,而工業界則更多關注技術的落地與商業化。學術界和工業界一直以來都很少合作,此前 AI 大神 Yann LeCun 也曾呼籲學術界、工業界緊密合作以加快 AI 的發展。

但事實上,學術界跟工業界的區別依舊明顯。此次事件在 Reddit 上也引起了廣泛討論,不少用戶表達了對學術界代碼問題的困惑,這也從側面印證了兩個世界之間的缺乏理解與互通。

科學家是糟糕的程序員

學術論文中的代碼缺乏同行評審嗎?

“由於很少提及操作系統,因此無法從發佈的信息中輕鬆解析”。

本文中 Python 腳本出現的 bug 背後,折射出了這樣的問題。ID:compsky 的用戶十分困惑,同行評審本應是學術論文發表前的一個重要因素,但他所看到的幾篇論文很少有關於如何重現他們聲稱已運行的程序的說明。

ID:Objective_Mine 的用戶跟帖評論道:

我讀過許多 NLP 相關內容的論文,其中描述了一種算法,但未提供源代碼。你還必須至少猜測一些細節,並且想要做到複製精確的實驗是不可能的。任何依賴實驗而不是形式證明的東西都應該真正具有可用的確切程序,這背後就是源代碼和環境細節。

科學家是糟糕的程序員

代碼質量通常不是學術界關注的重點。一般意義上,學術論文中的代碼唯一消費者就是研究人員,所以諸如穩定性和易用性之類的東西並不比簡單地完成工作更重要。此外,研究代碼必然是實驗性的,並且規範變化比其他類型的代碼更加劇烈,所以最終的代碼將會有許多變更移植到它上面。

但最重要的因素只是因為學者們不認為自己是專業程序員(確實也不是),編程只是他們工作的一小部分。因此,根本沒有能夠維持代碼審查過程的護理或激情水平。

在這樣的情況下,計算機學術界也好,其他學界需要使用計算機代碼的學者也好,代碼質量通常達不到工業級的標準,也常常因此為工業界的程序員所驚訝。

如何看待科技公司從學術界挖角現象?

從前,學術界的大牛們分佈在各個知名的研究院裡:微軟亞洲研究院、貝爾實驗室、雅虎研究院等等不一而足。研究院通常來說不差錢,比如貝爾實驗室長期以來總是用不需為經費發愁這一條理由來吸引優秀的科學家到該實驗室工作。

但在近兩年,科技公司越來越多地開始從學術界挖角,併成立自己的實驗室網羅天下英才為己用。比如吳恩達加入百度(已離職)、李飛飛加入谷歌(已離職)、Yann LeCun 加入 Facebook(已離職)、顏水成加入 360(已離職)、賈揚清加入阿里巴巴、賈佳亞加入騰訊等等。

2017 年 10 月雲棲大會上,阿里巴巴高調宣佈成立達摩院,進行基礎科學和顛覆式技術創新研究,並將在未來 3 年投入 1000 億元進行基礎科學研發。而在阿里以外,騰訊也有自己的優圖實驗室、玄武實驗室,360 也有自己的研究部門。

為什麼科技公司紛紛從學術界挖來眾多大牛,收歸己用?理由可能有很多,但最共通的一點就是:利用知名學者的名人效應,打造公司的技術品牌,憑著多年在學術圈積累下來的名望與成績,為公司招徠人才,組建一支技術強軍。

但這背後存在一個悖論:研究院通常需要大量的經費支持,但科技公司卻是以盈利為目的,如果研究院光有研究沒有產出,其存在的地位會非常尷尬。阿里巴巴成立達摩院時,馬雲就曾直言:達摩院未來要自己掙錢,還要比阿里巴巴活得更久。

我的一位消息人士給出的觀點,更是工業界技術人的一個普遍觀點:

騰訊某實驗室在研究的東西,我們自己團隊也在搞,而且我們造出來的輪子性能還比他們的更好。每年花那麼多錢養這麼多博士、教授,最後做出來的東西還不如工程團隊自己的。

在你看來,科技公司和學術大牛之間的關係應該是怎樣的呢?科技公司的研究部門地位尷尬嗎?


分享到:


相關文章: