當(dāng)程序員學(xué)做飯,用代碼寫下100道菜譜

“西紅柿塊邊長不能超過4cm”
今年2月中旬,一份“程序員在家做飯方法指南”在GitHub——世界上最大的代碼托管平臺上走紅。
乍一看,它和常見的菜譜沒什么區(qū)別,但你點(diǎn)開每一道菜,會(huì)發(fā)現(xiàn)對用法用量的描述精確到了離譜的程度?!斑m量”二字是絕對不存在的,拿最常見的“西紅柿炒蛋”舉例,西紅柿塊,被具體為“邊長不超過 4cm 的小塊”,翻炒的時(shí)間被確定為“20秒”。
在“廚房準(zhǔn)備”的工具欄里,赫然出現(xiàn)了“天平”、“量筒”、“游標(biāo)卡尺”等工具,甚至還有一個(gè)“如何決策吃什么”的計(jì)算方式。

這份菜譜由一個(gè)95后程序員Anduin在2020年隔離期間發(fā)起,他在發(fā)起說明中說:
最近在家隔離,出不了門。只能宅在家做飯了。作為程序員,我偶爾在網(wǎng)上找找菜譜和做法。但是這些菜譜往往寫法千奇百怪,經(jīng)常中間莫名出來一些材料。對于習(xí)慣了形式語言的程序員來說極其不友好。
所以,我計(jì)劃自己搜尋菜譜和并結(jié)合實(shí)際做菜的經(jīng)驗(yàn),準(zhǔn)備用更清晰精準(zhǔn)的描述來整理常見菜的做法,以方便程序員在家做飯。
同樣,我希望它是一個(gè)由社區(qū)驅(qū)動(dòng)和維護(hù)的開源項(xiàng)目,使更多人能夠一起做一個(gè)有趣的倉庫。所以非常歡迎大家貢獻(xiàn)它~
誕生之初,這份菜譜只有7道菜——也是Anduin在隔離期間學(xué)會(huì)的全部菜色。在今年2月突然走紅后,吸引來大量的共建者,目前已經(jīng)累計(jì)到超過100道。
GitHub上一次吸引公眾的目光是在2020年冬天,一份“程序員考公指南”登上首頁,那時(shí),關(guān)于“996”、“內(nèi)卷”、“35歲危機(jī)”的討論剛剛開始。我采訪了那些準(zhǔn)備考公或已經(jīng)考上公務(wù)員的程序員,他們中有馬上35歲的公司中層,有報(bào)班學(xué)習(xí)三個(gè)月后自嘲成為“最底層”外包程序員的土木專業(yè)學(xué)生,也有來自C9大學(xué)頂級計(jì)算機(jī)專業(yè)的優(yōu)秀學(xué)生代表。
我忍不住問他們同一個(gè)問題:最初想做程序員的原因是什么?有沒有被程序員這個(gè)職業(yè)的世界性、開放性以及改變世界的可能鼓舞?
他們總是笑一笑,對我說:“可能有這樣的程序員,但自己不是,也沒見過?!?/p>
某種程度上,Anduin是他們口中的“那種”程序員,他樂于接受挑戰(zhàn),堅(jiān)信萬事萬物都有解決方案,也以此指導(dǎo)自己的生活。他不愿意做重復(fù)的事,一旦察覺到重復(fù)工作的苗頭,就會(huì)試圖“把它自動(dòng)化”。他用最少的精力面對選擇,從A到H一套一套標(biāo)記好自己的衣服。更重要的是,他相信程序員的社區(qū)精神,相信程序可以幫助我們走向更好更開放的世界。
以下是Anduin的自述。
程序員做菜指南
2020年年初,我在家隔離的時(shí)候決定開始做飯。
在此之前我只會(huì)泡方便面,所以最開始研究的也是炒方便面,因?yàn)楹脤W(xué),不需要研究如何配料,就從調(diào)料包里拿就行。
之后我又學(xué)了幾道菜,都是簡單的家常菜,什么西紅柿炒蛋、水煮肉片之類的。
學(xué)習(xí)的過程讓我很崩潰。網(wǎng)上的菜譜一是沒有被量化,總是“適量”、“適量”,二是好多東西有歧義,步驟中間會(huì)突然莫名其妙地出現(xiàn)一些上下文里沒有的材料,我沒提前準(zhǔn)備,直接就跟不下去了。這讓我很困惑,無法接受,我決定自己整理一份菜譜。
在確定一道菜譜前,我會(huì)自己做三四次。比如說我要做一個(gè)水煮肉片,我會(huì)先在網(wǎng)上搜三四個(gè)版本的水煮肉片,對比看看。如果三四個(gè)版本里都要加豆瓣醬,我就覺得水煮肉片確實(shí)應(yīng)該加豆瓣醬。如果三份菜譜里面有兩份都把這個(gè)肉腌了,那我也就覺得這個(gè)肉確實(shí)要腌,這樣把三四份菜譜全歸納完了以后,我就自己試著做一兩次,把其中令人困惑的地方再改一改,再發(fā)給我媽看看,差不多一份菜譜就定下來了。
一開始,這些菜譜被寫在word文檔里,我把它們打印下來貼在廚房墻上。后來積累了六七張紙,我覺得這個(gè)東西如果用GitHub去版本控制一下,看看社區(qū)里別的大佬有沒有什么想法,可能還挺好玩,我才放到GitHub上。
這個(gè)倉庫最初的架構(gòu)主要用來解決我的需要。
比如我不想做太復(fù)雜的菜,那種需要多次開鍋、提前調(diào)料腌制的,我都放棄了。
指南里的“如何決策吃什么”,是專門用來解決聚餐點(diǎn)菜的問題的。

“點(diǎn)菜”是從大一開始困擾我的問題。和七八個(gè)人一起吃飯,可能有領(lǐng)導(dǎo)、有小孩、有親戚朋友、有同學(xué),你們可能關(guān)系等級都不一樣。到了飯店里,突然,他們把菜譜遞到了你手里,讓你來點(diǎn),我就非常害怕。
這樣的情況發(fā)生多了,我還真的去請教了一些高手,他們給我簡單歸納了一下,得到了一些計(jì)算的方法,我覺得還挺有用??偨Y(jié)起來,就是菜的總數(shù)等于人數(shù)加一,然后把總數(shù)除以2,向上取整就是葷菜數(shù)量,向下取整就是素菜數(shù)量。比如說10個(gè)人的話,就是11個(gè)菜,6個(gè)葷菜5個(gè)素菜。葷菜的話就挨個(gè)選用豬、雞、牛、羊、鴨、魚,再考慮增加飯店的特色菜和拿手菜;如果有小孩的話,要增加有甜味的菜;如果是正式場合的話,要增加魚。就基本上就這些套路?,F(xiàn)在我出去吃飯,會(huì)在腦子里把這個(gè)公式過一遍,很好用。
這個(gè)倉庫在今年2月突然走紅,大家的熱情超出了我的預(yù)期,光是“下餃子放不放涼水”就吵了好幾輪,我以前以為大部分程序員都和我一樣只點(diǎn)外賣呢。

在GitHub上,如果一個(gè)人對我的倉庫有修改意見,他可以寫issue,類似評論,或者自己直接寫好修改步驟,向我發(fā)起“請求”,要求“合并”到我的菜譜里。
爭議最大的一道菜是西紅柿炒蛋,我已經(jīng)被“請求”了五六次。有人說要加糖,有人說不加糖,有人加蔥花有人不加蔥花,有人說是雞蛋炒熟后直接放西紅柿,有人說是雞蛋和西紅柿都單獨(dú)炒完再放在一起炒,有人說要往雞蛋里放醋來去掉腥味,有人說要加番茄醬增加湯汁......我感覺這些版本太多了,最后都把他們寫到附加內(nèi)容里去了,就說這道菜有好多版本,你自己看著辦吧。
最近的一次修改是取消了“勺”這個(gè)單位,起因也是有人提了一個(gè)issue,說這個(gè)東西看不懂,太不精確了,底下很多人跟著評論說確實(shí)不精確,我就取消了。
現(xiàn)在每天活躍在這個(gè)倉庫的大概有幾十個(gè)人。有幾個(gè)人固定地幫我寫了好多菜,有人幫我做了一些自動(dòng)化檢查,大概一個(gè)月前,還有兩個(gè)人分別說要給這份菜譜做一個(gè)網(wǎng)站和小程序,這是屬于他們自己獨(dú)立運(yùn)營的,我只是提供一下數(shù)據(jù),我挺高興他們愿意用我的數(shù)據(jù)。
大玩具
我1996年出生在河北晉州,3歲搬去了石家莊,我爸爸最初是電氣工程師,后來自己出來創(chuàng)業(yè),開了家小公司做一些企業(yè)資源管理的軟件。
我爸的公司就在我們家里,90多平米的房子,客廳和餐廳都被改造成了工作的地方,放了四五臺電腦。那個(gè)地方對我來說像是一個(gè)實(shí)驗(yàn)室,里面各種各樣雜七雜八的零件和電路板,小伙伴來我家蹭電腦,我們要在縫隙里放下自己的腳和手。
我接觸電腦比同齡人早。從八九歲開始,我就迷上了電腦游戲,《星際爭霸1》、《帝國時(shí)代2》。但是很快,玩游戲不太能滿足我了,玩過各種各樣類型的游戲之后,我已經(jīng)知道什么類型的游戲比較容易讓我得到快樂,什么類型的游戲其實(shí)是很無聊的。
小學(xué)四年級左右,我在我爸書架上找到一本《C#入門經(jīng)典》,這本書是循序漸進(jìn)的。第二章講布爾運(yùn)算,就是邏輯與或非運(yùn)算,什么真與真是真,真與假是假,什么假與假是假,之后的幾章講加減乘除、條件運(yùn)算之類的,對我來說都很簡單,我看得津津有味。
大概到第六七章的時(shí)候,我就完全看不懂了,但是前面的數(shù)學(xué)運(yùn)算多少給我一種自信,就是控制計(jì)算機(jī)工作其實(shí)并沒有那么復(fù)雜,是很簡單的一件事情。

我從那時(shí)候開始寫一些簡單的文字游戲。我會(huì)告訴你現(xiàn)在有多少滴血,你有多少錢,然后呢你可以買一個(gè)更厲害的武器,或者買一些護(hù)甲、一些藥,你決策完以后就可以繼續(xù)去打怪,怪又有多少滴血……一些很簡單的文字,寫好之后發(fā)給同學(xué)炫耀,你看,我可以自己寫一些游戲,就覺得很酷。
我爸媽覺得我挺廢的。那時(shí)候他們總是出差,回來就看到我在玩電腦,晝夜不分。他們給家里電腦都設(shè)上密碼,但是沒用,我總是有辦法解開。
高中,我進(jìn)入了一所寄宿中學(xué),那時(shí)候多媒體教學(xué)剛剛開始普及,學(xué)校老師開始經(jīng)常使用PPT來教學(xué)。
教室的講臺下面有了一臺電腦,還能聯(lián)網(wǎng),簡直成了我的大玩具。班主任需要指派一個(gè)學(xué)生來管這臺電腦,我立馬舉手了,主要任務(wù)是給老師們開機(jī),插U盤,打開PPT。
我用這臺電腦干了不少壞事。比如,我嘗試破解了隔壁辦公室的Wi-Fi密碼,還拿到老師面前炫耀,比如我會(huì)用它剪輯和播放班上同學(xué)的出糗視頻。我和幾個(gè)同學(xué)嘗試在這個(gè)電腦上裝一些比較大型的游戲,但很明顯,這臺電腦的性能不是很好,玩那些大型游戲總是很卡。我甚至還在那臺電腦上安裝了一些開發(fā)環(huán)境來編程寫代碼。

整個(gè)學(xué)生階段,我都沒太認(rèn)真學(xué)習(xí),成績最好的是物理,幾乎都是滿分,成績最差的是語文,滿分150,我只能考80多分。高考前,東北大學(xué)提前招收軟件工程專業(yè)的學(xué)生,我報(bào)名了,沒想到考到了第9名。
我對一個(gè)行業(yè)喜不喜歡的判斷標(biāo)準(zhǔn)很簡單,就是這個(gè)行業(yè)是不是關(guān)于未來的,而且不會(huì)做重復(fù)的事情。對于軟件工程來講,一個(gè)優(yōu)秀的項(xiàng)目確實(shí)能夠改變?nèi)祟惖陌l(fā)展。
小時(shí)候,我的偶像是比爾蓋茨,我覺得他是世界上最精明的商人,能夠意識到自己會(huì)什么,應(yīng)該做什么,基本上他一直都在做正確的決策。嗯,包括他的輟學(xué),我也覺得是他人生中的正確決策。
人不要做重復(fù)的工作
我不想做重復(fù)的工作。
2020年7月,我從北京去到蘇州,入職微軟,做程序開發(fā)。
最讓我不習(xí)慣的是蘇康碼。蘇康碼只能在支付寶或是微信小程序里打開,但是我如果進(jìn)了公司內(nèi)網(wǎng),再打開支付寶就會(huì)告訴我這個(gè)小程序不可以使用,我每次都得把Wi-Fi關(guān)了,用流量才能打開,特別麻煩,我經(jīng)常被卡在門口。
被卡的次數(shù)多了,我決定解決這個(gè)事。去年12月份,我發(fā)現(xiàn)蘇康碼事實(shí)上是一個(gè)網(wǎng)頁,經(jīng)過檢查備案信息,確實(shí)屬于蘇州公安局,我想,如果能摳出來URL,自己用瀏覽器打開,事實(shí)上可以繞過小程序,不到一秒鐘就可以打開。
把這個(gè)網(wǎng)頁摳出來后,我把它單獨(dú)放在我的手機(jī)主頁面上,每次跟一大群同事一起進(jìn)公司,我一秒鐘打開,他們?nèi)谀强ㄖ?,我覺得挺有趣的。后來我把它分享到了我的博客上,取名《在一秒鐘內(nèi)打開蘇康碼》。
做菜譜也是這樣的初衷,我不能容忍一個(gè)問題一直困擾我,我會(huì)想把它解決掉。
我不太清楚你是否會(huì)管理自己的衣服,我對自己的衣服管理得特別嚴(yán)。我給你發(fā)一張照片,我就是隨手拍的。

這是我的衣柜。從ABC開始,一共編到了H,每一個(gè)字母就是一套,然后每一套上面標(biāo)著適應(yīng)穿的溫度、場合等數(shù)據(jù),我用一個(gè)Excel把他們都整理起來,嵌入到我的數(shù)據(jù)庫里面,這是我的資產(chǎn)管理。
可能我太喜歡打掃房間了,朋友來我家都說我家徒四壁,什么都沒有。
其實(shí)我最在乎的是布線。因?yàn)槲业碾娮釉O(shè)備比較多,怎么布線能夠讓他們都發(fā)揮功能,然后從前面看從后面看都是整齊的,還挺難的。
這件事我基本上是從本科的時(shí)候就開始做,朋友們每次到我的宿舍都會(huì)十分震驚,因?yàn)槲业乃奚釅ι喜嫉娜蔷€,轉(zhuǎn)彎都是直角的,就感覺跟一個(gè)電路板一樣。

從畢業(yè)開始,我一直在堅(jiān)持讓自己的所有設(shè)備都能實(shí)現(xiàn)一鍵同步。有時(shí)候我在公司做一件事做到一半,想回家接著做,家里的電腦又缺點(diǎn)東西,我就特別難受。我做了一個(gè)自動(dòng)把所有電腦上的軟件設(shè)置全同步過來的軟件,它會(huì)把這幾臺電腦的壁紙、快捷鍵、瀏覽歷史、文件……所有設(shè)置全都同步,我在一臺電腦上做了什么事情,可以直接關(guān)機(jī),切到另一臺電腦上,所有的東西都會(huì)一模一樣。
我主要是覺得人就不應(yīng)該做重復(fù)的工作,凡是重復(fù)的工作都應(yīng)該用一個(gè)自動(dòng)化的東西去解決。做菜指南剛火起來的時(shí)候,我每天需要花大概一小時(shí)在維護(hù)這個(gè)倉庫上。主要是瀏覽大家的issue,處理合并請求,幫他們把格式修改得一致等等,全是重復(fù)的。后來,我花三小時(shí)寫了一些代碼,把大部分工作都自動(dòng)化了。
“理想程序員”
來到微軟之后,我發(fā)現(xiàn)很多同事都和我的經(jīng)歷相似,就是小時(shí)候都有電腦,都會(huì)自己在電腦上搗鼓很多有趣的事情。
我們每天工作的本質(zhì)就是在學(xué)習(xí),在接觸我們不會(huì)的東西,對程序員來說,在弄會(huì)一個(gè)問題的時(shí)候,很可能一個(gè)工作內(nèi)容已經(jīng)完成了。
從大學(xué)開始,我感覺身邊很多人學(xué)習(xí)的知識和實(shí)踐是分離的,學(xué)到的東西并不能幫他們解決實(shí)際的問題,所以我一直相信程序員是要在一個(gè)個(gè)項(xiàng)目中成長。
我喜歡挑戰(zhàn)。如果你給我一個(gè)問題,它有點(diǎn)難,但不至于超越我的理解極限,我會(huì)特別高興,我可能接下來幾天飯都不想吃,覺都不想睡,就研究這個(gè)問題。如果能解決它,我會(huì)得到一種極大的自我肯定和滿足。

在微軟,有鼓勵(lì)程序員“hack”的文化,翻譯成中文叫“黑”。
hack,其實(shí)就是運(yùn)用自己的技術(shù)去改變生活里的一個(gè)方面,很可能是好的方面。比如說我的手機(jī)不能無線充電,那我自己用我的技術(shù)對他搗鼓搗鼓,它現(xiàn)在可以無線充電了,這本質(zhì)上就是一種hack。微軟內(nèi)部的很多產(chǎn)品,包括現(xiàn)在很有名的產(chǎn)品,當(dāng)時(shí)并不是產(chǎn)品經(jīng)理想到的,而是一些程序員他們閑得沒事自己hack的,本著一個(gè)做玩具的心態(tài),最后竟然做成了產(chǎn)品。
每年會(huì)有大概三個(gè)星期的時(shí)間,微軟鼓勵(lì)員工不做和工作相關(guān)的內(nèi)容,舉行Hackathon(黑客馬拉松)。在這三個(gè)星期里,員工不會(huì)被安排任何工作,但是鼓勵(lì)他們花公司的資源去嘗試奇奇怪怪的點(diǎn)子,可以自己做,也可以組隊(duì),三個(gè)星期結(jié)束后會(huì)有一次評選,這誕生出非常多有價(jià)值的項(xiàng)目。
這種交流和創(chuàng)造,是我覺得程序員這個(gè)工作最迷人的部分。
我在大學(xué)的時(shí)候注冊了GitHub,起初只是在上面學(xué)習(xí)一些大佬的處理方案,后來漸漸的,我發(fā)現(xiàn)自己解決了一些可能別人也需要解決的問題的時(shí)候,就開始自己擁有一些自己的倉庫。GitHub是一個(gè)奇妙的社區(qū)。最初它只是作為版本控制的平臺,但因?yàn)槠洹伴_源”的特性——即代碼誕生后完全開放,任何人都可以對此代碼進(jìn)行二度加工完善,為集體創(chuàng)作提供了可能。
GitHub以前出過一個(gè)功能,可以查一個(gè)國家的貢獻(xiàn)量排行榜,2020年的時(shí)候,我?guī)缀趺刻炫菰谏厦嫠奈鍌€(gè)小時(shí),最高能在全國排20多名。

我很喜歡一本書,叫《大教堂與集市》,一本薄薄的小冊子,內(nèi)容不多,但是這本書卻對為什么要開源,開源有什么好處,以及什么時(shí)候應(yīng)該開源這些問題做了非常深刻的回答,以至于這本書雖然是幾十年前寫的,但是直到今天仍然被視為是開源領(lǐng)域的圣經(jīng)。
對于我個(gè)人而言,我始終覺得開源更像是一種無私的奉獻(xiàn),當(dāng)你把你的代碼賦予了開源的協(xié)議的時(shí)候,你已經(jīng)能夠預(yù)料到,未來即使有人用你的代碼去掙了錢去解決了什么問題,你也不能從中得到任何利益。對于這樣的代碼來講,它更多是一種創(chuàng)意作品,創(chuàng)意作品是很難用金錢來進(jìn)行衡量和交易的,更像是一種想清楚了,我今天做的事情就是在幫著全人類去解決問題的一種社區(qū)精神。
現(xiàn)在,我在各個(gè)平臺維護(hù)接近20個(gè)開源項(xiàng)目,以每月兩篇的速度更新我的博客,我喜歡和來自全世界的同行們交流,我們共享同一種語言。我想我會(huì)一直做一名程序員,因?yàn)檫@是讓我快樂的事。
網(wǎng)易文創(chuàng)簽約中國冰雪,成為國家體育總局冬季運(yùn)動(dòng)管理中心、中國冰雪文創(chuàng)合作伙伴。??
作者??馬克吐司??|? 編輯??白白
你可能還想看



文章版權(quán)歸網(wǎng)易文創(chuàng)看客欄目所有,其他平臺轉(zhuǎn)載規(guī)范請于公眾號后臺回復(fù)【轉(zhuǎn)載】查看,違者將追究法律責(zé)任;投稿請致信 insight163@vip.163.com,其它合作歡迎于公眾號后臺(或郵件)聯(lián)系我們。?
