圈內常有個笑話是這麼說的:「程式設計師的美德就是懶。」因為懶,所以盡量所有的事情都交由程式去協助完成,甚至連程式執行都靠排程去完成,盡量一切事情都自動化處理,這樣才可以享受慵懶。雖然是個笑話,但也切實扼要,程式設計師的確該盡力追求自動化,除了讓流程變標準化、減少錯誤的發聲外,更重要的事讓自己的產能能用在更迫切、或是更需要的地方,也透過自動化減少負擔,讓自己有更多的休息時間,以在需要開發時,能輸出更有品質的成果。
比起其他行業,在軟體開發這行追求自動化是相對容易的。我們有辦法自己編寫程式去幫助我們完成重複性高的事務。而程式設計本身,也剛好有許多事情是可以被自動化的。隨著開源資源越來越豐富,也有越來越多工具輔助我們以比以前更低的成本建置自動化的程式。在這些優勢下,我們更應該把握去追求自動化
從個人面最簡單的起始點,莫過於善用工具,比如說我們可以從寫程式時透過 Linter 幫忙檢查程式碼風格、善用 make 腳本或是諸如 webpack 的工具幫忙建置程式。進一步的,可以利用知識自行編寫相關腳本或程式去達成目的,例如透過正規表達式協助搜尋與取代、設定排程與腳本去執行定期要做的事情、編寫單元測試幫忙檢測程式行為是否符合預期結果、編寫程式去協助自己分析資料等等。這些讓重複且瑣碎的事情,能夠多思考如何透過程式幫我們完成,是一個不錯的開始。
在團隊面,最重要的自動化莫過於協作相關的部分。為了能讓團隊共同維護的程式碼有良好的品質,並且避免會崩潰的程式碼被併入主線,建立 CI 去進行相關自動化管控是必要的。透過 CI,我們可以原本個人本機上有關自動化的操作透過 CI 伺服器自動化協助執行,並且能將執行結果公開透明、讓團隊都能同步資訊,減少溝通成本。提出 Pull Request 時,透過 CI 自動檢查程式碼風格,能 Code Review 專注在功能與架構、透過 CI 執行所編寫的自動化測試腳本,讓我們不用再把程式拉下來自己跑過一遍才敢合併、透過 CI 將合併主線程式碼建置一份執行檔、或是直接部署到對應的伺服器,更是省下 DevOps 產能的消耗。透過自動化,能讓團隊更專注在產品開發以及更深層的交流。
雖然自動化好處很多,但是最難地方莫過於建置自動化。最常遇到的情境是盡管研發人員彼此都知道自動化的好處,卻被安排下來的工作壓得喘不過氣來,沒有餘力再進行建置。這時候會建議採用前面技術債管理的方式,讓一個週期的開發固定排一項將重複性工作自動化的項目去執行。透過這種兼顧價值產出的折衷方式,加上對上級主管說明自動化能帶來的好處,像是功能寫完到部署的時程能夠縮短、不用再擔心部署前會因為有太多人工成分所隱含的變數造成錯誤等等。
在軟體開發上,我們只有發現有事情是有重複性質的,而且在未來會持續發生,就應該要有想要將其自動化的敏感度與渴望。為了讓我們自己不被這些繁瑣且高耗產能的事情壓得喘不氣,要求自己或團隊撥出一部分的產能去研究如何自動化是唯一的解決之道。透過逐漸地將這些事情的自動化,才能將更多的人才從無意義的「勞役」解放,才能讓我們有更多時間進修成長,進而提升團隊的產能與產品的品質。