我是一名研究人員和自學成才的開發人員。我已經完成了大量的項目,這些項目主要是基於軟件的。儘管就複雜性和規模而言,我的工作遠不是最“硬核”的東西,但是這些項目足夠大,以至於天真的錯誤(例如,不使用版本控製或文檔編寫得不好)是非常痛苦的。我最終通過反複試驗學習了很多“最佳實踐”。
我也一直在接受“傳遞給研究人員的不可維護的代碼”:
我的行業經驗一直是我研究的障礙
不,您基本上來自一個文明的環境,幾十年來解決了這些問題,就軟件開發衛生而言,這是一個陷入僵局的時代。科學家仍然像60年代那樣編碼。當然,您會感到衝突,但是故障不會出在您身上。
在行業中,代碼(理想情況下)需要:可維護,無錯誤,重構,文檔完善,經過嚴格測試
讓我們說一個科學會議上的演講者,在描述他的研究的計算部分時,說了以下話之一:
“ 我寫的代碼“
- ...不可維持(並且在我的研究中加油!)
- ...充滿了錯誤(而且我不知道輸出是否正確!)
- ...無法理解的意大利麵條(我什至不知道它是如何工作的,更不用說它是否正確!)
- ...未記錄(所有錯誤都被審稿人掩蓋了!)
- ...未測試(所以上帝知道它是否按照我的想法做/想做!)
li>
您是否希望觀眾對自己表現出蔑視和憤怒?如果我聽到這樣的話,我將不相信這個人再發表任何文章。
在學術界,目標是在盡可能短的時間內完成(...)。
是,但是“ 不短”。您不會跳過重要的控制實驗,因為“控制需要時間”。出於非常相似的原因,您不能無視代碼質量。
似乎沒有動力編寫[優質代碼]
,因為這是一個學術界的地方性問題。儘管計算機已在科學中使用了數十年,但似乎在最近十年左右的時間裡,算法僅成為研究的重要組成部分(也許是因為“大數據”)。當您基於代碼進行研究時,該代碼必須具有良好的質量。僅僅簡單地找出一些有問題的只寫腳本並將其命名為一天是不夠的。軟件開發社區很早就已經弄清了這一切,但學術界尚未流行-我認為原因是大多數科學家沒有軟件開發的正式背景,並且在研究中沒有引起足夠多的大醜聞通過不良的編程習慣(例如,引人注目的論文的主要結果是由錯誤引起的工件)。
請考慮一下,在許多學科中,審閱者甚至不會問您的源代碼計算量大的論文。他們如何評估結果的有效性?他們不能,這是當前同行評審模型的失敗。
很抱歉,我的回答是這樣,但是基本上,這是這樣的:正如您所知道的,編寫的理由很充分即使沒有人在你的肩膀上看著,也能獲得高質量的代碼。在科學中,目前確實發生這種情況,沒人在乎您的代碼是否好。但這不應該成為您仍然不編寫良好代碼的原因-在行業中編寫良好代碼的原因仍然在很大程度上適用於科學。
很遺憾,您的額外工作可能不會得到回報。您甚至可能會受到懲罰,因為正如您所說,好的代碼需要更長的時間,而其他人可能看不到更多。您的PI或同事可能不明白為什麼您要慢得多。您能做的最好的就是向他們解釋對良好實踐的需求。
顯然,有一些例外。例如,對於要在專用實驗室計算機上運行的代碼,您可能不必擔心可移植性或與舊版本OS的向後兼容性(儘管不希望編寫代碼以使其僅在非常特殊的環境中運行)其他科學家無法輕易重建的環境)。但總的來說,我發現行業慣例仍然適用,並且可以通過應用少量批判性思想輕鬆地檢測到例外情況。也就是說,還有一個有用的出版物“ 科學計算最佳實踐 ”,它詳細研究了此問題。
最終,這是一本您必須做出的道德決定。您是否在乎做好科學?遵循最佳做法。您是否想偷工減料(從道德角度而言),以節省時間或避免與同事發生摩擦?原則上,我不建議您這樣做。但是顯然,很多人都這樣做了,也許實際上,有些科學家被迫這樣做-儘管再一次,難道不是因為情況不好而做不好的科學嗎?
也像我說的那樣,我認為問題的部分原因是沒有任何大的醜聞。如果您對代碼質量有所了解,那麼它就有可能趕上您。您甚至可能成為那些大醜聞之一。誠然,風險可能很小...但是,我認為您可以理解我的觀點。