The 100 Day Project,100 天挑戰計畫
上週五,終於完成了為期一百天的挑戰:每天設計一個系統。
2018 新年剛過,我和前同事兼好友 Liz 約好一起進行 100 天的挑戰計畫。一開始選定主題就花了一段時間,考量到需要每天產出,主題必須要是讓我有動力每天完成、最好能幫助培養專業,我最後決定每天設計一個系統:包含系統的需求、預估耗用的資源,到設計系統的組成,每天記錄在筆記本上後拍照上傳到 instagram 上。這一百天裡,經歷了打球腳受傷、公司搬到新大樓、搬家到公司附近,有了終於落腳的感覺;橫跨了冬天、充滿櫻花的春季,一直到炎熱宛如台灣天氣的現在。
100 天倒數開始之前,我搜尋了系統設計的關鍵字,但沒有查到什麼書是針對 System design 、或是有系統介紹 System design 的,大多是網路上零星的 blog post 或 Youtube Video,像是 Design Uber 和 Design Messenger。我也找到一些整理了 System design 相關知識的資源,我常回去 refer 的像 System Design Primer 和 這個 。
倒數開始之後,我有時候會 panic 找不到當周或當天可以寫的素材,因為網路各處能搜的幾乎都已經被我翻遍了。執行這個一百天計劃最痛苦的地方,就在想不到當天可以寫什麼。我會在一個 spreadsheet 上追蹤每天必須要寫的主題和參考的連結,運氣好當我找到一個好的 resource 時,就能在 spreadsheet 上多加上幾天的預備材料,又能安心幾天了。有趣的是,隨著我做過的主題越來越多,我想到能寫的主題也多了起來。像是很多系統會用 ZooKeeper 做 Service Discovery,我就很想了解 ZooKeeper 是怎麼運作的?同理,in-memory caching 像 Redis 和 memcache 呢?不同的 NoSQL Database 在系統架構上有什麼共通點或不同?另一個收穫,是發現很多科技公司會在自家的 engineering blog 裡分享他們的系統實作,這個資源完全是 mind-blowing,除了可以避免自己花心力在已經有成熟解法的問題上,更能對比我的 team 的設計是不是有什麼可以改進的地方。所以,預先計畫固然重要,但你無法計畫所有的事情,反而有時候到了下一步會開啟更多選擇。當然也不能完全不計劃,不然每天都會在 panic 中度過。Go as you plan. Plan as you go. 可能就是我目前的策略吧!
Sometimes, all it takes is a little push. 沒想到一百天已經過去了,又回到思考下一個主題的階段,下一個 100 Day Project 就從總結過去的一百天開始吧!
Originally published at http://pretteyandnerdy.wordpress.com on May 15, 2018.