因為我想回應的那篇,不知道消失的機率大不大。我獨立一篇好了 :D ## 正文開始
VS Code 是編輯器,也就是讓你來編寫文字或一般程式碼的軟體。由於很多人貢獻了 plugin 讓它可以跟各種程式的開發工具整合,所以常作為免費易取的開發工具推廣。
Jupyter Notebook 則是帶有「視覺化」功能的程式執行環境,它本身也有迷你的編輯器 (就是那個 Cell) 或獨立的文字檔類的編輯功能。如同 VSCode 一樣,透過不同來源貢獻的 plugin 它能用來開發不同語言的東西,只是 Python 作為最初創專案的元老級核心 (kernel) 之一,是最常被人所知的東西。
如果你看過一些實例,我想視覺化的功能不太需要說明,這也是它主要吸引資料科學家或需要大量視覺化的資料探索分析 (EDA) 情境下適合的場景。
## 個人認為的差異
但我自己覺得跟其他語言開發體驗不同的東西是「單步執行」成為日常。
我這裡是借用了各程式語言工具包都會附的 Debugger 的「單步執行」概念來說明,它並不真的只走了一步,那個一步的大小看你在 Notebook 中的 Cell 而定。
要點出來的主要差異在於,Jupyter Notebook 給的工作模式相當特別,雖然不知道他這麼設計是不是想要達成像 Debugger 般的體驗,但將 Debugger 運作簡化了。程式執行起來,先「停著」,等使用者去執行 Cell。如果不是一開始就選擇執行全部的 Cell,那就等於每一段都是 Debug 的單步執行。
這麼做非常適合需要「看情況」再調整後續邏輯的程式,特別是我們在探索資料時,依著上一段程式執行完,看到了結果後。也許後續有點邏輯還是參數想要調整,基於每一步都等待你執行的設計,你有機會把它微調後執行。
對比到我們正規的程式開發流程,多是先寫好程式一次跑完,如果有錯誤就噴錯,或是跑完看看結果對不對。不對的話,由 log 看看有沒有機會分析出哪邊的邏輯寫錯了,試著修改程式。再「重頭跑一次」,再看看結果。如果反覆幾回都不太滿意,那就設 Breakpoint 開 Debug mode 看看細節。
這是 2 種相當不同的開發風格,在沒有 Jupyter Notebook 這樣的工具前,沒有這樣的工具嗎?有其實就是依賴著各家程式的「互動模式」,可以一邊試一邊改程式,但「互動模式」操作上挺難用的,不適合「長時間操作」也沒有好用的「編輯功能」,不小心關掉東西就要重打了。
將這種「互動模式」寫寫改改,驗證想法的功能,搬到使用網頁技術的場景,製成了 Jupyter Notebook 的使用型式就是如此合理的結果了。
## 基於任務目標,選擇適合的工具
經過上面的剖析,我會這麼想:
如果你的程式的「終點」已知,想法已經驗證過了,只差老老實實地實作出來,那就採用一般的開發模式實作它就好。
換言之,你的「程式」要寫成什麼樣還不確定,你需要一點「不知終點在哪的探索期」並且最好能有一些視覺化的功能,那就該使用預設「單步執行」「強大視覺化能力」的 Jupyter Notebook,都把「戰霧」掃光,開好圖了之後,把程式變成「正規的軟體專案」。
其實,我在寫 Python 為底的爬蟲蠻常用 Jupyter Notebook 的,可以把 html 印出來,再用不同的 Cell 慢慢試不同的抓法,最後才會慢慢搬整理成 Python model。
PS. 若要舉個跟 Jupyter Notebook 相近的例子,我大概不會選 VSCode 作比較對象,而是拿預設也是單步執行的 R Studio 來看。


