More Effective Engineer

農曆年假 Day 3,聽 Edmond Lau 講 The Effective Engineer 的筆記。每個人一天能夠擁有的時間就是 24 小時,有些開發者就是有辦法投入較少成本去獲得、發揮更大的效益。

首先,需要先打破華人特有的迷思,hard working。

在成長過程中,不斷會有老長輩在你耳邊告訴你,要更努力才能獲得更多的成功。這種傳統農業社會的思維概念很顯然的已經落伍,能夠影響結果的因素何其多,而個人投入的努力只是一部分而已。這並不代表不努力的人會擁有較高的成功機率,而是我們體認到每個人所有的資源是有限的,如何利用有限的成本去創造最大的價值才是我們需要重視的。

Effort ≠ Impact

Edmond Lau 觀察到有效率的工程師都會做這五件事。


Optimize for learning

學習並不是積沙成塔的線性概念,而是每一點滴的學習成果,都會加速日後的學習速度。讓學習變成一種指數成長的趨勢。就像理財投資,同樣的利率,複利滾動會有很可觀的結果(卡債也是這樣來的…)。如果每天不斷地學習讓自己成長1%,經過一年365天之後,跟一年前的自己比起來,是成長了37.8倍啊!所以從現在開始養成習慣,每天都要給自己定下一些學習計畫與目標。


Invest in iteration speed

為了要加速自己的迭代速度,最常見的方式就是投資自己熟悉使用工具來處理解決問題。對工程師來講,每個人幾乎都有一組自己習慣順手的工具箱,並且不斷地維護、擴充與客製化。有些把編輯器設定成符合自己操作的介面,操控起來像是神乎其技。如果目前找不到一套合用的工具,甚至自己寫一些工具解決困擾。


Validate ideas aggressively & iteratively

將面對的課題拆分成較小的單元體,對獨立的單元做邏輯上的驗證推衍,確保不投入過多不必要的成本造成浪費。我們在做決定的當下,其實會對問題做一些前題假設,往往這些前提是在尚未被驗證的情形下被提出的,所以如果是根據這些前提做決策,基本上就是一種賭博。決策後的修正成本往往遠高於決策前對每個前題假設的驗證成本。


Minimizing Operational burden

將事物簡化,避免過多繁重的累贅。複雜度有分好多個層次,從程式碼到系統到企業組織,每一層都需要投入成本去維護。在做決定的當下,應該要先考慮到是否有更簡化的做法。如果能夠用同樣簡單的方法就能解決的問題,何必使用複雜的系統增加未來淺在的風險呢。


Build a great engineering culture

有效率的人喜歡在有效率的環境下作業,喜歡整個開發環境與流程都是有效率地進行。為什麼要有良好的 code review 文化,因為可以創造更多彼此學習機會。為甚麼要用 CI 跟 git 版本控制,因為可以避免很多重複的操作。為什麼喜歡 unit test 自動化測試,因為可以把複雜的東西拆成小元件去分開驗證。為什麼要有技術文件,on-boarding 流程,因為可以降低許多流程的複雜度。這樣的文化,可以幫助整體成員提升產值。不只個人有效率,團體也可以有效率。

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.