本文来自微信公众号:看客inSight (ID:pic163),作者:马克吐司,编辑:白白,头图来自受访者


今年2月中旬,一份“程序员在家做饭方法指南”在GitHub——世界上最大的代码托管平台上走红。


乍一看,它和常见的菜谱没什么区别,但你点开每一道菜,会发现对用法用量的描述精确到了离谱的程度。“适量”二字是绝对不存在的,拿最常见的“西红柿炒蛋”举例,西红柿块,被具体为“边长不超过 4cm 的小块”,翻炒的时间被确定为“20秒”。


在“厨房准备”的工具栏里,赫然出现了“天平”“量筒”“游标卡尺”等工具,甚至还有一个“如何决策吃什么”的计算方式。



这份菜谱由一个95后程序员Anduin在2020年隔离期间发起,他在发起说明中说:


最近在家隔离,出不了门。只能宅在家做饭了。作为程序员,我偶尔在网上找找菜谱和做法。但是这些菜谱往往写法千奇百怪,经常中间莫名出来一些材料。对于习惯了形式语言的程序员来说极其不友好。


所以,我计划自己搜寻菜谱和并结合实际做菜的经验,准备用更清晰精准的描述来整理常见菜的做法,以方便程序员在家做饭。


同样,我希望它是一个由社区驱动和维护的开源项目,使更多人能够一起做一个有趣的仓库。所以非常欢迎大家贡献它~


诞生之初,这份菜谱只有7道菜——也是Anduin在隔离期间学会的全部菜色。在今年2月突然走红后,吸引来大量的共建者,目前已经累计到超过100道。


GitHub上一次吸引公众的目光是在2020年冬天,一份“程序员考公指南”登上首页,那时,关于“996”“内卷”“35岁危机”的讨论刚刚开始。我采访了那些准备考公或已经考上公务员的程序员,他们中有马上35岁的公司中层,有报班学习三个月后自嘲成为“最底层”外包程序员的土木专业学生,也有来自C9大学顶级计算机专业的优秀学生代表。


我忍不住问他们同一个问题:最初想做程序员的原因是什么?有没有被程序员这个职业的世界性、开放性以及改变世界的可能鼓舞?


他们总是笑一笑,对我说:“可能有这样的程序员,但自己不是,也没见过。”


某种程度上,Anduin是他们口中的“那种”程序员,他乐于接受挑战,坚信万事万物都有解决方案,也以此指导自己的生活。他不愿意做重复的事,一旦察觉到重复工作的苗头,就会试图“把它自动化”。他用最少的精力面对选择,从A到H一套一套标记好自己的衣服。更重要的是,他相信程序员的社区精神,相信程序可以帮助我们走向更好更开放的世界。


以下是Anduin的自述。


程序员做菜指南


2020年年初,我在家隔离的时候决定开始做饭。


在此之前我只会泡方便面,所以最开始研究的也是炒方便面,因为好学,不需要研究如何配料,就从调料包里拿就行。


之后我又学了几道菜,都是简单的家常菜,什么西红柿炒蛋、水煮肉片之类的。


学习的过程让我很崩溃。网上的菜谱一是没有被量化,总是“适量”、“适量”,二是好多东西有歧义,步骤中间会突然莫名其妙地出现一些上下文里没有的材料,我没提前准备,直接就跟不下去了。这让我很困惑,无法接受,我决定自己整理一份菜谱。


在确定一道菜谱前,我会自己做三四次。比如说我要做一个水煮肉片,我会先在网上搜三四个版本的水煮肉片,对比看看。如果三四个版本里都要加豆瓣酱,我就觉得水煮肉片确实应该加豆瓣酱。如果三份菜谱里面有两份都把这个肉腌了,那我也就觉得这个肉确实要腌,这样把三四份菜谱全归纳完了以后,我就自己试着做一两次,把其中令人困惑的地方再改一改,再发给我妈看看,差不多一份菜谱就定下来了。


一开始,这些菜谱被写在word文档里,我把它们打印下来贴在厨房墙上。后来积累了六七张纸,我觉得这个东西如果用GitHub去版本控制一下,看看社区里别的大佬有没有什么想法,可能还挺好玩,我才放到GitHub上。


这个仓库最初的架构主要用来解决我的需要。比如我不想做太复杂的菜,那种需要多次开锅、提前调料腌制的,我都放弃了。


指南里的“如何决策吃什么”,是专门用来解决聚餐点菜的问题的。


截自GitHub“程序员在家做饭方法指南”<br>
截自GitHub“程序员在家做饭方法指南”


“点菜”是从大一开始困扰我的问题。和七八个人一起吃饭,可能有领导、有小孩、有亲戚朋友、有同学,你们可能关系等级都不一样。到了饭店里,突然,他们把菜谱递到了你手里,让你来点,我就非常害怕。


这样的情况发生多了,我还真的去请教了一些高手,他们给我简单归纳了一下,得到了一些计算的方法,我觉得还挺有用。总结起来,就是菜的总数等于人数加一,然后把总数除以2,向上取整就是荤菜数量,向下取整就是素菜数量。比如说10个人的话,就是11个菜,6个荤菜5个素菜。荤菜的话就挨个选用猪、鸡、牛、羊、鸭、鱼,再考虑增加饭店的特色菜和拿手菜;如果有小孩的话,要增加有甜味的菜;如果是正式场合的话,要增加鱼。就基本上就这些套路。现在我出去吃饭,会在脑子里把这个公式过一遍,很好用。


这个仓库在今年2月突然走红,大家的热情超出了我的预期,光是“下饺子放不放凉水”就吵了好几轮,我以前以为大部分程序员都和我一样只点外卖呢。


“程序员在家做饭方法指南”Issue区的最新讨论<br>
“程序员在家做饭方法指南”Issue区的最新讨论


在GitHub上,如果一个人对我的仓库有修改意见,他可以写issue,类似评论,或者自己直接写好修改步骤,向我发起“请求”,要求“合并”到我的菜谱里。


争议最大的一道菜是西红柿炒蛋,我已经被“请求”了五六次。有人说要加糖,有人说不加糖,有人加葱花有人不加葱花,有人说是鸡蛋炒熟后直接放西红柿,有人说是鸡蛋和西红柿都单独炒完再放在一起炒,有人说要往鸡蛋里放醋来去掉腥味,有人说要加番茄酱增加汤汁......我感觉这些版本太多了,最后都把他们写到附加内容里去了,就说这道菜有好多版本,你自己看着办吧。


最近的一次修改是取消了“勺”这个单位,起因也是有人提了一个issue,说这个东西看不懂,太不精确了,底下很多人跟着评论说确实不精确,我就取消了。


现在每天活跃在这个仓库的大概有几十个人。有几个人固定地帮我写了好多菜,有人帮我做了一些自动化检查,大概一个月前,还有两个人分别说要给这份菜谱做一个网站和小程序,这是属于他们自己独立运营的,我只是提供一下数据,我挺高兴他们愿意用我的数据。


大玩具


我1996年出生在河北晋州,3岁搬去了石家庄,我爸爸最初是电气工程师,后来自己出来创业,开了家小公司做一些企业资源管理的软件。


我爸的公司就在我们家里,90多平米的房子,客厅和餐厅都被改造成了工作的地方,放了四五台电脑。那个地方对我来说像是一个实验室,里面各种各样杂七杂八的零件和电路板,小伙伴来我家蹭电脑,我们要在缝隙里放下自己的脚和手。


我接触电脑比同龄人早。从八九岁开始,我就迷上了电脑游戏,《星际争霸1》、《帝国时代2》。但是很快,玩游戏不太能满足我了,玩过各种各样类型的游戏之后,我已经知道什么类型的游戏比较容易让我得到快乐,什么类型的游戏其实是很无聊的。


小学四年级左右,我在我爸书架上找到一本《C#入门经典》,这本书是循序渐进的。第二章讲布尔运算,就是逻辑与或非运算,什么真与真是真,真与假是假,什么假与假是假,之后的几章讲加减乘除、条件运算之类的,对我来说都很简单,我看得津津有味。


大概到第六七章的时候,我就完全看不懂了,但是前面的数学运算多少给我一种自信,就是控制计算机工作其实并没有那么复杂,是很简单的一件事情。


Anduin记录的“每天写一行代码”挑战<br>
Anduin记录的“每天写一行代码”挑战


我从那时候开始写一些简单的文字游戏。我会告诉你现在有多少滴血,你有多少钱,然后呢你可以买一个更厉害的武器,或者买一些护甲、一些药,你决策完以后就可以继续去打怪,怪又有多少滴血……一些很简单的文字,写好之后发给同学炫耀,你看,我可以自己写一些游戏,就觉得很酷。


我爸妈觉得我挺废的。那时候他们总是出差,回来就看到我在玩电脑,昼夜不分。他们给家里电脑都设上密码,但是没用,我总是有办法解开。


高中,我进入了一所寄宿中学,那时候多媒体教学刚刚开始普及,学校老师开始经常使用PPT来教学。


教室的讲台下面有了一台电脑,还能联网,简直成了我的大玩具。班主任需要指派一个学生来管这台电脑,我立马举手了,主要任务是给老师们开机,插U盘,打开PPT。


我用这台电脑干了不少坏事。比如,我尝试破解了隔壁办公室的Wi-Fi密码,还拿到老师面前炫耀,比如我会用它剪辑和播放班上同学的出糗视频。我和几个同学尝试在这个电脑上装一些比较大型的游戏,但很明显,这台电脑的性能不是很好,玩那些大型游戏总是很卡。我甚至还在那台电脑上安装了一些开发环境来编程写代码。


大学里,Anduin最常待的是机房<br>
大学里,Anduin最常待的是机房


整个学生阶段,我都没太认真学习,成绩最好的是物理,几乎都是满分,成绩最差的是语文,满分150,我只能考80多分。高考前,东北大学提前招收软件工程专业的学生,我报名了,没想到考到了第9名。


我对一个行业喜不喜欢的判断标准很简单,就是这个行业是不是关于未来的,而且不会做重复的事情。对于软件工程来讲,一个优秀的项目确实能够改变全人类的发展。


小时候,我的偶像是比尔盖茨,我觉得他是世界上最精明的商人,能够意识到自己会什么,应该做什么,基本上他一直都在做正确的决策。嗯,包括他的辍学,我也觉得是他人生中的正确决策。


人不要做重复的工作


我不想做重复的工作。


2020年7月,我从北京去到苏州,入职微软,做程序开发。


最让我不习惯的是苏康码。苏康码只能在支付宝或是微信小程序里打开,但是我如果进了公司内网,再打开支付宝就会告诉我这个小程序不可以使用,我每次都得把Wi-Fi关了,用流量才能打开,特别麻烦,我经常被卡在门口。


被卡的次数多了,我决定解决这个事。去年12月份,我发现苏康码事实上是一个网页,经过检查备案信息,确实属于苏州公安局,我想,如果能抠出来URL,自己用浏览器打开,事实上可以绕过小程序,不到一秒钟就可以打开。


把这个网页抠出来后,我把它单独放在我的手机主页面上,每次跟一大群同事一起进公司,我一秒钟打开,他们全在那卡着,我觉得挺有趣的。后来我把它分享到了我的博客上,取名《在一秒钟内打开苏康码》。


做菜谱也是这样的初衷,我不能容忍一个问题一直困扰我,我会想把它解决掉。


我不太清楚你是否会管理自己的衣服,我对自己的衣服管理得特别严。我给你发一张照片,我就是随手拍的。


Anduin的衣柜<br>
Anduin的衣柜


这是我的衣柜。从ABC开始,一共编到了H,每一个字母就是一套,然后每一套上面标着适应穿的温度、场合等数据,我用一个Excel把他们都整理起来,嵌入到我的数据库里面,这是我的资产管理。


可能我太喜欢打扫房间了,朋友来我家都说我家徒四壁,什么都没有。


其实我最在乎的是布线。因为我的电子设备比较多,怎么布线能够让他们都发挥功能,然后从前面看从后面看都是整齐的,还挺难的。


这件事我基本上是从本科的时候就开始做,朋友们每次到我的宿舍都会十分震惊,因为我的宿舍墙上布的全是线,转弯都是直角的,就感觉跟一个电路板一样。


布线整洁强迫症从大学一直带到工作<br>
布线整洁强迫症从大学一直带到工作


从毕业开始,我一直在坚持让自己的所有设备都能实现一键同步。有时候我在公司做一件事做到一半,想回家接着做,家里的电脑又缺点东西,我就特别难受。我做了一个自动把所有电脑上的软件设置全同步过来的软件,它会把这几台电脑的壁纸、快捷键、浏览历史、文件……所有设置全都同步,我在一台电脑上做了什么事情,可以直接关机,切到另一台电脑上,所有的东西都会一模一样。


我主要是觉得人就不应该做重复的工作,凡是重复的工作都应该用一个自动化的东西去解决。做菜指南刚火起来的时候,我每天需要花大概一小时在维护这个仓库上。主要是浏览大家的issue,处理合并请求,帮他们把格式修改得一致等等,全是重复的。后来,我花三小时写了一些代码,把大部分工作都自动化了。


“理想程序员”


来到微软之后,我发现很多同事都和我的经历相似,就是小时候都有电脑,都会自己在电脑上捣鼓很多有趣的事情。


我们每天工作的本质就是在学习,在接触我们不会的东西,对程序员来说,在弄会一个问题的时候,很可能一个工作内容已经完成了。


从大学开始,我感觉身边很多人学习的知识和实践是分离的,学到的东西并不能帮他们解决实际的问题,所以我一直相信程序员是要在一个个项目中成长。


我喜欢挑战。如果你给我一个问题,它有点难,但不至于超越我的理解极限,我会特别高兴,我可能接下来几天饭都不想吃,觉都不想睡,就研究这个问题。如果能解决它,我会得到一种极大的自我肯定和满足。


微软(中国)有限公司(苏州分公司)<br>
微软(中国)有限公司(苏州分公司)


在微软,有鼓励程序员“hack”的文化,翻译成中文叫“黑”。


hack,其实就是运用自己的技术去改变生活里的一个方面,很可能是好的方面。比如说我的手机不能无线充电,那我自己用我的技术对他捣鼓捣鼓,它现在可以无线充电了,这本质上就是一种hack。微软内部的很多产品,包括现在很有名的产品,当时并不是产品经理想到的,而是一些程序员他们闲得没事自己hack的,本着一个做玩具的心态,最后竟然做成了产品。


每年会有大概三个星期的时间,微软鼓励员工不做和工作相关的内容,举行Hackathon(黑客马拉松)。在这三个星期里,员工不会被安排任何工作,但是鼓励他们花公司的资源去尝试奇奇怪怪的点子,可以自己做,也可以组队,三个星期结束后会有一次评选,这诞生出非常多有价值的项目。


这种交流和创造,是我觉得程序员这个工作最迷人的部分。


我在大学的时候注册了GitHub,起初只是在上面学习一些大佬的处理方案,后来渐渐的,我发现自己解决了一些可能别人也需要解决的问题的时候,就开始自己拥有一些自己的仓库。GitHub是一个奇妙的社区。最初它只是作为版本控制的平台,但因为其“开源”的特性——即代码诞生后完全开放,任何人都可以对此代码进行二度加工完善,为集体创作提供了可能。


GitHub以前出过一个功能,可以查一个国家的贡献量排行榜,2020年的时候,我几乎每天泡在上面四五个小时,最高能在全国排20多名。


Anduin的博客主页<br>
Anduin的博客主页


我很喜欢一本书,叫《大教堂与集市》,一本薄薄的小册子,内容不多,但是这本书却对为什么要开源,开源有什么好处,以及什么时候应该开源这些问题做了非常深刻的回答,以至于这本书虽然是几十年前写的,但是直到今天仍然被视为是开源领域的圣经。


对于我个人而言,我始终觉得开源更像是一种无私的奉献,当你把你的代码赋予了开源的协议的时候,你已经能够预料到,未来即使有人用你的代码去挣了钱去解决了什么问题,你也不能从中得到任何利益。对于这样的代码来讲,它更多是一种创意作品,创意作品是很难用金钱来进行衡量和交易的,更像是一种想清楚了,我今天做的事情就是在帮着全人类去解决问题的一种社区精神。


现在,我在各个平台维护接近20个开源项目,以每月两篇的速度更新我的博客,我喜欢和来自全世界的同行们交流,我们共享同一种语言。我想我会一直做一名程序员,因为这是让我快乐的事。


本文来自微信公众号:看客inSight (ID:pic163),作者:马克吐司,编辑:白白