普通视图

发现新文章,点击刷新页面。
昨天以前極客死亡計劃

自厌式成长

2026年1月8日 10:39

我渐渐发现,人在某些时候渴望成长和改变,并非是为了成为「更好的自己」,而是为了摆脱那个「令自己讨厌的自己」。比如,由于讨厌自己的内向和社交恐惧症,于是逼自己去做只有极度外放的人才能做出来的事情——我有一段时间去做过推销的兼职,那段时间我每天都在逼自己做不想做的事情,精神状态变得很差。那份兼职最后的结果是:我给主管写了六千字的信宣泄我的不满,把她也弄得很焦虑;她婉言相劝,我执意要走。

我的情绪爆发和当时部门的管理方式也有关系,不过我想我之所以会把情绪积压到一起,无法正常沟通交流,主要原因是我对自己太严苛了。我这么做的原因很复杂,一方面受到了身边人的影响,另一方面我的确对自己的性格感到不满意。那段经历给我留下的印象太深刻,以至于我现在看到教人变得外向的说辞,都会鄙夷地将其视作成功学。社交能力和宜人性是两个完全不同的属性。

我在试图搞明白的问题是:因为讨厌现在的自己,所以变成另一个让自己不那么讨厌的人,这样的改变,算得上是成长吗?

Personal development or self-improvement consists of activities that develops a person’s capabilities and potential, enhance quality of life, and facilitate the realization of dreams and aspirations.

个人发展或自我提升由一系列这样的活动组成:发展人的能力和潜力,提升生活质量,促进梦想和志向的实现。

—— Wikipedia

从我局限的经历来看,那段让我身心健康都受到了些许摧残的经历的确给我带来了成长。我现在在路上遇到推销员会直接拒绝,步子都不带停的,如果真的遇到感兴趣的产品,也能聊得有来有回。我记得我还在上小学的时候,爷爷六十岁大寿,主持人叫我讲几句祝福的话,我看着台下一桌又一桌的来宾,一句话也说不出来。而前不久,某个班委问我能不能担任团日活动的领学(我不知道那是什么东西,因为我根本就没去参加),因为她觉得我「口才不错」。尽管这两件事情间隔了好几年的时间,但我很肯定,我社交能力和公众演说能力的提升是在短时间内发生的,而且和我逼自己干了自己不想做的事情关系很大。

这种变化的确也提升了我的生活质量。我记得我高中时的生日聚餐,明明是我要约同学聚餐,我却不敢和陌生人说话,只能让我的母亲帮我打电话订座。我只敢和熟悉的人打交道,用餐的时候,我也不敢自己叫服务员添饭,而是会在餐桌上问其他人「你们还要打饭吗?」,然后就会有社交能力健全的朋友隔着老远叫服务员过来打饭。嗯,现在可以自己做这些事情了。

至于梦想和志向,这点有些太宽泛和抽象了。如果我的梦想是创造出人们喜欢和需要的东西或内容,而实现它的确需要我能够正常与人沟通,那还是要承认,逼自己是有用的。

那这么说的话,自厌式成长,这个听起来有些不太健康的名词,似乎也算得上是成长了。

不过,我仍然对陌生的环境和陌生的人感到不安。最近我突然没办法通过学校门禁的人脸识别验证,好几次都是保安帮我开的门。我没办法自己在系统上处理,遇到了无法解决的问题,只能找辅导员求助的时候,我也耗费了好多心力做心理建设,才把信息发了出去。后来辅导员帮我联系了保卫处,我得知要自己跑一趟行政楼找信息中心的某某老师帮我处理时,我焦虑得开始咬手指甲。

我想,怕生这个性格特质是很难甚至无法改变的,如果我一直保持自厌的态度,攻击自己的情绪,那只会造就更多的负面情绪。

撸猫的时候要顺着猫毛摸,人的情绪和猫一样,与其对抗,不如顺其自然。这并不意味着要让自己被情绪拖着走,只需要学会正视和处理情绪。我想,我之所以会发展出自厌的心理(根据我的身边的人的观察,我相信这很常见),和我从小经受的教育脱不了干系。这些教育方式和社会风气早就成了陈词滥调,我不想过多提及,只想举一个例子说明。

我小时候很爱哭,我已经记不清有多少次我的爷爷教育过我「男子汉流血不流泪」。由于我从未被教育过如何恰当地表达情绪(我相信身边的大人没有几个人处理情绪的方式算得上健康),幼年的我能想到的唯一方式就是哭喊。尽管哭也是一种宣泄情绪的方式,健康的人在哭过之后通常会感到情绪缓和,但对于一个需要进行社会化的人来说,更重要的是识别情绪产生的原因以及有效地表达自己的诉求。

理想情况下,如果某人的行为让自己感到不适,第一步是识别情绪本身,即「我不高兴」;第二步是识别情绪的原因,即「XX 做了某件事情」;第三步是表达诉求。表达诉求可以参照《 非暴力沟通 》一书中提出的四要素:观察、感受、需求和请求。一个例子是:我看到你把客厅的大灯打开了(观察),我觉得有点不高兴(感受),因为我希望晚上的室内光源尽可能暗下来,这有助于我的睡眠和生物钟调节(需求),所以我希望你能开另一个更暗的暖光灯(请求)。

我在我的整个童年乃至青春期都无法做到情绪稳定,因为我的情绪都发生在内部,从未被表达出来。身为男性,在东亚社会,表达情绪是不被鼓励的,我只能在情绪积压到完全无法忍受的时候大声哭出来,而这个时候,我的情绪也没办法得到处理,因为迎接我的是另一句「男孩子不能哭」。换句话说,我就应该把不满都憋着,全部堵在心里,死死按住,直到我患上抑郁症、双向情感障碍或者别的什么精神疾病。

这种处理情绪的模式在我成年之后依然有所保留,我在前文提到,我写了六千字向我的主管宣泄不满,原因就在于我在一开始没能先好好处理自己的情绪,不知道自己可以在早些时候沟通表达,或者至少找个人倾诉,而是等到忍无可忍的时候才一股脑地放了出来。尽管很久没有大哭大闹,我释放情绪的方式依旧不健康。

在过去的很长以短时间里,我想要改变自己的性格,是希望自己能有能力处理周期性的如潮水般涌来的情绪。差不多一年前,我写了一篇题为《 用文字埋葬自己 》的散文。那段时间,我时常把那部分汹涌、可怕的情绪化的自己描述为一种阴暗潮湿的怪物,并害怕、厌恶它。阅读那段时间的文字,我感到自己的不安,那个时候的我只想要逃离,可我怎么也逃不出自己。不久后,我写了一篇题为《 电梯里的无头天使 》的小说,讲了一个半天使半恶魔的存在意外从主人公的身上被甩出来的故事,在那个故事里,我必须面对那个软弱、丑陋、对一切都感到害怕、毁掉了自己生活的自己。故事写到结尾,我意识到我似乎跟自己和解了——他正是因为弱小,才需要被另一半的自己照顾啊。

如果把人的意识分成理智、情感、情绪和本能,情绪一定是其中最弱小的一个。理智可以通过思考达成自洽,情感本身就能支撑起存在(就连痛苦也是),本能会迅速地为机体提供解决方案,而情绪,就像是一个需要被悉心照料的小孩子。

所以,现在的我正在努力不去厌恶自己的情绪,毕竟,能够准确地识别自己的情绪,遵从自己内心的价值感,是难能可贵的能力。

我的一个朋友一直相信 MBTI 类型是能改变的1。尽管 MBTI 反映的其实并非性格而是底层认知偏好,但他显然不了解这些理论知识,觉得改变 MBTI 就是改变人格,甚至改变命运。他身为 INFJ,告诉我他想变成 INTJ 或者 INTP(据说有一些 INFJ 也希望变成更开心的 ENFP)。我在想,这是不是因为他多少有些厌恶自己 F 的部分呢?

MBTI 尽管更多的是一个社区驱动的大众心理学概念,但要认真讲的话,其中还是有不少有启发性的观点。大部分人谈 MBTI 的时候只谈二分法,而不了解荣格八维认知功能,而荣格提出的心理类型是迈尔斯发展出 MBTI 理论的基石。简单来说,MBTI 把荣格提出的八种心理类型变成了八种认知功能,指出没有人会只使用一种认知功能,而是会使用全部八种,只是偏好不同、擅长的功能不同。由此,八种认知功能在个体层面又分化出了主导功能和辅助功能等概念,八维功能的排序组成了认知功能堆栈(function stack)。

一般来说,人们只使用排在前四位的认知功能,而后面的四位被称作阴影功能,在个体处于焦虑、不健康的精神状态下显现(这也是为什么 MBTI 测出来的结果会不准,个体在做测试时极有可能处于使用阴影功能的不健康状态)。其中,第四位功能被称作「劣势功能」(inferior function),这是阳面功能中,个体最不擅长的。

拿 INFJ 举例,他们的劣势功能是 Se(外倾感觉),这意味着 INFJ 不擅长感知当下。我的一个 INFJ 朋友在外买票的时候,前台工作人员表示可以现场购买,有学生优惠,而他却一直沉浸在自己的世界里,在抖音等各个平台搜索优惠,然后问我「你想不想省几块钱?抖音上只要 56」。随后我和前台工作人员齐声告诉他:「学生优惠只要 52」。更广泛地来说,INFJ 也不擅长感知当下的快乐,更关注逻辑推演而非外部事实。

MBTI 社区还有一个有意思的理论叫作「循环」(Loop)。内倾型个体的主导功能和第三功能都是内倾的,外倾型个体的主导功能和第三功能都是外倾的,比如 INFJ 的功能堆栈的前四位是 Ni-Fe-Ti-Se。对于内倾型个体而言,使用内倾型的认知功能会更舒服,外倾型同理。循环指的是内倾循环或外倾循环,一般是 1-3 功能循环,指个体只使用主导功能和第三功能,忽略了辅助功能,更不用说劣势功能了。循环是不健康的心理状态,INFJ 如果陷入循环,就会只使用 Ni 和 Ti 功能,即内倾直觉和内倾思考,颇有一种不关注真实世界的虚无主义哲学家的感觉。由于辅助功能 Fe 不被使用,陷入循环的 INFJ 会显得有些不近人情,甚至会抛弃道德判断;Se 也不被使用,前文提到的 INFJ 的劣势会更加明显。

如你所见,MBTI 社区对健康、健全的定义基本上可以概括为「使用并发展全部四种阳面功能」,尤其是要提升自己的劣势功能,学会更好地使用自己的主导功能。

致力于改变自己的 MBTI 类型(这根本不会发生),而非全面发展自己的认知功能,与我在前文所讲的逆着猫毛摸和顺着猫毛摸如出一辙。倘若那位 INFJ 个体真的要变成 INTJ,那就需要把自己功能堆栈从 Ni-Fe-Ti-Se 变成 Ni-Te-Fi-Se,把外倾的情感功能变成内倾的,把内倾的思维功能变成外倾的,然后调换这两个功能的位置。如果变成 INTP,INFJ 的主导功能甚至会从 Ni 变成 Ti,从感知功能变成判断功能。这意味着什么?意味着个体需要改写自己的认知偏好,克制每一个近乎本能的冲动,去做哪些一般来说的自己会讨厌的事情——然而,这在 MBTI 的理论下,最多也只能提升个体对部分功能的熟练程度而已,无法改变认知偏好。INFJ 可以变成更好的 Se 使用者,这不代表他们会变成 ESTP 或者 ESFP,他们的主导功能仍然是 Ni,这层想象力和直觉无法被改写。INFJ 可以使用 INTJ 擅长的 Fi 和 Te 功能,但这对他们来说并不会觉得好受,因为这是他们的阴影功能。还记得阴影功能在什么时候会被使用吗?焦虑和精神状况不稳定的时候。强迫自己使用完全不擅长的阴影功能,本身就是不健康的心理状态的体现。

如果 MBTI 类型会改变,这一套有关循环、劣势功能和个人成长的理论就都没有意义了。你当然可以鄙夷 MBTI,它本身就不是正经心理学2,但如果真的要讨论 MBTI,还请尊重它的内部逻辑。

试图改变自己的人格类型,会把自己往焦虑症上推。顺着猫毛撸的做法是提升和发展自己的劣势功能,这是 MBTI 社区很提倡的做法。所谓的「成为高阶 INFP」或者别的高阶人格的说法,大部分都是指发展劣势功能,比如擅长使用 Te 功能的 INFP 就可以被称作「高阶 INFP」——尽管我不太喜欢这个说辞。比如,我之所以不喜欢这个说辞,是我的主导功能 Fi 在工作,我的价值体系里,人格是不应该有高低之分的;而我之所以能理解「高阶」这个用词及其提出者背后的逻辑,是我的 Te 在工作。INFP 很有可能因为讨厌一个东西或者觉得某个东西不重要而远离它,而发展劣势功能 Te 能帮助 INFP 个体更全面地认识世界。

回到一开始的,更抽象的讨论上来。自厌式成长或许能帮助自己提升能力,收获一定程度的成长,但原先自己讨厌的特质依然会存在,毕竟那就是自己没办法割舍的一部分。社交能力的提升无法改变自己更喜欢独处的事实,也无需改变。更健康的做法是扬长强短,发挥自己最擅长的心理功能,发展自己最劣势的心理功能。

这也是为什么我明知类型学理论无法概括所有人,却还是热衷于研究和讨论人格类型——类型学能帮助个体认识自己,并借此发现自己的长处和短处,成为更健全和成熟的人。


  1. 关于为什么我认为 MBTI 类型不会改变,请参考 第 61 期周刊的内容  ↩︎

  2. 是一对迷恋荣格的作家母女创造的理论,本文提及的大部分内容还都是社区提出的,而非正经的心理学者提出的 ↩︎

稻草人周刊 Vol.62

2026年1月5日 10:13

Wonderful, Wonderful

Johnny Mathis

上周去看了《魔法坏女巫 2》之后,对巫师和 Glinda 合唱的那首《Wonderful》印象很深,看音乐剧《雨中曲》的时候也听到了 Wonderful 这个词,不知怎么地,竟然触发了有关另一首歌的回忆,歌名就叫作《Wonderful, Wonderful》——这是《绝望的主妇》最终季最后一季,Karen McClusky 请 Bree 帮她找了一张唱片,她在病床上离世时就听着这首歌。同时进行的还有另一条故事线,Susan 的女儿 Julie 在医院诞下了新生命。这个结局让我印象很深刻。

⋈︎ · 连接

你的工作是交付可用的代码

📜

作者观察到一种现象:许多会使用 LLM 编程工具的新人,会在用 LLM 写出一大堆代码之后直接提交 Pull Request,指望同事或者开源项目的维护者在审查代码的时候解决问题。这很不负责,不仅在浪费其他人的时间,还完全没有尽到一个开发者的职责。

作者认为在提交 PR 时,应当附上「代码能跑」的证明,以下两个步骤都不能被跳过。

  1. 手动测试,给出输入和输出,提供文字输出、截图或者录屏
  2. 自动测试,提交的代码中应当集成相关的测试

其中,自动测试甚至也能用 LLM 写,尤其是在原先就已经有测试代码的情况下,Coding Agent 甚至会在没有被显式要求的情况下按照现有的模式编写测试。此外,不能因为有了自动测试就不进行手动测试,测试不总是能覆盖所有情况。测试应当包含最主要的操作路径(happy path)和边缘情况(edge cases)。

作者还提到了一个很有启发性的观点:计算机不能被追责(held accountable),程序员作为人类的工作就是为交付的成果负责。 我一直以来也有一个类似的观点:LLM 无法取代人类,因为一个软件系统无论如何都要有输入才能工作,换句话说,就是要有人写提示词、维护上下文,以及编写文档。

关于 AI 辅助写作

📜

作者分享了他使用 AI(准确来说是 LLM)辅助写作的方法,读完之后我对这种写作方式有了一些改观,我想这对一部分人来说大概是有帮助的,只是我自己仍然会坚持每个字都要自己敲出来。

作者在编写技术文章时,主要用 LLM 绘图和生成示例代码,因为自己画图和改代码很费时间——我觉得这是好的,能让作者把注意力放在写作上(理清思绪、组织语言、尽可能表达清楚自己的意思),不去关注那些细枝末节的事情。作者是让 LLM 用 Excalidraw 画图的(应该是 JSON 格式),我觉得完全可以换成 Mermaid 或者 PlantUML 等绘图语言,这样画出来的图风格更统一、自己写代码画图也不会像用 GUI 画图那样费事费力,就算用 LLM 生成,也能避免因 LLM 极其不稳定的空间想象力导致的错位问题。1

作者也会用 LLM 编写生活类文章,他表示用 LLM 辅助这类写作反而让时间变长了,因为他会先用自己的话把故事讲一遍给 LLM 听,再让 LLM 写进文章里,然后还会对风格和细节提出进一步的要求。说实话,看到作者写出了「让小标题更加简短和文艺」这种提示词的时候,我还是很难对这种写作方式表示认同——如果自己本来就不是一个「文艺」的人,那为什么要让 LLM 帮你把文章写得文艺呢?你本来就不会也不需要写出那样「文艺」的文字啊?

这大概和社会文化脱不了干系,大家都想要写出「好」的文章,而不是完全真诚的表达自己——真诚自然也包括写作风格上的真诚,我认为写作风格就是作者人格中某一部分的自然流露。

形成个人风格的最佳手段是尽力自然而诚恳地写作。构成个人风格的不是刻意为之的文风,不是充满诗意的段落,也不是对文字结构的疯狂追求。写作者无需刻意为之,风格就会自然呈现。

—— Lawrence Block《 小说的八百万种写法

即便不是个大文豪也能写作,每天都在博客写流水账也会有人看,甚至愿意读这种内容的人会更多。我得承认,尽管博客的中文文章没有一句话是 LLM 生成的,但 英文博客 的前五篇文章都有大量的语句是用 ChatGPT 修改过的,因为当时的我觉得一些措辞太尴尬,而 ChatGPT 改过的句子明显好多了。

后来我想明白了,我本来就不是作家,不是英语母语者,写不出完全没有错误、行文流畅、语言自然的文章是理所应当的,我犯错是应该的。我很喜欢 LessWrong 的欢迎页面的开头引用的一句话:

The road to wisdom? Well, it’s plain and simple to express:

Err

and err

and err again

but less

and less

and less.

– Piet Hein

我最近在读《The Design of Everyday Things》,其中有一章的标题就是:To Err is Human.(犯错是人)LLM 可以写出平均的「好」,但写不出真实的「坏」,更何况,LLM 生成的内容也逃离不了幻觉、错误,写出来的文章也绝非完美(写文章根本没有完美这一说!)。为什么要让自己给 LLM 当 Agent,修改和清理一个计算机程序生成出来的东西呢?


跑个题。读完这篇文章,我想起来我观察到有不少人虽然不用 AI 直接辅助创作,但会用 LLM 帮他们改文法问题。把文章草稿复制粘贴到聊天框,让 LLM 帮忙找错字和语法问题等。对此,我也发表一下我不太友好的观点。

我觉得用 ChatGPT 这样的大模型帮你的文章找错别字是一件很的事情,因为 LLM 是生成式模型,不会像传统算法一样关注你的每一个输入,注意力机制很容易让 LLM 忽略用户输入文本中的某些内容,导致一部分错误没有被纠正。更致命的是,LLM 无法避免幻觉,纠出不存在的问题也是完全有可能的。甚者,LLM 完全有可能「不知道」正确答案,自信地帮你把正确的东西改错、把小错改成大错。

简单来说,真的要用软件辅助改错别字,用词典、语言概率和专门训练用于纠错的小模型效果会好得多得多,它们能做到稳定和准确地匹配。拼写检查在上个世纪就已经实现了(现在几乎每个编辑器都自带拼写检查),语法检查也在十几年前就有人做了(如 Grammarly),只是中文的语言处理工具相比英文没有那么成熟而已,LLM 不是必须的——人们对 AI 的狂热已经让他们开始忽视早就存在的、更好的解决方案了。

解析到本地 127.0.0.1 的域名

📜

一般来说,程序员在本地进行开发的时候会使用 localhost(指向 127.0.0.1 的一个域名)加端口号进行测试,比如 Vite 的 dev server 就默认跑在 5173 端口,运行 npm run dev(或者 pnpm dev)之后就可以启动 dev server,通过 localhost:5173 访问正在运行的服务器,用于开发和调试。

这么做一般来说没问题,但有几个弊端:

  1. localhost127.0.0.1 都太长了
  2. 如果有多个服务同时在跑,只能通过端口号区分,不如子域名直观
  3. 没办法配置 SSL,只能使用 HTTP 连接
  4. 很多 OAuth 提供商不允许使用 IP 或 http:// 协议的网址作为重定向 URL
  5. IP 和域名处理 Cookie 的逻辑不同,子域名之间可以共享 Cookie

简而言之,有一个解析到 127.0.0.1 的域名用作本地开发会很方便,但自己注册太贵,用现有的域名可能也太长,本文的作者收集了一些本身就解析到本地的域名,其中最短的一个是 lvh.me,顶级域名和子域名都解析到本地,可以在开发过程中使用。

顺带一提,我第一次知道 *.localhost 也是默认解析到本地的,不只可以用 localhost

AltBot 的关停

本条由 @doincyberspace 投稿

这期周刊的 AI 含量有点高,还请读者见谅。AltBot 是 Fediverse 上的一个机器人账号,由 @micr0@wetdry.world 创建,开放给所有 Fediverse 用户免费使用,用于给图片自动生成 Alt Text。

Alt 是 Alternative 的缩写,也是 HTML <img> 标签的一个属性,一开始是图片失效时代替(alternative)图片显示的文字。如今,Alt Text 也用于保证网站的可访问性(Accessibility),盲人可以通过 Alt Text 了解他们看不见的图片内容。为图片添加 Alt Text 是如今 Web 开发的共识,Mastodon 等联邦社交媒体也要求用户在发布图片时为图片添加 Alt Text。为了帮助用户更方便地为图片添加 Alt Text,@micr0 创建了 AltBot。关注 AltBot 之后,如果账号上有发布没有 Alt Text 的图片,AltBot 就会通过本地模型识别图片,帮你编写文字。

@micr0 的本意是让 Fediverse 变得更具包容性,毕竟觉得麻烦的话,大多数人可能选择不写 Alt Text,这完全是可以的。最近有盲人用户发声批评 AltBot,希望人们反对它,原因是他经常在时间线上读到那些用 AltBot 生成的糟糕描述,很多根本就不准确。他认为人类写的 Alt Text 永远是更好的,至少是下了心思想让盲人读者理解,而不是把写 Alt Text 当作负担,必须要用自动化的方式应付了事。

Post by @anantagd@ieji.de
View on Mastodon

这件事情发生后,@micr0 很快关停了 AltBot,这之后每个使用 AltBot 的用户都能看到一开始发声的那位盲人用户发的帖子——他做了他能做的,尽可能让更多人听到盲人群体的声音。不过,这条讨论串后面的内容变得有些过于情绪化了,这位盲人用户甚至称「健全人对我而言也是一种负担」。

Post by @anantagd@ieji.de
View on Mastodon

后来我看到了 @micr0 的嘟文,他表示自己在收到消息之后很快做出了行动,暂时关停了 AltBot,一直有在收集反馈;在先前那条讨论串的回复中,他也有在积极跟其他用户交流想法,提出了改进方案。从一开始,他就有追踪能源使用,因为他关注环保;为了保证用户隐私,他使用的是本地模型而非云服务。他为 AltBot 花了很多心思(成本就更不用说了),然而却有人进行人身攻击,表示他「太笨了以至于不能理解 AltBot 是有害的」。

Post by @micr0@wetdry.world
View on Mastodon

这起事件倒没有引发我对无障碍设计的思考,但它让我反思:为什么人们不能一开始就友善地沟通,而是在情绪积压到一定程度过后直接「开战」呢?为什么要伤害那些真正想把事情做好的人?

⁂ · 星群

Infographic

一个用于绘图的语言,之前在《 关于一切的纯文本解决方案指南 》中提及了 Mermaid、Graphviz 和 PlantUML 等用于绘图的标记语言,这周我又发现了一个新的绘图语言。Infographic 和 Mermaid 很像,但解决的是不同的需求。在我看来,Infographic 更注重快速构建美观的图表,其风格更像是会插入在 PPT 里的图表。Infographic 是专门为 LLM 设计的,如果用大语言模型生成 Infographic 代码,会比直接用文生图模型高效、稳定得多。

访问: GitHub - antvis/Infographic

witr

名字是 Why is this running? 的缩写,witr 是一个命令行工具,用来查询特定进程的 ID、用户、来源、锁等信息,最主要的是回答「这个进程为什么在跑?谁启动的?」这几个问题。如果进程有什么可疑的举动,拥有某些权限,这个工具也会将其作为警告列出来。

我还挺喜欢这种以疑问词或问句缩写明明的小工具的,常见的有类 Unix 系统的 whereiswhich,用于查询某个命令的可执行文件和相关文件的路径。我之前也用相似的命名方式写过 wthis ,用于查询 Homebrew 软件包的信息。

访问: GitHub - pranshuparmar/witr: Why is this running?

NeoDB

我在去年年底加入了 Fediverse,拥有了一个 Mastodon 账号。最近在 Fedi 上冲浪的时候,发现了 NeoDB ,也是联邦宇宙的一部分——去中心化、可以自托管、支持 ActivityPub 协议。从需求上看,NeoDB 基本上是豆瓣的开源替代品。如果不想折腾,也可以使用 官方实例

我以前就不怎么爱用豆瓣,从 2024 年开始,读过的书、详细的书评和评分都发布在博客上了,不过电影、演出和剧集倒是没有好去处。使用豆瓣等平台,我没办法真正拥有自己的数据,这导致我一直不愿意在上面认真记录。NeoDB 看起来是一个不错的选择,可以自由地导入导出数据,就算我不想继续用官方实例了,也可以自建然后把数据重新导入。

我不会补记自己以前看了什么,但如果你对我最近在看什么、我对各种文化产品的评价如何感到好奇,可以关注我的 NeoDB 主页 ,我也会把内容同步到 我的 Mastodon 账号 上。

访问: NeoDB

↯ · 当下

RIME

之前一直对输入法没有太多感知,秉持着能用系统自带软件解决的需求就绝不额外安装的原则,我一直没有去尝试配置繁琐的开源输入法 RIME 2,毕竟 macOS 自带「小鹤双拼」,可以开箱即用。这周接触到 RIME 的契机,是我上课摸鱼的时候在 Fediverse 上吐槽自己在终端输入 brew update 时忘记切换输入法,意外用 brew 打出了「别惹我」这四个字,没想到引发了一连串有关输入法词库的讨论。

我之所以能用 brew 打出「别惹我」,是因为 r 在小鹤双拼里映射到 uan 这个韵母,而 buan 并不是中文里存在的读音,所以 br 没有被识别为一个字,输入法把我的输入拆成了 b-re-w,于是就打出了「别惹我」。

后来有人提到,在电脑上用雾凇拼音就不会打出这三个字,而是会直接打出 brew 这个英文单词。这时我才意识到,原来中文输入法也能对英文输入进行优化。于是我很快安装了 鼠鬚管 (适用于 macOS 的 RIME)和 雾凇拼音 (一个广受好评的 RIME 词库配置),还找到了一个模仿 macOS 原生输入法风格的 配置

大概是经常折腾开源软件习惯了,配置 RIME 我只用了不到半个小时,之后就用得很顺手了。

鼠鬚管的输入法菜单,不过为什么图标是海王星的占星符号呢?

可能需要用新输入法写过长文之后才能明白有好词库的爽感,目前比较令我惊喜的点是 macOS 的各种版本名居然也在词库里。

泡温泉

跨年夜的时候一个朋友问我想不想元旦去泡温泉,我正好有空,便答应了。顺带一提,这个朋友是去年夏天一不小心喜欢上的那个直男…… 对,我也不知道他为什么找我,我也不知道为什么我答应了。总之…… 元旦那天晚上和直男泡温泉去了,嗯。不过我确实对他没感觉了,而且经过了半年的训练,我觉得我的身材比他好。

本来以为这种需要我付钱进去的场所会有单独的更衣间,结果没有,但还好淋浴间有隔板,只是隔板比公共卫生间的门还矮。有些男人似乎完全不介意,直接在储物柜旁边换衣服,什么都不遮,看到了很多不该看到的东西(而且并不好看)。我去年夏天就是因为相同的原因逃掉了所有的游泳课。

更衣大概是体验最差的环节,泡温泉的过程还是很不错的。人类似乎会因为生物本能而靠近热源,人几乎都聚集在温度最高的几个小池子里,从第三方的视角观察那个场景还挺奇妙的。泡在泉水里很舒服,一方面整个身体会温暖起来,另一方面身体会被浮力拖举起来,感到很放松。我还把头放在岸边,让身体的剩余部分扶起来,就这样闭着眼睛放空了好一会。不过旁边有小孩子玩水,还是得注意周边的环境。

第一次泡温泉还让我发现了关于自己的有趣的一点:我更耐寒,但不耐热。朋友裹着毛巾在岸上走一直发抖,我倒觉得还好,但在汗蒸房是真的待不下去。总的来说,体验中规中矩,如果有下次,我会选择私汤。

另外,在水里做卷腹会有用吗?

开源、自由、本地优先和去中心化

去年全面从 Windows 转向 macOS 和苹果生态,许多服务都开始使用苹果的原生应用,也花钱购买和订阅了不少 SaaS,原因是我想要获得更高质量的软件体验。不过,最近 Apple 的软件质量越来越不尽人意,再加上随着自己作为程序员的认知提升,我对数据和隐私的敏感度也逐渐提升,所以 2026 年我在数字生活方面的目标就是:全面拥抱开源软件和自由软件,逐渐转向本地优先和去中心化的解决方案。

开源软件即开放源代码,而自由软件则是允许使用者自由使用、分发、执行、研究、改动甚至售卖的软件。这两个概念有所重合,比如使用 MIT、GPL 和 Apache 开源许可证授权的开源软件都是自由软件,但并非完全一样。所谓本地优先,就是我的数据主要储存在本地,而不是上传到云端,同时,我的数据应该是以纯文本、Markdown 和 JSON 等开放的数据格式存储的,我可以对数据做任何事情,也可以随时拍屁股走人,带着数据换个软件用。至于去中心化,就是说软件服务不由某个经销商运营,而是由数个独立的服务器组成的分布式网络,用户可以自己搭建服务器或者选择自己信任的服务器使用,而不是把数据交给某一个邪恶的大公司。

我还在做的一件事情是去 Chromium/Electron 化,目前已经能用 NeoVim 代替 Obsidian 了,用上 Claude Code 之后我也不需要用某个基于 VS Code 的 AI IDE 了(再加上我本身对 LLM 的需求也没有很高),所以我可以很荣幸地宣布:从此我的 MacBook 上没有一个多余的 Chromium 内核。3

这种选择软件的原则会带来以下好处:

  1. 你真正拥有自己的数据,不会因为某天腾讯或者 Google(Apple 也会)因为某些莫名其妙的原因把你的账号封禁而失去所有的数据;
  2. 只有你能决定你的数据被用来做什么,你的数据不会被用作算法推荐或者其他肮脏的交易;
  3. 如果你不喜欢某个软件或服务,你可以带着你的数据随时退出(你知道吗?如果你尝试在最新版本的 Edge 浏览器上搜索 Chrome 并尝试安装,Edge 会不厌其烦地告诉你它和 Chrome 使用的是相同的技术,而且更值得信赖4。我不知道你怎么想的,总之我没空陪他们玩。)

目前我的各种软件选择如下:

  1. 浏览器: Helium
    • 我不用 Google Chrome;事实上,几乎任何基于 Chromium 内核的浏览器都能达到和 Google Chrome 差不多甚至更好的浏览体验和最新的 Web 特性
    • 需要登录才能使用的 Arc 我是绝对不会用的
    • 我不会用任何没有丝毫数据安全保障也无法带来真正体验提升的 AI 浏览器
  2. 编辑器: NeoVim
    • Obsidian 很好,尽管不开源,但本地优先,除非需要 Sync 否则不用联网,是个有原则的商业软件。不过,唉,你为什么要往软件里套一个 Chromium 内核呢?
    • VS Code 由邪恶的 Microsoft 开发,不好;VSCodium 是 VS Code 的自由软件版本,很好,但仍然是用 Electron 写的,而且自定义空间远远不如 NeoVim。
    • JetBrains 的产品还行,也有免费使用的教育版,但 GUI 界面太臃肿,我不喜欢,而且最近还加上了好多烦人的 AI 功能——不要吃我的 MacBook 存储了!
    • Zed 很好,大概是我最不舍得放弃的代码编辑器了,是用 Rust 编写的 VS Code 替代品,启动速度很快,界面简洁,只是 NeoVim 太诱人了…… 如果你需要一款基于 GUI 的代码编辑器,我很推荐 Zed。
  3. 社交媒体:Mastodon(实例: c7.io
  4. 书影音:NeoDB(实例: neodb.social
  5. 输入法: RIME
    • 我不用大家都很爱用的微信输入法,原因就是我绝对不会把输入这种每天都会用到的操作交给腾讯这种东西的
    • RIME 不仅开源,词库等配置也是通过开放的数据格式储存在本地的,可以随时迁移,而且可自定义性极强
  6. 邮件: Migadu
    • Migadu 是一家瑞士的小公司,提供邮件服务,最低方案一年 $19.9
    • 我很喜欢 Migadu 的「观点鲜明」,它们甚至写了 一页长长的清单 ,罗列你可能不需要或者不想使用它们家服务的理由
    • 邮件系统本身就是去中心化的,只要你拥有自己的域名,就可以随时更改 DNS 记录换到另一家邮件服务,或者自己搭建邮件基础设施,也不难

诚然,微信这种软件我是没有办法不用的,我能做的只是减少使用频率,同时在这样的平台上产生尽可能少的数据,把我主要的数字生活建立在我信任的互联网上。此外,我也不排斥 SaaS,像是运动健康相关的需求,我依然会选择与系统集成更好的手机 App,但我仍然更偏好尊重用户数据和隐私的开发者,比如 Gentler Streak 团队5


  1. 详见:《 关于一切的纯文本解决方案指南 》 ↩︎

  2. 还在用 Windows 的时候其实有尝试过,但当时还是个麻瓜,没折腾多久就放弃了。 ↩︎

  3. 如果你不清楚我在说什么:现在很多跨平台的桌面端软件,都是使用 Electron 开发的,这个框架允许开发者使用 Web 前端技术开发桌面端软件的用户界面,可以极大节省开发成本,提高效率。然而,Electron 会把一个完整的 Chromium 浏览器内核打包在软件里,这使得软件包变得很大,而且完全没有必要。我不反对网页套壳,相反,我很喜欢 Tauri 和 Wails,这两个框架与 Electron 类似,但它们使用操作系统默认的 WebView,不会把一整个浏览器打包在软件里。 ↩︎

  4. 来源: IT 之家  ↩︎

  5. Gentler Streak 每次启动都会从苹果健康里读取数据并进行分析,数据永远不会离开用户的设备。 ↩︎

I now use Migadu for my emails.

2026年1月2日 12:13

I like emails. They’re quiet and you don’t have to rush. And they’re decentralized. You get to choose who stores your data. If you’re on WeChat, Line, or whatever IM apps you’re using, you’re forced to stay there because that’s where all your contacts are. Emails are portable. Save your mails as .eml files and store anywhere. Keep your address, if you own your domain name, and migrate to wherever you want, preferably someplace you trust, and people can still mail you with the same address.

I was using Tencent Exmail for a long time. It’s an evil service provided by an evil big corporate if you don’t know, as evil as Google. It’s hard to get a custom domain email address in China. People rely on emails less and there are fewer options. Some people use Cloudflare or similar services to create an alias for their email, but that’s still your data in a BigCo’s data center. What you get is merely a cool address.

Not really paranoid about privacy but I do feel more comfortable if my mails don’t go through people I don’t trust. So I started looking for new emails services.

I searched and asked ChatGPT, ruled out some hard “No"s, and got 3 options:

  • PurelyMail
  • MXRoute
  • Migadu

They’re all small services. Best of all, they’re cheap, like insanely cheap. Migadu’s micro plan costs $19.9 annually. PurelyMail costs $10. MXRoute was defintely the cheapest, $15 for 2 years! But that offer is only available when they’re doing a promotion.

They all offer unlimited domains and unlimited addresses. Only Migadu comes with a few constraints, 200 emails in per day and 20 out per day, and also you only get 5GB storage (But they’re all soft limits. There is tolerance).

Eventually I chose Migadu, for two major reasons:

  1. PurelyMail and MXRoute are both run by one man. They’re not a corporate. It’s good but I keep worrying what happens if their owner gets hit by bus some day… Sorry, it’s not a nice thought. Another downside is that you don’t get much support from your service provider. It could be really frustrating if something unexpected happens. You’re on your own.
  2. Migadu is a small company located in Switzerland, where EU laws ensure the best privacy. Privacy was the whole point I’m migrating my email service after all. It’s a reasonable choice.

Migadu is surprisingly honest about their service. They have a Pro/Cons page (where pro is actually absent) listing all the reasons why you probably don’t want to use Miagdu. For example, they’re made for human emails only, meaning they don’t send bulk transactional emails. They are honest about their pricing not being the cheapest, their spam filters not being perfect, their server not being in Switzerland but in France… And they offer fully-functional trials, so you know exactly what you’re paying for.

I love how opinionated they are. They do things their way and they are honest about it. They don’t dazzle customers with fancy words. They don’t even use Web Analytics or track their users in any way!

The setup was smooth. DNS configuration can be intimidating even if you have experience, because configuring email systems is way more complicated, with multiple TXT, CNAME, SRV records. Merely 2 MX records with not work. They have clear documentation on setting up your DNS. All you have to do is read, understand, and copy. Within 10 minutes, I can receive and send emails using Migadu with no problems.

I posted on Fediverse and asked people to send anything to me for testing. And I ended up receiving some really interesting mails. If you’d like, mail me at hi@guhub.cn and send whatever you want! I’d be happy to make some new friends here.

So, I now use Migadu for my emails. And I hope you also enjoy your email service :3

写在 2026 的开头

2026年1月1日 00:00

今年排在我的 Apple Music 2025 年度榜单榜首的音乐是 Lady Gaga 的《Abracadabra》,《MAYHEM》也是我今年的年度专辑。总感觉今年没有听太多音乐,或者说音乐已经成为我通勤路上的背景音,对耳机里播放的声音没有了感知。我知道自己需要静下心来多感受,但这显然不是能一蹴而就的。如何获得内心的宁静,真的是很重要的人生课题呢,至少,我现在还处在混乱之中。

Abracadabra

Lady Gaga

对了,本博客年终总结的惯例是要在开头展示 GitHub 贡献热力图来着。

好了,我们正式开始吧。


01 | Praeteritum

这几年养成了一个自我折磨的习惯,就是在每年的年终总结最后留下几个问题,用来拷打第二年的自己,那我就先来看看去年的自己留下了什么问题吧。

  1. 今年,你写博客有什么新的感悟?
  2. 今年,你的 10 个游戏 prototype 做完了吗?
  3. 今年有特别想要感谢的人吗?
  4. 今年发生在自己身上的,最新奇的事情是什么?
  5. 到目前为止,你认为一生中最宝贵的财富是什么?

我已经脚趾抠地、虎躯一震,快要脑死亡直接升天了——不仅因为自己提问的方式,还因为有些问题我真的不敢回答。不过,人毕竟不能对自己不诚实。

我会带着我的观点……

今年,你写博客有什么新的感悟?

相比 2024 年,今年写博客的频率的确要高很多,几乎可以说是「爆发」。

博客的每月字数统计,截取于 2025 年 12 月 30 日

极客死亡计划这个博客实际上是在去年七月份正式开始运行的,之前的博客都推倒重来,旧的文章只保留了一部分。再次重建博客的契机,应该是 这个旧博客 托管在 Vercel 上的时候被攻击了,导致我的 Vercel 免费账号超出使用限额,博客无法正常访问。当我尝试把这个用 Next.js 写出来的屎山代码迁移到别的平台上时,我遇到了各种奇奇怪怪的问题。后来直接放弃折腾,把文章内容迁移到了 xLog 这个基于区块链的博客平台,可我在绑定域名这一步遇到了莫名其妙的问题。笔者的计算机网络学得一般,所以没能排查究竟是 DNS 的哪一部分出了问题,在 xLog 的 Discord 上求助也没能得到解决,遂再次迁移,待 Vercel 账号恢复后又用 Hugo 重构了博客。如此辗转之后,博客又在我写完《 我会带着我的观点下地狱去 》这篇文章之后被打到限额1,最后我直接迁移到了 Cloudflare,总算是脱离了无聊人士的骚扰。

嗯,所以感悟之一大概就是:真的要把网络安全学好啊!

写作对思维方式有难以言喻的影响,这和 阅读对思维的影响 还不太一样,非常微妙。一个比较直观的变化是,如今的我肯定不会问出「今年,你写博客有什么新的感悟?」这种问题了,因为我要是真的有感悟,那我早就写成一篇单独的文章了,不会单独留到年终总结里来写。

既然如此,那就从今年的文章里挑选出一些能回答这个问题的放在下面吧:

今年我关于写博客的认识,算得上是完善并发展了我去年十一月写下的一篇文章《 自我外化与表达欲 》,我把创作定义为「自我的表达」,而 2025 年,这个博客上除了我自己的思考、我自己的体验、我自己听到的看到的、我自己经历过生活过的,别无所写。

创业未半而……

今年,你的 10 个游戏 prototype 做完了吗?

我就怕你问这个…… 可以确定的是,一直到 今年四月份 ,我都还在设计一个暂定名为《Subscriptions》(订阅制)的卡牌游戏,而在那之后这场挣扎就停了下来。现在回忆起来,今年五月份刚好是我 搬出宿舍 的时间,而搬家之后,那些自制的卡牌和骰子就全部放在书架的底层了,随着 第二次搬家 ,它们也跟着我到了衣柜的最深处。然而,不管有没有搬家,我都还有两个未完工的游戏源代码放在 GitHub 上,他们也很久没有被我克隆到本地了。

所以究竟发生了什么?

说实话,我不知道,可能是某种内阻力在作祟。虽然我不太喜欢《 夏日幽灵 》这本小说,但其中有一句话的确让我在读到的时候,感到了些许震撼。主角友也本来热爱绘画,但为了不受到母亲的批评,当着母亲的面撕掉了画作,这种行为被他解读为「背叛」,而他的创作欲望也因此溜走。

或许正是我对绘画的这种背叛行为导致自我厌恶,才使心中的创作欲望溜走了吧?

我想,我也用相似的方式背叛了自己。

去年年底,自己为了出国留学(学游戏设计)翻遍了欧洲各个学校的官网,信息多到我感觉自己快要溺死在互联网的北冰洋里;到了今年年初,我却等到一场和父亲的尴尬的谈话(说起谈话,其实是单方面的说教),他反复跟我强调国内的好,在往后的我为数不多的回家的期间,他也不断向我提及「中国就是最好的」,仿佛我这个终于在压抑的国内高校环境里找到一线生机的年轻人,犯了一个可怕的政治错误。我暗暗下定决心要在自己赚够钱之后,为自己支付留学的费用,可我要怎么拿到这笔「Fuck you money」,我究竟应该从事什么岗位、做什么事情,我几乎没有头绪。如果完成学校作业都会让我被完美主义的幽灵附身,神经紧绷,失去对生活的感知,没办法静下心来写一个字,我真的能忍受朝九晚五的职场生活吗?

——《 这个世界会累死完美主义者吗?

虽然那个时候的我还没满二十岁,但好歹也是个成年人了,我竟然没有表现出一点捍卫自己理想的勇气和决心,仅仅因为自己和父亲的关系很差,我想要尽可能快地逃离那个地方。我还记得,那个时候我本来拿了一副 Uno 教我弟弟玩,本来要叫父亲一起,可刚上楼,他就把我拉进了那场我不愿意再回忆起、十个月后还令我感到窒息的对话。我认输了,我放弃了留学的想法,我想要快点逃走,回到我的房间里,可是他又指责起我来,指责我没有多花时间陪弟弟,指责我没有一点家庭观念——这样的指责我听过无数遍,我再也不想因为想解释自己而陷入那样可怕的境地里。在高三的某个晚上,我累得只想要吃点东西,在计算机的世界里寻求庇护,可他突然闯过来,问我为什么没有带点吃的给弟弟,我怒了,接下来发生的事情是他把我桌上的奖状卷起来打我的头,我的书桌晃得快要散架,我只想要把它抱住,不让所有东西都散落到地上摔碎。十七岁的我掏出手机已经按下了 1-1-0 三个数字,我的爷爷在旁边大吼「你报警有什么用!」,我才意识到自己只会被民警当作一个不孝顺的小屁孩儿,可当时的我真的不知道还有谁能帮我……

几天前,那个男人问我有没有想他,什么时候回家。除了撒谎,我不知道我还能说些什么。

人的大脑真是奇怪,理性上毫不相关的事情一件一件联系起来,在潜意识里,竟然成为了阻碍我当下行动的力量,还让正在写这段文字的我浑身发抖,眼睛被泪水糊住。

今年总共做了四个游戏原型和 Demo,其中有两个发布在了博客上——《 Expoker 》(一个基于扑克牌设计的桌面游戏)和《 Heart Hunter 》(8-bit 风格的 Rouge-like 游戏;在这个游戏里,子弹、血量和道具都是心脏)。至于另外两个,一个是基于 React 的占星主题的双人对战桌游,源代码在 GitHub 上,名字叫做《Warstro》,但远远没有做完;另一个就是在开始提到的从未发布的《Subscriptions》,一个借鉴了小丑牌的模拟经营卡牌游戏。我印象中还有一个单人竞速游戏,但源代码和设计文档都不知道被我扔到哪里去了。

这么看来其实不算少,但明年会不会继续做游戏,我不知道。

行了,快点结束这个痛苦的话题吧。

杀不死我的……

今年有特别想要感谢的人吗?

我记得我在手帐上写 2025 年的新年目标的时候,分了四个板块,前三个是「个人成长」「未来职业」和「健康」(包括身体健康和心理健康),这三个其实达成得都还算不错,但第四个从一开始就是空着的,我根本不知道应该写什么目标,这个板块的名字叫「人际关系」。

截止 2025 年 12 月 21 日,这个博客的 #人际交往 标签下一共有 39 个条目,是内容第二多的标签。我回顾的时候才发现,这些内容无外乎是和沟通表达相关的,而那些更感性的内容,也都是在写「我如何挣扎地面对人群」「我容人能力是不是太低了?」,甚至是在批评某些人待人接物的方式。

我在教培机构兼职做助教老师的时候,一个学生告诉我,我有一种「生人勿近」的气质。我不是没有反思过这个问题,我只是没能得出答案——是我面对陌生人的小心翼翼让人们觉得我不好接近吗?我确实不太喜欢和人说话,我喜欢和同频的人说话,可如果一开始交流就没有发生,那要怎么找到同频的人呢?我的室友说他有很多工具朋友(他甚至把我评价为一个很「方便」的人),目的是为了让自己不感到寂寞,可我傲慢地说「我宁愿忍受孤独,也不愿意和蠢人打交道」——可见,我俩都不是什么好东西。

所以,当我在思索我今年有没有特别要感谢的人的时候,我最先开始思考的是:天哪,我今年和哪些人有过密切的交流?——没有。硬要说有的话,大概就是在今年夏天一不小心爱上的那个直男吧。

我逐渐意识到自己是「焦虑-矛盾型依恋」(或许也有些倾向于「焦虑-回避型」)。我渴望亲密,却又害怕被拒绝,或者被冷漠地对待,又或者,我害怕对方做出我难以预料的回应;最致命的是,我倾向于过度解读大大小小的信号,任何一个肢体动作、一个表情、某个措辞上的细节,一旦被我捕捉到,就会立马被大脑自动处理成一个或许天才或许荒诞不经的故事。面对一般人,我已经学会了不去关注言外之意,只处理那些被说出口的话,但面对爱恋,人的脑子是不会清醒的。

在一颗热情的心里,爱情往往会把最细微的差别夸大,得出最可笑的结论。

——司汤达《帕尔马修道院》

我想,并不是「智者不入爱河」,而是入了爱河的人没法做智者。我翻到今年三月份的日记,我发现那个时候的我真的完全相信他爱我,尽管我写在本子里的原文是「我不知道他想要什么,我真的不知道」。不过,我真的只是被太过强烈的情感冲昏了头脑而已吗?我记得,在我对他的感情真正萌生之前,我就发觉他的言行举止里有怪异之处,所以,在我真正沦陷的时候,才会对假象深信不疑吧。

他是一名抑郁症患者。他偶尔会跟我讲起他高中的事情,我大概能感觉到,他在大学里并不快乐,尽管专业排名第一,却还是对未来感到迷茫,最关键的是,他也没有太多朋友,或者说和我一样对人际关系感到手足无措,所以才会时常回忆起高中时代的纯真友谊吧。当时的我忽略了这一点,误把那些在我眼中有些尴尬、暧昧的举动当做爱情,却没想到,那是一个抑郁症患者对友情的渴望。当他终于把话说明白的时候,我感觉我脑子里所有美好的记忆瞬间都有了一个丑陋的解释。

在他把话说清楚之前,我做了不少蠢事,但做这些蠢事的主要原因是当时的我也陷入了极难摆脱的抑郁情绪。有好几天,我在骑车上班的路上,都在想,我能不能就这样直接死掉,死在通勤路上,因为通勤的时候我的脑子没有被任务填满,只能任由情绪奔涌而来。不用上班的时候,有好几天,我躺在床上把自己哭晕过去,睡醒之后又打开手机查看消息…… 夏天,对我而言,真的是残忍的季节。

我不能在这里把故事讲得太详细,不过,你可以阅读我因为他而写下的十篇文章,已经按照时间顺序排好,时间从今年三月跨越到九月底,真的是很疯狂了。

  1. In the Mirror I Get Weak
  2. 情绪死锁
  3. 不要把我从你的记忆里抹去
  4. 当我渴望拥抱无名的爱人
  5. 自杀动机
  6. 夏日逃亡
  7. 睡觉的时候要把爱人抱在左边
  8. 完美幻觉
  9. 余震
  10. 当他从当下消失

说到底,我还是很感谢他,即使在我干了这么多蠢事之后,他还愿意跟我把话说清楚。那个时候他把我的 QQ 和微信都拉黑了,如果他没有理会我的道歉短信,我大概会一直陷在纠结、愧疚和苦恼等一系列难以罗列的情绪里。

现在我还会在学校里偶尔遇见他,和他打招呼的时候,我非常确定,我已经把那件事情放下了,而他似乎也没有太在乎。

不过,他为什么会在前几天询问我的跨年夜安排呢?该死,我是完全不应该去想这种问题的。

认识你……

今年发生在自己身上的,最新奇的事情是什么?

如今的我不太喜欢「发生在……身上」这个说法,尽管在英文里,「things happen to people」的说法很自然,但在中文里,总给我一种无力感——很多事情明明是我自己选择的啊!无论好事坏事,好处和坏处都得我自己担着,这才是成年人的态度吧。

另一件只有小孩子才会做的事情是只选一个。双子座是没有办法只选择一个「最新奇」的事情出来的,我写下这个问题的时候,我真的知道了解我自己吗?

到目前为止,你认为一生中最宝贵的财富是什么?

谁会问一个二十岁的人这种问题啊?!

我已经想象到去年这个时候的 Eltrac 如何绞尽脑汁给今年的自己出难题了,我想当时的我怎么也不会想到,今年的我会选择把过去的我狠狠骂一顿,然后用这样一句话结尾:老子不答了!

新年就是要这样嘛,把去年的自己爽骂一顿,然后自洽地走进新的一年。

02 | Veritās

我给 2026 年预备的手帐本的扉页

年底的时候总是会开始构思第二年的手帐体系,2024 年年底给 2025 年构想的体系坚持了一个季度,在之后不断更新迭代,和一开始完全不一样了。今年我的设置稍微谨慎了一些,从 2025 年 11 月就开始试行,到现在已经做了不少调整。

目前的设置大概是这样的。用一个 A5Slim 尺寸的本子做主计划和周期复盘,计划是从时间和项目两个维度进行的,时间指月度和周度的计划(至于年度计划,怎么能跟 P 人开这种玩笑!),项目是指以结果为导向的任务管理。关于这一本 A5Slim 手帐本的设计,你可以参考《 我全面抛弃了数字记录 》这篇文章。

此外,我还在十二月增设了一个 M5 尺寸的手帐本(把一张 A4 纸对折四次的尺寸,比手机还要小一些),用于随身携带,我会每天从周计划里选一些任务抄写在这个本子上,一些习惯打卡也会在这里进行。总之,这个十分便携的本子让我关注「当下」,使用了半个多月之后,我感到它的存在的确让我多办成了很多事情,便签一样的大小也很适合用来收集灵感。

具体的介绍我就得单独写一篇文章了。之所以在年终总结里提及对手帐体系的规划,原因之一是我在今年的最后两个月彻底抛弃了数字化的效率工具,把纸笔变成了我的生活方式。另一个很重要的原因是,就算我没有抛弃数字记录,「我如何计划和记录生活」也是一种生活态度的体现。我还在教培机构兼职的时候,我的上司问我是怎么坚持阅读、运动和做计划的,可以分享给学生。我当时不知道怎么回答,因为我从没觉得坚持这些事情很难——这就是我的生活态度吧。

不过,这种生活态度具体是什么呢?

有一次回家的时候,我的姑姑说我过得有些小资情调,又很自律。自律这个评价我听过很多次(我甚至写过一篇 相关的文章 ),不过,似乎有不少人都把自律想象成一种苦行僧的生活,并对其敬而远之。我想,真正自律的人大概不会觉得自己自律,这并非是出于谦逊,而是因为他真的不觉得自己在逼自己。

我在这一年里养成了不少好习惯,尤其是在我在今年五月底 搬出宿舍 过后,我开始自己做饭,也开始关注饮食健康,在十月份读了《 控糖革命 》之后,我也开始关注食物对血糖的影响。渐渐地,我对奶茶和可乐竟然提不起一点兴趣了!我记得我在一个繁忙的周二点了一杯草莓杨枝甘露,喝了一半,只觉得齁甜,并且对摄入的糖分感受到了非常明显的排斥——我一点也不享受。这种改变不是在一夜之间发生的,它循序渐进,让我一点也没有察觉。如今的我每天都会从一个梅森罐里挖混合着燕麦和蓝莓的无糖酸奶吃,有时会换成羽衣甘蓝粉和奇亚籽,低糖高纤维的食物已经能让我感到很满足了。不过,我依然不会拒绝偶尔胡吃海塞,那也是一种快乐!

谈到饮食,就不得不谈锻炼。在 2023 年高中毕业之后,我用三个月的暑假减掉了 40 斤赘肉,这也让我一直对身材和外貌很上心,可以说是我 2024 年生活的很大一部分。在 2024 年的年终总结里,我是这样写的:

我从初中开始就被人说丑,高中也一直是在肥胖的困扰中度过的。这样的变化也让我意识到,所谓的帅和美,可能只是一种「生活态度」。只要愿意下功夫,人人都能变得有气质;相反,如果总是自怨自哀,搞不好真的会一直丑下去。

——《 写在 2025 的开头

今年我没那么关注外貌了,去年挑染的绿色头发,也早就被剪掉,换回黑发了。在搬出宿舍之前我只会坚持夜跑(偶尔晨跑),当时只想让自己能更瘦一些。胖过一回真的会给自己留下难以磨灭的痕迹,主要是心理上的,我直到最近才接受自己买衣服竟然可以买 L 码而不是 2XL 甚至 3XL 的事实。也不知道从何时起,我看着镜子里的自己,会觉得自己的手臂太细了,于是这个夏天我开始了力量训练。我当然是没有去健身房和一大群身材比我好的陌生人一起撸铁的勇气的,我也不想花这个钱,所以我主要在家做自重训练和核心训练。

九月到十月的时候,我还开始每天拉伸。在十一月份大学生体质健康测试的时候,我才惊喜地发现,自己的坐位体前屈成绩竟然能达到 19cm。尽管有些阴暗,但看着旁边的人颤抖了半分钟才推出去 9cm,真的会觉得很爽。2现在,我虽然还没有到能够劈竖叉的程度,但已经能把额头贴膝盖上,能毫无压力地做犁式拉伸了!3

无论是饮食还是运动习惯,我都没有逼自己。我的睡眠质量也有了很大提升,关于这点,你可以阅读《 如何拥有猪一样的睡眠? 》这篇文章,这也是一个循序渐进的过程。所以,这种改变究竟是怎么发生的?就算是循序渐进,也总得有一直支撑着我坚持的东西吧?

我想,不如浪漫地把它称作生活的「真理」。

我之所以刻意地在饮食里添加大量的绿叶菜,并不是爹味地规劝自己说「吃菜对身体好!」,而是在有了相关知识和生活经验过后,得到了一个真理:自己做饭,拉屎才顺!现在我的大便都能在五分钟内拉完,实在是太厉害了!

我的每一个更健康的生活决定,都不是为了「健康」这个抽象概念本身,而是对一种真理的实践。

我不追求硕大的肌肉,因为大是没有止境的,我更愿意像雕塑家一样雕刻自己的身体线条;我不追求热量的消耗,因为热量是短见的,我更愿意像原始人祖先一样靠规律运动维持自己的生命质量;我不追求完全清淡无味的饮食,因为人体本来就需要无机盐和糖分,我相信并听从自己的身体真实的信号、培养自然的食欲,任由贪欲无限生长只会导致痛苦,而这种痛苦我经历过数次;我不关注我面部的缺陷,因为我知道我的情绪、信心和身体状态,能带给我真正有魅力的气场。

这是我自己的真理,不是社交媒体上的健身教练为了卖课而传播的观点,不是另一个不是我的人对他生活的态度,也不是任何人的说教,我更不会因为这一点小小的对他人无足轻重的成果就去说教别人。这是我通过学习和实践整合的认知,而这种认知本身又能给我带来驱动力,让我完全不需要靠意志力强撑。不过,同样的真理,放在另一个人的生活里,就不是真理了。

比起向人讨教,过着充满戒条的生活折磨自己,不如先像一个什么也不懂的愚人一样去生活,去找到自己的真理。In vita veritas,生命中自有真理。

哦,原来说到底,我还是能够回答「你认为一生中最宝贵的财富是什么?」这个问题的。对不起啦,2024 年的我。

03 | Libertās

2024 年是我正式开始规律阅读的一年,而 2025 年也没有丢掉这个习惯。去年, @Broca 送了我一本书,里面附带了一张明信片,上面写着 IN LIBRIS LIBERTAS ,是拉丁谚语,意思是「书中自由」。我以此为题写了一篇年度读书总结,今年的话,就不一本一本地盘点了,2025 年的书单都在 这个页面 里。

那么,最后,明年的目标是读 40 本书。

—— IN LIBRIS LIBERTAS

这个目标果然是没有达成呢,只读了 38 本。不过也很接近了,十二月我有两本没读完的书,一本是五百页长的《帕尔玛修道院》,另一本是 The Design of Everyday Things,我读英文的速度还是有些慢的。如果算上这两本,那勉强能算得上达成目标。

那么,明年的目标依然是 40 本书!

今年尝试了不少新的领域,阅读了更多的外国文学,以前钟爱的日本悬疑推理小说和各种自助书籍明显少了很多(但也有在读),而我涉猎的外国文学又主要集中在法国文学,读得最多的法国作家应该是司汤达和加缪。我对法国文化一直有好感,原因有很多:一是我自学的第二门外语就是法语(虽然到目前还停留在幼儿园水平……);二是我最感兴趣的哲学分支「存在主义」中的代表人物有不少来自法国,人们想起现代存在主义时,时常想象在法国巴黎的某个咖啡馆里,雷蒙·阿隆、萨特和波伏娃正在大谈现象学、人本主义和如何生活;三是,法国文学总给我一种反叛感,这可能与我阅读的作品的年代有关;四是,加缪实在是长得太帅了,简直是法兰西顶流帅哥,世界上怎么会有这么帅又如此有智慧的男人

加缪是我 MacBook 的壁纸

明年也会继续读法国文学。目前我读的作品主要是以司汤达和福楼拜为代表的 19 世纪现实主义文学,和 20 世纪萨特以及加缪所写的存在主义文学,希望在明年,我至少能勾勒起法国文学的一个整体面貌。今年其实还看了一些拉美文学,主要是马尔克斯的一些作品,还有略萨的《 城市与狗 》,不过只看了一段时间,一起买的几本看完了就没有继续探索了。

此外呢,今年的文娱生活也有丰富起来。今年开始看了一些老电影。翻手帐的时候,我才发现,我在元旦节的时候,看了《香水》这部电影,在二月份看了《马戏之王》,在之后又经历了很长的空窗期,有看《人生切割术》和《办公室》等电视剧打发时间(以及,我应该又重刷了很多遍《老友记》),在十月份我又看了一位博客读者推荐给我的《魂断威尼斯》,写了 观后感 。当然,也不能忘了在年底播出的《怪奇物语》第五季和 Apple 的新剧《同乐者》,但如果要把每一部剧都盘点完,恐怕也太冗长了。

我总觉得自己难以静下心来看电影,如果有较大块的时间和平静的心情,我更有可能选择一本厚厚的书。我更喜欢把看电影当作一种外出活动,因此,当电影院里没有什么让我感兴趣的作品时,我就很少出门看电影。今年出门看电影的次数屈指可数,除了《浪浪山小妖怪》《小林家的龙女仆》和《魔法坏女巫 2》(Wicked: For Good)之外,应该就没别的了。值得一提的是,今年倒是第一次去剧院看了一次音乐剧,是著名的《雨中曲》。

写到这里,我想起了 Owen 在他博客里提到的,他的生活哲学。

追求注意力自由而不是财富自由。

—— Owen《关于我和这个博客》

能有大把的时间用来看书和欣赏艺术,哪怕是看剧和看电影,何尝不是注意力自由的体现呢?闲暇对人类来说是个好东西,当人如奢侈品般地拥有了闲暇,他就不再为生存而奔波、为别人而奔波。在历史上,某个时期的人们拥有闲暇,也是诞生哲学家的重要条件。希腊语中的 skholē,本身是「闲暇」的含义,在后来才演变成了 school(学校)。苏格拉底和柏拉图要是每天为了保住工作而忧心忡忡,如今的西方文明就不会是这个样子(当然,苏格拉底也不会背负败坏雅典青年的罪名而死,搞哲学是有代价的)。

在《 数字极简 》这本书里,Cal Newport 倡议读者放下电子设备,「重拾闲暇时光」。闲暇不仅是一种娱乐,还是人类所能触及的最高的娱乐,也是自由的真正体现。比起追求有钱,我更愿意追求有闲。尽管这两者在很多时候是绑定的,但仍然是两种截然不同的追求。

我想,今年写博客的爆发式增长,和我日渐丰富的精神生活脱不开关系。那么,来年也要做一个思想自由的怪胎!

04 | Amor

关于爱人,我已经在前文提及过。在二十岁的年纪,不擅长爱大概是可以理解的。我自然不能一上来就装作自己什么都懂,仿佛参透了人性,不然怎么成长呢?这一小节我想谈的并非是对人的爱恋,而是对生活的爱恋。

加缪在《 在我身上有个不可战胜的夏天 》里写到:

若无对生活的绝望,就无对生活的爱恋。

绝望我已经感受到不少,毕竟今年夏天的的确确想在某些时候死去。我想,尽管没有直接的联系,这样的绝望也促使我好好生活。

我是个爱好很广泛的人,自然也容易陷入三分钟热度的陷阱。不知从何时起,我已经接受了自己的这个特质,因为我逐渐意识到,我只是在广撒网,那些真正能吸引我的东西,最终还是会留下来,那些不值得我继续花时间的东西,我们也好聚好散。

我去年入门了手冲咖啡,在那之后,每个月都花了不少钱买豆子。作为一个 N 人,通过比商业咖啡更注重风味表达的精品咖啡,我的感官能力(Sense)得到了不小的锻炼;品鉴咖啡也是需要调动直觉(iNtuition)的活动,需要发散想象力。总之是很神奇的一种爱好。为此我还写了一篇博客文章,题为《 喝咖啡如何帮我开发自己的 S 属性? 》。今年冲咖啡没学什么新技巧,也没有换设备(唯一的例外是购入一个带温控功能的手冲壶),但每天早上或中午,都有安静下来冲咖啡这个环节,也算是给我的生活提供了一个支点。

从高中就开始探索的塔罗牌,在今年也给我带来了不少新鲜感。和以前比起来,最大的区别是,比起理论储备和探索象征含义,今年我开始更多地给别人占卜。我还在教培机构做兼职上班的时候经常不务正业,导致学生也不干正事,排队来找我算命。占卜师和问卜者之间建立起来的联结很微妙,尽管我不是专业的,但在这种场景下,人们似乎更愿意敞开心扉。这对不善社交的我也是一个较为舒适的与不熟悉的人相处的环境,总而言之,我还挺喜欢的。为此,我还写了一篇《 好为人师如何帮我反思现代科学的局限性? 》。

搬出宿舍之后,我对生活有了更多的掌控感。今年五月份左右,我从四人宿舍搬到了一个单间,麻雀虽小,但我住得还算舒服,就是健身的时候有点伸展不开,书桌也不够宽敞。九月份的时候,我和一个朋友选择了合租,住进了三室一厅,我甚至拥有了独立的书房、被我布置得很温馨的卧室、一个设备齐全的吧台、可以生火做饭的厨房,以及宽敞的空间,让我可以铺上瑜伽垫健身和拉伸。搬家给了我一些焦虑,生活方式的转变总归是让我害怕的,为此,我还写了一篇《 搬家如何帮我理解现代人与消费的关系? 》。焦虑是难免的,如果生活中没有那些不如意,我现在也不会觉得这个空间让我感到如此安全和舒适。

说来说去,我发觉自己说的也不算是对生活的爱恋,到头来,我在今年学到的最宝贵的事情,大概是学会了好好爱自己吧。我现在已经成为了填心理健康问卷时看到「我担心其他人不喜欢我」这种题目时感到困惑无比的人——怎么没有「我不喜欢其他人」这个选项?

大一时住的六人寝

大二搬到了四人寝

大二快结束的时候搬进了一个单间

现在大三,住进了自己租的房子

要说我对以后的生活还有什么展望,就是希望能进早住进一间完全属于自己的家。

05 | Hackerita

我似乎从来没有跟人讲过:作为一名程序员,我的启蒙编程语言其实是易语言,一门不入流的中文编程语言。小学的时候,我的成绩还是班级一二名的水准,但我几乎没有朋友,直到中学都还会在情人节的时候跟身边的人讲:2 月 14 日是世界上第一台电子计算机 ENIAC 诞生的日子!那个时候,我最好的朋友就是一台电脑(一台放在现在会令我嗤之以鼻的、装载 Windows XP 的台式机),从十几年前开始,我就无法想象没有电脑的生活了。我记得有一次,我意外地在我父亲新装的一台电脑上安装了病毒软件(那是一台邪恶的装载 Windows 10 的电脑,它活该),导致接下来好长一段时间内我都没办法使用电脑,那段时间的生活很是沉闷。

我想,小学的我之所以走弯路去学了易语言,一部分原因是我直到初中才开发了自己的语言天赋,所以那个时候对英文编程敬而远之。当时的我,只想着做出属于自己的软件,所以选择了当时我认为最简单的路径。每天沉浸在计算机世界里的我,找到了能带我暂时离开现实世界的避难所。直到现在,电子设备对我而言都远远不是娱乐的载体,任何一种技术都不只是为我争得一碗饭的工具,探索本身就足以让我感到无穷的快乐。

在我还会跟室友闲聊的时候,我经常跟他吐槽 Java 这门语言有多啰唆、开发过程有多繁琐、性能有多差,并且时不时地赞美 Go,调侃 JavaScript。他们反应是「现在的确有很多公司会招到 Java 工程师之后让他们写 Go」「实验室也有人推荐我学 Go,我当时看他负责的也不是什么重要的项目,就没当回事」「我已经习惯 Java 了,哎,对新东西都有了些抵触」——他是怎么把计算机描述得这么无聊的?

我花了一段时间才意识到一个事实:他不是黑客。我说的「黑客」,不是指攻击计算机系统的黑帽黑客,也不是指编程能力高超、掌握了很多技术的程序员,而是那些把探索计算机科学、学习新技术、创造软件和为开源做贡献当作乐趣,不随大流,不接受默认设计,追求技术自由的人。我很快意识到另一个令人沮丧的事实:我的身边没有一个我的同道中人,他们不觉得写代码本身是令人愉悦的——我的室友桌面上有这样一行字「不工作就没有饭吃」;辅导员只会劝学生去参加竞赛,跟着学校做项目、申报课题、写论文,偶尔会在她不知道从谁那里拿到的 PPT 里把 GitHub 描述为一个「学习平台」;他们除了课堂上学到的技术,不会在电脑上下更多的工夫了。

我踩着 2025 年的尾巴加入了 Fediverse(联邦宇宙),一个去中心化的社交网络。弃用 Twitter 等大公司软件一年有余过后,我终于又拥有了社交媒体账号。我一开始没觉得加入 Fediverse 是一个很「黑客」的举动,毕竟联邦宇宙很包容。开始在一个能收到更多回应的地方分享自己的想法和折腾之后,我才真实地感受到:有活生生的人对计算机软件有着和我相似的态度,并且已经在我希望走的道路上走了很远了。

比如,我只是简单地对自建 Fediverse 实例一事提出了 疑问 ,就引来了一大堆黑客分享经验。分享 RIME 输入法、NeoVim 配置和各种工具的折腾,也都有回响。我想,我大概已经接受了自己暂时无法在现实生活中找到共鸣的事实。做个黑客就跟学第二门外语一样,在现实生活中几乎不能遇到能和自己说法语的人4,但只要想,总能在互联网上找到人畅聊语言学,至少能找到听众。

我在去年全面转向了苹果生态,把主力机换成了 MacBook。今年,记不清从合适开始,我电脑上安装的软件倍加关注。我会不定期地扫视一遍 macOS 的 Applications 目录,移除那些很久没有使用的,替换那些资源占用过高的。今年,我可以很自豪地宣布,我的电脑上只有两个 Chromium 内核的应用(Obsidian 和 Trae,这两个编辑器都可以在我配置好 NeoVim 之后光荣下岗)。

为了保证 Homebrew 包干净整洁,我还用 Go 写了一个简单的命令行工具 wthis ,用于以可读性更强的格式显示某个 Formula 或 Cask 的信息(因为我在运行 brew list 之后经常发现我不认识的软件包,我不喜欢这种陌生感!)。尽管没有什么技术含量,但遇到问题、产生需求过后自己设计和编码解决问题,的确是很像黑客的思维方式。

今年学习的第一门编程语言是 Lua,那个时候还想用 LÖVE 做游戏;今年年底又捡起了 Lua,原因是我要用这门语言配置 NeoVim——比起 Emacs Lisp,Lua 还是太友好了;不过今年差点就学到了编程界的拉丁语 Lisp,真是可惜呢。今年学习的第二门,也是最后一门编程语言是 Go,相见恨晚,刚入门就已经爱上。Go 大概会成为我的首选语言,其次是 JavaScript 和 Lua,至于 Java…… 什么不入流的东西?我甚至懒得在 NeoVim 里给他配置 LSP。今年完全没碰的一门语言,是 PHP——无论如何,你是一门好语言

Anyway, happy hacking!

06 | Fīnis

这篇文章的草稿是 12 月 1 日创建的,尽管我写了一万一千多字,但这些内容并不是平均分布在这一个月内的。可以说,这篇文章 80% 的内容是用 20% 的时间写的,而剩下 80% 的时间我都在努力劝说自己挤出时间来写年终总结。出于某种奇怪的心理,我总觉得要是连一万字的年终总结都写不出来,这一年就白过了,而这中焦虑又让我下意识地对打开编辑器感到抵触。当我终于停下来,感觉自己写得足够时,却又觉得没能完全覆盖这一年里发生的大大小小的事情,记录得不够完全。

过去的就让他过去吧,我知道,真正重要的东西会以另一种被我的生命本身记住,我会被潜移默化地塑造和改变。只要我的生活还没有浑浑噩噩到每天过得没有什么区别,只要我还能够对技术、哲学和生活本身保持好奇心,我就不需要感到害怕。

哦对了,本博客的传统是要在年终总结的最后给明年的自己留几个问题来着。

  1. 去年的你一直很迷茫来着,现在你有答案了吗?
  2. 去年的你探索了 Fediverse,安装了 Nix,折腾了 NeoVim,爱上了 Go 语言,现在的你又做了些什么?
  3. 夏天对你总是残酷的,这句话对 2026 年的你依然正确吗?
  4. 无论是爱情还是友情,在过去的一年里,你找到你爱的人了吗?

就这样,用四个问题鞭打明年的自己就足够了。

最后,谢谢你读到这里,祝你新年快乐!


  1. 大概是某个读者真的想让我下地狱去吧,还挺艺术的。Kind of poetic. ↩︎

  2. 比长度什么的,有点太奇怪了吧! ↩︎

  3. 犁式:要进入犁式,首先要躺在地上,把下半身抬到空中,把脚往头的方向伸,慢慢把脊柱也抬起来,最终用脖子和头撑地,脚碰到地面,腿打直。 ↩︎

  4. 至少我在身边只能找到觉得外语很酷,于是滥用语言的人,比如我那个室友。实际上,全世界人民都这样,比如英语、法语、西班牙语使用者常常滥用意大利语 bravo,对女性也用这个词,实际上应该用阴性形式 brava。 ↩︎

稻草人周刊 Vol.61

2025年12月29日 08:45

Good Morning

from Singin' in the Rain (the musical)

When the band began to play, the stars are shining bright

Now the milkman’s on his way, it’s too late to say good night.

So, good morning. Good morning!

这周六去看了音乐剧《雨中曲》,最喜欢的一段就是这首《Good Morning》。第一次听到的时候感到很惊喜,因为我那个时候才知道 Lady Gaga 在《Harlequin》里翻唱的就是来自这部音乐剧的《Good Morning》。剧中 Don、Cosmo 和 Kathy 三人彻夜长谈之后发现已经到了第二天,三个人在街头一边跳舞一边说早上好1的场面真的很有感染力,从剧院回来的第二天我仍然感到非常快乐。

↺ · 回拨

🔍

这是十二月的最后一期周刊,在此进行十二月的文章回顾,精选了我认为不错的内容。

  • 不做信息的消费者,从写周刊开始
    我在这篇文章里解释了自己写周刊的原因和方法,并鼓励读者通过写周刊或者其他类似的方式,来帮助自己理解和记住自己读过、看过、听过的东西,而不是让信息「光滑」地经过大脑。让我觉得很高兴的是,已经有两个读者读过之后开始写周刊了,你可以关注一下《 回声周刊 》和《 Doin 周刊 》。
  • 极简的本质是控制
    本文讲解了我眼中的「极简主义」——不是白底黑字看上去大方简单就了事,而是要控制信息的熵,了解自己真正需要的是什么,抗拒把空间填满的欲望。
  • 让暴风雨来得更猛烈些
    塔罗牌系列终于在半年之后再次更新了,这次谈了谈「塔」这张牌,写了写不详的征兆背后的含义,关于天神与天后之子、巴别塔、星星和建筑工程的故事。
  • 这个世界会累死完美主义者吗?
    说实话,我其实不太明白这篇情绪占主导地位的散文为什么会获得 17 个赞(在我的博客上,这算很多了),但既然有这么多人喜欢,不妨放在这里,可能会收到更多的共鸣也说不准。

⋈︎ · 连接

不要觉得自己的 MBTI 会变

📺

不能。Frank James 在这个视频里批评的现象我也经常观察到,国内也是如此:许多人不满意自己的 MBTI 类型,想要变成 INTJ 或者 ENFP;许多人发现自己几次测试的结果不一样,以为自己是几种人格,或者以为自己的人格会变;有人把成长和性格变化联系在一起,缺乏对类型学的基本认知。

MBTI 测试结果不一致的原因有很多种:

  1. 测试题的设计本身存在缺陷;
  2. 多次测试使用了不同的问卷,不同问卷设计的方法和标准有很大区别,例如 16Personalities 采用的是二分法,就算是 51% 的 I 也会被认为是 I; ToTypes 的依据是荣格八维心理类型,是根据认知功能的排序来确定人格类型的;
  3. 测试者对题目的理解有偏差;
  4. 测试者对自己的认知不全面,或者是仍处于青春期及青春期以前,自我意识还没有成型;
  5. 测试者处于不健康的情绪或心理状态中,例如在一段时间内陷入抑郁情绪、无法克服焦虑或者患有精神疾病;
  6. 测试者对结果不满意,于是在重新测试时刻意或下意识地选择自己想要成为的样子,而不是自己原本的样子;
  7. 测试者原先没有做过测试,但担心自己测出来的结果不好(尽管人格类型根本没有好与坏这一说),于是刻意或者下意识地选择自己想要成为的样子,而不是自己原本的样子。

举个例子,如果自己做的是 16Personalities 的测试题,发现自己从 INFP 变成了 ENFP,那并不是因为自己变得外向了(外倾和外向根本不是一回事),而是因为这个网站采用的是二分法,自己本身可能就在 I 和 E 之间徘徊。要得到更准确的结果,应该看自己的认知功能排序,INFP 的前四个功能排序是 Fi Ne Si Te,而 ENFP 是 Ne Fi Te Si,要分清楚自己是 INFP 还是 ENFP,应该要分清楚自己的主导功能和辅助功能是什么,更倾向于使用 Ne(外倾直觉)还是 Fi(内倾情感)。

功能排序也叫功能堆栈(Function Stack),其实是对荣格在《心理类型》这本书里提到的八种人格类型的拓展,认为荣格划分的八种类型其实是八种认知功能,人不会只使用一种认知功能,而是八种都会使用,但偏好和倾向有所不同。其中最重要的是前两种功能,主导功能和辅助功能,这两种功能一个是外倾的(作用于外部世界),另一个是内倾的(作用于内部世界);一个是感知功能,另一个是判断功能。你可以根据一个人的主导功能和辅助功能判断他的 MBTI 类型。2

如果人格类型能改变,就意味着功能排序能改变,也意味着个体下意识使用的认知功能改变了。一般认为,如果没有经历重大变故,这基本不可能发生。个体可以锻炼自己的某个认知功能,类型学社区的主流观点也是:个体应该锻炼自己的弱势功能(第四个功能),以获得成长。我作为 INFP,劣势功能是 Te(外倾思维),我就一直在用写作锻炼自己的这个能力;但就算我能像 ENTJ 或 ESTJ 一样熟练地使用 Te 功能,我仍然是 INFP,我的主导功能仍然是 Fi,我最擅长的事情依旧是依照自己内心的价值观做判断,这一点不会改变。

自己的人格类型不会改变,不代表自己作为 I 人就无法与人相处,作为 S 人就无法理解抽象概念,作为 T 人就完全冷血无情,作为 P 人就没办法变得有条理。相反,固定的人格类型为自己提供了固定的成长方向,如果你拥有多个人格类型,或者你的人格类型会改变,那你究竟要锻炼自己的哪个认知功能?你又怎么知道自己最擅长的功能是什么呢? 倘若你的测试结果真的经常改变,那就换一套测试题,或者先等自己心理状态稳定下来的时候(不处于焦虑状态、渡过了青春期、生活环境固定……)再做测试。

顺带一提,MBTI 并不是严肃的心理学,在我看来,只是提供了一种理论化的认识自己的方式。要说科学性,还不如去了解自己的依恋类型(回避型、焦虑-矛盾性、安全型)——后者是心理学者提出来的,而 MBTI 是一对作家母女(也是荣格的狂热粉丝)读完荣格之后写出来的东西。但是,如果真的要聊 MBTI,还是真的把它搞懂再来谈吧!

不要使用任何 AI 浏览器

📜

在去年年底,Dia 浏览器刚开始宣传的时候,我就写过一篇题为《 The Browser Company 的新浏览器 》的文章表达过我对 AI 浏览器的担忧。我的担忧主要集中在数据安全方面:

你可能会说,在互联网上,隐私早就不存在了。但是,这可是一个官方声称有「记忆」功能的浏览器,它对我隐私的收集显然不止电话号码、身份证号码那么简单。

我认为这才是最值得关注的。然而在那些贬低的评论中,我居然没有看到任何人对 Dia 的数据安全提出质疑,大部分都在表达对 Arc 停更的不满,和对这个新浏览器的不看好,即使这个产品甚至没有一个公开的可供测试的原型。

过去一年里,AI 浏览器层出不穷:Dia 正式发布了,Perplexity 上线了 Comet,ChatGPT 发布了 Atlas,微软也给 Edge 加上了 Copilot…… 以往,我对 AI 浏览器的担忧没有什么实际证据,但这些 AI 浏览器发布过后,有研究机构实实在在地对他们的安全性做出了评价。

结论是:AI/Agent 浏览器对大部分组织而言,使用风险太大。

Gartner 是全球的研究和咨询公司,他们认为,默认的 AI 浏览器设置更注重用户体验,而非安全性。作者认为,这句话说白了就是:AI 浏览器更注重他们的商业模型,而非安全性。这对组织机构来说尤为可怕,雇员可能会使用 AI 浏览器完成一些工作,这个过程中,数据可能会泄漏。

在我看来,我们应该立法,让 AI 浏览器的首屏界面像香烟的包装一样,必须说明「使用 AI 浏览器可能有害数据安全」「禁止处理涉密信息」等等。

最后,如果你想要一个干净的 Web 体验,我推荐你使用开源的 Helium 浏览器,基于 Chromium 内核,默认安装 uBlock origin,无需注册账号。我已经用了三个月,除了偶尔遇到 Bug 之外,体验很不错。

不要给 Wikipedia 捐款

📜
📰

我经常查阅 Wikipedia,尤其是英文站点,上面的资料真的很有帮助。因此,去年年底我看到他们在网站上请求捐款,我几乎没有犹豫就选择了每月自动捐款(不过一两个月后就取消了)。最近我又在查阅资料的时候看到捐款请求,这次我没有立马选择捐款,因为当时我确实抽不开身。后来,我三番五次地看到出现在网站不同位置(有时是页眉、有时固定在视口底部,有时在右下角),不同措辞但语气同样迫切的捐款请求,给我的感觉是:我今天要是不捐款,这个网站就要维持不下去了。这种错觉让我在数次忽略捐款请求后感到非常自责:自己明明是 Wikipedia 的长期受益者,怎么能吝啬得三美元都不给呢?

后来发现,我的犹豫是正确的。捐款并没有给到 Wikipedia 这个网站,而是 Wikimedia Fundation 这个拥有 Wikipedia 和其他由志愿者编辑的网站的基金会。其实仔细想想就能想明白:Wikipedia 上面的内容全是志愿者编写的,他们又拿不到钱,运营网站的人力成本很低,而服务器费用也不至于让他们破产吧?很不公平的是:真正为 Wikipedia 的内容(也是最重要的部分)做出重要贡献的人没有工资,而基金会的员工赚得可不少。然而,Wikipedia 每天都有新的编辑,网站的屎山代码和用户界面在十几年内都没有太大变化。尽管基金会没拿这笔钱干什么坏事,但欺骗 Wikipedia 的读者给他们捐钱,无论怎么想都十分令人气愤——我真的以为没人捐款 Wikipedia 就要倒了,实际上基金会的钱多得可以在里面游泳!

如果你很依赖 Wikipedia 的内容,你应该感谢无数的编辑者,或者自己加入到编写 Wikipedia 的行列中,不要给那个在网站上装可怜的基金会掏钱。

◍ · 穿越

《同乐者》第一季结局

⚠️

剧透警告:如果你还没有看完《同乐者》,请谨慎阅读。

《同乐者》(Pluribus)在圣诞节放出了第一季大结局。在这一集里,先前剧集里发展的几乎所有故事线都有了进展:Manousos 终于开车到了 Carol 家;同乐者们成功同化了那个想要加入他们的小女孩;Manousos 在电台接收到的神秘信号的确与同乐者有关;同乐者正在利用 Carol 的冷冻卵子制造她的干细胞用于同化……

我特别喜欢 Carol 跟 Manousos 分道扬镳之前,Manousos 跟 Carol 说的话:

Carol, do you want to save the world or get the girl?

卡萝尔,你想要拯救世界还是去追那个女孩?

然后 Carol 就跟 Zosia 度假去了——是我的话我也这么选。

看到这个画面的时候我很惊喜,因为 Carol 在读的书是《 黑暗的左手 》,这是我最喜欢的科幻小说,就是在今年五月份读完的。

不过,在 Carol 发现同乐者已经找到同化她的方法,而她只剩下一个月的时候,「追那个女孩」的梦也就破灭了。好在,Manousos 这边为了「拯救世界」,已经取得了一些进展。希望明年能尽早看到第二季,我真的很期待!

《怪奇物语》第五季 下半部分

其实从第五季播出开始,我就觉得这一季给我的感觉很不一样。仔细想想,原因大概是剧中角色数量太多了,而且大部分角色的形象已经很饱满,尤其是第一季就出场的 Hopper 和 Joyce,他们对孩子的爱护一直没有多少改变,除了 Joyce 在见识到 Will 的能力之后选择相信她,这个人物几乎不能给观众带来新鲜感了,其他人物线也有不少像是「旧事重提」。另外,我从大概第三季开始就很讨厌 Mike,到第五季更是如此,无论是演员拙劣的演技、在剧情中可有可无的地位和他的性格,都让我喜欢不起来。

别误会,我还是很喜欢《怪奇物语》。大概是和我的性取向身份有所共鸣,第七集的最后,Will 和朋友们坦白的时候,我确实没有忍住眼泪。Dustin 和 Steve 的矛盾以及友谊也很值得品味。我在想,这可能是因为《怪奇物语》所触及的主题太多了,不同的人都能在其中找到共鸣,自然也不是所有情节都能让每一个人感同身受。

最后,下周,也就是跨年夜,长达两个小时的最终集就要播出,我已经迫不及待了。

↯ · 当下

第一次踏进剧院

月初看到伦敦西区音乐剧《雨中曲》来中国巡演,巡演地点居然有重庆,我毫不犹豫就买了票,时间就在这个周六(12 月 27 日)晚上。这是一部电影改编的音乐剧,我没有看过电影,但我看过非常出名的在雨中跳舞的电影片段,非常喜欢。

国内喜欢音乐剧的不多,重庆人更是不爱看,更何况是部英语的剧,票不好卖。我去的那家剧院因为票卖不出去,在双十二的时候搞买一送一,让那些被背刺的观众非常气愤。我买的是三楼的票,因为人实在太少,剧院给我派了一张二楼的票。到现场的时候,人群零零散散的,一楼更是有好多空座位。回忆起之前没买到《摇滚红与黑》去成都巡演的票(那还是一部法语的音乐剧),更加坚定了重庆是个文娱沙漠的刻板印象。

尽管音乐剧在重庆不叫座,但表演的精彩程度是毋庸置疑的,而且,从现场的掌声和欢呼声来看,买了票的人几乎没有后悔的。舞台设计、舞蹈、歌曲、演技和唱功都是一流的。虽然已经提前做好了心理准备,但看到舞台真的开始下雨的时候还是会觉得很震撼(幕间休息的时候工作人员上来擦了十分钟的地板也挺好笑的)。在读一些法国小说的时候有读到贵族去剧院会用望远镜看舞台,自己去了剧院之后才知道原来真的是要带望远镜的,一些场景可以更清楚地看到演员的表情和动作细节。

谢幕的舞蹈,没谢幕的时候不能拍照录像哦

这里的黄色雨衣是致敬电影

另外,戏剧、音乐剧对非母语者来说实际上相当友好,演员的发音比英语听力还要饱满清晰。除了仔细听能发现他们没有卷舌音之外,真的很难发现他们说的是英国口音。大概是我全年最值的一次花费了,希望明年能有更多的机会去剧院!

演出结束时已经是十点半,回程坐轻轨要一个多小时,没办法在停运之前到家,最后还是打了车。这就是离市中心太远的坏处吧。

又去了一次多抓鱼

既然为了看音乐剧进城了,就顺道在嘉州路下了车,去了一趟多抓鱼巡游商店。九月份的时候多抓鱼来了重庆,我立马就赶了过去(详见 第 46 期周刊 )。这周想起来他们要到 2026 年一月初才会离开,于是就又去了一次。

这次的人明显比上次少了很多,里面空荡荡的。令人惊喜的是门口多了一些毛绒玩具,还有很多宝可梦的玩偶,但没有看到特别喜欢的,就没买。门口还有人用书堆了一个圣诞树。

一如既往地在「外国文学」分区看了好久,找到了一本《我想结束这一切》。扫码看了下价格,门店打折后居然才 6 块,而我的多抓鱼余额也差不多还剩五块多,多抓鱼用余额付款还会打折,刚好拿下。


  1. 演员真的用中文说了「早上好」,夹在英文里意外地没有违和感。 ↩︎

  2. FiSe (ISFP)、TiNe (INTP)、FiNe (INFP)、TiSe (ISTP)、NiFe (INFJ)、NiTe (INTJ)、SiFe (ISFJ)、SiTe (ISTJ)、FeNi (ENFJ)、FeSi (ESFJ)、TeNi (ENTJ)、TeSi (ESTJ)、NeFi (ENFP)、NeTi (ENTP)、SeFi (ESFP)、SeTi (ESTP) ↩︎

教师的傲慢 II

2025年12月25日 14:47

我在大学的前两年都是个很守纪律的学生,从来没有逃过课。一方面,我不想因为违纪给我带来不必要的麻烦,消耗心力;另一方面,自己毕竟还是学生,在脱离这个身份之前,课还是要上的,而且,大部分的课程其实还没有到难以忍受的地步。

不过例外总是有的。

在老旧的技术栈里坐井观天

专业开设了两门和前端开发相关的课程,一门叫做「Web 前端开发」,授课内容就是 HTML 和 CSS,和 JavaScript 相关的内容很少;另一门叫做「JavaScript 框架和 SPA 技术」,授课内容是 Vue 3 和相关的技术栈(谢天谢地你讲的不是 React)。前者我在初中买过一本书自学过,那本书所属的系列还有一本 JavaScript 和 jQuery 的教程,我也买来读过1;后者我在大学期间自学过,不过,就算没有学过 Vue,我对 React 相关的技术栈也比较熟悉。在我的整个高中生活里,我的周末和夜晚几乎都用来折腾各种前端框架了。

这两门课都是同一个老师教的,学校里显然没有别的会前端的老师了。像其他目光短浅的开发者一样,我所在的环境里几乎没有人重视前端开发,从学生到老师都是如此。课程的内容不是最大的问题(虽然问题也不小),最大的问题是授课的老师对他理应掌握的知识所展现出的惊人的匮乏。我从没见过他打开浏览器的开发者工具(也就是按下 Ctrl/Command + Shift + I 或者右键菜单的「审查元素」会打开的面板),他排查问题的方式是用肉眼盯着源代码看,而且是通过右键菜单点开「查看源代码」来排查的——当课程内容转向 Vue,浏览器里的源代码视图只会显示页面基本框架和用于加载 Vue 的 JavaScript 脚本,他也就没办法在浏览器里排查问题了,就只会盯着 VS Code 的界面看,还要学生来提醒他哪里写错了。2

作为开发者,这位老师对命令行工具的使用也不熟悉得令人发指。一般而言,创建一个基于 Vue 的前端项目框架,开发者会使用 bun create vue3 这样的命令,拉取到相关的软件包之后,就会出现交互式的终端界面用于配置开发环境。这位老师的「不熟练」体现在两点,当然还有其他尚未发现的。

第一,他教学生不要使用 PowerShell,要使用 cmd,还教学生如何在 VS Code 中把终端切换为 cmd。即便我是 macOS 用户,我也知道,要运行 Node.js 相关的技术栈,cmd 这种老古董是不如 PowerShell 好使的。他这样教学生的理由是(以下是他的原话):「使用 PowerShell 呢,路径会有一些问题」我不知道他说的是什么路径问题,但我肯定那是他自己的无知导致的。

第二,我已经记不清楚他有几次课在课上这样讲到:「首先呢,我们要把 Vue 项目里的示例代码都清除掉。把 <style> 里的 CSS 样式都删掉,这样就会变得很干净。然后呢,要…… 这样一来,我们的 Vue 项目就变得很简约啦,方便我们在上面进行修改。」

……

请读者稍等我调整一下心情。

被框起来的一个选项,上面写着「Skip all exampple code and start with a blank Vue project?」

这句过了四级都能读懂的英文,意思是:要跳过示例代码,用一个空白的 Vue 项目开始吗?

这个老师还会教学生删除目录下的 .git 目录和 .gitignore 文件,因为他认为「Git 很麻烦」。对于教学生不去使用行业内最基础的版本管理工具和协作工具的老师,我不知道该说什么好。我只能想想,他在提交更改和处理冲突的时候,看到终端里弹出来一大堆他看不懂的英文,不清楚自己做错了什么也不知道如何修复,在网络上四处搜索才解决,之后也很快忘记了解决方案,只留下了「Git 很麻烦」的印象。

以及,我从没见过他用过 npm 或者别的什么包管理器添加依赖,在教学生使用 Element Plus 这个 UI 框架的时候,他强调要学生使用它放在 PPT 上的方法引入框架——用 <script src=""> 和公共 CDN 直接引入。他声称「教材上的方法是有一些问题的」,我没买过什么教材,因为该有的东西都写在官方文档里了。我猜测,他所谓的有问题的引入方法,应该涉及到通过包管理器添加依赖,然后用 ES6 标准的 import 关键词引入依赖,但他不会,在尝试这么做的时候得到了他读不懂的英文报错,于是留下的「教材上的方法有问题」的印象。

这个老师是第一个也是目前唯一一个让我产生逃课想法的老师,只可惜,所有没办法靠自己的教学能力把学生留下的老师都有一个狡猾的手段——位置签到。学生必须到达教学楼,和一个可疑的软件共享位置信息,在老师发布的限时签到中按下签到按钮,才算出勤。要是缺勤,辅导员回来找我麻烦;要是缺勤三次,按照学校的规定,这门课直接挂科——他也只能用这种手段把我留下来了。

“学生写不出来这种代码”

这类中老年男人教师有一个很奇怪的习惯,会把已经讲过的事情重复讲好多遍,无论是否重要,比如如何删除 Vue 的示例代码、如何移除 Git,以及关于课程作业中 AI 的使用。我已经记不清楚我有多少次听见他说:「我觉得啊,既然有这个工具,那为什么不用呢?不过啊,同学们至少还是要把 AI 生成的内容看一遍,读懂他是怎么写的,什么原理…… 话说回来啊…… 我们还是要…… 所以啊……」

如果你真的能接受在课程作业里看到 LLM 生成的代码,也就不会把这句话三番五次地拿出来讲了。倒不如坦诚一点,直接把态度挑明。

说起 LLM,我刚读完 Cytrogen 写的《 在 AI 恐慌的时代,熟练度是一种累赘 》和《 I had (maybe) the worst computer class in my life 》,他讲述了一个连 HTML 都不懂的 Python 老师如何给他这个本来就已经会写网络爬虫的学生打了 F,因为老师认为他使用了 AI 并且没有披露 AI 使用,因为他用到了上课没有讲过的方法。这个老师竟然意识不到,同样的解决方案不仅可以是 LLM 生成的,还可以来自于用于训练 LLM 的原始数据——官方文档,就是那个所有开发者都应该会读的东西。学不高身不正还带着点傲慢的老师真的是不分国界,无处不在。

自己写的代码被质疑 LLM 辅助,我也感同身受。我本来就对前端很熟悉,于是在第一次提交「Web 前端开发」的作业的时候,我用最基础的 Flex 布局4和卡片样式完成了作业,老师虽然没有直接点我的名字,但他在某次碎碎念的时候明显是在用我作业的例子告诫同学们合理使用 AI。也有其他老师表示:「你一个学生写出来的代码,和熟练的老手写出来的代码肯定是不一样的,看得出来。」

就这样,我不得不装疯卖傻,在作业里提交一些我在正常开发过程中不会写的代码,以迎合这些老师对学生的想象——这就是高等教育啊。

充满偏见的体系会惩罚所有不像学生的学生

毕竟这篇文章被我归到议论文下,还是不能写得太散,是时候整理一下前文提到的现象了。

偏见之一

我认为,以上所有问题,源自于两点:无知和傲慢。无知是可以理解的,就算是老师也会有知识盲区;傲慢也是可以理解的,这是人之常情。然而,无知和傲慢放在一起,在我看来,就是缺德了。

只可惜,身份认同(或者说 Entitlement,某种称号)往往会给人带来傲慢,教师这个身份亦是如此。当一个人经过体系的认可站上讲台(哪怕是一个有缺陷的体系),他就会认会自己有义务教育台下的人。另一种很容易产生但更不健康的心态是:我比台下的人学识更高,他们不懂我懂的东西。关于这一点,我在与本文同题的《 教师的傲慢 》中阐述过。

教师评价学生的方式,由「我比台下的人学识更高,他们不懂我懂的东西」这一偏见发展而来。他们惩罚的对象主要有两者:

  1. 他不懂我懂的东西,却不想学我懂的这个东西,他不是个好学生。
  2. 他自以为懂我懂的东西,没有按照我的想法学我懂的东西,他不是个好学生。

简单来说,「不像学生的学生」,而这个「像学生」的标准是极其模糊、极其经验主义、极其不可靠且毫无用处的。教师奖励那些「像学生」的学生,并不会造就优秀的学生。

偏见之二

当今大学教育普遍存在的另一个偏见是对本科教育的不重视。我得说明,这可能也是我对大学教育的偏见,因为我所接触到的样本是有局限性的,只限于我所在的高校、我从身边人口中听到的他们学校的情况,而且大部分是理工科的样本。我接触到的有相当一部分的老师,并非是真心想要教学生的老师,他们大概可以分为以下几类:

  1. 本职工作是科研,学校对他的评价指标是他名下的论文。这类老师更关注研究生,对本科生的关注仅限于日常教学工作以及发掘潜在的研究生。5
  2. 没那么重视科研,但非常重视专业相关竞赛以及有价值的项目成果。这类老师把大部分时间用在带项目组上,对本科教学的关注度并不高。
  3. 的确是讲师,其他工作没有明显地影响他的教学工作,但这类教师教授的往往是学科基础课程而非价值更高的专业课程。

把课上得再好,老师也不会因此获得晋升,不如把精力放在更有回报的工作中。对学校而言,能带来短期利益的往往是科研成果和先进事迹,而非难以量化的教学质量。

偏见之三

第三个偏见和前一个同根同源,却又显得矛盾。大学体系相对而言没那么重视本科教育,但又在规则制度的层面非常重视本科教育,而这种规则制度本身也是偏见的。这种偏见可以理解,但无法原谅,那就是:规则制度更偏向于限制学生的行为,对教师的教学工作以及教学质量并没有那么细致入微的关照。

对学生的严苛体现在对数据以及合规性的重视。

所谓数据,就是出勤率和挂科率。解决出勤率低的方法是上课点名、位置签到、将出勤分计入课程成绩以及对缺勤学生进行处分。解决挂科率的方法是强迫老师让成绩「服从正态分布」,老师的评价体系必须要使得平庸的学生占据大多数——不过我不得不承认挂科率对于学生还是相对宽松的,反倒是老师会担心挂科率太多给自己造成麻烦,降低评价标准,尽可能地把学生的分数捞上去。不过,这难道不也是问题吗?

所谓合规性,是在本身就不重视本科教育的情况下,应对本科教育评价等其他针对大学教育的审查。以我所在的学校为例子,他们迎接本科教育评价的方式是:在教室安装新的摄像头和录音设备录制每一堂课,利用 AI 技术分析影响统计课堂的抬头率和前排就座率,并揪出那些在课堂上没有认真听课的学生。大学教育正在逐渐高中化,全国各地都在上演,树老师录过一期相关的播客—— 读书不成林《过度自由和过度纪律如何正在让大学教育沦为笑话?》

在非特殊时期(是的,迎接检查当然是特殊时期),学校为了保证合规性,对学生采取的策略是禁止一切会导致难以处理的责任的事情,最常见的例子是对学生宿舍的限制(比如开着摄像机突击检查学生宿舍收缴违禁物品这种骇人听闻的侵犯生活空间的行为)。说起来,是在保证学生安全;本质上,这是在规避责任。

安全教育,在我看来,规避责任的目的大于真正的教育目的。很多时候,老师会在完成安全教育之后补充一句「别说我没讲过」,同时,这样的安全教育在进行时,会被要求拍照留存证据,证明学校履行了对学生进行安全教育的责任义务;我在签订走读生管理协议时,协议上也清楚明白地写着「学校有义务对学生进行相关的安全教育」。

当学校被机构化,行政的工作就大于了教育的工作;当生活空间被责任化,保障生活条件的目的就成了一种责任和义务,并且必须制定新的规范来保证不会产生更多麻烦的责任。

——《 生活空间中的规则、秩序与责任

对教师的宽松体现在相关评价体系的不完善。

为了管好学生,学校发明了相当多的指标,诸如挂科率、出勤率、前排就座率、抬头率、第二课堂分数。在双向的教育过程中,对学生的学习有管束是共识,但对老师的讲授就是另一回事了。我遇到的念 PPT 的老师其实很少,但对着 PPT 胡说八道的倒是不少。

一个教软件项目管理的老师,在解释一个经济学概念的时候,仅仅是凭借她对术语字面含义的理解在阐述而已,举了一些不恰当的例子。我读过曼昆的《经济学原理》的前几章,那是一个很基本的经济学概念;其他没有这些知识储备的学生,难道不会被她的这种不负责给误导吗?

——《 这个世界会累死完美主义者吗?

还有前面提到的那个不会使用最基本的开发工具的前端老师,我就不重复了。据我所知,不少教育培训机构对于老师都有很严苛的培训和考核流程,而大学老师对自己讲授的知识究竟有多少了解,学校作为用人单位似乎并不会严格把关。这大概也不能责怪他们,毕竟,对于某个具体领域的知识,一个学校里真正掌握的可能也就一两个老师(而且还不一定是专业完全对口的老师)。那位教前端的老师是这样回顾自己的大学生活的(是的,几乎所有中年老男人都有这个毛病,在课堂上随意跑题也是学校不管的),他在大学根本没有学过网页设计相关的课程,他是把前端当作自己的爱好来学的,而自己现在竟然站在台上讲授自己的爱好,人生真的很神奇啊——原来这样就能当上老师讲授某个课程,确实是很神奇了。

针对老师的评价体系,主要体现在可以量化的成果上(和高中不一样,学生的成绩并不算成果),譬如科研论文、项目成功和竞赛奖项。教师鼓励学生参赛,我想并不完全是为了学生的职业发展考虑,还有一部分原因是为了让自己有拿得出手的成果。

体系的缺陷无法被个人力量填补

我很尊敬教我软件需求工程6这门课的老师,从她的谈吐中能感受到她在计算机领域和教学工作中都沉淀了很久。她不会跟那些不认真的学生纠缠,而是把注意力放在讲授内容和帮助愿意得到帮助的学生上,给出的建议都很诚恳,并且是以坦诚、平等的态度与学生交流的。她也不像许多对方法和工具过度执着的老师,要求学生必须使用某个软件完成作业7,她只注重学生呈现出来的结果。

讽刺的是,这样的老师反而是最不注重出勤率的(她的原话是:「爱来不来」),对前文所提及的偏见也熟视无睹,而且非常同情当代年轻人的处境。

不过,开明的教师总归是占少数,就像真正能从这套充满偏见的体系中受益的学生也是少数一样。

说了这么多教师的傲慢,也得来说说这套体系下学生的问题。问题就在于,大学生太把自己当学生,没把自己当成年人看。不服管若是仅仅以叛逆的形式表现出来,自然是不成熟的,不服管的真正原因是「一群成年人本身就不能被这样管着」。想象这样的画面:大学生想要外出游玩,但学校安装了门禁,夜间出行需要辅导员同意,辅导员驳回了所有出去聚餐和出去玩的请假,大学生们怨声载道——这他妈不是高中吗?辅导员表现得像是高中班主任,大学生也表现得像是个高中生。

最近两年有在举行一个名叫大学生生涯规划竞赛的全国性活动,两次都在班级群里发通知声称「所有 XX 级的同学都必须参加」,我印象里真的有不少学生吓得不轻,急急忙忙地把文档写了交上去。我两次都没报名,没有人管我——只要仔细想想就会发现,「必须参加」是一句无礼但弱小的命令,如果真的必须参加,发通知的人大可附上不参加的后果,然而这种必须逼人去参加才能办起来的比赛,不去自然是没有后果的。在这个例子里,学校把成年人当小孩子一样命令和看管,学生把自己当成小孩子一样听从命令,并暗自讨厌家长、老师和学校——从哪边看都觉得可笑,大学不应该是这样子的。

可悲的是,这种学校、教师甚至学生自己都不把学生当成年人看,对学生抱有经验主义想象的教育环境不会改变,至少很长时间内都不会,而且,大学高中化的趋势只会愈演愈烈。各种大环境不好、工作不好找的叙事,在日渐封闭的校园里只会变成遥远的传说,就像养殖场里圈养的猪在农场里讨论那些被农夫拉走的其他猪发生了什么一样。

或许暂时没有办法离开养殖场,但思想是自由的,不要在体系下变成像学生的学生、像小孩子的成年人,不要让别人来告诉你你应该学些什么。你的自由值得在更好的地方开花结果,尽管这个地方很难找到。


  1. 是一本排版和装帧都很精致的书,放在现在也是少见的,不过我忘记了名字,兴许之后能找到。 ↩︎

  2. 他在这方面无知也导致了学生对基本前端开发知识的无知。我在被迫参与小组作业的时候,帮一个组员排查问题。我把他的代码拉下来,在浏览器里打开控制台,报错再明显不过了——他的 AI 删除了一段函数定义,所以代码里有一个不存在的函数引用。谁能怪他呢?没人教他前端也会报错。 ↩︎

  3. 我最常用的前端开发工具是 Bun 和 PNPM,所以我不清楚 npm 和 npx 应该怎么写。 ↩︎

  4. 顺带一提,这个教前端的老师从来没有教过 Flex,他教的是…… 你猜猜看是什么?没错,是表格布局,也就是基于 <table> 元素的布局。 ↩︎

  5. 我印象很深的是,我的「大学物理」这门课是我们计算机学院的老师授课的,这名老师经常隔三差五地跟我们宣传读研的好,还找辅导员要学生的成绩,想找优秀的学生来跟着他做项目。 ↩︎

  6. 插句题外话,我认为需求工程大概是软件工程中最核心的分支了,尤其是编码过程正在被 LLM 大幅度简化的背景下,需求从未如此重要。 ↩︎

  7. 谁懂我必须装一个 Windows 虚拟机在 macOS 上运行 Microsoft Project 这个老古董软件的无奈…… ↩︎

撞到人要说对不起

2025年12月25日 01:39

我早早地订好了《Wicked: For Good》的电影票,平安夜的晚上是在电影院度过的。大概是因为音乐剧在国内水土不服,重庆人更是不爱看,所以本地影院的排场少得可怜。沙坪坝除了有一家影院提前开始售票,其他影院都是在开播的前一天才有票买,这也导致我去看的那场几乎坐满了人。

《Wicked》第一部电影,我是在去年的一个周四去的,那个时候电影已经开播了一段时间,整个影厅里只有我一个人,算是享受了包场。这次的感觉很不一样,前后左右都是人,不过,除了个别不知道是高中生还是大学生看到一丁点尺度极低的床戏就开始大笑之外,体验也不算差。

夏天刚结束的时候,我在好几次占卜中都得到了积极的预兆,大概会在十二月底到 2026 年初的时间遇见新恋情(其实更准确的说法是第一段恋情)。我虽然不是宿命论者,但我相信吸引力法则和心理暗示的力量——只要我怀着这样的期待和相信,这件事情发生的概率就只会增加而不会减少。我在这周安排了两次出行,其中一次是周六要去南岸区看音乐剧《雨中曲》,另外就是这一次。不喜欢去太吵闹太外放的社交场合,影院、剧院、书店和咖啡厅,是为数不多我能遇到陌生人的地方了,尽管这也意味着我和他们很有可能不会说上一句话。

这个周三给我的感觉很奇妙,一天都不想接收太多信息。这天一共走了一万八千多步,一般都会在路上听歌或者听播客的我,意外地对耳机感到些许厌烦。距离家三十分钟步行路程的影院,来回我都是走路,在路上只和自己的思绪作伴——我很喜欢散步的感觉,要是城市里没有电瓶车在人行道上狂奔就好了。

或许是没从虚拟世界里接收什么信息,心事也都在过去的几天里想遍了,脑子突然有了空闲的线程处理我身边的信息:早上刚走出电梯,看到地上有滩红色液体,脑子里本来已经开始想象邻里纠纷和动物虐待,并为人类感到高兴对猫猫狗狗感到痛心了,结果走出门发现另一滩相同的液体上有一颗烂掉的杨梅(好失望……?);远远地在学校的绿化带上看到一片颜色奇特的落叶,还没来得及感到惊奇,就发现那是某个没素质的人丢的火腿肠包装纸;影片快开始时,从前面匆匆跑进来三个人,身材中等,样貌打扮像是中学生,我疑惑「你们八点就放学了吗?」;在位置上坐下后,右下方突然有一个十岁出头的小男孩站起来(他的监护人在哪?);右边两个女生在放映之前一直在大声聊八卦,内容我忘记了,我没有很介意,但她们的声量和谈话方式的确是有点招人厌烦的类型,坐在我左边的男生似乎有些不满…… 唔,不知怎么地,接下来我的注意力就全放在坐在我左边的这个男生身上了。

我进场的时候,他已经坐在那了。因为觉得在没有交谈的情况下直视陌生人的脸不太礼貌,再加上灯光昏暗,我没有看清他长什么样子。他坐在 1 号座,我是旁边的 2 号座,右边的两个女生也已经坐在那了,所以我刚好进去填补了那个空位。大概是因为他有一种我难以描述的不好接近的气质,我坐下的时候,身体下意识地往远离他的方向倾斜,也导致我刚开始一直坐得不太舒服。这种气质,可能只有同类人才能如此清晰地察觉到,因为之前有人也说过我有「生人勿近」的气场,其他人要么是在跟我聊过一两句后发现我其实很好说话,要么就是因为这种气场一开始就没有跟我靠得很近,但不会细想这种印象的来源。总之,「坐在旁边的是一个很内敛的男生」,这个印象就这么产生了。

众所周知,INFP 的大脑结构很神奇,语言中枢并不会在他们开口讲话的时候被激活,这块大脑区域主要被用在以下场合:为未来即将发生的对话做预演、在脑子里回放以前进行过的对话并重新组织之前没说好的话,以及想象自己正在进行一场实际上根本不会发生的对话,对话的参与者与自己甚至根本不会相遇,再甚者,这个参与者根本不存在于现实当中。1

不过事实就是,我的确花了不少的时间想象,我会和坐在左边的这位和我一样在平安夜一个人出门看电影的男生,发生什么样的对话。我想他大概也暗暗地对这件屋子里其他所有的人感到厌烦,于是我跟他分析起右边两个讲八卦的女生的人物性格;他在看手机,是在和朋友聊天吧,我猜他也有大把大把的在网上认识的有趣的朋友;我猜他一定有着古怪的幽默感,所以我开始想象他笑的时候眯眼睛,盯着我看,尽管我从没看见过他的脸。

这些猜测,都是一些微小的、一般人不会注意到的细节,被我捕捉到之后,通过直觉自动生成的联想,而我已经忘记那些一开始让我产生这些印象的事实是什么了。

电影进行到奥兹国人民举着火把离开翡翠城,踏上黄砖路要去杀死西方坏女巫的桥段,此时北方好女巫 Glinda 心情十分复杂,看着队伍离去之后关上了窗户,窗户关上之后人群的吵闹声就几乎听不见了,而背景音乐并没有开始播放——本来是情感丰沛的一幕,而我脑子里蹦出来的第一个想法是「这窗户隔音真好!」我觉得我应该在电影院里保持安静,所以我又开始和脑海里的人对话。我在想,如果我把这句不合时宜的话说出来,他一定会笑的,虽然,我根本就不认识他!

我很难描述清楚这种感觉。为什么会对一个从没跟我说过一句话的人如此关注呢?他坐在 1 号座,要给好多过路的观众让位。我看见他好几次挪开腿让人通行,竟从他的肢体动作里读出一丝厌烦、无奈和小心翼翼。不过,我的理智告诉我,他可能有也很有可能没有这些感受,我只不过是在投射我自己的想法而已。

他似乎把自己的包规规矩矩地放在胸前,又时不时在里面翻找些什么东西。他偶尔会调整自己的坐姿,但大部分时候好像是缩在椅子里的,是太拥挤的空间也让他觉得不舒服吗?他会是个高中生吗,我会不会像我那个令人讨厌的室友一样喜欢上一个高三学生?不,我对他绝对是说不上喜欢的,只是令人费解地对他感到好奇。他掏出了手机,屏幕上显示的像是课表的界面,那他一定是个大学生了。课表好像很满,他会是大一新生吗?他会不会也有着那种愤世嫉俗却不真正理解社会运作方式的思维特质?不清楚具体的原因,我似乎一直很害怕自己的这部分特质,这或许在以前的我身上会明显很多。我会真的和他说上话吗?如果的会的话,应该是什么契机?他会讨厌我和他搭话吗?我会有这样的担忧,大概是因为我本身就讨厌莫名其妙找我搭话的人。

原来,我对素未谋面的人也会产生「他懂我」的错觉,真的是顶级恋爱脑了。不过,事实是,我只是在脑子里和另一部分的自己玩耍而已。

他穿了一件白色的内搭,似乎是毛衣,也可能是卫衣。电影进行到尾声时,他穿上了一件黑色的外套。散场灯亮起,我才看清楚他的裤子是咖啡色的。电影的演职人员表刚开始播放,他就迫不及待地起身走了出去。没过多久,我也站了起来,走出六号影厅,我往左转弯,才在走廊尽头看见他的背影。我没有刻意加快步伐,但走得也不慢。等我走出电影院,我已经找不到他了。我还是没有看清楚他究竟长什么样。

为什么我会感觉像是错过了命中注定的人一样?真是奇怪。2如果我未来的爱人性格和我一样,两个不爱跟陌生人说话的内向者,究竟是怎么相遇的呢?

如果我三生有幸,能让未来的文学学者来研究我写的这篇文章,他们大概会分析:作者借文中人物之口(或者「之躯体」?)表达了他对人群的厌烦、对自己的厌烦以及一种在全文中占据主导地位的情感——孤独。


  1. 以上全是胡说八道。 ↩︎

  2. 如果你在好奇这篇文章的题目为什么叫「撞到人要说对不起」——这是《爱人错过》的歌词。 ↩︎

让暴风雨来得更猛烈些

2025年12月23日 16:01

塔罗牌中的第十六号牌往往被认为是不祥的征兆,几乎没有一个人在占卜师抽到「塔」时不感到虎躯一震。各种塔罗牌中的「塔」的牌面通常描绘了一场灾难,尤其是天灾,在画面上能看到从天上劈下来的闪电、从高塔上掉下来的人以及起火的房屋。不过,「塔」并不是单纯的令人闻风丧胆的祸害,我也不认为七十八张塔罗牌中有纯粹的坏牌,今天的文章就来剖析「塔」的意象。

桌面上散乱地摆着九张塔罗牌,都是十六号牌「塔」,牌面上多半是崩坏的高塔、被闪电劈中的景象,还有从塔上掉下来的人;牌的旁边还摆着用牌盒叠起来的“塔”

九副塔罗牌里的 XVI 号「塔」牌,以及,我还很艺术地在旁边用牌盒叠了一个塔

是的,《 塔罗牌漫谈 》系列终于更新了。如果你对占卜和塔罗牌并不感兴趣,你或许也能在阅读这篇文章的时候发现一些有趣的神话故事和符号学小知识。


天神与天后之子

十六号牌「塔」在占星意义上对应火星,也就对应了罗马神话里的战神马尔斯(Mars)。玛尔斯是天神朱庇特(Jupiter,也就是木星)和天后朱诺(Juno,也就是婚神星)的儿子。朱庇特在希腊神话里对应的就是大名鼎鼎的宙斯(Zeus),他俩都是天空与雷电之神, 也是众神之王——在「塔」牌中很少缺席的「雷电」元素,大概就是玛尔斯父亲的影子。

玛尔斯一开始被认为是牲畜、农田和农夫的守护神,算是农业之神(玛尔斯的爷爷,也就是真正的农业之神萨图恩发了一个问号)。后来,随着罗马帝国的扩张,玛尔斯逐渐被视为战争之神,战争是玛尔斯的能力之一。罗马的建立者罗慕路斯与雷穆斯,传说是玛尔斯的孩子,所以罗马人也自称「玛尔斯之子」——或许类似于中国人说的「龙的传人」1我猜想,罗马人对通过战争、扩张建立罗马帝国的情怀和他们的爱国主义,使得他们将玛尔斯塑造成了一位战神。

玛尔斯的象征标志是「矛与盾」,也就是「♂️」标志——没错,表示男性的性别标志实际上来自于火星的占星学符号;至于女性的标志「♀️」,实际上是金星(Venus,维纳斯)的标志。有一本挺火的有关两性关系的书叫做《男人来自火星 女来自金星》,不知道和这个符号关联有没有关系。2

写到这里,就不得不提一个问题:象征战争和杀戮的马尔斯,是怎么和塔罗牌里的灾祸联系起来的?

经典的 Rider-Waite 牌中的「塔」

一副来自比利时的塔罗牌,第十六号牌是「闪电」而非「塔」

一副名为「耶稣在地狱」的画,图画中有一座塔

在一些来自比利时的塔罗牌中,十六号牌并非「The Tower」,而是「La Foudre」(The Lightning),即闪电,牌面描绘的是闪电劈中一棵树,树下的行人受到了惊吓。3有趣的是,在《吸引力法则》这幅现代的塔罗牌中,牌面描绘的也是闪电劈中大树的场面,只不过树下的人穿着雨衣,背对着画面,似乎毅然决然地要和大自然抗争。在一种名为 Minchiate 的古老的意大利卡牌游戏(这种卡牌游戏的卡牌结构与塔罗牌十分相似,塔罗牌在一开始也是一种游戏卡牌)中,代替「塔」这张牌位置的牌,描绘了两个赤身裸体的人逃离着火的建筑物的画面。这么看来,现代常用的 Rider-Waite 塔罗中的「塔」,大概是以上几种概念的融合——闪电、着火的建筑以及从高塔上跌落的人。

还有一种解读,将一个宗教故事和「塔」牌联系在了一起。一幅名为「耶稣在地狱」的画,描绘了耶稣基督在死后,冲破了地狱的一道大门,给从世界之初就被关在那里的人带来了救赎。在这幅画中被耶稣破坏的大门,就是镶嵌在一座塔里的,某种程度上也描绘了「塔」的毁灭。尽管「塔」象征毁灭,但地狱等不祥之物的毁灭也可以象征救赎——我在抽到「塔」这张牌的时候,经常是自己被许多繁重的任务缠身的时候,抽到这张牌的不久之后,我就会以异常迅速又敷衍了事的方式痛苦地结束掉工作,这和「塔」的这层含义的确很契合。

如果把「塔」的牌面变化和发展历程和战神玛尔斯的形象联系起来,就能发现一些微妙的关联——闪电劈断树木、火灾赶走了居住在房子里的人、地狱之火折磨着被囚禁的人,不仅火与电和战神的形象与出身十分契合,战争伤害无辜者的意向也与天灾残害人类的情节有着相同的内核。尽管玛尔斯受到罗马人的崇拜,但真正的战争无疑让人感到害怕。

换个角度看,战争带来的毁灭和死亡并非总是坏事,如果战争的胜利方是自己,死掉的是让自己感到厌恶和痛苦的东西(比如耶稣撞破了地狱的大门),「塔」也完全可以有积极的解读空间。

巴别塔与人类无法改变的命运

除了「耶稣在地狱」,另一个经常与「塔」牌联系起来的宗教故事是「巴别塔」。巴别塔的故事来自于圣经《创世纪》,第 11 章。我手上刚好有 白熊阿丸 赠予我的《圣经》和合本,可以顺手翻一下这段故事,其实很短,只有几句话。

巴别塔的故事接着大洪水过后,挪亚的三个儿子又都生了儿子,形成了宗族,在地上建立了国家。那个时候人类都说着相同的语言,他们组织起来,要建成一座通天塔。耶和华降临,看见地上的人们都说着一样的语言,觉着要是继续下去,他们就没有什么事情干不成了,于是就下去变乱他们的口音,让人类彼此语言不通,之后这巴别塔也就没有建成了。

这个故事大概是以前人们对于「世界上的人都说不同的语言」这个现象的宗教解释,放到现在也有一些象征意义——如果人们都说相同的语言,有着相同的思维方式,能够互相理解,那就没有人类干不成的事情了,更不会有矛盾、冲突和战争。这里的「语言」可以是抽象的,不一定是口音、语法和词汇,不同语言的使用者自然有着不同的思维方式和不同的世界观,比如前文提到的 La Foudre 其实是法语,而 La 是法语中的阴性定冠词,所以对法国人来说,闪电是女性(顺带一提,在法语里,「阴道」这个词是男性)。除了世界观和思维方式的差异,个体之间经验的差异也会造成认知层面的差异,这也会造成个体之间难以理解——这个世界上没有真正的「感同身受」。

如果把塔罗牌中「塔」的崩坏,理解成巴别塔的停工与毁灭,就能解释「塔」牌中描绘的天灾人祸的原因——人们无法相互理解,而这又是人类无法违抗和改变的命运。

无论结果好坏,「塔」牌总会给人一种无力感,无论是从天而降的雷电,还是一些塔罗牌中描绘的海怪袭击、陨石坠落,都是人力无法动摇的。「塔」象征着那些强烈、影响巨大、能引发强烈情感波动的既定事实,那些无论如何都无法改变的事实。结合巴别塔的故事,「塔」指出了人的主观能动性的局限性——世界上不是所有的东西都能被人改变。对于这些无法改变的事实,人只能改变看待它们的方式。

高塔倒下才能看见星星

第十七号牌,也就是在「塔」之后的一张牌,是「星星」牌。这两张牌形成的对比很强烈,使得「星星」看起来像是「暴风雨过后的平静」。前文提到,塔不一定是对自己有利的东西的毁灭,还有可能象征着对自己有害的外物的倒塌,一些人也会把「塔」解读为「现有秩序的瓦解」。总之,毁灭可以是中性的和积极的。「星星」牌在某种程度上强调的是「内心秩序」的建立。这两张牌的出现顺序构成了这样一个故事:有些现存的东西必须倒塌,自己才能真的看见自己,建立起新的秩序。

不过,无论是怎样的毁灭,过程都不会好受。天灾虽然可怕,但其实有种宿命感,有的毁灭就是必须发生,命中注定有一劫。就算不谈宿命,也可以从个人成长的角度来谈。必须经历磨难和痛苦过后,人才能获得精神上的成长,内核才能变得更稳定,这也是为什么老年人普遍显得内心更平和。

总之,「塔」虽然可怕,但不妨想象自己的要渡的劫难又少了一个,事情总会过去的,而这件事情过去之后,自己总会收获一些新的感悟,内心会变得更强大。和一些同样爱好塔罗牌的朋友比起来,我更喜欢「塔」和「倒吊人」这种吓人的牌,前者给我一种痛苦之后就能重获平静的感觉,而后者则有一些破茧成蝶的意味。其实我是个受虐狂啦!

比萨斜塔

呈现逆位的塔罗牌往往给我卡顿和停滞的窒息感,而逆位的「塔」就很微妙了——它让我联想到现实中的比萨斜塔。

比萨斜塔之所以倾斜,是因为建造之初地基只打了三米深,而且是建造在不稳的底土上的,一开始的设计就有致命的缺陷。当时,比萨共和国正忙着打仗,塔在建造到一半的时候停工了大半个世纪,这让底下的土壤有时间沉降加固,不然比萨塔肯定会倒塌。3

在 1990 年,比萨斜塔向公众关闭,因为研究发现比萨斜塔有倒塌风险。在 1990-2001 年这个阶段,人们进行了结构性的加固,在 2008 年,工程师宣布比萨斜塔有史以来第一次停止了移动,并且至少在 200 年内都会保持稳定。4

不过,对历史而言,200 年是很短的时间。

在我看来,「塔」的逆位也意味着灾难,但灾难是内源性的,而非天降横祸。前文提到,必须经历毁灭在能稳固内核,而逆位的「塔」揭示的,正是由内核不稳而导致的毁灭。逆位的「塔」也意味着有补救措施被做出,在短期内都不会有威胁,但这仅仅是推迟了不可避免的倒塌的发生而已——这种并不健康的风平浪静的局面,是需要靠长时间、不间断的神经紧绷,以及亡不完的羊和补不完的牢维持的。就像有人撒了一个谎,如果想要一直隐瞒真相,就需要撒更多的谎来自圆其说,到最后总会露出破绽。

在我看来,逆位的「塔」象征着暴风雨前的平静,而这种平静也预示着暴风雨终将会来临,就像声势浩大的灾难意味着灾难终将会结束,平静终究会回归一样。想要拼命维护地基本来就不稳的塔,只是在掩盖缺陷的存在、掩盖无法改变的事实而已。

用粗糙一点的话来讲,长痛不如短痛,与其每天为不知何时会到来的灾难忧心忡忡,不如让暴风雨来得更猛烈一些,把该经历的都经历了了事。逆位的「塔」预示的正是前一种短期内岁月静好,但长期来看更难受的局面——不过,这也意味着个体有停下来喘口气的时间。


最后

既然这篇文章写「塔」,那还请读者原谅我用「塔」一样的迅速、势不可挡、咄咄逼人、难以预料的方式结尾。

再见!


  1. 参见: 玛尔斯 - 维基百科  ↩︎

  2. 顺带一提,这个作者还写了好几本畅销书,名字分别是《男人约会往北,女人约会往南》、《男人进卧室向左,女人进卧室向右》和《火星人的秘密食谱,金星人的健康法则》。放到现在的互联网上大概会被喷死。书我没读过,就不评价了。 ↩︎

  3. 参见: #Construction - Leaning Tower of Pisa - Wikipedia  ↩︎ ↩︎

  4. 参见: #History Following Construction - Leaning Tower of Pisa -Wikipedia  ↩︎

稻草人周刊 Vol.60

2025年12月22日 08:37

咖啡康塔塔

巴赫

康塔塔(Cantata)是一种古典乐形式,也叫做「清唱套曲」,是一种包含独唱、重唱、合唱的声乐作品,一般包含多个乐章,大多有管弦乐伴奏。1咖啡康塔塔2是巴赫在 1732 到 1735 年创作的作品,尽管叫做康塔塔,但其实更像是短小的歌剧,而且偏喜剧。

故事的内容是一位父亲想要改掉女儿每天喝咖啡的恶习,威胁她要是不停止喝咖啡,就不准她参加派对、不准上街、没有新裙子穿,女儿说要是能喝咖啡,怎么样都行。最终父亲忍无可忍,说要是不戒掉咖啡,就不给女儿找男人,女儿说要是能找到一个健硕的爱人,自己就不会喝咖啡——最后,女儿偷偷地传播消息:要是不在婚约上写自己可以想什么时候喝咖啡就什么时候喝,自己就不会嫁给他。

我真的很喜欢这段歌词,我想我会背诵下来的 😋

If I couldn’t, three times a day, be allowed to drink my little cup of coffee, in my anguish I will turn into a shriveled-up roast goat.
如果我每天不能美美喝上三次咖啡,我就会痛苦得像一只被炙烤的山羊。

Ah! How sweet coffee tastes, more delicious than a thousand kisses, milder than muscatel wine.
啊!咖啡尝起来多甜美!比一千个情人的吻还美味,比麝香葡萄酒更温柔!

Coffee, I have to have coffee, and, if someone wants to pamper me, ah, then fill up my coffee again! 3
咖啡啊咖啡,我一定要喝,如果有人要款待我,就请满上我的咖啡杯!

⋈︎ · 连接

怎么哪里都有菜单图标?

📜

作者抱怨了 macOS Tahoe 在菜单栏里加图标的新设计,他一直认为菜单栏里的图标是一种视觉噪音,看起来很乱,而且可能造成误解。许多产品(比如 Google Sheets)都采用了这种设计,而随着 macOS Tahoe 发布,Apple 也加入了「硬往菜单里塞图标」的大军,他感到很沮丧。

作者认为用于移动窗口、管理窗口布局的图标,用图形来指示位置是很直观的,是好的设计,然而,如果没有好的理由,就不应该往菜单里塞图标。讽刺的是,Apple 实际上违背了他们自己的 设计指导 ,相关的文档中有一节专门讨论图标在菜单中的使用。

There are a few standard symbols you can use to indicate additional information in menus…Don’t use other, arbitrary symbols in menus, because they add visual clutter and may confuse people.

有一些标准的符号可以用在菜单中指示附加信息。不要在菜单中随意使用其他的符号,因为它们可能会造成视觉杂乱、使人困惑。

我也不喜欢菜单里硬塞图标的设计(还有在 PPT 里塞语义模糊、与上下文无关的图标),我认为这种设计本质上是缺少思考的体现,没有考虑设计是否必要,只是想要把空间占满,明明有些空白就应该留着

开发者应该如何命名工具?

📜

作者观察到了一种现象:如今的软件开发者非常喜欢用动物、虚构角色和一些意义不明的名词来命名自己的软件,像 Cobra、Viper 和 Melody,使得整个软件生态变得像是动物园,最大的问题是,这让那些排查依赖问题的开发者很头疼,看着长长的依赖树却根本不知道每个依赖是用来做什么的。作者指出,其他科学领域里不会把这种命名方式视作专业行为——如果一个化学家把一个分子命名为 Steve,仅仅因为 Steve 这个名字很好笑,而且会让他的论文更接地气,这无异于社会性自杀。

作者指出,以前的软件名称都有表意作用,比如早期的编程语言名字:

  • FORTRAN(Formula Translation)
  • COBOL(Common Business-Oriented Language)
  • Lisp(List Processing)

还有早期的 Emacs 编辑器里的一些名字,dired 是 Directory Editor(目录编辑器)、eshell 是 Emacs Shell;一些命令也是如此,比如 grep 是 Global Regular Expression Print(全局正则表达式打印),sed 是 Stream Editor(流编辑器),cat 是 Concatenate(串联)。

作者认为动物园式的命名方式会造成认知债务(cognitive tax),使开发者不得不花更多的时间来理解工具的名字。他认为软件开发者应该使用复合词,根据用途来命名软件,至于宣传和接地气的部分,完全可以单独做一个吉祥物,比如 PostgreSQL 的吉祥物是一只名叫 Slonik 的大象——不要把软件的名字当成吉祥物。


我其实不能完全认同作者的观点。实话实说,在读这篇文章之前,我完全不知道 grep 的全名是「全局正则表达式打印」而 Emacs 里的 dired 是目录编辑器——这几个东西我都用过,grep 还是我最常用的命令之一,然而,它们的名字对我而言,和 Cobra、Viper 之类的没有太多区别。作者可能忽略了,许多人(尤其是非英语母语者)并不在乎一个工具的全名是什么,只要把用途和名字匹配起来就好了——所有程序员都会写 SQL,但除了学校里的老师可能会在 PPT 上写「SQL 的全名是 Structured Query Language,结构化查询语言」之外,还有多少人在乎呢?像 MySQL 和 PostgreSQL 这样的数据库管理系统,明明不是一种 DSL 或者 SQL 的变体,却还是使用了 SQL 的名字,这个词已经变成广义上的关系型数据库的代称了。

更别提 FORTRAN、COBOL 和 Lisp 了,如果不是真心对这几门语言感兴趣的黑客,谁能一眼看出来他们表示什么意思?作者所提到的认知债务,在这些「具有描述性」的名字中依然存在。此外,我也不太能明白为什么作者认为 Go 语言是一个有点蠢的名字,难道必须起一个像 http-request-validator 一样的名字,才能算好吗?那同类软件之间要如何做出区分呢?

不过,我也要承认,随便拿一个几乎毫无关联的名词做软件的名字,的确不太妥当,但我认为不妥当的点在于自我意识过剩和对作品以及用户不负责,而不是「名称不具有描述性」这个理由。比如,一个开发者很喜欢宝可梦,便把自己开发的一个系统清理工具命名为 Squirtle(杰尼龟),就不太妥当了,因为名称与工具之间几乎没有任何关联,或者说脑回路过于奇特,其他人难以建立起关联。但是,如果把一个用于将网盘挂载(mount)到文件系统中的软件命名为 Pokémount,我认为这不失为在个性和描述性之间的一种平衡(只不过这个例子可能会有版权问题,但我觉得我表达清楚我的观点了)。

作者在文中提到了一个名为 libsodium 的加密库,说自己看到这个名字的时候必须从「解决问题模式」切换到「一探究竟模式」,才能搞清楚这个库为什么叫这个名字——加密往往涉及到「加盐」,而名字中的 Sodium(钠)明显代指「盐」,这个名字实际上还是具有描述性的。我想说的是,开发者完全可以更专注,在解决问题的时候收一收自己的好奇心,就像我在用 grep 筛选查看返回信息的时候,只会专注找我想要的内容,而不是纠结 grep 这四个字母究竟是什么意思。

中文的「不错」和英文的「好」

📜

作者表示自己作为中文母语者,更喜欢用双重否定表达肯定,比如「不错」「没事」「没错」,而他观察到英文使用者更偏好直接肯定,比如「Decent」「Okay」「Right」。他认为中文使用者更偏好使用双重否定,其实是一种留白,刻意留下了一定的模糊性以避免直接承担表达的责任,设立了一种心理屏障。例如,A 在选购某种商品时寻求了 B 的建议,如果 B 说「我觉得很好」,而 A 买下之后却遇到了各种不如意,那 B 就有可能承担 A 的选择带来的后果;如果 B 说「还行吧,不坏」,没有得到直接肯定答复的 A 需要承担全部的选择带来的责任。作者认为两种语言实际上构建了两种不同的现实模型(realities)。

毋庸置疑,语言会影响思维方式,不过我并不赞同这种过于简单粗暴的二分法,实际上「Not bad」这个说法也很常见,甚至比中文里还要常见,因为中国人在相似场景下可能更喜欢说「还行」——一个语气更弱的直接肯定,而不是双重否定。

作者似乎也没有意识到,世界上说英语的人很多,全世界都有英语使用者,而作者提到的偏好肯定的、简单直白的英语,更像是美国人说的英语。文章下有一条评论是这样说的:

我只是过来说一句下面已经有人说过的话:你显然没有和某一类英格兰人打过交道。

美国人是喜欢玩火柴和刀片的小孩子。

原文

Came here to say what someone else has already said below: you’ve obviously had little to do with a certain sort of Englishman.

Americans are children playing with matches and razor blades.

不过,作者的确在自己的认知范围内做出了足够多的分析,文章写得也足够条理清晰,读起来很有意思。只不过,这篇文章收到的一些批评也提醒我:不要陷入太过简单的二元对立陷阱中,真实情况往往更复杂;分析现象时最好要找到足够多的依据,对于这类文化问题,最好找一些英语使用者和中文使用者来讨论,或者请他们读一读文章草稿。

⁂ · 星群

Atomic CSS Devtools

用于测试和 Debug 原子化 CSS 的工具,支持 TailwindCSS、UnoCSS、PandaCSS 等其他原子化 CSS 库。刚发现的时候还觉得用处不大,因为原子 CSS 的类名本身就很清晰了,但发现这个工具的同一天,我就遇到了一个奇怪的 UnoCSS 导致的问题——有一个类只有变量,但没有实际发挥作用的属性。如果没有这个 Atomic CSS Devtools,我可能要在 Styles 标签页翻找好久才能发现。

这个插件在前端开发者工具中添加了一个 Atomic CSS 标签页,会把选中元素的样式全部列出来,在右侧显示是哪个类提供了这个样式。

访问: GitHub - astahmer/atomic-css-devtools

Wails

一个跨平台的桌面端应用开发框架,后端使用 Go 语言,UI 可以使用任何前端技术构建。和 Tauri 一样,Wails 不会把浏览器内核打包到最终的软件包里,而是使用系统默认 WebView,软件包的大小会比 Electron 小很多。

Tauri 使用 Rust 语言,而 Wails 使用 Go 语言,两者在前端技术上都没有限制。除了 Tauri 出现的时间比较早,生态可能更成熟之外,我认为两者都是不错的跨平台开发选择——不过相比 Electron,这两个框架在生态上都没有太大优势。

访问: Wails

MrRSS

一个比较新的跨平台 RSS 阅读器,用 Wails 开发。我并没有觉得 MrRSS 的设计有多惊艳,但我对它使用的技术栈很有好感,使用的是 Go 语言和 Vue.js(如果用的是 Node.js 和 React 我大概会直接晕过去)。作者正在积极开发,如果你在选择新的 RSS 阅读器,MrRSS 可能是一个不错的选择。

访问: GitHub - WCY-dt/MrRSS

↯ · 当下

我加入了 Fediverse

Fediverse(联邦宇宙)是去中心化的社交网络,所有使用相同协议的实例能够相互通信,使得用户可以在一个服务器上查看整个 Fediverse 中架设于其他服务器上的社交媒体实例上的内容。最常用的协议是 ActivityPub,支持这个协议的软件有 Mastodon 和 Misskey 等微博(Microblogging)平台,像 Ghost 这样的内容管理平台也有支持 ActivityPub 的,也属于联邦宇宙的一部分。

相比 Twitter(我不想用 X 这个名字)和 Instagram 这类由某个科技公司提供的社交媒体,Fediverse 更自由,用户可以选择在自己信任的服务器上注册账号(或者自己架设服务器),只需要电子邮箱就能注册,只要在任何一个支持 ActivityPub 协议的服务器上拥有账号,就能在整个 Fediverse 上和其他人交流,而且,在这里没有人想要给你推荐广告、收集和售卖你的数据。

我刚开始探索 Fediverse,所以选择了在一个公共实例上注册,未来兴许会自建实例。 @eltrac@c7.io 是我的 Mastodon 账号,期待能和你在联邦宇宙上相遇。

我加入了 IndieWeb

indieweb.org 是这样介绍自己的:

IndieWeb 是专注于人的网络,用于替代「大公司网络」。

我们是由独立的个人网站组成的社群,基于这样的原则:拥有你自己的域名,把域名用作你最主要的线上身份,在你自己的网站上优先发表内容(发在其他地方是可选的),并且拥有你的内容。

原文

The IndieWeb is a people-focused alternative to the “corporate web”.

We are a community of independent and personal websites based on the principles of: owning your domain and using it as your primary online identity, publishing on your own site first (optionally elsewhere), and owning your content.

之前一直很喜欢 IndieWeb 的概念,但没有深入了解。其实加入 IndieWeb 也很简单,最主要的步骤就是拥有自己的域名和网站,优先在网站上发表内容,之后再同步到其他地方,这件事情我已经在做了。要说别的什么东西,大概就是设置一下 Microformats、配置 IndieAuth 和支持 Webmention。

Microformats 是基于 HTML 的一种标记内容和身份的格式,主要用来帮助自动化工具展示作者信息和内容信息,详情可查阅 IndieWeb Wiki

至于 IndieAuth,就是给链接加上 rel="me" 属性以声明链接到的个人资料的确属于自己,这个链接可以是 <link> 也可以是 <a>,以下是我的写法:

<link rel="me" href="https://c7.io/@eltrac">
<link rel="me" href="https://github.com/BigCoke233" />
<link rel="me" href="mailto:hi@guhub.cn" />

确保网站上有 rel="me" 的内容之后,还需要在以上链接中链接到自己的网站,比如在 GitHub 个人资料中设置个人主页链接。许多 IndieWeb 相关的服务,比如 webmention.io ,支持 Web Sign-In,只要提前配置好了 IndieAuth,就可以通过自己指定的 GitHub 账号或电子邮箱等方式,以域名拥有者的身份登录。

如果你拉到网页最下方,会发现博客的评论按钮旁边多了一个图标为 @ 的按钮,这就是 Webmention,一个 W3C 标准。你可以以发送 HTTP 请求的方式向支持 Webmention 的网站发送回复、点赞、提及等回应,自己也可以作为接收方接收这种回应,展示在网页上。只要配置得当,在自己的网站中插入链接就能像在社交媒体上用 @用户名 的形式提及其他用户一样给其他人发送通知,不过要完全自动化还是有些麻烦的。

我使用 webmention.io 提供的服务来接收 Webmention,在 <head> 中添加了以下代码来声明我的 Webmention 端口。

<link rel="webmention" href="https://webmention.io/www.geedea.pro/webmention" />

向这个端口发送 Webmention,就会展示在我的网站上。你可以点开博客下方的 Webmention 按钮,查看这一页收到的 Webmention,也可以通过表单提交你的网址以手动发送 Webmention,不过发送 Webmention 的前提是你提交的网址中有链接到这个页面。4

我目前还没有配置自动发送 Webmention,用静态网站生成器还是不太方便做自动化,要自己配置 GitHub Actions,兴许有空了我会尝试一下。

在发布周刊之前我就收到了两个 Mentions,有些惊喜,如果你不喜欢发评论,或者没有 GitHub 账号,可以在自己的网站上撰写一篇文章回应我,又或者只是在写文的时候简单提及,无论怎样我都会很开心的。


  1. 参见: 康塔塔 - 维基百科  ↩︎

  2. 原名:Schweigt stille, plaudert nicht (Be still, stop chattering), BWV 211,也叫 Coffee Cantata ↩︎

  3. 歌词来源: EMMANUEL MUSIC  ↩︎

  4. 经过测试,我发现在社交媒体上发布链接并提交 Webmention 并不能成功推送通知,因为发送 Webmention 的前提是源链接(也就是你提交的链接)指向的网页中,有链接到目标链接(也就是你要发送 Webmention 的网页)的超链接。社交媒体的内容一般是通过 JavaScript 动态展示的,HTML 中没有内容,所以也就检测不到链接。 ↩︎

Make Some Effort to Be Understood, Please

2025年12月20日 17:33

So, my roommate just threw a litany of facts about psychoanalysis and Buddhism on me, like all kinds of name-dropping and inconsistent statements. I wasn’t paying much attention because I was just taking a short break from my work, and honestly, I don’t give a damn.

I felt the urge to write something about this random experience immediately afterward. I think the reason is that — he made me feel bad about myself, like I was a muggle who cannot appreciate the beauty of philosophy, which I do read a lot about.

Why do I feel that? I think it’s because I don’t feel seen. It feels like he’s only talking to me when he needs an ear, who is human but always accepting, and doesn’t talk back when there’s a disagreement or merely a confusion. I had this impression because:

  • I expressed my unfamiliarity with the topic he’s proposing, yet he kept dropping names (like those words you can’t even find on the Buddhism Wikipedia page, something you have to dig deep to find out), without explaining anything.
  • He was talking about how Buddhism and psychoanalysis are connected, saying one thing from Buddhism is actually another thing from psychoanalysis, neither of which is explained! It’s like saying “Hey, this multi-dimensional proton is actually that photon-quantum-ish quantifier from the famous Plato theory!” — just shut up. Why do you even utter a word when you know people won’t understand, or why do you have to be so egotistic thinking everyone in the world cares about the same thing you do?
  • He’s not backing down, so I decided to take a little bit of my time exchanging ideas. He says a university is studying the relationship between Buddhism and psychoanalysis. I say, “Well, it sounds like they’re trying to hard to make a connection here, which is what many Chinese academics do, especially in humanities.” — because it’s exactly what it sounds like. He didn’t explain anything, so it’s impossible to connect the dots! I expect to hear some convincing ideas, but I did not get what I want. He said, in response, “Well, they are fundamentally connected. I think it’s meaningful work.” — Still, he did not care to explain his words.

Upon hearing his passive-aggressive response, I stopped talking and went back to my room. I don’t like the energy there. As far as I’m concerned, keeping this conversation will do no good. (which is not actually a conversation, because you see, a conversation involves two individuals respecting each other, not just one person dumping unclear claims.) I’ve tried to exchange some ideas before, but his mind is not to be changed. He never stood corrected. And I’m not even trying to change his mind here. I just wanted to understand his opinion (or the opinions he read from someone else). Apparently, that was too much to ask for.

Why do you engage in or even start a conversation, when you make no effort to be understood? It is as simple as defining some terms, clarifying some confusion, and making a goddamn point.

By the way, this is exactly what people do on most of the Internet. They expect people to understand when they’re only typing a few words or making a 2-minute video about their opinion (or is it really an opinion?). And when people don’t understand (and they’re supposed to not understand), they get mad, and yet another meaningless time-consuming Internet argument begins.

Just stop. Please make some effort to be understood in the first place. Define the context. Explain the reasons. Answer questions without mistaking them as trolls. Learn to speak some meaningful words. If you find that’s too hard to do in speech, then write. Start a blog. I’m sure there will be your audience on the Indie Web. Just don’t pick me as your unwilling one.

关于一切的纯文本解决方案指南

2025年12月18日 17:38

我极度厌恶拖拽式的图形界面,一方面是因为我最常使用的光标输入设备是 MacBook 自带的触控板,而众所周知用触控板拖拽简直是世界上最反人类的操作;另一方面,对于不少操作,图形界面都是不必要且更消耗资源的。开发者要构建图形界面,需要花更多的时间分析、设计和编码;电脑要运行图形界面,需要占用更多的系统资源;磁盘上存储图形数据,占用的空间也更高。诚然,图形界面的优势是简单直观、使用门槛低,但如果你有一个纯文本编辑器、习惯或愿意尝试使用命令行、乐意探索新技术,那么,我认为你至少应该尝试用纯文本的解决方案,替代原有的图形界面解决方案。

本文整理了几种在我看来使用纯文本解决要比使用图形界面解决来得更方便、更高效的问题场景,并给出了用到的相关软件,供读者参考。

绘图

作为软件工程的学生,画各种流程图、活动图、时序图和用例图应该是家常便饭。在软件工程里,表达需求的方式有很多种:自然语言描述、伪代码描述,还有图表。其中,图表自然是最清晰直观的,是必要的沟通工具。

在软件工程领域,各种类型的图表都有相应的规范。最常见的规范就是 UML,全称 Unified Modeling Language(统一建模语言),它提供了用图形描述软件系统架构、行为和需求的标准。

相关的绘图工具有很多,这里不谈国内外的各种 SaaS 软件1,笔者在以前最长使用的是开源免费的 draw.io ,基于 Web。使用这类基于图形界面的软件绘图的基本流程是:在左侧长长的列表中找到你需要的图形,然后把它拖拽到中间,点击它,把手指的位置从鼠标移动的键盘上,然后输入文本,然后把手指的位置从键盘移动到鼠标上,拖拽另一个图形到中间…… 在之后,你还要手动调整这些图形是否对齐、间距是否合适。

在这个过程中,有不少时间都浪费在了调整图形上,而不是用在「传达信息」上。而且,可供选择的图形种类很多,用户完全有可能用错图形,画出不符合 UML 规范的图。

有一段时间我会用自然语言描述需求,然后用 LLM 生成 SVG 代码来画图,但 LLM 的空间想象能力为 0,画出来的图歪七扭八,根本没法用。后来我发现,基于纯文本的画图解决方案其实不少。

Mermaid

你可以把 Mermaid 想象成用来画图的 Markdown。要画一个简单的流程图(Flowchart),你只需要这样写:

graph TD;
 A-->B;
 A-->C;
 B-->D;
 C-->D;

Mermaid 的优势是,它和 Markdown 的生态系统兼容性很好,很多 Markdown 编辑器和渲染工具,都能够渲染嵌入在代码块里的 Mermaid 图形,你只需要把代码块的语言指定为 mermaid, 这个代码块就会被替换为图形。据我所知,Obsidian 是内置这个功能的,而 Hugo 的官方 文档 里也提供了在 Hugo 中使用 Mermaid 的教程。

Mermaid 提供 JavaScript 库命令行工具 ,可以轻易地在网站上使用、在基于 Web 的桌面端软件里使用,或者在本地用纯文本编写,再执行 mmdc 命令将文本转换为指定格式的图形。

不过,我并没有继续使用 Mermaid,因为它有一个非常明显的缺陷:Mermaid 并不支持完整的 UML 规范。尽管 Mermaid 支持很多类型的图形(甚至包括思维导图、看板、饼图和四象限图),但缺少对用例图、活动图等重要 UML 图的支持。

顺带一提,早在 2023 年七月,就有一个相关的 Issue 被提出,建议添加用例图,有超过 600 点赞,呼声不小。也有 Pull Request 被提出,没有被合并2,而且这个 PR 也没有完整实现规范的用例图,缺乏拓展、包含等关系的表示。Issue 的状态被标记为 Approved(通过),但用例图一直没有被添加到 Mermaid 中。Mermaid 上一次添加新的图表类型是在 v11.0.0 版本3,一年前。毕竟是开源项目,缺乏人手添加新功能也是可以理解的,而且 Mermaid 的定位是创建图表和可视化内容的,并非是对 UML 的实现。

Graphviz

Graphviz 是上个世纪就出现的绘图软件,使用名为 DOT 的语言绘制节点、边、图、子图和组,支持命令行。Graphviz 的语法和 Mermaid 类似,但无需指定图表类型,因为 Graphviz 没有图表类型这个说法。个人感觉,Graphviz 中的 Graph 就是指数据结构中的图(graph),而不是图表(diagram)。

graph { 
 a -- b
 a -- b
 b -- a
} 

Graphviz 是用 C 写的,速度应该会比用 TypeScript 编写的 Mermaid 要更快,但不适合集成在 Web 应用中。如果需要表示数据结构,Graphviz 大概会更合适。

PlantUML

PlantUML 基本上就是对 UML 的实现,支持时序图、用例图、类图、对象图、活动图等等。如果要画符合规范的 UML 图,PlantUML 几乎是最好的选择。除此之外,PlantUML 还支持不少非 UML 图,比如项目管理相关的甘特图和 WBS4 图,还有数据库相关的 E-R 图5

PlantUML 的语法会稍微繁杂一点,原因大概是 PlantUML 是用 Java 写的,所以继承了编程语言的啰嗦特性,但整体上还算简单。以下是一个时序图的例子:

@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
@enduml

Bob 和 Alice 简直是软件领域的李华。

要使用 PlantUML,可以使用官方提供的 在线编辑器 ,也可以 下载 到自己的电脑上,然后运行 JAR 文件——是的,你需要安装 Java……

java -jar plantuml.jar input.txt

我的建议是在 .zshrc(或者其他终端的配置文件里)给这个命令设置一个别名,这样就不需要每次都找到 JAR 文件在哪了。

PlantUML 也有相关的集成插件,可以在万恶的 IntelliJ IDEA、VS Code 等编辑器中使用,也可以用在支持拓展语法的 Markdown 里。我自己最常用的场景是用 Pandoc 输入 Markdown 生成 PDF,可以使用这个 pandoc-plantuml-filter 让 Pandoc 渲染通过代码块嵌入在 Markdown 文件中的 PlantUML 图。

富文本编辑

Word 简直是世界上最反人类的文本编辑器,还有与之相关的 Pages6 和国内的 WPS——明明论文格式和各种文档都有固定的格式要求,我为什么会需要每写一篇文档都要手动调整格式,在各个菜单栏里点来点去?就算用格式刷我也觉得很难受!

LaTeX

目前最成熟的文档标记语言应该是 LaTeX ,这是一个免费软件。以下是 LaTeX 官网上引言的片段:

LaTeX 不是一个文本处理器!相反,LaTeX 鼓励作者们不要太担心文档的外观,而是专注在编写正确的内容上。举个例子,考虑这篇文档:

Cartesian closed categories and the price of eggs
Jane Doe
September 1994

Hello world!

要在大部分排字或文本处理系统里产出这个文本,作者不得不决定使用什么排版,所以要选择(比如说)18 pt 大小的 Times Roman 字体用在标题上,12 pt 大小的 Times Italic 字体用在名字上,等等。这会导致两个结果:作者把时间浪费在了设计上;还有很多设计得不好的文档!

原文

LaTeX is not a word processor! Instead, LaTeX encourages authors not to worry too much about the appearance of their documents but to concentrate on getting the right content. For example, consider this document:

Cartesian closed categories and the price of eggs
Jane Doe
September 1994

Hello world!

To produce this in most typesetting or word-processing systems, the author would have to decide what layout to use, so would select (say) 18pt Times Roman for the title, 12pt Times Italic for the name, and so on. This has two results: authors wasting their time with designs; and a lot of badly designed documents!

使用 LaTeX 的话,就用纯文本这样写就好了。

\documentclass{article} 
\title{Cartesian closed categories and the price of eggs} 
\author{Jane Doe} 
\date{September 1994} 
\begin{document} 
	\maketitle 
	Hello world! 
\end{document}

不过,我并没有高强度的写论文需求,所以接触 LaTeX 比较少,用的比较多的场景应该是在 Markdown 中嵌入公式,许多 Markdown 编辑器都支持用 $$ 包裹 LaTeX 块以渲染数学公式。以下是一个二分类问题的对数损失函数,用做示例。

$$
\mathcal{L}(\theta)
= -\sum_{i=1}^{n} \left[
y_i \log f_\theta(x_i)
+ (1 - y_i)\log\bigl(1 - f_\theta(x_i)\bigr)
\right]
$$

总而言之,LaTeX 是一个功能强大的文档标记语言,有了它就可以把注意力放在编写内容上,而无需过多关注页面排版。不过,也有人认为 LaTeX 的语法太啰嗦,所以会寻求其他的解决方案。

Typst

你可以把 Typst 理解为一个更像 Markdown 的 LaTeX,它的功能和 LaTeX 一样强大,却有着 Markdown 一样简洁的语法。

Typst 支持各种类型的可视化、图表、数学公式、代码高亮等,还可以用来做幻灯片。Typst 本身是开源免费的,有提供云储存和同步的增值服务,可以订阅支持。不过,我没有使用过 Typst,所以就不展开了,我认为有较专业的论文写作需求的,可以尝试 Typst。

Markdown 和 Pandoc

Markdown 最常用的使用场景是被渲染为 HTML,用在博客平台、论坛和一些即时通讯软件里(据我所知,Discord 就支持 Markdown 语法)。Markdown 的最大特点是可读性,即便没有被渲染,阅读纯文本的 Markdown 文档也没有任何问题。

尽管 Markdown 本身的语法比较局限,缺乏 LaTeX 和 Typst 的排版能力,但借助一些拓展语法和外部工具,就能让 Markdown 变得几乎万能。

本文要介绍的是一个非常强大的命令行工具—— Pandoc ,他几乎可以把任何文档格式转换为另一种文档格式(官网列出了详细的支持列表),它可以在 Markdown、Emacs Org-Mode、AsciiDoc、Typst、LaTeX、Microsoft Word 等格式之间相互转换,还可以把上述格式轻松转换为 PDF。如果有不支持的小众格式,还可以自己用 Lua 语言编写 Reader 和 Writer。

有了 Pandoc,你就可以安心地用 Markdown 编写文档,写完之后再转换为需要的格式,比如 Word 和 PDF。

你还可以编写 Filter 来拓展 Pandoc 的功能。Pandoc 转换文档的过程是这样的:使用相应的 Reader 把以原始格式编写的文档读取为 AST(抽象语法树,一个中间层);再由 Writer 把 AST 写为用户指定的文档格式。编写自定义的 Reader 和 Writer 可以让 Pandoc 读取或写出更多的文档格式,编写 Filter 可以改变中间的抽象语法树。以下是 Pandoc 从输入到输出的过程:

INPUT --reader--> AST --filter--> AST --writer--> OUTPUT

举个例子,如果你想要把 Markdown 文档里的二级标题全部替换为斜体正文内容,这就涉及到了更改中间层 AST,因为 ## 二级标题 被 Reader 读取时,依然是二级标题,如果 AST 没有改变,被 Writer 写出的时候就转换为了另一个格式的二级标题(比如 HTML 的 <h2>二级标题</h2>)。如果要从二级标题改为斜体正文内容,就要在内容被 Writer 写出之前改变 AST 的内容。

记得前文提到的 PlantUML 吗?GitHub 上有一个现成的 pandoc-plantuml-filter ,他会把编程语言被标记为 plantuml 的代码块,用 PlantUML 渲染为对应的 UML 图——Reader 读取到了 plantuml 的代码块;Filter 把抽象语法树中的代码块变成了图片;Writer 把图片写入了输出文件。

配置好了对应的 Filter,就可以直接在 Markdown 文件里这样嵌入 UML 图:

```plantuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: Another authentication Response
```

将 PDF 引擎设置为 xelatex,Pandoc 也能将被标记为 LaTeX 的代码块渲染为嵌入式的 LaTeX 文档,可以用这个特性来实现多图排版。

```{=latex}
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.3\textwidth}
 \centering
 \includegraphics[width=\textwidth]{img/1.jpeg}
 \caption{图 1}
 \label{fig:img1}
\end{subfigure}%
\hfill
\begin{subfigure}[b]{0.3\textwidth}
 \centering
 \includegraphics[width=\textwidth]{img/2.jpeg}
 \caption{图 2}
 \label{fig:img2}
\end{subfigure}%
\hfill
\begin{subfigure}[b]{0.3\textwidth}
 \centering
 \includegraphics[width=\textwidth]{img/3.jpeg}
 \caption{图 3}
 \label{fig:img3}
\end{subfigure}
\caption{三张图}
\end{figure}
```

有了上述工具,你就能以一种工程化的方式编写文档。我的建议是,把图片、参考资料、Markdown 源文件和其他资源放在同一个目录下,然后在这个目录下再创建一个 pandoc.sh,示例内容如下:

#!/bin/bash

pandoc "input.md" \
 --from=markdown+yaml_metadata_block \
 --pdf-engine=xelatex \
 --filter=pandoc-plantuml \
 -V geometry:margin=2cm \
 -V fontsize=12pt \
 -V mainfont="Songti SC" \
 -V CJKmainfont="Songti SC" \
 -o output.pdf

编写文档的过程中可能需要多次运行 Pandoc 来测试结果,或者在更新后生成更新版本的 PDF 文件,把命令放在 Shell 文件里更方便运行。这些设置项也可以放在 Markdown 文件的 frontmatter 里,具体放在哪里就看自己的喜好了。

---
title: 文档标题
subtitle: 副标题
author: Eltrac
date: "2025-12-13"
geometry: margin=2cm
fontsize: 12pt
mainfont: "Songti SC"
CJKmainfont: "Songti SC"
header-includes:
 - \usepackage{xeCJK}
 - \setCJKmainfont{Songti SC}
 - \setCJKfamilyfont{hei}{Heiti SC}
 - ...
---

Pandoc 还可以一次性接收多个 Markdown 文件作为参数,文档也可以用模块化的方式编写。

pandoc intro.md chapter1.md chapter2.md appendix.md \
	-o output.pdf

如此一来,你就可以像开发软件系统一样编写文档,维护一个这样的目录:

document/
├── intro.md
├── chapter1.md
├── chapter2.md
├── ...
├── appendix.md
├── pandoc.sh <-- 编译时运行
├── img/
│ ├── figure1.png
│ └── ...
└── output.pdf <-- 编译结果

把文档发送给别人的时候,提交 output.pdf 就好了。

Quarto

Quarto 是一个基于 Pandoc 的命令行工具,可以用 Markdown 编写静态内容,也可以用 Python、R 语言、Julia 和 Observable 等技术生成动态内容,可以生成各种格式的博客文章、网站、幻灯片,以及 HTML、PDF、Word 和 ePub 等格式的电子书。

如果有更专业的写作和发布需求,比起用 Pandoc 自己搭框架,Quarto 可能是更成熟的选择。不过我没有用过这个工具,不清楚体验如何。

制作幻灯片

制作幻灯片(或者说演示文稿、PPT)的纯文本解决方案已经有很多,我比较熟悉的是 sli.dev ,可以用 Markdown 编写幻灯片。用纯文本做幻灯片的好处与编写文档类似,可以更专注内容而不是纠结格式问题。此外,Slidev 还提供内置的代码高亮,可以编写 Vue 组件放在幻灯片里,对开发者非常友好。我能想到的使用场景是,自己用 Vue 做了一个可运行的原型组件,比起截图,嵌入可交互的组件会更有表现力。

Slidev 本质上是提供了一种新的幻灯片形式,虽然可以导出为 PPT 和 PPTX 格式(甚至可以导出为单页应用),但最佳的效果还是在本地运行一个 Web 服务器做演示。所以,在需要提交 PPT 文件或者必须把 PPT 拷贝到其他设备里做演示的场景下,Slidev 可能没有那么好用。

此外,Obsidian 也自带幻灯片插件。被 Markdown 的水平分割线 --- 分开的内容就会在幻灯片里被分成两页,没有拓展语法,可自定义的空间也比较小。如果能接受幻灯片里只有基础的文字和图片(甚至没有动画)的话,也不失为一种选择。不过 Obsidian 是不能导出 PPT 文件的。

Obsidian 的核心插件设置项,其中有一个 Slides 插件

我自己演讲的时候,比较依赖演示文稿的动画和稍微复杂一些的多栏排版,所以较少使用上述的纯文本解决方案。兴许以后可以尝试先用 Slidev 做出可用的原型,之后再使用 PowerPoint 或者 Keynote 添加动画。


为什么用纯文本?

可以使用 Git 做版本管理

如果一篇文档的编写周期很长,或者说需要多人协同编写,而参与者又都是会使用 Git 的开发者的话,使用纯文本的编写方案,就可以利用 Git 的版本管理能力管理文档的历史版本,上传到远程仓库后也就自带了多人协同能力。比起价格昂贵的多人办公 SaaS 软件,让本来就有 Git 使用经验的开发者使用自己习惯的编辑器协同编写文档,难道不是更高校更具性价比的选择吗?

任何用纯文本编写和储存的内容,都可以用 Git 管理。《 Just use cURL 》这篇文章表达了对 Postman 的鄙夷,作者认为把 cURL 命令放在 .sh 脚本文件里,就能够代替 Postman 的云端同步和团队协作功能。

Q:那团队协作怎么办?

这是个文本文件。把放进 Git 里。你知道吗,那就是那个你本来就应该在用的东西?现在你的 HTTP 请求有了版本管理、代码审查和差异对比。免费的。真是革命性的改变。

原文

Q: What about team collaboration?

A: It’s a text file. Put it in Git. You know, that thing you should be using anyway? Now your requests have version control, code review, and diffs. For free. Revolutionary, I know.

如果你不喜欢 Git,那就去用 Jujutsu ,或者别的什么你喜欢的版本管理工具。

拥有 100% 的数据掌控权

纯文本是开放的文件格式,任何设备都能读取纯文本格式。你的数据不会被强制储存在云端,不会有科技大厂分析或出售你的数据,你想把文件放在哪就放在哪。

文件体积小

PDF 文件和 PPT 文件的磁盘占用是 MB 级别的,简单的 PNG 图片往往有几百 KB,Word 文件的体积要小一些,但也没必要那么大。如果以上内容全部都用纯文本表示,只在必要时渲染成需要的格式,那么占用的磁盘空间将会非常小。如果和你协作的人也使用相同的技术将纯文本转换为 PDF 文稿或其他格式的文件,你们只需要通过网络传输 KB 级别的数据,文件只会在本地膨胀到 MB 级别,而且在工作完成之后,完全可以只保留原本的纯文本文件,删除结果文件。

这相当于下载软件时只拉取源代码和 Makefile(或者 Homebrew Formula),软件本体在本地编译,是很高效的选择。我注意到有不少人的 U 盘或移动硬盘里装着爆满的 Office 文件,如果全都换成纯文本,PPTX、DOCX、PDF 等文件在用过之后就直接删除,需要的时候再从纯文本中编译,那储存的成本将会降到非常低。

操作方便

精细复杂的图形可能没办法用纯文本解决(不然就跟前端工程师调试 CSS 一样难受了),但我相信日常工作中的不少操作都可以用纯文本简化。编写文本的过程中,手指完全不需要离开键盘操作鼠标,这对熟练使用键盘的人来说无疑提升了效率——如果你只需要敲五次键盘,打出 A-->B 这一行代码,为什么要在冗长的图形选择菜单里翻找自己需要的图形,然后拖拽到中间,然后把手指放到鼠标上点击图形,然后把手指放回键盘按下 A,然后…… 你应该明白我的意思了。

除了绘图、文稿和幻灯片,余下的一切

不要忘了,除了 Markdown,JSON、YAML 和 TOML 也都是开放的文本格式,这些格式能够表示几乎所有结构化的数据,只要有能够读取这些数据的软件,理论上,你可以用文本格式编辑任何东西、做任何操作,比如管理 DNS 记录。

你可以参考 Sukka 的实践 ,他使用 DNSControl 和 GitHub Actions 实现了用配置文件管理 DNS 记录的工作流,完全抛弃了各个服务商的用户体验参差不齐的 DNS 管理面板。以下

D( 
	'skk.moe', REG_NONE, DnsProvider(DSP_VERCEL), 
	DefaultTTL(300), 
	
	ALIAS('@', 'skk.moe.cdn.cloudflare.net.', TTL(300)), 
	ALIAS('www', 'www.skk.moe.cdn.cloudflare.net.', TTL(300)), 
); 

不过,把 JavaScript 代码说成是纯文本好像有点牵强呢……

我在文章最后想要抛砖引玉一下:如果你遇到了一个比较复杂的需求,比起构建图形界面,先不妨思考一下是否有必要。如果你的目标用户都是熟练编写代码的黑客,纯文本、Markdown、JSON 甚至 JavaScript 和 Lua 等脚本语言,是比图形界面更好的选择。


  1. SaaS:Software as a Service(软件即服务),可以简单理解为商业软件,一般以订阅制为商业模式。 ↩︎

  2. 没有合并的原因是分支有冲突,而且 Pull Request 提出的时候,Mermaid 正好在把解析器从 jison 迁移到 langium,所以贡献者需要把原先写好的解析器迁移,额外的工作量可能劝退了他,总之这个 Pull Request 一年内都没了动静。 ↩︎

  3. 根据更新日志(“feat: Add packet diagram by @sidharthv96”),这个版本新增了报文图(Packet Diagram),用于表示计算机网络中报文或者说数据包的结构。 ↩︎

  4. WBS:Work Breakdown Structure(工作分解结构) ↩︎

  5. E-R:Entity-Relationship(实体-关系) ↩︎

  6. Pages 是苹果提供的 Office 软件,对标 Microsoft Word。 ↩︎

这个世界会累死完美主义者吗?

2025年12月18日 00:14

上个月和朋友去大坪玩,在路上聊到我的 MBTI 类型,得知我是 INFP 之后,朋友感叹:“感觉你趋近于完美了。”我问为什么,她说大概是因为我既有 P 人的随性,又有 J 人的守时。说起来,和朋友聚会时,我几乎总是第一个到。很多时候,为了不让朋友感到有压力,我会装作自己也刚刚到,或者在约定地点附近闲逛,故意拖延一会儿再出现。

我并非是真的守时,而是觉得不应该打破和他人的约定,而这种想法,其实是因为担心这么做了会让别人觉得不舒服。另一个原因是,我认为在约定时间前五分钟到达是约定俗成的,没有卡点到或迟到这个选项。换句话说,「提前到」是我的下限,我从没觉得晚点到也是可以接受的。

不知道是从什么时候开始,我发现自己为各种事情设置的「下限」,都普遍比别人高。室友直接用剪刀把没洗过的西兰花剪进锅里,和土豆、番茄、意大利面一起煮,加了不知道多少的生抽和蚝油之后还要大火收汁,目睹了这一切的我竟然感到愤怒,我想要大吼:“西兰花只用水煮两分钟!”室友对做饭的下限是能吃就行,而且越快越好,但我绝对不能忍受把一锅毫无色香味的菜端上餐桌,更不能忍受这种不尊重食物的行为。

我把这种下限当作对生活的积极态度和做人的原则,不过,在忙得抽不开身的时候,我才发现这有可能是一种缺陷。

我刚结束软件需求工程这门课的期末项目答辩,第二天,我睡到十点才醒,一共睡了十个小时——我真的太累了。截止日期的前几天,我一直在不断修改要交上去的软件需求规格说明书,以至于在我的 Wakatime1 统计里,编写 Markdown2 的用时以接近 60% 的占比,远超 Vue.js 和 Go 语言这两个我最常用的技术。等我意识到自己还没开始做 PPT 的时候,我所剩的时间已经不多了,而且我已经感到非常疲惫。于是我把文档发给了 Kimi AI,让它根据文档内容生成 PPT,从头到尾改了一遍自动生成的大纲,得到的结果还是不尽人意,必须动手大改。凌晨,我在手帐本上记下还需要修改的内容,准备明天再继续,可大脑仍然无法停止运转,硬生生把刚刚才写在待办清单上的事项做完了——我的副交感神经系统大概是坏掉了。讽刺的是,我的项目选题是一个帮助用户解读健康数据以调整作息和提升睡眠质量的软件系统。

答辩当天,我一边听老师对其他组的点评和提问,一边抱着电脑在台下修改自己的 PPT,容不下一点疏漏。万幸,我作为助教老师的一年的工作经验让我面对讲台不至于太紧张,再加上 PPT 的逻辑捋得很清晰,在脑子里过了好几遍。所以,即便没有提前排练过,讲得也还算流畅。最后,老师问我的第一个问题是:“你想把这个做出来吗?你有没有考虑过拿这个去参赛?”

哈,第一个问题我就差点没回答上来。我着实感到惊喜,尽管这位老师本身就不严厉,但她在表达赞许和提供指导时的措辞是完全不同的。在整个提问过程中,她给的更多是后续的开发建议,还问了问我自己的想法,没有挑我的毛病。下台的时候,我回忆起刚才站在台上时捕捉到但没来得及反应的一些零散信息,我注意到有不少同学也有抬头在听。离开教室的时候,我收到一个同学的消息,问我能不能把我的答辩 PPT 发给他参考。

这些事情发生之后,我的确感到很高兴。不过,在我紧绷的神经终于放松下来过后,我却真实地感受到了过劳带来的无力感。我没有办法集中注意力读书、写代码,我在互联网上漫无目的地冲浪,陷入信息流当中,而这让我更累,更没有力气摆脱这种状态。如果我没有在那天晚上关掉第二天的闹钟,让自己好好睡一觉,我大概没有力气写这篇文章,也没有力气捡起我在高度紧张状态下丢掉的运动计划,我会苛责自己没有好好生活。

我并不是在力争上游,我只是没办法不负责任地把一坨让人没法看的东西交上去,而对我而言,「能看」的标准和下限很高,尽管我并不真的觉得它很高。

我回忆起半年前的项目实训,我被强制要求组队,几乎不和班里人社交的我慌不择路地和五个人组了队,他们让我做了组长。我至今还记得很清楚,当时的我在 QQ 群里把安装 Git 和配置 IDEA 的步骤一张一张地截图发在群里,在完成我自己的任务之外,还要去关心其他人能不能正常拉取和推送到远程仓库。有人在群里反馈了一个他修不好的 bug,我把他的代码拉取下来,打开浏览器控制台,发现问题再简单不过了,一个函数引用没有被定义——他的 AI 在写代码的时候删掉了一个原有的函数。他连最基本的开发者工具都不会用,不过也不能怪他,教前端的老师也只会死盯着源代码看,用肉眼找问题。

那个时候,我最大的感受是,整个组里好像就只有我一个人在乎我们要做出来的东西是不是一坨垃圾。这种孤立无援感依旧存在,所以需求工程这门课的项目我是一个人做的,但其他课的作业都有人数要求,我几乎无一例外地自动成为了组长,因为我是一群人里最在乎最终成果能不能达到「下限」的人。

接下来还有三门需要提交完整可运行系统的课,以及两门难度不小的理论课,再这样下去,我大概真的会过劳倒下的。

如果你问我为什么把下限设得这么高,我大概能围绕原生家庭、中小学经历和童年创伤扯两三千字,但这并不能解决问题。其实,我更好奇的是,为什么其他人可以这样不在乎,他们究竟是怎么做到心安理得地允许事情烂下去的?我的想法是,长期在社交媒体上吸收各种网友的同质化的观点,和身边人说着完全相同语言的很大一部分人,似乎早就已经把摆烂和蔑视权威刻在了骨子里。就算没有,他们也会因为其他人表现得不在乎而跟着伪装自己不在乎,即便所谓的其他人其实也是在装作不在乎——这大概就跟一些直男喜欢装作自己情感经历丰富一样,对他们而言是很酷的事情,甚至是合群的必要标签。

几天前听过的一期播客标题叫做《这个世界会惩罚每一个认真的人》。我想,施加这个惩罚的并不是抽象的世界,而是那些不认真的人——把责任和劳动丢给别人的,不正是他们的不在乎吗?不过,这好像也是我自己的错,如果我的标准和其他人一样,兴许就不会有这些痛苦了。

再说回我自己,我本来觉得我之所以对需求工程的期末答辩如此上心,是因为我尊重教授这门课的老师。对于那些在课堂上讲自己刚刚在短视频上看到的新闻、初始化项目之后的第一件事情是教学生移除 Git、虽然没有读 PPT 但对着 PPT 内容信口开河的那些老师3,我大概不会这般用心。我想我错了,我甚至会在做一门后端相关课程的课程项目时,在前端仔细调整每个元素的边距。我在乎的并不是任何权威、任何人的意见,我只是不能忍受,一个丑陋、残缺、不入流的东西,上面写着我的名字——这大概是种病吧。

人生是不是一个不断降低预期的过程呢?从幻想,到梦想,到理想,再到认命,究竟要经历多少次失望,要承受多少劳苦?我想起去年年底,自己为了出国留学翻遍了欧洲各个学校的官网,信息多到我感觉自己快要溺死在互联网的北冰洋里;到了今年年初,我却等到一场和父亲的尴尬的谈话(说起谈话,其实是单方面的说教),他反复跟我强调国内的好,在往后的我为数不多的回家的期间,他也不断向我提及「中国就是最好的」,仿佛我这个终于在压抑的国内高校环境里找到一线生机的年轻人,犯了一个可怕的政治错误。我暗暗下定决心要在自己赚够钱之后,为自己支付留学的费用,可我要怎么拿到这笔「Fuck you money」,我究竟应该从事什么岗位、做什么事情,我几乎没有头绪。如果完成学校作业都会让我被完美主义的幽灵附身,神经紧绷,失去对生活的感知,没办法静下心来写一个字,我真的能忍受朝九晚五的职场生活吗?

《大楼里只有谋杀》第三季,Ben 对同样对未来感到迷茫的 Mabel 说:那些老早就想明白自己人生规划的人都很无聊,像我们这样大器晚成的人,才是能真正改变世界的。这句话兴许给我带来的一些慰藉,但我依然掏心挠肺地想要搞明白——你们究竟是怎么忍受不知道该干什么,感觉一切都会失去控制的不踏实的感觉的!

我不知道我的人生需要什么,但还好我知道,现在的我,需要睡眠。


  1. Wakatime 是一个为开发者设计的时间统计插件,支持多种编辑器。 ↩︎

  2. 我使用 Markdown 和嵌入式的 LaTeX 编写文档,随后再使用 Pandoc 转换为 PDF,使用的编辑器是我常用的 Zed,所以会出现在 Wakatime 的统计里。其实还有一段时间使用的是 Typora,所以实际用时比统计到的 60% 还要多。 ↩︎

  3. 一个教软件项目管理的老师,在解释一个经济学概念的时候,仅仅是凭借她对术语字面含义的理解在阐述而已,举了一些不恰当的例子。我读过曼昆的《经济学原理》的前几章,那是一个很基本的经济学概念;其他没有这些知识储备的学生,难道不会被她的这种不负责给误导吗? ↩︎

❌
❌