🧵 讓所有程式將內部資訊列印成圖片,這樣你和大家的生活就不會那麼糟了;✨ 一個貼文 ✨
我寫的幾乎每個程式都可以以某種方式轉儲其內部狀態。 如果說我希望你從這個帖子中記住什麼,那就是你可以把這些應用到你自己的程式中。這並不需要很複雜!
我不是指像這樣。 你一定看過這種鍊錶風格的圖,用指標表示箭頭,用小符號表示 NULL 值等等。這種圖在討論實作細節時非常有用,但在學習之外,你很少會用到它。 圖片來源:摩西‧埃菲翁‧埃克彭永
特別感謝布魯克林學院 CISC 3130 課程,他們繪製的鍊錶圖太棒了! 🚂🚃🚃 資料來源:https://t.co/VTw0qbKDXA
從更高的抽象層次來看,顯示 ADT 的內容是否有意義? 可能不行。最好展示一些對你的程式更有意義的內容。有時這指的是單一資料結構的內容,有時則指的是一對資料結構之間的關係。
我常做編譯器相關的工作,但這個理念也適用於其他領域。 編譯器之所以分階段運行,*是因為*每個階段運行的資料都不同。所以,把這些數據輸出出來似乎很自然。 只需在命令列工具中添加一個標誌即可!就這麼簡單。
這是早期 Unix shell 的一個結構。我的程式展示了語法樹和層級符號表之間的關係,符號表是在解析過程中同時填入的。希望你能看出它們之間的關聯。
你看,我沒有展示它們的儲存方式,只展示了它們包含的內容。這只是內容,不涉及這些特定資料結構的實現。這種抽象層次對於偵錯程式的其他部分來說是合適的。
這是來自另一個程式的樹狀圖。這是一個來自 C 和 C++ 編譯器的中間表示 (IR)。 除非你在調試這部分程式碼本身,否則實作細節只是無關緊要的雜訊。
這些結構可能非常龐大!但即使縮小視圖,看到物體的大致形狀也能幫助你進行除錯。當你熟悉之後,情況就不同了。 透過觀察事物的外觀,你可以發現變化中的規律。我們的大腦很擅長這一點!
關於程式結構:首先要確保資料結構正確。代碼本身只是次要的。 程式碼更容易修改 數據設計很容易滲透到各個方面。 這就是為什麼將其限制在階段(或模組或其他任何形式)內很重要的原因。
對於有狀態守護進程,新增一種透過 IPC 查詢目前狀態的方法。 請在程式之外進行渲染!
輸出格式可以是 graphviz、json、簡單的 TSV,或任何最適合您資料的格式。 以*簡單*格式列印,使用外部工具進行渲染。
僅僅因為你有一個程序,並不意味著你的程序就應該負責所有這些事情。把事情分開處理!使用不同的程式語言。 我用的是awk。你可以用你喜歡的任何語言。
JSON 是使用不同語言的團隊之間很好的通用資料格式。如果你從事商業項目,可以把它當作社交黏合劑,這樣就能為你贏得首席工程師「團隊協作」的加分。
顏色應保持對色盲人士友好,且僅用於傳遞功能訊息。我喜歡 Bang Wong 的配色。 https://t.co/XtUlGdalOb
工作流程至關重要,無論是資料取得還是視覺化。如果需要做很多步驟才能看到最終結果,這會打斷你正在進行的工作,那就毫無意義了。 下次我會試著寫一些關於這方面的內容。 保重,感謝閱讀。











