summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBigCoke233 <hi@guhub.cn>2026-01-10 23:53:33 +0800
committerBigCoke233 <hi@guhub.cn>2026-01-10 23:53:33 +0800
commit2c2a5138acd71aaaea8dc828814d1d5f36273ea4 (patch)
tree6963ac9e15d5c1241e37f5660c022aa027f8cdd4
parente567946c13510d1b6e16192be553d22a0cb8cf5b (diff)
docs: new draft
-rw-r--r--content/essays/程序员和整洁的-Home.md55
1 files changed, 55 insertions, 0 deletions
diff --git a/content/essays/程序员和整洁的-Home.md b/content/essays/程序员和整洁的-Home.md
new file mode 100644
index 00000000..190a1f93
--- /dev/null
+++ b/content/essays/程序员和整洁的-Home.md
@@ -0,0 +1,55 @@
+---
+title: 程序员和整洁的 Home
+slug: clean-home
+tags:
+- Geek
+date: 2026-01-10 22:46:08
+draft: true
+toc: true
+---
+
+去年八月,我在少数派上读到了一篇题为《[码农的自我修养之保持干净的 $HOME 目录](https://sspai.com/post/101780)》的文章,从那个时候我就开始注意自己的 Home 目录。如果你不知道 Home 目录是什么:它是多用户操作系统中,系统为每个用户单独分配的目录,其中存放与该用户相关的文件,比如只为这一个用户安装的软件、下载文件、系统回收站、配置文件、数据文件和缓存等。
+
+在类 Unix 系统下,可以用 `~` 表示当前用户的 Home,在终端执行 `cd ~` 就可以「回家」。Windows 系统下比较少提及 Home 目录,常见的是 `%APPDATA%`,这也是存放在用户的 Home 目录下的子目录。有不少操作系统有名为「文档」或 Documents 的用户目录,也是存放在 Home 目录里的。<!--more-->
+
+Home 目录常被用来存放该用户的数据文件、配置文件和缓存文件,所有应用程序都可以进行读写。然而,不是所有用户程序都遵守规范(实际上也没有**强制**执行的使用 Home 目录的规范),有的软件会在「文档」而非 Home 目录下存储数据文件,有的软件会在 Home 根目录下创建多个点文件(dotfiles),有的软件相对守规矩,会把各种类型的文件都放在一个点目录里。不少操作系统默认的文件管理器都有提供 Home 目录的快捷方式,不少用户也会直接在 Home 目录下存储各种文件。
+
+总而言之,如果不主动干预,Home 目录就会变得非常混乱。用户可以选择眼不见为净,毕竟点文件默认是隐藏的,不主动查看就难以发掘。如果你和我一样对自己的电脑有着奇怪的掌控欲,那我建议你继续读下去。
+
+## 为什么要保持 Home 的整洁?
+
+简单来说,混乱的 Home 目录会导致以下问题。
+
+配置文件、数据文件和缓存文件没有分离。一般而言,配置文件和数据文件是用户需要保留的,即便更换设备,配置也可以迁移;配置文件往往是需要用户直接编辑的,而数据是操作软件时产生的,由软件读写;配置文件可以分享(例如 NvChad、LazyVim 等就是 NeoVim 的配置文件),而数据涉及到隐私,往往需要保护;缓存文件可以随时删除,不会影响软件正常运行[^1]。
+
+我不太想把保持 Home 的整洁称作某种程序员应有的素养,因为这并不会让你的开发能力有任何提升,就像在中小学值日做清洁并不会让你的学习成绩有提升一样。让各种软件在同一个目录下打架并不会影响软件运行和日常工作,只是增加了管理成本——如果你完全不管理,那就无需在意了。
+
+但如果你在意自己的数据,容忍这些文件乱作一团真的是件坏事。这和家政是一样的,如果你在意这件事情,那么容忍熵增只会让自己难受;如果不在意,以素养或责任一类的说辞裹挟自己也不利于自己的心理健康。
+
+## 如何保持 Home 的整洁?
+
+整洁就是「整」和「洁」——有条理,且没有杂质。还是用家政举例,我们把食物放在冰箱里,把衣物放在衣柜里,把书本放在书架里,物品有了各自的、确定的去处之后,它们就不会乱作一团了。在我们需要某种物品的时候,我们也能通过分类来快速定位。
+
+分类其实不是件难事,真正困难的是处理人与人之间的矛盾。假设你喜欢把扫把放在阳台,而你的室友总是把它留在客厅,你大概就会对室友的行为感到不爽。现在请想象,你是一间公寓的房东,你的房子里住了很多人。出于某些原因,他们全都共享同一个空间。每个人对物品的分类标准都有所不同,把扫把放阳台还是客厅的争论肯定少不了,而你作为房东,大概也有自己的偏好,看到自己的房子被弄得乱七八糟,心里肯定也会觉得不舒服。到底有没有办法解决这个局面呢?
+
+最简单的解决方式当然是设置统一的分类标准,强制要求大家都把扫把放在杂物间就好了。然而,计算机的世界要比合租更复杂一些。在前面的比喻里,房东是用户,租客是用户安装的软件,我们假设软件在哪里存放数据是能够自由更改的,并且一个软件只会存在于一个用户的电脑上。在计算机世界里,软件是可复制的,同样的软件会被分发给不同的用户,不同的用户可能有不同的存放数据的偏好。
+
+单房东和多租客的情况下很容易达成共识,大家都听房东的话就好了。多房东和多租客的情况则复杂得多。假设房东告诉你应该把扫把放在阳台,二房东告诉你扫把要放在杂物间,而二房东的丈夫则要求你把扫把放在客厅,那你到底要听谁的?
+
+作为租客,你需要考虑的其实只有「把东西放在该放的地方」这个问题,在这个比喻里,就是要「把扫把放在专门放扫把的地方」。现在的情况是这样的:
+
+- 房东眼中的「专门放扫把的地方」 = 阳台
+- 二房东眼中的「专门放扫把的地方」 = 杂物间
+- 二房东的丈夫眼中的「专门放扫把的地方」 = 客厅
+
+这些值表达的语义是相同的,但在不同的人眼里,实际的值是不同的。引用名相同,但是在不同的情况下赋值不同,这有让你想到什么东西吗?没错,就是「环境变量」。
+
+现在我们脱离有关租房的比喻,回到计算机的世界来。如果程序员在开发时不武断地硬编码一个存放数据的文件路径,而是读取相关的环境变量,了解用户希望某种类型的数据文件应该被放在什么地方,前面提到的问题就迎刃而解了,而且,用户真正地掌控了自己数据的存放位置。
+
+事实上,大部分程序员已经在这样做了。Home 目录的具体路径就是一个环境变量,这个变量一般由操作系统维护,赋值为当前用户的 Home 目录绝对路径。比如,在 macOS 下,如果以 `eltrac` 的身份登录,环境变量 `HOME` 的值就是 `/Users/eltrac/`。
+
+但我们需要更进一步,因为现在的做法就和「应该把扫把放在家里」没有区别。有没有一个类似于现有的 `HOME` 目录的规范,让程序员能够分门别类地将不同的数据存放在用户通过环境变量指定的目录里呢?
+
+## XDG Base Directory 规范
+
+[^1]: 其实还可以细分出更多的文件类型,比如状态数据和运行时文件,这里就略过了。