拜物質充足之賜,我們的社會充滿著拋棄式商品:拋棄式隱形眼鏡、拋棄式床單、拋棄式手套、拋棄式針頭、拋棄式筷子……。

拋棄式商品有別於一般商品,其生命週期相當短,可能使用一次就會丟棄,因此比較不需要講究耐用程度,而是以節省成本、方便目前使用為主要目的。但拋棄式商品卻很浪費資源,在環保意識高漲的今日,拋棄式商品成了被檢討的對象。

但如果拋棄式商品是電子檔案,就不會有環保的顧慮,例如拋棄式電子郵件信箱。我自己也常常製造出「拋棄式程式」,來幫我做一些雜事。「拋棄式程式」的好處是:寫完就用、用完就丟,不會覺得可惜。

我知道有許多專門的軟體可供使用,但我還是習慣自己寫拋棄式程式,因為拋棄式程式並不難寫,一來可以持續訓練程式能力,二來也能夠客製化,打造出比套裝軟體更適合自己需求的軟體。

我常用到拋棄式程式有:
學習過程的練習:學習新語言與新API(Application Programming Interface,應用程序介面)時,有時候書上的解說不清楚,這時候最好馬上寫程式做實驗,並將實驗結果寫下來,註記在書本上。

測試演算法可行性:如果你想確認測試演算法是否可行,效率是否OK,這個時候,就可以寫拋棄式程式。我們在詳細規畫一個軟體專案的過程中,常常會需要寫一些拋棄式程式,來進行演算法測試、概念實證(Proof-of-Concept)。透過拋棄式程式提前進行嘗試,可以避免做出不切實際甚至不可行的規畫方案。

複雜條件尋找檔案:雖然作業系統中有各種工具可以幫我們尋找檔案,但是這些工具都相當制式,不見得能完全符合我們的要求,尤其是有相當複雜的邏輯條件時。這時候,我就會花個十幾分鐘寫個拋棄式程式,針對自己特殊的需求來進行檔案搜尋。

備份資料、列出統計:雖然備份資料的專業工具軟體相當多,但是我覺得備份資料是小事,可以自己做得來,花點時間撰寫一支程式,便不需要特別去安裝專業軟體。而且我可能有特殊的備份需求,或備份後需要有特殊的統計報表(例如,內容或名稱完全相同的檔案列表),這是一般備份軟體所沒有支援的。

剖析檔案、轉換格式:我經常需要剖析檔案內容,有時候是二元檔、有時候是文字檔,以取出其中我要的資訊;或者做檔案格式的轉換、兩個檔案內容的差異比對(diff)。

自動索引代換:我翻譯的書都會附上索引,這些索引是我利用拋棄式程式,將「原始索引檔」加上「中英文頁碼對照檔」轉換出來的。我還可以利用拋棄式程式整理出翻譯詞彙表。

整理新聞、過濾資訊:面對網路上一大堆的資訊,寫個程式幫你進行過濾會是個省時省事的做法。它可以固定連線到幾個新聞網站,將滿足搜尋條件的新聞傳給我,條件可以是關鍵字比對符合的新聞、最多人閱讀的新聞、頭條新聞、氣象報告等。

下載網站、影音資料:想要下載某個網站的全部內容?寫個小程式,執行網站內容下載,並修改超連結到目前的磁碟機,以後你就可以「離線瀏覽」該網站了。

檢查網站:為了避免設計的網站有問題,你可以寫一個拋棄式程式,檢查有沒有出現斷裂的超連結(broken link)或者SQL-Injection的漏洞。

我的拋棄式程式大多用在處理檔案與網路資料。如果你的拋棄式程式經常需要處理文字內容,最好具有高階的文字剖析能力,如果能夠自動剖析XML格式會更方便。如果你經常需要從網路上取得資料,程式最好具備常用的網路協定,如果能處理JavaScript更好。

當然拋棄式程式不只侷限於處理檔案與網路資料,但無論如何,拋棄式程式必須具備以下特點:

● 只具有文字介面,不具有GUI(Graphical User Interface,圖形使用者介面)。用完就丟的程式,不值得花時間做GUI,寫GUI的部分通常很花時間。如果有輸入輸出的需求,透過標準IO(stdio)進行即可。

● 程式很短,幾乎都只有幾十行。上百行的程式,往往已經耗掉開發者不少的時間,這樣的程式會讓人不太捨得丟掉。

● 最好用Script語言編寫。因為要快速開發,所以使用高階的Script語言會比使用編譯式語言更適合。而且最好具有互動式環境,如此一來,可以在寫拋棄式程式時,做一些敘述小測試。

拋棄式程式只是一個開端,會讓我們衍生出一些有趣的想法,開始改良它,進行參數化讓它的用途更廣泛,進行視覺化讓它操作更容易,改進演算法讓它效能更好……最後得到一個還滿耐用的程式,這就是編寫拋棄式程式時的意外收穫。

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。


Advertisement

更多 iThome相關內容