美思 技術雜談:簡明重現範例的重要性

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

SSCCE (Short, Self Contained, Compilable, Example) 是指能夠展示某個概念的簡單範例,筆者暫且稱之為簡明重現範例。在程式設計討論區,程式碼也是用來溝通的一環;然而,筆者在一些程式設計討論區,時常看到不良的反例,往往都是因為撰文者缺乏 SSCCE 的概念。筆者有感而發,因而撰寫這篇文章,希望對於程式設計學習者有所幫助。

有些程式設計初學者可能真的不知道如何撰文,只寫了一些關於自己如何操作電腦等模糊的敘述,有時候還會帶有一些情緒的字眼,像是「很急」、「救救我」等,文章中完全沒有任何可用的程式碼。說實在的,由於幾乎沒有可用的線索,即使想幫忙,也沒有未卜先知的能力。最後這種文章通常得不到什麼有意義的結果。

有些撰文者很天真地貼了某個部落格文章 (blog post) 或線上教程 (tutorial) 的連結,說「我照這個文章的方法去做,但是出錯了,怎麼辦?」這樣說了幾乎等於沒說。程式是照自己寫的程式碼去跑,不是照自己想的流程去跑。即使我按照 Introduction to Algorithms 或其他聖經本的演算法撰寫程式,不代表我的程式就是對的。想當然爾,這樣的文章也幾乎得不到實質的結果。

有些撰文者會用貼圖的方式來呈現程式碼,這是一種很糟榚的呈現方式。讀這篇文章的人還要重新打一次程式碼才能重現原先的問題。說實在的,程式設計討論區是自發性的社群,提問和回答多是自願性質的。這樣不尊重回答者的撰文方式,怎麼能夠期待得到良好的回答?筆者看到這類文章,通常都是直接忽視,或是噓文一下。

有些撰文者直接在討論區貼程式碼,由於台灣仍有 BBS 討論區,這樣的呈現方式其實也不是很好。首先,程式碼沒有顏色提示,閱讀起來比較辛苦;此外,如果程式碼很長,超過一面的量,需要上下捲動,其實也是蠻辛苦的。不過,願意貼程式碼,算是好一點了;筆者通常會提供一些貼靜態程式碼的網站,像是 Pastebin.com、GitHub Gist、pasted.co 等,希望撰文者下次可以用更好的方式呈現程式碼。

最好的方式,仍然是製作一個 SSCCE。這不僅是對回答問題者的尊重,同時對自己也有幫助。在製作 SSCCE 的過程中,其實已經在進行初步的除錯 (debugging)。除錯的過程,就是在逐步地縮小問題的範圍,在製作 SSCCE 的過程中,有時候問題就自然而然解出來了。製作 SSCCE 不代表問題一定有解,筆者的經驗是,若是程式外部的因素造成的,不一定可以馬上解決;至少,我們可以知道這條路行不透,趕快再換一條路。

透過本文,相信讀者已經對 SSCCE 有一些概念。希望讀者都能夠透過運用 SSCCE 順利解決自己的程式問題。