ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Caveman模式:把开发环境降级到石器时代,重拾编程掌控感

Caveman模式:把开发环境降级到石器时代,重拾编程掌控感 前阵子我把自己的主力开发环境“降级”了降到了一个说出去都有点丢人的程度一台 2012 年产的 ThinkPad装了个不带桌面的 Debian编辑器用 Vim写代码时关掉 Wi-Fi连浏览器都不开。朋友问我为什么折腾自己我说我想搞清楚一件事——当所有智能化、自动化的工具都被拿掉之后靠一双手和一颗脑子到底还能不能把活干好。这个实验我给它起名叫caveman也就是“穴居人模式”。不是标新立异也没打算劝谁返璞归真。它更像一次工具链的断舍离把那些吃配置、占内存、不停弹提示的现代开发环境全部停掉退回终端、命令行、纯文本的“石器时代”看看效率到底会掉多少又会有什么意外收获。文章后面会把这一个月里的完整过程、具体配置、踩过的坑和调整心态的方法全部写出来。如果你也曾经被动辄 2GB 的 IDE 启动画面搞得心烦或者手边正好有一台吃灰的旧电脑这篇东西应该能给你一点参考。1. 为什么“穴居人模式”值得一试先说清楚这不是反技术更不是觉得现代工具没用。我用 JetBrains 系的 IDE、用各种 AI 补全插件、用 Docker 跑环境也都用得挺顺手。真正让我想按下暂停键的是另一件事工具链越来越重之后我开始搞不清楚自己在干什么了。1.1 工具多了人却累了打开一个现代编辑器光是启动就要十几秒然后它开始索引项目、检查错误、下载依赖、提示版本更新时不时再弹个“是否要自动修复”的窗口。我只是想在文件里改一行代码但我得先等它把整个宇宙加载完。时间一久注意力其实被切得很碎一会儿看 lint 提示一会儿改格式化错误一会儿网络波动导致同步失败。这些琐碎的决策不断消耗精力真正用在思考业务逻辑上的时间反而被压得很少。更早之前也不是这样的。六七年前我拿一台配置很普通的笔记本写代码那时候还没那么多辅助工具写错了就靠运行时报错查文档靠 man 和本地手册代码结构靠脑子里维护的一张图。效率谈不上多高但有一个很明显的感受每一步都在自己的掌控范围内。工具只是个输入和输出的通道不会反过来试图指挥你。所以这次实验的目的很朴素——找回那种自己说了算的感受。1.2 穴居人模式的三个原则我给这套模式定了三条规则。第一条本地优先所有开发、文档、笔记、依赖缓存都落在本机不依赖云同步不依赖在线服务。第二条文本优先能用纯文本存储的数据绝不用专有格式配置文件、项目文档、笔记全部是 Markdown 或者普通文本保证任何工具都能读取。第三条单机可用整个开发流程在一台不上网的机器上能跑通从代码编写到编译、测试、打包不依赖任何外部接口。有人可能会问这不就是离线开发吗不太一样。离线开发往往是“被迫没有网络”而穴居人模式是“主动不通过网络解决问题”。两者的心态差很远。前者是在限制下挣扎后者是在自由中选择约束。主动选择脱离之后你会发现很多原来觉得“没了它就没法活”的东西其实完全是可替代的。2. 装备与工具选型到底要极简到什么程度工欲善其事必先利其器。但“利”不一定是高端关键是合适的尺度。现代工具的思路是通过增加复杂度来换取便利而穴居人的思路相反通过减少复杂度来降低决策成本。2.1 我的硬件与系统配置先说硬件。我翻出来一台老 X230i5 处理器、8GB 内存、128GB 固态硬盘。这个配置在今天看来确实很落后但装个 Linux、跑终端和轻量服务完全够用。系统选的是Debian 12安装时选择最小化模式不装任何桌面环境只装基本系统后续自己按需添加。为什么选 Debian 而不是其他发行版我的理由很简单稳定、干净、文档多。Debian 的仓库非常全软件版本相对保守不会三天两头更新到出问题。在穴居人模式下稳定压倒一切我不希望为了尝鲜去折腾。至于为什么不装桌面因为桌面本身就是个巨大的“注意力搅拌机”右上角的消息提示、任务栏的图标闪烁、系统托盘弹出来的更新通知每一样都在抢注意力。我只需要一个能显示文字的屏幕直接启动终端其他一律不要。下表是我实际使用的工具清单和对应的现代替代方案对比用途穴居人方案日常方案替代思路界面startx xterm桌面环境 / 窗口管理器只保留显示能力编辑器VimVS Code / JetBrains纯键盘操作不加插件全家桶多任务tmux多窗口/多标签编辑器会话与后台任务管理搜索grep / fzfIDE 全局搜索 / 文件树一行命令搞定文档man / info / 本地 Markdown在线文档 / 速查网站需要什么查什么代码补全无 / 自定义字典语言服务器 / AI 补全倒逼自己记住 API文件同步rsync 到本地硬盘云盘 / 同步盘自己掌握备份节奏构建Makefile / shell 脚本脚手架 / 任务管理器显式写出每一步2.2 工具降级的核心思路够用就好重点讲几个感知最明显的替代。编辑器我选了 Vim 而不是 Neovim原因很直接Vim 预装在绝大多数 Linux 系统里不需要额外配置生态而且我只需要它的基础模式切换和文本编辑能力不需要额外的 Lua 扩展生态。想体验纯正的“穴居人”感觉就按默认方式去用忍受那些别扭的操作反而能逼自己打破“不会用 Vim 是因为没装好插件”的幻想——很多人不会用 Vim不是因为缺插件而是缺练习。tmux 承担了窗口管理和会话保持的工作。我让它开了三个窗口一个写代码一个跑编译和测试一个当草稿本随手记录命令和想法。没有浏览器没有文档堆屏幕上只有你想看到的东西。代码补全被我彻底关闭了。刚开始确实难受写一段代码要停下来想好几秒这个函数的签名是什么来着那个参数类型应该怎么写但这种短暂的停顿很快变成了好事——为了少想一会儿我开始更频繁地拆小函数、取更清晰的名字、保持每个文件短小精悍。代码结构肉眼可见地变好了因为没法靠工具兜底了只能在源头上让代码更可读。3. 实操过程从空白系统到一个能用的极简环境这一部分我完整记录从装系统到搭建环境的步骤。整个过程不复杂但每个选择背后都有理由照着做就好。3.1 阶段一安装最小化系统我用 U 盘做了一个 Debian 网络安装盘选择“Expert install”。这一步有几个地方要注意默认的图形化安装会自动装一堆没必要的东西专业安装模式反而可以逐项勾选。进入分区环节时我给固态盘只分了两个区一个/根分区一个swap。没有单独分/home因为这是台专用实验机不需要保留多用户数据。软件源我选了离自己最近的那个但装系统时不建议额外勾选桌面任务只选中“标准系统工具”和“SSH server”就行。装完重启命令行登录界面出现这台机器的服务器使命就开始了。提示如果你很久没装过纯命令行 Linux建议先在虚拟机里试一次把分区和网络配置的流程跑通再上实体机避免手忙脚乱。3.2 阶段二基础环境配置启动后第一件事是配置普通用户。我用 root 登录创建用户名然后把它加入sudo组。这一步在 Debian 里是usermod -aG sudo username然后手动编辑/etc/apt/sources.list把仓库地址从原先默认的站点切到国内镜像站不然拉包速度会明显拖后腿。接着是安装核心工具包一条命令搞定sudo apt update sudo apt install vim tmux rsync curl git build-essential fzf man-db解释一下这些包各自负责什么vim 是日常编辑主力tmux 做会话复用rsync 是备份和数据同步的基础git 管代码历史和版本流转build-essential 提供编译器和基本构建工具fzf 用来做模糊搜索man-db 提供手册页。我一个人用所以没有配 SSH 服务暴露远程访问也不需要图形登录。随后做了几件容易被忽略但很关键的事。第一写了一个简单的.bashrc把提示符改成简洁的userhost:path关掉彩色显示里花哨的部分只保留git分支提示。第二把系统默认语言设置为英文虽然我平时写中文文档但终端里的报错信息用英文看是最准确的避免字符集和翻译带来的理解偏差。第三创建了一个~/projects目录约定所有项目都放这里不散落在各处。3.3 阶段三Vim 与终端的个性化配置Vim 的配置必须坚持“克制”二字。我不追求把它变成一个 IDE只设置了四个优先级最高的选项set nocompatible filetype on syntax on set number relativenumber set expandtab shiftwidth2 tabstop2 set hlsearch incsearch set mousea set clipboardunnamedplus第一行nocompatible关闭了老式 Vi 兼容模式第二、三行开启文件类型检测和语法高亮第四行显示行号并用相对行号辅助跳转第五行统一缩进为空格第六到第八行分别是搜索高亮、鼠标支持和系统剪贴板互通。没有补全插件没有文件树没有 golang 模板没有代码片段。目的就是让 Vim 做一件它最擅长的事快速编辑文本。终端配置上我直接在文件里给 xterm 设置了等宽字体xft和颜色主题保持黑色主打内容用浅色低对比度减少视觉疲劳。字体大小调到 14 号因为这个笔记本屏幕分辨率不高太小会顶着眼睛看。tmux 配置也简化到了极限set -g prefix C-a unbind C-b bind-key -n M-1 select-window -t:1 bind-key -n M-2 select-window -t:2 bind-key -n M-3 select-window -t:3把前缀键从Ctrlb改成了Ctrla这样小拇指不容易抽筋然后绑定了Alt1/2/3直接切换三个窗口。这种简化看起来很微小但一天要切换几十次窗口多一步按键都在累积疲劳感。配置完的前两天我频繁按Ctrls试图保存浪费了不少时间不过一周后肌肉记忆更新完毕就再也回不去了。3.4 阶段四建立本地知识库这是穴居人模式里我觉得收益最大的一件事。以前写代码遇到问题第一反应是开浏览器搜然后在结果页里挑一个看起来顺眼的博客复制粘贴试完不对再换一个。这其实非常低效因为搜索到的内容往往不带上下文而且经常是错的。现在的做法是建了一个纯文本知识库路径为~/kb里面按主题放 Markdown 文件。遇到新问题先查~/kb用自己的旧笔记解决问题解决完一个新问题把步骤浓缩成一个新文件或者追加到一个已有文件的末尾。随着实验推进这个库越来越大基本涵盖了 Git 常用操作、编译报错对照、网络工具用法、硬件参数备忘等所有高频问题。配合 fzf 的查找体验也算顺畅function kb() { local query$* local file file$(find $HOME/kb -name *.md | fzf --query $query --preview cat {}) [ -n $file ] vim $file }把这函数写进.bashrc使用kb xargs就能从标题和内容里实时过滤找到对应笔记敲一下回车直接打开编辑。这个习惯养成的速度比预期快得多大概第五天开始碰到问题后我第一个动作不再是摸手机而是敲kb搜索自己的记忆。3.5 阶段五离线依赖与备份方案完全不联网一天两天可以但一个项目跑起来总归要拉第三方依赖。我的策略是定期同步一次依赖缓存之后切换为离线工作。以 Go 项目为例我会提前在有网的环境执行go mod download把所有模块缓存到$GOPATH/pkg/mod然后把整块内容打包拷贝到这台机器上。Python 项目就用pip download把轮子文件拉齐放到本地目录作为安装源。这个思路不复杂就是把“在线实时拉取”变成了“提前批量同步”代价是需要提前规划依赖清单好处是之后就再也不会因为网络波动中断工作了。备份是另一件重要的事情。我写了一个同步脚本每隔一段时间执行一次#!/bin/bash BACKUP_DIR/mnt/backup/$(date %F) mkdir -p $BACKUP_DIR rsync -av --delete ~/projects $BACKUP_DIR/ rsync -av --delete ~/kb $BACKUP_DIR/ tar czf $BACKUP_DIR/dotfiles.tar.gz ~/.bashrc ~/.vimrc ~/.tmux.conf把脚本存为~/bin/backup.sh每次插上移动硬盘跑一遍就完事。这台机器不联网所以不存在在线账户泄露的问题备份到物理介质足够安心。一开始我以为备份是负担后来发现它反而是一种仪式感每当rsync把改动同步完进度条安静地跑到 100%有一种说不出的踏实。4. 常见问题与排查实录一个月的实验里遇到的问题不算少有些是技术型的有些是心态型的都值得记录。4.1 没有自动补全代码写不下去怎么办前三天最难熬。写调用方的时候记不清函数签名写回调的时候记不清参数位置效率大概掉到了原来的六成。但第四天开始出现了转机——为了减少回忆负担我开始不自觉地把所有函数的定义写得离调用点更近或者尽量让一个函数只做一件事。也就是说工具缺失带来的你会重新调整代码结构而不是傻傻地硬背 API。这个阶段另一件有效的事是给自己建了一个速查文件每个项目根目录下放一个NOTES.md写清楚本项目的核心类型、接口和约定随时用 Vim 分屏打开看。4.2 无法立刻查在线文档报错看不懂怎么办报错永远是编程中绕不开的部分。断网之后的处理办法是命令解释三层法先看报错原文把关键词逐一代入grep去代码库里搜再去系统手册里查相关函数和系统调用的说明最后一层才考虑翻旧笔记或者依赖源码注释。说来也怪断网反而更容易解决问题因为在线的答案是别人的本地的答案是自己推出来的理解深度完全不在一个层面。注意系统手册man并不是只有手册页很多包装了之后是带详尽的 info 文档的。不确定的时候先执行info 命令名经常能找到比 web 搜索更权威、更完整的说明。4.3 习惯了图形界面终端操作的错误操作太多怎么办容易犯的错集中在三个地方rm -rf和通配符结合、未保存改动直接切换 tmux 窗口导致丢失、以及管道命令里的错误转义。我的解决方案是不论多自信先用ls或者git status确认目标再执行破坏性操作。同时把 Vim 配置里设置了set hidden这样未保存的文件切换缓冲区时不会直接报错而是保留历史状态配合持续保存的习惯基本没有再丢过工作。4.4 心态崩溃忍不住想打开浏览器怎么办可能你会笑但这真的是最大的坎。前一周每到写不顺畅的时候手会不受控制地摸向键盘快捷键想去开浏览器刷点什么。为了防自己我把这台机器上彻底删掉了图形浏览器只留了一个纯文本浏览器用于查看本地 HTML 文件。这个限制非常有效因为一旦意识到即使开了浏览器也只能看文字就会立刻失去打断自己的欲望。写累了就站起来倒杯水而不是让大脑接受新刺激。这种“无聊感”在最初几天很致命但习惯了之后它反而成了专注的护城河。4.5 软件装不全新工具用不了怎么办这是最明显的硬限制遇到新出的工具仓库里没有文档也未必看得到。但这反而逼迫我先想清楚这个工具是不是真的必要。绝大多数时候答案是不必要一件工作的核心路径往往只需要少数几个工具就能完成。真正必要的那一两个就花点时间从源码编译或者用官方打包好的静态二进制拷到本机也能跑。整个过程可能比在有网环境下多花半小时但换来的是对这个工具原理更完整的理解。5. 一个月实验之后的意外收获如果说一开始做 caveman 实验是一次工具极简的行为艺术那一个月之后我留下的其实是几样更能搬得走的东西。第一样东西叫决策肌肉。以前切换工具、试新模板、调整配置占用了太多精力现在我对“默认配置够不够用”这件事变得极度敏感。打开一个新项目我先问自己这里真的需要一个新框架吗这个任务真的需要引入新的抽象层吗如果没有清晰的理由我就不加。以前是我在给工具添功能现在是工具得说服我为什么配占用我的时间。第二样东西是对文档的敬畏。断网让我认真读了以前从来不会翻的系统手册和源码注释结果发现里面写满了设计者的坑和权衡。以前搜博客文章看的是别人咀嚼过的东西漏信息不说还可能误导。现在遇到同类型问题我更愿意直接看一手信息反而花的时间更少。第三样东西是注意力回来了。我不再随时感觉到信息进来的焦虑不用每隔几分钟检查一下消息不担心错过什么热点。面前只有手头的坏事和纯文本的界面于是思考可以连续到二十分钟、四十分钟不被打断。这种感觉在现代工作环境里太稀罕了也恰恰是最值钱的东西。最后再分享一个小技巧。如果你也想试这样的模式不要一开始就彻底断网、删浏览器那会直接把动力浇灭。更好的做法是先从单一任务开始比如每个周末拿半天用一台简单终端环境处理所有个人事务试着不打开社交媒体不刷信息流。等到你觉得“原来事情用这么点工具也能做完”的时候再慢慢提高离线时长。caveman 不是否定现代工具而是给自己心里装一个测量尺到底哪些效率是真实必要的哪些只是工具堆叠制造出来的幻觉。把这把尺子做好了就算回到日常开发环境也能分辨出一堆快捷键里哪些是通向心流的高速路哪些只是看上去很忙而已。
返回列表