邊做邊學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,而這又是另一段故事了 ⋯⋯


  1. 原文是 Move Fast to Learn Fast ↩︎

  2. Continuous Integration / Continuous Deployment,持續整合、持續部署 ↩︎

  3. Don’t Repeat Yourself ↩︎

  4. Mastery is a process, not an event. ↩︎

  5. 沒錯,就是中國人普遍使用的那種輸入法 ↩︎