搭建更适合自己的习惯打卡系统
我一直认为 Notion 比起一款笔记软件、普通的协作工具,更像一个低代码平台——你不需要自己编写和构建程序,可以自由地使用 Notion 的功能和特性,设计满足自己需求的应用。
因此,尽管我不用 Notion 做知识管理,我的日常生活也不离开 Notion。我的任务管理、项目管理、习惯追踪、理财系统,都使用 Notion 来完成,除此之外,还有一些不大不小的需求,例如便于集中管理的互联网收藏夹(我几乎不再使用 Bilibili 等应用自带的收藏夹了)和一些零碎的收集——收集其他人给我的赞美,以便我心情低落时浏览;我还会收集一些创作灵感,未来的某个时候或许可以拼凑成完整的作品。
大多数需求的满足,都得益于 Notion 强大的数据库功能。它没有用于生产环境的专业关系型数据库那样复杂,在易用的同时,也保证了基本、自由的数据维护和数据处理功能,能满足个人使用者几乎所有的数据管理需求。
在「我怎样用 Notion」这个系列中,我会介绍我使用 Notion 打造的各种系统,包括我为什么需要这个系统、什么样的人有这样的需求、我为什么这样设计,以及读者可以怎样搭建这个系统。
如果你感兴趣的话,就请继续读下去吧。在这篇文章,我会介绍我经过多次迭代后确定的、我目前正在使用的习惯打卡系统。
什么是习惯打卡?
习惯打卡,在英文互联网上一般被称作 Habit Tracker(习惯追踪),是一种帮自己养成健康习惯和良好作息的自律方法。
有的人会写日记追踪习惯。我见过一个 YouTuber 用方格的手账本写日记,他在每页纸的右侧留下了几列用作简单的习惯追踪系统。比如,他规定第一列是运动打卡,第二列是咖啡因记录,第三列是睡眠记录。如果在某一天,他运动了 30 分钟,喝了 250ml 咖啡,也就是大约 100mg 咖啡因,并且他在 11 点之前上床睡觉了。
在这一天对应的记录里,他就可以把第一列的那一格涂黑,因为他完成了运动目标。他会在第二格打一把叉,因为他规定的咖啡因上限是 72mg,他没能在今天达成目标。最后,他在第三格也打上了对应的记号。
如果这样坚持记录一周、一个月、一年,他就能在自己的日记本上,较为直观地看到自己的习惯完成情况。
如果你更喜欢纸笔,并且只是把记录打卡当作激励自己的一种方式,这种方法已经足够。如果你和我一样认为这样呈现出来的数据不够直观,也不能起到很好的提醒作用,或者,你想要尝试一些新东西,请继续读下去。
我需要怎样的习惯打卡系统?
不要做假账
《认知觉醒》的作者说“打卡打不出未来”,是因为打卡是手段而非目的。如果以打卡为目的,就会出现我在《别再烦我了,绿色猫头鹰》这篇文章里提到的,为了保持连胜,每天极不情愿地进行低效的学习。不仅没有效果,还影响自己的心情。
所以,打卡不是罪魁祸首,错误的心态才是。
实际上,不是所有的习惯都需要每天进行。如果我刚结束了忙碌的一天,回到自己的窝里想好好休息一下,这时打开电脑,发现今天还有四个习惯没有打卡,我会怎样想?
如果我焦急地把清单上的任务都完成,在一天剩下的两个小时里读了 15 分钟书、下楼跑了 2 公里、脑袋空空地写了日记,最后焦急地进行了一次冥想练习(这是个悖论,你当然没法焦急地冥想),我当然能完成自己定下的目标,但这真的有用吗?
除了两公里是实实在在地跑完了,其他的事项又产生了怎样的效果?
如果仔细想想,公众演讲也是一件对自己有意义的事情,经常上台能锻炼自己的表达能力、台风和勇气,能算做好习惯。但这样的好习惯需要每天做吗?再者,你真的有精力每天在一群人面前讲话吗?
运动、读书、冥想,这些事情看起来比公众演讲轻松很多,但也不代表就一定要每天做,保持在一个合理的频率即可。比如,我当然希望我能每天读书,但事实上,我每周二都是满课,上完学校的课就没精力读其他书了,其他课少的日子,我当然很愿意读书——这么看的话,我就可以督促自己在能读书的时刻就尽可能读,一周可以有两天不读,也就是约 71%(5÷7)的天数里,我需要完成读书的打卡。
这样一来,我打卡的压力就减轻了,可以读的时候就更愿意读,也就更不容易出现翻几页就算打卡了的这种自欺欺人的情况。
建立好习惯和减少坏习惯
当然,在形成好习惯的同时也要避免坏习惯。如果在设计习惯打卡系统的时候,把两者都考虑进来,就能发现好习惯打卡和坏习惯打卡可以用于建立一套反馈闭环。
挪用计算机中常见的「权重」的概念,正数表示好习惯,负数表示坏习惯;数字越大表示习惯带来的价值越大,数字越小表示习惯带来的价值越小。例如,吃水果是一个好习惯,权值(权重的取值)是 1,而阅读显然是一个比吃水果更难完成、收益更大的习惯,权值是 2;吃零食是一个坏习惯,权值就可以设置为 -1。
如果把当天打卡的所有习惯的权值相加,就可以得到一个分数,暂且称作「习惯分数」。用人话来讲,打卡一个好习惯会加分,打卡一个坏习惯会扣分,根据权重的不同,加分和扣分的具体数字有差异。
我们可以给自己设置一个理想的「习惯分数」,当今天打卡的习惯的权值和超过这个数字时,就可以停下了,或者打卡一个坏习惯奖励一下自己。反过来,当今天的分数低于理想值时,就可以告诉自己要加把劲了。
在《The Hacker’s Diet》里,John Walker 用这种方法减肥。他用工程学(engineering)的思想,把这样的系统称作负反馈系统(negative feedback system)——当分数超过阈值时,发送停止信号;当分数低于阈值时,发送加速信号。
使用图表复盘反思
我在使用 Notion 做习惯打卡之前,也用过不少其他的产品,有的提供了比较直观的图表,能够反映自己每天打卡次数的变化和趋势。
很早之前,我就发现,自己每天的习惯打卡情况其实在某种程度上,反映了当天自己的状态。譬如,在繁忙、精力不佳的一天里,我更不容易坚持好习惯,并且更有可能通过吃零食等坏习惯来缓解压力。
如果我在图表上看到自己最近几天的「习惯分数」一蹶不振,我就要思考一下最近究竟是什么事情在困扰自己,并找出解决方法,或者,至少把手里的事情放一放,为了自己的身体健康,先好好放松一下。
有些时候,如果陷入负面情绪,或者处于低能量状态,自己不一定能够察觉。数据或许会出错,但自己多留个心眼,在分数低的时候检查一下自己,总不会是坏事。
总结
对我来说,一个理想的习惯打卡系统应该做到以下几点:
- 督促我把习惯控制在一个频率范围内,而不是逼迫我每天完成
- 可以同时打卡好习惯和坏习惯,形成反馈系统
- 能够用直观的图表呈现我每天的打卡情况
开始打造自己的打卡系统
在开始这一节之前,请先确保你了解 Notion 的基本功能。
现有习惯跟踪模板的问题
在 Notion 官方的精选模板里,能找到 1241 个模板。简单浏览一下会发现这些模板实际上都差不多,只不过加上了一些不同风格的装饰,排版略有差别罢了。
这样的习惯打卡系统主要维护一个数据库(准确说是一张数据表),每一条记录(每一行)表示一个日期的打卡情况。除了基本的名称和日期属性之外,其余的都是复选框属性。
用数据库的专业术语来描述的话,在这样的一个数据库里,每一天都是一个实体,而这个实体的属性有「阅读」「运动」「吃水果」「吃零食」等,这些属性的数据类型是复选框(或者说布尔值)。如果当天完成了「阅读」这个习惯,对应的属性值就是 true
,否则就是 false
。
在实际的使用中,只需要用鼠标点一下当天的、对应属性的方框就能打卡了。
就像这样:
这样的话,只需要每天创建一条新的记录(可以使用 Notion 自带的模板功能,定时自动创建记录),然后用这条记录进行打卡就好了。
还有把习惯本身作为实体,把天数作为属性的,如下图:
这种做法的问题很明显,它只能做一周的打卡,一周结束后,就要建立新的数据库。不过,这也可以通过 Notion 自带的模板功能自动创建。最主要的问题是:如果我想要查看一个月,或者一年的打卡情况怎么办?
这么做也有好处,如图所示,它可以很方便地统计习惯本身的进度,也就是我们在上文提到的频率。我可以用习惯的完成情况来计算频率,然后根据频率调整计划。
显然,我们遇到了一个两难的情况:
- 如果用「日期」作为实体,就没法方便地处理习惯本身的数据,例如统计习惯的频率、这个习惯在哪几天被打卡了、这个习惯一共被打卡了多少次……
- 如果用「习惯」作为实体,就没法方便地处理日期相关的数据,例如当天的习惯分数是多少,而且没办法把所有的习惯数据都放在同一张表里。
有没有一种方案,可以满足两边的需求呢?
还真有,那就是——建两张表。在一张表里,「日期」是实体;在另一张表里,「习惯」是实体。这样一来就可以很方便地统计并处理相关的数据。借助 Notion 的关联(Relation)和汇总(Rollup)属性,我们就可以把「日期」以及「习惯」关联起来了。
这种做法还解决了一个问题,就是,如果我要添加新的习惯,或者删除旧的习惯,我可以像真正的数据库那样归档习惯对应的一条记录,或者在习惯数据库里添加一条新记录。而不是动用数据库管理权限,直接删除或者增加一条新的属性。
开始建表
建立「每日打卡」数据库
先创建一个名为「每日打卡」的数据库,然后创建一个模板。
这个数据库里应该有一个「日期」属性,用来标识这是哪一天的打卡记录。在模板中将他设置为「今天」,这样一来,在创建的时候,这个页面就会被自动设置为今天的日期。
然后,可以在原先设置模板的这个地方设置「重复」,改为「每天」。
这样一来,Notion 就会在每天的开始自动创建一条打卡记录,日期设置为当天。只不过记录的「名称」没有办法设置为动态的,每天开始的时候需要自己手动改一下名字。
建立「习惯」数据库
习惯数据库这边就比较简单,写上习惯的名字就好。然后,根据我们刚才讨论过的,设置习惯的「权值」和希望达到的理想情况。
此外,可以额外设置一个「开始时间」。这样一来,当你需要添加一个新的习惯时,系统就不会因为你在过去的 99 天里都没有打卡这个习惯,而认为你今天打卡的你只有 1% 的打卡率了。打卡率使用 打卡次数 / (当前日期-开始日期+1)
这个公式计算。
更灵活合理的「打卡率」计算方法,也是用两个表来习惯打卡的好处之一。
关联两个表
在任意表中建立一个关联属性,例如:在「习惯」数据库中创建「每日打卡」关联属性,或者,在「每日打卡」数据库中创建「习惯」关联属性。然后,将这个属性设置为「在关联的数据库中显示」。
在「每日打卡」数据库中创建「汇总」属性,选择刚刚创建的「关联关系」,然后计算「关联关系」中习惯的「权值」的「总和」。这样就得到了当天的「习惯分数」。
此时,「每日打卡」这张表看起来应该是这样的。
回到「习惯」这张表里,我们会发现对应的「关联关系」中显示了「每日打卡」这个数据库里的记录,也就是说,我们在「每日打卡」这个数据库里关联习惯的同时,对应的习惯也会记录哪几天我们打卡了这个习惯。
和之前的步骤一样,建立「汇总」属性,就能看到这个习惯的总打卡次数。
利用和处理数据
至此,只要我们每天坚持打卡,就能产生可被利用的数据。
知道了每天的「习惯分数」,我们就可以根据这个分数来调整我们的行为。光看数字自然不够直观,使用 Notion 函数来帮助我们将数据简单地可视化。
if(习惯分数>5,
style("状态在线的一天!","green","green_background"),
if (习惯分数>3,
style("还行,再加把劲","yellow","yellow_background"),
style("状态不佳,及时调整!","red","red_background")
)
)
在「习惯」数据库这边,我们可以根据打卡次数和开始时间算出习惯的坚持情况,然后与我们事先设置好的理想情况做对比,自动给出建议。
if(权值>0,
if(坚持情况>=理想情况,
style("🎊 不错!继续保持","green","green_background"),
if(理想情况-坚持情况<=0.1,
style("💪 快了!坚持就是胜利","yellow","yellow_background"),
style("💣 差得远,快行动起来","red","red_background")
)
),
if(坚持情况<=理想情况,
style("👍 很棒,抑制住冲动!","green","green_background"),
if(坚持情况-理想情况<=0.1,
style("🙅 说不!你马上就要成功了","yellow","yellow_background"),
style("😠 差得远,绝对不可以放弃","red","red_background")
)
)
)
使用图表进行可视化
尽管 Notion 也早不久之前推出了图表视图,但属于收费功能,免费版只能创建一张图表。我的实际体验下来,我认为 Notion 自带的图表还不如其他早就有的第三方图表工具,其唯一的优势只是数据同步更快,UI 风格和 Notion 更匹配而已。
以上是我是用 ChartBrick 制作的图表。尽管这条曲线看起来非常怪异,但它呈现出来的情况和我自身的感觉还是很相似的,我的确在数值低的那几天感觉都很不好。
以上是使用「每日打卡」数据库作为数据源制作的图表,你当然也可以使用「习惯」数据库作为数据源。以下是我用来观察习惯坚持情况的「金字塔」图,坚持得最好的习惯在最上面,最差的在最下面。这张表排除了坏习惯。
制作图表的部分相对简单,这里就不赘述了。无论你是使用 Notion 自带的图表,还是使用 ChartBrick 这样的第三方工具,都应该可以在摸索之后很快上手。
让打卡更丝滑
如果你直接使用这套打卡方案,你一定会觉得很麻烦,因为要打卡的话,你需要点开当天的「关联关系」,然后链接到对应的习惯页面。
好在 Notion 还有一个非常好用的属性——按钮。
只需要给每一个习惯在「每日打卡」数据库里创建一个对应的「打卡按钮」,设置按下后,自动在对应页面的「习惯」关联属性里添加对应的打卡页面链接。
然后你就可以创建一个这样的视图,这个视图只会显示日期为今天的打卡记录,完成一件事情,简单地点一下按钮就好了。
你可能会觉得,给每一个习惯都创建一个对应的按钮很麻烦,还不如一开始就用复选框呢,还少建一个表。
确实是这样,不过别忘了,这个按钮是可有可无的,只是为了让打卡更方便而已。如果你不需要更强大的数据处理功能,自然可以不采用这种双表的打卡系统。
此外,按钮还可以同时执行多个操作。例如,在你添加了打卡记录之后,还可以在对应的习惯页面里设置「上次打卡时间」,在某些场合里或许会有妙用。
例如,我可以在一张视图里筛选所有的习惯,只有今天没有打卡,且提示词包含对应关键词(例如要求我再接再厉、或者打卡频率太低必须坚持时),才会显示在这个视图里。其中「今天没打卡」的这个条件,就可以用这个「上次打卡时间」来筛选。
然后这张视图就会列出我今天需要打卡的习惯,如果我状态不好,只需要尽量完成这些打卡就好了。某种程度上,可以减轻自己的压力。
最后
这个打卡系统建立好了之后,日常使用还是很方便的。我把一部分视图放在我的任务管理系统里,这个任务管理系统的页面一直放在我电脑的副屏上,我可以很方便地进行习惯打卡。就算在外面,我也可以在手机上打开 Notion 打卡。
顺带一提,这个「行动管理」页面也是经过了多次迭代之后成型的,它遵循「目标 -> 项目 -> 任务」的逻辑链路,参考了 OKR 和 GTD 等著名的方法论。关于这个系统,我大概也会写一篇文章讲一讲。
感谢你读到这里,希望这篇文章对你有所启发。