邊做邊學1
臉書位於 Menlo Park 的總部有著一張海報,上面斗大的標語寫著:
MOVE FAST AND BREAK THINGS.
臉書當時的文化鼓勵員工勇於嘗試、快速地學習又快速地失敗, 藉此做出即時性的修正。 避免太過保守及害怕犯錯的態度。
而快速地迭代去即使修正錯誤(bug),則需要一些工具的輔助,CI/CD 2 就是其中之一。
投資能節省時間的工具
工具可以幫助我們增進效率,就像在寫 code 的時候,秉持著 DRY 3 原則一樣,重複性的事情,就應該交由工具來處理。
動手打造能夠節省時間的工具。
短期看來,可能因爲花了額外的時間來開發這些工具而減少了原本開發的時間; 而長期的成效很難在短期内看出優勢。 因此,我們要從小的地方開始著手,等到有一點成效之後,在將範圍擴大。
越節省我們時間的工具,會用得越頻繁。(因為阻力越小) Edmond 舉例:「若要從舊金山前往紐約旅行只能搭火車,而且要花上一個星期的時間,我們可能不會太常旅行。但自從 1950 年代開始出現了客機的選選項,人們變成可以每年出去旅行很多次。」
節省時間的工具,並非只節省一個人的時間, 若這套工具節省一人每天 1 小時的時間, 整個團隊若有 10 人在使用, 它就每天幫團隊節省了 10 小時的時間。
熟悉開發環境
善用快捷鍵來節省時間
也許一開始因爲要適應新的習慣或是方法,必須更耗時間,看起來不但沒有省,反而更費時間、但這只有一開始。 例如一開始學習盲打,一定很慢、看來很沒有效率,一旦熟悉之後,絕對能夠增進工作效率。 沒有人一夕之間就可以精通一項技能,都是要靠時間的累積、不斷地練習才有辦法上手。
書中的對於精通是闡述:
精通是一個過程,而非事件。4
這裡提供打好程式基礎的一些方式:
- 找一個符合喜好、使用習慣的開發軟體(IDE)
- 學習一個高階的脚本語言。脚本語言的優勢就是可以節省編譯的時間,此外,高階語言的語法更加精簡好閲讀。
- 熟悉 UNIX 或 Windows 的 shell 指令
- 多用鍵盤,少用滑鼠
- 將自訂流程自動化:當一件事重複做三次以上,是時候思考是否值得自動化
- 將想法與思考流程用脚本語言實現
別忽視工程領域以外的瓶頸
除了增進開發的迭代速度之外, 非技術面遇到的問題也同樣會影響我們的開發進度。
例如產品經理遲遲沒有確定客戶需求、設計師尚未提供一個重要的 UX flow, 或其他團隊沒有準時交付我們需要的功能,因此無法繼續開發下去 ⋯⋯ 等等。
非技術方面的問題同樣也會影響到我們的工作時程, 因此也不容忽視。
結語
本章我有兩個很深的體會,分成兩部分:
開發測試工具
最近因為工作需求,開始接觸自動化測試。 我主要是寫 UI 的自動工化測試(jest 搭配 puppeteer), 也就是用程式模擬使用者的操作行為。 在寫自動化測試當中,也體會到工具的重要性。 就如上面強調在自動化工具上的投資,自動化測試也是能夠節省很多重複性的枯燥工作。
一開始寫測試的時候,會覺得非常耗時,幾個簡單的滑鼠點擊動作,花了將近一天的時間。(也可能是因為我太廢 🙈)
但我們都知道萬事起頭難,然而當我完成了一小段,再加上迴圈去重複大量相同的測試案例(test case)的時候,我深深感受到它的強大! 花很多時間辛苦寫一次測試案例,但往後的一百次、一千次,甚至更多,都不用再手動按照測試案例流程點擊網頁分散各處的 button 與 link、肉眼檢查顯示的文字、數字是否正確,因為程式會幫我做到!🤘
我知道這是廢話,自動化測試就是這麼回事,但當下還是非常感動! 測試寫出來了,也節省了往後很多本來拿來手動驗證、測試的時間,可以拿來做更多有意義的事。
然後可以把 QA 給開除惹(誤)
盲打的重要性
我曾是那個上電腦課只知道打遊戲的大部分小學生, 然後在幾年前,才來後悔當初沒有好好聽老師的話好好練習盲打。(玩過「注音快槍手」的舉手 🙋)
也因此特別去練習英打,為了提升開發速度。 而現在,我完全不覺得當初的這項投資是浪費時間 也很感謝自己沒有一開始就放棄 😂
題外話是,中打的部分,也在前幾年因緣際會下,果斷放棄台灣人非常熟悉的注音輸入法, 開始學習「拼音輸入法」5,而這又是另一段故事了 ⋯⋯