在前兩篇裡我分享了我寫程式時的頭兩個步驟:「釐清輸入/輸出」和「定義輸入轉輸出的步驟」。如此一來我們心中就可以對整個程式的大致結構有了個底。
今天我要來介紹的是第三步:根據每一步驟,列出其「中介輸入」和「中介輸出」。
經過第二步的處理之後,我們的大程式變成了一個一個的步驟(後面我會將這些步驟稱為「程序」以免造成混淆),這樣做的好處是它們的輸入與輸出也就相對應的變成簡單的形式,處理起來變單純,你的思緒清晰不易打結,程式也變的好寫。
第三步的實行內容也很簡單,就是把每道程序的輸入和輸出一個一個列出來,看看最初輸入經由第一道程序之後的輸出會是長的什麼樣?它是要用變數、list 還是 dict 來儲存?是存在檔案中還是資料庫裡?形式愈簡單愈好,只要能符合該道程序的需求即可。後面的程序以此類推。
有時我們在寫程式時會太在意最終結果的格式,在產出的過程中就準備了那樣複雜的結構來儲存各程序的結果,比如說一個龐大的 dict 或 class。但是一個大型的結構操作起來很燒腦,也容易造成失誤,導致資料亂成一團、bug 也一堆。
我不喜歡 bug,想必你也是!要將 bug 的生成機會降至最低的方法就是把整份資料依照程序的順序來切開,一次只專注在每一道程序的輸入及輸出。當輸入/輸出的結構變簡單、程式就變的好寫,資料操作起來不複雜不燒腦,bug 自然也就很難存活。
這有點像在導航,起點到終點並非一直線,你得經過好幾個左轉右轉、上橋過地下道,有時甚至得轉換交通工具才能到達。
但你是否有以下的經驗:規劃旅程時太天真,以為只要搞定高鐵或飛機票就好,但沒料到從車站或機場抵達目的地的動線有多複雜,結果慌亂之下有什麼就搭什麼,有時還得徒步走一段路才到得了?這就是沒有想清楚旅途中繼站的後果。
好在規劃每一段的交通方式並不複雜。有時它們之間的關聯性很低,你在搭高鐵之前是坐計程車,在高鐵之後是騎 Ubike。搭計程車是用現金支付,騎 Ubike 是刷悠遊卡,那麼你在搭完計程車之後就可以把零錢收好,因為之後用不到了。倘若今天頭尾兩端都是需要用悠遊卡支付,比如說公車和 Ubike,那麼你應該會在第一段搭完之後,就把卡片收在方便取用的地方。
寫程式時準備資料也是同樣道理,因為我們已經經過第一和第二步驟,釐清了輸入輸出與各項程序,因此你事先就能知道怎樣處理資料是最合適且最有效率的!
以上就是第三步的規劃方式。這樣的過程是否讓你覺得寫程式似乎並不如想像中的那麼困難了?歡迎在下方留言說說你的感想。
Top comments (0)