不擅表達,簡單講一下跟 Python 不同之處:
語言原生支援(由 compiler 把 async method 轉成 state machine 改變執行方式)。比起 generator + decorator 更直覺更不容易寫錯,我常忘記加 decorator 或是有多個 decorator 時不知要加在第幾個,而 async 或 await 沒寫就是編譯錯誤。
方便利用多個核心。Caller 遇到必須等待的 task 就先離開,之後根據 SynchronizationContext 決定由哪個 thread 繼續執行 await 之後的程式,可以是 UI thread 也可以是 thread pool 裡的 thread。
Event loop 不是必要的。GUI 程式才需要利用 event loop 繼續執行 async method。
感想:用過 async/await 後真的無法再回去寫 callback hell 和 promise 什麼的了... XD
題外話,我們公司的 front-end (nodejs ecosystem) 全部是交給 gradle build,從此開發者不用再自行安裝 nodejs,也不用管設定 PATH 或是 virtual env. 版本互衝那些啊哩不搭的鳥事。
Day 2 Note1 還沒有在這個 collection 裡,但點 Day 1、3 可以找到。
EDIT: 三天的筆記都進來囉
我們公司的系統都有寫 unit test,所以在追加功能和維護上都相對簡單 (就成本低一點,大家也比較敢改東西)。我自己寫了快十年的 unit test,這件事簡單說就是倒吃甘庶:一開始很累,因為要建一些基礎設施。到了中期稍微好了一點,但你還是會覺得有負擔。到了後期這負擔還是在的,但這個階段沒 test 還真的不曉得怎麼寫怎麼改了。(沒 test 通常就是照前輩流傳的 沒壞的東西不要去動 的準則去做了,想當然爾什麼功能都加不太上去)
沒 test 的 legacy code 這種債務我們很低,不過系統久了,其他地方還是會有債務的。我們去年花了一點時間還了一筆技術債,就是升級 Cassandra,從 thrift 到 CQL。大概花了一、二週寫了一些橋接的程式讓兩種 drivers 能共存。這筆債還了之後我們後來加功能就變得輕鬆很多,直覺好寫又不容易出錯,效能又變好。(大部份的人都對 Cassandra 不熟,我打個比方好了,改版的進步大約是一開始是純 js 的亂七八糟碼,然後後來導入 jQuery 那樣,巨大的改進)
這篇投影片的內容建議:你應當先清償債務利息最高的部份。說得真是好啊,把最大的路障移走後面自然快速通暢了。我上面的例子對我們單位來說就是清掉擋路的大石塊,爽得咧!當然這是一次成功的清償我才會拿出來臭屁啊,其實也有多次的清償都失敗的 (例如 refactor 後也沒什麼顯注改善之類...)