9月17日
食譜上寫著 PT2H30M,而你家那鍋滷肉早就會算時間了
一篇講時間段驗證的技術文章被我們翻譯成廚房裡的火候時間學,燉兩小時三十分、醃三天、醒麵半小時,食譜裡的時間其實很有學問。
九月十四日,掘金上有一篇技術長文被工程師們轉來轉去,內容是開源驗證工具 ValidX 裡的「時間段」驗證怎麼用。文章開頭舉的例子很有意思:影片時長不超過十五分鐘、優惠券有效期三天、任務最多重試兩小時三十分。工程師的世界裡,到處都是「一段時間」需要被嚴格定義。
技術文章講的是 ISO 8601 標準格式,寫成 PT2H30M、P1DT12H、P1Y2M3D 這種像密碼一樣的字串,還有一套人類比較看得懂的簡化寫法,2h30m、1d12h。文章裡特別提醒一件事:PT2H30M 代表的是「兩個半小時」這個長度,跟「兩點三十分」那個時刻完全是兩回事。
這句話讓我放下手邊的事,想起廚房。
時間點和時間段,廚房分得比誰都清楚
你翻開任何一本食譜,會發現裡面的時間分成兩種。一種是時間點:「水滾後三分鐘下麵」「烤箱預熱到兩百度」「起鍋前撒蔥花」。這些是行事曆上的記事,告訴你什麼時候做什麼。
另一種是時間段:「低火燉兩小時三十分」「醬油醃三天」「麵團醒半小時」。這些說的是一段長度,至於從幾點開始,食譜不管,你的日子也不必管。週六下午開始燉可以,週日一早開始燉也行,鍋子要的只是那兩個半小時本身。
技術文章裡那個經典的混淆,正好是廚房新手最常犯的錯。有人看見 PT2H30M,讀成「兩點三十分」,就像有人把「燉兩小時」理解成「兩點的時候看一下」。一個是長度,一個是刻度。滷一鍋牛腱,計時器從你轉小火那一刻開始走,走到兩小時三十分才停,中間你去接小孩、去洗澡、去看一集劇,都沒關係,時間段是累積的,它不錨定在任何一個日曆位置上。
這也是為什麼老一輩的廚師不太用時鐘。他們用筷子捅牛腱的阻力算時間,用湯面的狀態算時間,用鼻子聞香氣的濃淡算時間。那是一套活在身體裡的時間段系統,精確度不輸給任何標準格式。
::note 這裡本該有一張圖,但我們說好純文字。::
每個家都有一套自己的時間寫法
技術文章抱怨的問題,其實每個家庭的冰箱門上都發生過。有人貼的便條寫「滷蛋泡 1d」,有人寫「泡一天隔夜」,有人寫「放到明天晚上」。同一個家、同一鍋滷汁,三代人三種記法,隔幾年回頭看,誰也搞不清當初那張紙條到底是指二十四小時還是「明天想起來再說」。
工程師管這叫格式不統一,解析全靠運氣。奶奶管這叫,啊就泡久一點啊,有差嗎。
說實話,大多時候真的沒差。滷蛋泡十四小時跟泡二十小時,味道的差距在筷子夾開蛋黃那一刻才勉強看得出來。但有些東西就差很多。糖蒜要醃滿一個月才能開罐,提前開是辛辣的失望;酒釀三天是甜、五天是酒、七天就往醋的方向去了。這些時間段不容糊弄,早半天晚半天,是兩種食物。
所以每個會做喫的人,心裡都有一張自己的時間對照表,跟那份 ValidX 的有效無效對照表沒有本質區別。三十年不叫 30m,叫一個月;十五分鐘不寫 0.25h,寫「一首歌的長度」。我母親燉雞湯的單位是「兩集八點檔」,這個換算我到現在還在用,而且意外地準。
為什麼「月」和「分鐘」會打架
那篇技術文章花了一整節講一個坑:簡化格式裡,m 代表分鐘,mo 才代表月。2m 是兩分鐘,2mo 是兩個月,差了兩萬多倍,寫錯一個字母,一個任務的重試期限就從倒杯水的工夫變成半個春天。
廚房裡的對應版本,是你一定遇過的「醃 3d 到底是三天還是三小時」之爭。我見過朋友把「醃 1h」看成「醃 1d」,一塊雞胸肉在醬油裡泡了一整夜,撈出來鹹得像標本。也見過相反的,本該過夜的滷味只泡了一頓飯的時間,切開來,裡面白白的,味道全留在湯裡。
單位寫清楚這件事,在廚房裡救過很多鍋湯。後來我家的冰箱便條強制規定格式:數字加單位,單位寫全,分、時、天、月,不用符號。自從這樣寫,家裡再沒有出現過那種「你說的泡一下是泡多久」的爭執。
這跟工程師把時間段統一成標準格式是同一種溫柔。格式存在的意義,從來不是刁難人,是讓寫的人和讀的人,在同一個時間裡相遇。
空值也有它的道理
文章裡還有一小節講空值語義,什麼情況下空的時間段算合法。這聽起來枯燥,放到餐桌上卻很好懂。
有些菜根本不需要時間段。「燙個青菜」,燙到顏色轉深就好,計時是多餘的。「加鹽少許」,少許是多少,是你的舌頭說了算。中餐食譜裡大量存在這種沒有數字的指令,外國朋友拿著翻譯軟體對「適量」二字發呆,我們卻看得心領神會。
那是另一一套系統了,靠手感、靠經驗、靠這道菜你做過幾次。技術文章裡叫空值通過,廚房裡叫,你做兩次就知道了。
但反過來,真正需要精確的地方,老師傅反而比你我都固執。做碗粿的米漿比例,做鳳梨酥的奶油溫度,煮糖到幾度是軟糖幾度是脆糖,這些時間與溫度的時間段,一代一代傳下來,改一個數字就是另一家店。精確與模糊共存於一間廚房,這大概就是做菜最迷人的地方。
把時間寫進你的下一張便條
那篇技術文的結尾列了幾個典型業務場景,影片時長、優惠券期限、任務重試。我讀完的感想是,家用食譜也值得來一次這樣的整理。
找個週末,把家裡那些口耳相傳的時間段寫下來。阿嬤的滷肉是兩小時三十分,爸爸的滷味要隔夜,你自己的拿手湯是四十分鐘。寫的時候把單位標清楚,別讓下一個開火的人猜。
幾年後你會發現,那張紙條上記的從來就不只是時間。兩小時三十分是某個週六下午整個家的香味,三天是等一罐糖蒜時每天開櫃子看一眼的心情。時間段在程式裡只是長度,在廚房裡卻總是掛著某個起點:誰開的火,誰守著爐子,誰在時間走完的時候喊了一聲,喫飯了。
ValidX 用一個 P 開頭的字串定義時間段,你家廚房用一鍋慢慢滾的湯。標準不同,目的很像:都希望那段時間,被好好地走完。