logologo

今天我们去哪里吃午饭?

杂谈技术分享

Jun 11, 2021 · 10min

我们的公司没有为我们提供餐厅,所以每天中午我们都会在公司附近的街边餐馆或者商场餐厅解决我们的午饭。 随之而来的便是选择困难症,今天我们去哪里吃午饭?

# 选择困难症患者

夏日的早晨总是清爽而明亮,我的家离公司只有 1.5 公里左右的距离,自从不用接送老婆上下班后,我的车也已经开始在车库吃灰,每天步行上班。

当踏出家门时,第一个困难的选择就摆在了我的面前,今天的早餐我要在哪里解决?小区周围,前往公司的路边,大大小小的早餐店不下 20 家,每天早上它们都要为我这样的来不及在家吃饭/不愿在家吃饭/不会做饭/懒的人提供各种各样五花八门的早点。馄饨,生煎包,小笼包,油条,烧饼,豆浆,豆腐脑,手抓饼,烙饼,面包,牛奶…

我已经吃遍了周边的所有早餐店,就像 MMORPG 中的副本那样,一但完成了攻略,就剩下了无尽的 farm。这是最难的,你将要面对重复,而我的工作最讨厌的就是重复。也许在某天,会有一家新的早餐店冒出来,而它也只不过给你带来第二天一时的快乐,然后又陷入了上面的困局,更加糟糕的是,它的早点可能和其他家的一样。现在的我只能草草的做出一个选择,然后去完成这顿神圣的早餐。

事实上,我并不觉得格式各样的早点会让我的口味厌倦,这么多的种类样式,每天换着吃完全不会腻,毕竟吃了这么多年的米饭也没有厌倦,不是吗?最让我痛苦的无非是作选择的时候,作为一个选择困难症患者,东西越多,越让你感到纠结,烦躁。

太阳已经高高升起,气温也开始逐渐上升,办公室里开着空调,我倒了一杯绿茶,看着茶叶从悬浮到沉落,一个 feature 告一段落,代码已经提交,上午的工作也即将结束。

第二个困难的选择出现了,我们的午饭去哪里吃?我们的公司没有为我们提供餐厅,所以每天中午我们都会在公司附近的街边餐馆或者商场餐厅解决我们的午饭。 我总是和办公室的其他几个工程师一起吃午饭,另外,我们的技术副总也会加入到我们的小队中来。尽管工作上我们会有不同的见解和看法,但是我们对午饭的选择居然出奇的一致————我们不会选!就像早餐一样,我们已经吃遍了周边大大小小的餐馆,不知道做何选择。

“为什么你不写一个小 app 来帮我们做这个选择呢?”,技术副总说道。

在这个本来应该享受午餐的时刻,他又提出了需求。

“就和那些转盘游戏,抽奖游戏一样,在一个选择池里随机的选择一个结果”,另外一个做机械的工程师也附和道。

“这样的玩意有很多,在微信小程序上就有一大堆”,我赶紧回复,顺便在微信上找了起来。

# 一个玩具 – Foraging [ 觅食 ]

也许是可以做一个重复的小玩具,毕竟自己做出来的,感觉会不太一样。于是,我又开始了重复造轮子的过程。

大概构思了一下,我的小玩具应该有下面一些特征:

  • 一个带有过渡的开场动画,先展示应用的 logo,名称信息,然后再过渡到主界面。
  • 一个添加按钮,用于添加用户的方案,毕竟你不可能只为一件事情而犯病。
  • 可以横向滚动的卡片列表,用于显示用户纠结的各种方案。
  • 方案多了也会造成选择恐惧,所以一个随机选择方案卡片的按钮也是必须的。
  • 卡片可以进行编辑,比如名称,类别,条目等。

很好!这种随机选择类的应用的基本特征都有了。下面就是取一个好听一点的名字了。名字又是让人头疼的地方,特别是我这种选择困难症患者。这里可以省略一万字…经过一番挣扎之后,终于有了它: Foraging

Foraging,即“觅食”,“寻食”的意思,想了很久,感觉这个名字很符合这个小玩具的作用,它的第一任务就是帮助我们随机的选择一家餐馆 😋。

至于 logo,“觅食”挺符合狼 🐺 这种生物的生活习惯,于是一个差不多的 logo 也诞生了(嗯,可能看上去像狗 🐕)。

具体的代码实现有兴趣的朋友可以查看这个玩具的 github repository。Foraging 已经部署,支持 PWA,所有数据都保存在客户端,可以离线使用。

用户可以在上面新建方案卡片,然后在方案中添加需要选择的条目,保存后可以进行随机选择。功能很简单,希望能治好大家的选择困难症。

# 现状

自从有了Foraging,我们的“觅食”活动好过了吗?并不是,虽然我们会象征性的点击一下按钮,从众多的餐馆中随机选择一个,但是总会有人今天因为心情/胃口/随便什么理由不想吃这家,然后我们不得不重新进行选择。工具可以帮助我们的生后工作更加效率,但是如果没有约束(无论是法律/道德/个人的),工具也只是工具,人们完全可以不遵守使用这些工具的规则。

几年前,我在业余时间研究区块链相关的技术时,一个朋友对我说过,“智能合约”是一个好东西,但是很多时候似乎只能约束线上的行为,一旦到了线下,执行的最终环节还是会被人干预。

我们用代码去构建一个规则范围内的线上虚拟世界,却没办法用这些规则去约束线下现实世界的人和物。

CC BY-NC-SA 4.0 2021 © Archer Gu