合作者把程式碼發過來,說"跑一下就有結果"。我跑了兩小時,報錯四次。最後把它拆成一格一格,才找到問題在哪。
現在我的做法是:拿到別人的程式碼,先拆格,再逐格定位。跑的位置是 MuchSci 科學工具集裡的互動式數據分析筆記本。
拆格之後,報錯變成四類
第一類:環境缺套件。 第一格只做一件事:把要用的函式庫 import 一次,看哪個標紅。缺什麼裝什麼,一次看清,不用跑到一半才發現。
第二類:路徑不通。 第二格把數據讀進來,並且立刻列印一遍行數、列數和前幾行。別人的程式碼裡路徑寫的是他自己電腦上的位置,這一步必須我改。
第三類:欄名對不上。 第三格做欄名核對:把數據裡真實的欄名列印出來,跟程式碼裡用到的欄名對一遍。
這一類最難查,因為欄名錯一個字母,有些函式庫不報錯,只會靜默給出錯誤的結果。我現在的習慣是:任何算完的結果,先看一行原始值再往下走。 互動式數據分析筆記本的好處就在這裡——每一格的結果都留在筆記本裡,我能一格一格往上回看是哪一步開始不對。
第四類:版本差異。 有些函數在不同版本裡的預設參數不一樣。我把關鍵函數的參數顯式寫出來,不用預設值。
四類查完,我把程式碼改成我自己的
別人的程式碼我不會直接用,我會在互動式數據分析筆記本裡重排成四段:
- 讀入(原始檔案不動)
- 清洗(每個動作單獨一格)
- 計算(參數寫在格子裡)
- 出圖與匯出(圖和數值一起出來)
重排之後,這份程式碼就變成了我自己的分析流程。下次換一批數據,我只改讀入那一格。
我把這套拆格法用在三個場合
- 接手別人的數據:先拆格跑通,再談結論。
- 復現論文裡的結果:按論文的方法段重排四段,對不上就逐格找差異。
- 自己的分析要給別人核對:整份筆記本直接給出去,對方不用聽我解釋中間操作。
配的三個功能
- 筆記本裡的流程與結果,歸檔進 MuchSci 的個人知識庫,寫方法段時直接調用。
- 方法段裡要引的文獻,用 MuchSci 的論文檢索助手核 DOI 與引文資訊。
- 外文的原始方法描述,用 MuchSci 的論文翻譯對照著讀。
- 最終成文的說明文件,用 MuchSci 的辦公助手智能體排成可編輯檔案。
從"別人給的程式碼"到"我自己的流程",全靠這一套拆格法。MuchSci 的互動式數據分析筆記本負責留痕,MuchSci 的個人知識庫負責歸檔,MuchSci 的論文檢索助手、MuchSci 的論文翻譯和 MuchSci 的辦公助手智能體負責收尾。
報錯不可怕,可怕的是靜默算錯。這也是我現在用研究生 AI 助手做數據的第一原則:每一步都要能回看。