前一篇文章中我提到了規劃程式流程/架構的重要性。假如我們沒有作出適當的規劃就咔咔咔的開始敲打鍵盤(程序猿?🐒),常常會導致走錯方向而浪費寶貴的時間。
同時我也介紹了解決方式的第一步——【釐清「最初的輸入」和「最終的輸出」】。因為在現代講求快速開發的氛圍下,往往客戶或主管的心中對於最終產品的模樣也都還沒有定案。身為一個工程師,你的責任是幫助他們釐清重要的環節,同時也能減少自己的工作量。
今天我要講解的是第二步——【定義要如何從輸入轉變成輸出的「步驟」】。這可以幫助你把急於實作的念頭抽離,並將精力集中在思考上。
由於我們腦子的運作方式非常容易落入「一見鍾情」的陷阱,第一個出現在腦袋瓜裡的步驟和解法就會當作是正確且唯一的答案。但現實經常與之相左,總是要費九牛二虎之力才能⋯⋯承認自己想錯了!
解決辦法是要先能認知到一個事實:輸入得經由一連串的幾個動作才會變成輸出。就算泡泡麵也並非倒入熱水就能吃,也是要先打開包裝、撒調味料、沖入熱水和等待5分鐘等動作。如果你搞錯了順序,就連簡單的泡麵這檔事你也有可能搞雜(像是調味料包跟著一起泡熱水)。
因此在這個步驟裡,你首先要釐清的是從輸入變成輸出的過程中,有哪幾項重要的動作要執行?順序可不可以調換?有先決條件嗎?需要套用演算法來幫助解題?最重要的是:是否存在多種方法來實現這些流程?
以我個人工作經歷來說,有一次我接到的案子是要設計一個程式來量測我們產品的效率。我最初的規劃步驟是創建環境、創建數據的收集和輸出、啟動模擬器、啟動壓力測試、收集測試數據,最後是輸出測試數據。
後來我發現啟動模擬器需要佔用大量的時間,因此決定將這個步驟挪到前方,啟動後丟到背景去跑,主程式就可以繼續做其他事以節省時間。但它又不能放在第一步,因為那時環境還沒生成,所以先決條件是環境先、模擬器後。
也因為模擬器是愈早跑愈好,所以「創建數據的收集和輸出」的次序就要往後。但「收集數據」的部分又有時效限制(這是我一開始沒想清楚的部分),因此也不能移到太後面,於是我就把這個步驟再切細為「收集」和「輸出」兩個動作,並且把「收集」與「創建」合併。於是最後的流程就變成了:創建環境且收集數據、啟動模擬器、啟動壓力測試、收集測試數據,最後是將創建數據和測試數據一同整理成報表輸出。
如果我在開始寫程式之前沒有先好好思索執行步驟,那麼面對這樣稍微大一點的程式,寫到一半才發現此路不通的情形也就是可以預期的了。雖然我一開始的規劃並不完美,思路也沒那麼清晰;但我保有警覺性,發覺自己正在走向錯誤的道路時,及時回頭免去冤枉路的時間。
現在你知道制定良好的步驟可以省去你白白寫 code 的時間——畢竟重寫愈少次,就只有較少的 code 需要 debug,沒錯吧!?那麼你是否願意花多一點時間來作規劃而不是忙著對鍵盤敲敲打打呢?歡迎分享你的想法,或是過往的痛苦經驗。
Top comments (0)