2025-10-08 08:00:00
最近我在编程上一个很大的变化是把持续月付了将近 1 年的 Cursor 换成了 Claude Code. 之前一直不用 Claude Code 原因有二:
这次转变的契机在于,上个月我竟然把 $20 的 cursor pro 额度花光了(我日常使用的是 Claude Sonnet 4),只能用 Auto Mode, 这使我的生产力断崖式地下降。这时候,恰好智谱推出了「编码畅玩套餐」(并非广告,智谱看到的话可以联系我打钱),推出了兼容 Claude Code 的接口,价格还相当便宜。于是我开始再次尝试 Claude Code.
最初我还是非常不习惯不在 editor 里操作 AI, 因为觉得这样很没有安全感。不过在慢慢磨合之后感觉没有我想象中那么糟糕。
在 Claude Code 中可以使用 /ide
连接 IDE, 连接后 Claude Code 可以识别出当前 IDE 打开的文件是什么,这样能达到 Cursor 类似的效果。所以 Claude Code 也能得知我希望的是结合指定文件作为改动基准。
在 Cursor 中我还会手动 @ 不同的文件指定 AI 修改的文件,出乎我意料的是在 Claude Code 中 @ 文件的体验也相当不错,所以在体验方面,Claude Code 基本可以对齐我使用 Cursor 时的习惯。
另外一个常用的场景是我会选择具体的代码行让 AI 改动,这一点在 Cursor 做得很好。Claude Code 连接了 IDE 后也能识别到。

不过我感觉实际 Claude Code 并没有很「在意」我选的行,它经常会失控多改些东西,我不确定这是模型还是 Claude Code 的调校问题,我认为 Cursor 在这个场景是有做专门的 prompt 调校的。
Cursor 做得非常好的其中一个体验是它的 Restore, 你可以随时在 AI 改动的点撤销改动,也可以直接 Undo all 撤销整个会话的改动。这一点 Claude Code 还是逊色不少,现在我不得不在下一次改动前 git commit 我当前的改动。
Claude Code 2.0 之后新增了 /rewind
命令,也可以基于对话历史进行回撤,但远不如 Cursor 在 GUI 上做得好。而且如果你关闭了当前的对话后,也无法再进行回撤了。
在 Claude Code 中使用 MCP 一开始让我相当困惑。当我在项目路径通过 claude mcp add
安装 MCP 后,我发现在其它项目中并没有这个 MCP, 后来我才知道,需要指定安装的 scope, 默认是项目范围,如果要安装全局跨项目的 MCP, 需要加一个 --scope user
参数:
claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
我使用的 MCP 只有 exa
和 context7
, 这两个 MCP 都是用于查找文档的。我在 Cursor 中从来不用,因为 Cursor 可以直接在设置中输入文档地址进行索引,对话时用 @docs 就能把文档加到上下文中。这一块我还是喜欢 Cursor 的体验,当然 context7 和 exa 也能完成任务。
Claude Code 让我比较喜欢的是 Plan Mode. 对 AI 描述要做的事情,它先给你输出一份它的行动计划,我 review 完觉得 ok 才开始做,不 ok 就进一步沟通,直到满意为止。
说实话在使用 GLM 之前,我对它的质量持怀疑态度。经过一个月深度使用后,我认为它远超了我的预期,并且个人感觉非常非常接近 Claude Sonnet 4 的水平(我用 Sonnet 4.5 还不多,所以无法对比)。
在此之前,我一直用的是 Sonnet 4, 可以说 Sonnet 4 和我磨合得已经相当好了,它就像跟了我一年的 engineer, 我对它的能力和做事风格相当地熟悉,所以能很好地彼此配合完成任务。因此在接触 GLM 4.6 的期间,我认为我是很有话语权把它们两个进行对比的。
首先是速度,GLM 4.6 在速度和质量取得了很好的平衡,平均速度我认为比 sonnet 4 更快一点点,偶尔抽风会特别慢。
质量上,我认为从 bug 的数量上来看,和 sonnet 4 没有我能感知到的差别。我的代码主要以前端 TypeScript 和 Rust 为主,在生成 Rust 代码时,GLM 和 sonnet 4 基本一样一气呵成,偶尔会有错误,但把错误日志再输入给它时,就能修好。
无论是前端还是后端还是什么语言,对于这两个模型,我的经验认为,只要你能给到足够的文档作为上下文(例如使用 exa, context7), 效果都会非常好。因为生成功能性的代码主要需要的能力是按照文档进行推理,对于目前旗舰级的模型来说已经不是特别难的事。
而我认为最能体现一个模型真正的编程智能的任务是重构。因为模型 agent 需要自己对整个 codebase 进行理解、搜索、规划重构方案的流程不是照着文档抄那么简单。我特意使用了 GLM 对某个项目进行了技术栈的重构,比如在一个充满 useEffect 的 React 应用,我让它用 @tanstack/react-query 进行重构,GLM 十分出色地完成了任务,而且速度相当快,准确率很高,偶尔出错时,它自动参考 lint error 重新修改也能完成任务。
用一个比喻来总结 GLM 4.6 和 Sonnet 的对比,我认为如果说 Sonnet 是 P7 级别的工程师,那么 GLM 4.6 是 P6+ 级别的。有时候 GLM 完成的任务,你需要再提醒多那么一句,它才能达到完美。
但考虑到这是一个只需要 40 人民币一个月(首月 20)的模型,我觉得完全可以接受了。
顺便分享一下如果要在 Claude Code 中使用 GLM 需要怎么配置。
最简单的方法是使用我最近做的 CC Mate 这个小工具。安装好 Claude Code 后,在 CC Mate 填一下 API Key, 所有的配置都会帮你处理好,这时打开 Claude Code 就已经是在使用 GLM 了。
CC Mate 支持多个配置随意切换,所以如果你想用 Kimi 也可以创建一个 Kimi 的配置。
另外 CC Mate 还有管理全局 MCP 的功能,你可以一键把我文中提到的 context7 和 exa 安装到全局 MCP 当中。
注意:安装完 MCP 后,需要在 Claude Code 中使用 /mcp
给它们登录授权。
首先购买「编码畅玩套餐」, 然后新建一个 API key.
然后手动修改配置文件 ~/.claude/settings.json
如下:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "your-api-key",
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "GLM-4.5-Air",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "GLM-4.6",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "GLM-4.6",
"ANTHROPIC_MODEL": "GLM-4.6"
}
}
配置后,你能正常使用 Claude Code, 但你会发现,如果你使用 Claude Code 的 VS Code 插件,你是进不去的,它强制要求你先登录 Claude 账号。所以你需要再添加一个文件 ~/.claude/config.json
:
{
"primaryApiKey": "xxx"
}
xxx
只是一个占位符,什么内容都无所谓。
这时你就可以正常使用 Claude Code 的 VS Code 插件了 (这个配置在 CC Mate 中也已经帮你做好了)。
P.S. CC Mate 的开发过程完全使用 Claude Code + GLM 4.6, 基本 80% 的代码都是 AI 编写的,我只作为架构设计以及 UI 设计。
2025-04-09 08:00:00
最近又写了一本小书。
这本小书定价 29 元,你可以在 这里 购买 PDF 版本。如果你有特殊需求,也可以购买 Markdown + PDF 版本,价格是 49 元(为了增加盗版成本)。
这本书篇幅不长,但因为比较小众,所以定价稍高,请读者自行斟酌购买。
这是一本关于浏览器插件开发的书。这本书面向的是那些希望开发自己的浏览器插件满足自己需求的,也许你是专业的前端程序员,或是略懂前端代码的后端人员,在 AI 的加持下,大概都能从中受益。
之所以想写这本书,是因为我在过去一两年开发过不少浏览器插件(如微信读书笔记同步助手 Notepal, 浏览器 AI 助手 SumBuddy, 专注插件 等等标签 等等),积累了不少经验。这几年越来越多人开始做浏览器插件,尤其是在 AI 时代,浏览器插件作为重要的输入入口,能做的事情越来越多。我想可以把这些经验分享出来,让更多人可以开发满足自己需求的插件。
插件开发其实不是一件很难的事,特别是现在出现了一些成熟的框架,比如 Plasmo, WXT, CRXJS 等。这些插件把代码构建、打包过程都封装得很好,开发者只需要关心插件的逻辑即可。
我自己用过 Plasmo 和 WXT, 这本书我会使用 WXT 进行教学。因为经过自己的长期实践,我认为 WXT 比 Plasmo 的设计更加合理,配套的工具更好用。当然每个框架有每个框架的利弊,即使你想使用其它框架,你还是能从这本书收获很多框架以外的知识,因为框架只是辅助。
另外,本书以 Manifest V3 为背景编写,不会讨论 Manifest V2 的内容。如果你不知道两者具体的区别,你也不需要知道(因为我也不知道)。简单来说 V3 比 V2 在安全性上做了更严格的控制,这一点虽然备受争议,但对于大部分的情况不会有太大的影响。
本书在涉及 UI 开发的部分我会使用 React, 这是我自己日常使用的库,对于使用 Vue, Svelte 等其它库的读者,也不需要担心,用什么框架并不是那么重要。并且 WXT 也支持不同的 UI 库。如果你想用其它库,翻看 WXT 的文档即可。
本书的实战中,我不引入任何样式库,因为会增加额外的和插件开发无关的复杂度。请读者不要计较实例的美观性。
读这本书前,我默认读者了解以下技术:
读完这本书后,读者能学习到开发一个浏览器最重要的几个知识点:
这几个知识点贯穿了所有实际场景必需的元素,我在开发自己的插件时,基本是围绕这三个基本的功能展开。至于其它更多的插件 API, 读者应该自己按照需求查看文档使用。
在讲解消息传递的实例中,我用 AI 消息流作为例子讲解,对于需要开发 AI 相关的浏览器插件的读者应该很有启发。
2025-04-01 08:00:00
在 AI 越来越强大的这段时间里,我思考得比较多的一个问题是,我们是否高估了智力的重要性。
引起这个思考的原因有很多,一是大语言模型的进化程度让我感受到,语言模型在智能(推理、学习速度、知识广度等)方面已经远远超越人类,而这样的智能是每个人都能运用的。也就是说,人类完全可以把需要智能的行动交给 AI 处理,人类更多地是负责决策层面的工作。
二是因为我自己就是一个智力平平的人,小学当我学到除法的时候,我花了很长时间才理解除法是什么。我在开始学 JavaScript 的时候,也花了很长时间理解什么是 callback, 为什么函数能作为参数被传递和调用。
但我这个智力平平的人还是得到了算是不错的成果。我总是对别人说,我不是一个很聪明的人,我只是 13 岁就开始学编程,笨鸟先飞罢了,很多人大学学一年就能超过我的水平。所以我才更深刻地体会到,正常水平的技术,往往通过时间可以弥补,在这条水平线,不需要很高的智力。
不过,即使通过时间可以弥补智力的不足,但不是很多人能在这段时间里坚持下去。这也引出了我认为智力被高估的同时显现出来了另一个问题 —— 自我效能 (self-efficacy) 的重要性被远远低估了。
所谓的自我效能,是指相信自己有能力成功完成特定任务或应对特定情况的信心。很多复杂的因素决定了一个人自我效能的高低,这并非天生的。成长过程中长辈的态度、通过对他人的观察、个体与环境互动等等都影响一个人的自我效能水平。
在同样面对一个问题,自我效能低的人,看到的往往全是问题,最终放弃。而自我效能高的人,有强大的信念认为可以解决问题。前者也许在智力上比后者更高,但后者可以通过这种信念一直前进,超越前者。
尤其是在 AI 时代,智力变成了一种更容易弥补的差距。我认为智力是边际效益递减的,除非超过了某个阈值。但这永远是很小一部分的人。像我这样智力平平的人是多数,我们只是站在了巨人的肩膀上。就像 Dijkstra 只有一个,这个世界也需要他这样的天才,但我们还是可以享受他给我们带来的成果。
这不是反智,而是我认为,智力水平有一个临界点,对于临界点以下的人,智力的重要性被高估了,因为智能越来越不稀缺,稀缺的是自我效能,是主动利用智能的人。
自我效能是完全可以通过后天训练的。自我效能是心理学家 Albert Bandura 提出的概念。他总结了影响自我效能的四种因素:
个体通过亲身成功完成任务的经验来建立自信。反复的成功会增强自我效能,而失败(尤其是早期或没有应对策略时的失败)则会削弱它。
我觉得这里指的「成功」并非大成功,而是细微的成功。例如在我学习编程的早期,我通过写出各种各样的小程序获得这种成功感,对我建立技术自信有很大的帮助。
观察与自己相似的人成功完成任务,会提升观察者对自己也能做到的信念。看到别人能行,会觉得“我也许也可以”。
对我来说,小时候读的名人(科技精英)传记就是一种 Modeling, 尤其是李开复的《世界因你不同》,这些「洗脑」式的输入,会让我越来越希望自己能成为这样的人。
乔布斯有一句广为流传的话,他说
Life can be much broader once you discover one simple fact: Everything around you that you call life was made up by people that were no smarter than you.
一旦你认识到一个简单的事实——你周围那些你称之为“生活”的东西,都是由并不比你聪明的人创造出来的——你的人生就会变得更为广阔。
乔布斯从更极端的思路获得高度的自我效能感 —— 通过对比别人不行,觉得自己可以。
受到他人的鼓励和积极评价可以增强自我效能感。而负面评价则会削弱它。
这个条件比较被动,这里不谈。
个体在面对任务时的生理反应和情绪状态会被解读为自身能力的信号。如果将紧张解读为“我不行”的证据,自我效能会降低;如果解读为“兴奋”或“迎接挑战”,则可能不会降低甚至会提升。
在这个方面,我面对舞台的经验可以充分论证。记得第一次面对众人做技术分享和第一次上台唱歌,我紧张得不行,表现都很糟糕。随着不断地强迫自己上台,我发现自信完全取决于自己的念头,我学会在上台前欺骗自己是一个有很多粉丝的人,台下的人对我非常崇拜,或很喜欢听我唱歌,这样的念头让我在台上的表现有很大很大的改进。
人是事件的反应器,通过刻意训练,是可以掌控自己的反应的。
以上是我对 AI 时代的到来的其中一点思考,希望能鼓励到和我一样智力平平的人。
2025-02-09 08:00:00
我从两年前开始放弃了所有笔记软件,换用 Apple Notes 记录我的所有笔记。这个举动缘于我读了 Tiago Forte 的一本书 The PARA method.
可能大家比较熟悉他的另一本书 Build The Second Brain, 是关于如何使用笔记软件构建自己的「第二大脑」。这本书也有提到他的 PARA 理论(我在我之前的文章也有提到过我如何应用这个理论管理我的笔记)。两本书都读过以后,我认为 The PARA Method 这本书更偏向实操,我从中收获了更多的方法论。如果你只想读一本,那么我推荐读这一本。
读完这本书后,我立即在 Apple Notes 中基于 PARA 方法建立起了笔记组织的形式,这一套组织形式一直用到了两年后的今天都没有改变过。也就是说,这两年来,在做笔记时我再也没有花过时间去想应该如何组织我的笔记,光从这一点,就让我受益颇深,我可以没有任何心智负担地迅速记下我需要的东西,不用担心我应该怎么记,一切都是那么的简单。
这篇文章就是想和你分享我如何在 Apple Notes 记笔记,我在 PARA 的基础上根据我自己的实际场景做了一点小小的改良。希望对你也有所启发。
在分享方法论之前,我想先解释为什么我选择了 Apple Notes. 我认为 Apple Notes 有很多优点。
当然 Apple Notes 也有缺点,但两年使用下来,我没有因为这些缺点感到被限制,比如:
Apple Notes 支持的格式有限,只有最基本的列表、标题、加粗等等的文字样式格式。但我用下来发现,我根本不需要使用什么高级的格式。有人问我 Apple Notes 不支持代码块,你是怎么记代码相关的笔记的?我说我基本不会把代码片段作为笔记来记。比较多的场景是一些 JSON 格式的片段,我只会直接粘贴到笔记里,不加任何的格式。
我找到了两条比较经典的笔记:
可以看到,里面不仅有 JSON, 还有 toml, 还有命令行。甚至还会有 spell check 的红线让它显示得很丑。但是我一点也不在意。因为它们是拿来用的,不是拿来看的,我不在乎它好不好看,只要我需要用到的时候能找到拿来用就好了。
也就是说,「美观」在我记笔记的需求里排不上什么优先级,我的最高优先级是能快速打开,快速记录,让我记东西的摩擦力降到最低。能帮我当下的想法、要处理的事情相关的信息记下来才是最重要的。所以我看过很多人把 Notion 模板做得很漂亮,也不为所动,因为对我来说这不是我需要的东西。不可否认,美观的笔记系统能给人情绪价值,它没有对错之分,只要合适自己就好。所以最重要的是知道自己是否需要,如果你认为这对你来说不是很重要,就回归简单吧。
Apple Notes 也没有「双链」功能,这是现代流行的笔记软件中很重要的功能,我在用 Logseq 的时候也被这个功能打动,因为它能把相关的笔记自然地关联到一起,带来额外的启发。最初用 Apple Notes 时我也担心会不会因此失去了这个优势,但用下来才发现,我并不是那么的需要它,即使没有,也没有让我感觉因为没有了他而失去了灵感。
Apple Notes 的标签功能也很弱,但我不使用标签。
虽然在之前的博客也提到过 PARA, 但我还是想在这里简短地解释一下我所理解的 PARA 是什么。
PARA 的全称是 Project, Area, Resource, Archive. 翻译成中文就是「项目」「领域」「资源」「归档」。它代表了一个笔记应该放在什么地方以及一个笔记的流动过程。
没错,在 PARA 的方法论中,笔记是可以「流动」的,它有时候在 Project, 当项目结束后,它不再被需要,就会流动到 Archive. 如果它在以后有利用价值,它可能会流动到 Area 或者 Resource.
理解 PARA 的关键是理解 PARA 的哲学:你记下的笔记应该要服务于你的行动。
也就是说,在 PARA 的系统里,当你想要把东西记下来时,你的 mindset 应该是,这条笔记和我接下来的行动有什么关系?如果没有关系,那么它应该放在 Area 还是 Resource?
在 The PARA Method 一书中,开篇的一句话能解释这个哲学:
Every word in this book is designed to do one thing: propel you forward into taking action
这本书中的每一个词都是为了一个目的:推动你付诸行动。
简单了解了 PARA 后,看看我如何在 Apple Notes 中使用 PARA.
我在 Apple Notes 中会单独建立一个 PARA 目录:
里面有基本的 Projects, Areas, Resources, Archived 文件夹。在这个基础上,我有两个改良,第一个是添加了一个 Drafts 文件夹,用于记录我日常的零碎想法:
这些想法一般是在手机上记录下来,在有空的时候进行深度思考和研究,有些会最终成为一篇推文,或者基于想法变成一篇博客文章。
第二个改良是增加了一个 Inbox 文件夹,用来存放打算做的项目,这些项目还没进行深入的思考,不确定是否立项来做。如果想清楚要做,我会把它拖动到 Projects 中。否则直接拖到 Archive 归档。
Projects 目录是我最常用的,因为里面都是当前正在进行的项目:
比如,当我决定要写一篇长文,就会在 Projects 中新建一个文件夹,比如现在这篇文章,就是在 Apple Notes 里写的。有了这个文件夹后,当我看到任何和这个项目相关的信息,就会把它记在这个文件夹当中:
也就是说,当我看到任何关于 Note taking 主题的值得记下来的东西时,我很清楚要把它放在哪里,因为它和我正在进行的项目有关系。
这也解决了一个很普遍的问题,很多人想记笔记,想有「第二大脑」,却不知道应该记什么,或者记下来很多,最后都只是放在自己的笔记软件里,发挥不出任何作用。而在 PARA 的系统中,你清楚地知道你应该记什么笔记,因为你知道哪些信息和你正在做的事情有关系。这些笔记才是真正能发挥作用的。
比如我即将写一篇在我 30 岁时发布的博客文章,虽然还没开始写,但它是我的一个 Project, 那么当我读到和这个主题相关的信息,就会把它记在这个 Project 里,当我真正写这篇文章的时候,能直接参考它们,对于我来说,这才是有用的笔记:
Projects 不仅仅是项目,它还可以是即将到来的一个事件(Event),也可以是你正在研究的一个课题。比如你约了一个重要的人,你需要记下来这次约会需要准备点什么。约会结束后,就把它拖动到 Archive.
再举一个例子,比如你正在开发一个软件,可能需要记一些技术相关的笔记。在以往,可能你会把这些笔记按主题记下来,比如 React, Vue, Rust, 前端, 后端之类的分类。但在 PARA 中,你应该为你正在开发的软件创建一个 Project,无论你想记下来的技术笔记是什么分类,都放到这个 Project 当中。这样记下来的笔记才是真正有价值的,因为它真实地服务于你正在开发的项目,你在开发时可以反复在一个地方参考。
项目结束后,你可以将整个 Project 拖到 Archive, 不需要再管它。如果你认为 Project 中的一些笔记有复用的价值,就把它拖到 Areas 或 Resources 当中。Apple Notes 的拖动十分方便。但按照我的经验,一般来说直接 Archive 整个 Project 也没什么问题,因为它不是被删了,你还是能通过搜索重新找到它。这时 Archive 的笔记又会「流动」到 Project 当中。
我自己的 Areas 和 Resources 其实很少碰,基本只在 Projects 和 Archive 中活跃:
使用 PARA 的另一个好处在于,只要展开我的 Projects 目录,我能一目了然我正在做的事情。我不再需要单独的 Todo 工具,因为 Projects 就是我的 Todo, 而且 Apple Notes 也有 checklist 功能。这也是 The PARA Method 中所说的:
You will gain greater focus on what matters most: You will have greater clarity about what’s important so you can intentionally move your life into alignment with your interests and goals.
你将更加专注于最重要的事情:你会更清晰地了解什么是重要的,从而有意识地将你的生活与自身兴趣和目标协调一致。
善用搜索。虽然只是关键字查询,但按照我的经验来看,这就足够了。比如我在 Apple Notes 记过我常用的 API key, 我只要搜索 azure 这个词,我就能立刻找到,我甚至都不知道它被我放在哪里了:
不需要迁移。在新的工具重新开始,需要用到的时候才在旧的工具重新找回,有必要时再复制过来。反正没人要求你用新的工具就把旧的数据都删掉。而且,我相信你最后会发现,你并不怎么需要找回你的旧数据 😂 这两年我就没打开过我以前一直用的 Logseq, 也没有做任何迁移。
以上的分享不一定适合所有人,但它非常适合我,我也从这套系统中得到了很大的解放。你甚至可以什么系统都不用,在同一个文件夹记下来所有东西,最后你会意识到,重要的不是把笔记放在哪里,而是感谢自己当初记了下来。这就是为什么降低记录的摩擦力是如此地重要。
PARA 是一个方法,你不一定要用 Apple Notes, 你可以在所有的工具用它。不要让工具阻碍了自己最重要的事 —— take action. 真正有用的笔记是帮助你 take action 的笔记。
P.S. 这篇文章在 Apple Notes 写成:
2025-02-08 08:00:00
趁着国补,把手头用了 5 年的 MacBook Air M1 换成了 MacBook Pro 14 寸 M4. 顺便手动重新配置新电脑,在此记录一下每次设置新电脑时我会做的一些设置和必装的软件。
把点按切换成轻点:
我不喜欢用触摸板点按拖动来移动窗口,觉得有点费力,所以我会调整为三指拖移。旧版本的 OS X 可以直接在系统设置中调整,新版本的 macOS 竟然把它归类到辅助功能里了:
把 Control 键和 Caps Lock 键互换。因为我需要频繁使用 Control 键,Caps Lock 的位置是最合适的,这也是 HHKB 的默认布局:
取消 Spotlight 的所有索引,因为我用 Raycast, Spotlight 的索引会浪费计算资源:
2024-12-28 08:00:00
高中时我读吴军的《浪潮之巅》,觉得很可惜,我出生太晚,错过了一个又一个的浪潮。我总是想,如果我身处这些浪潮,是否也会造就一点什么?我是不是也能创造一家了不起的企业而为人常道?
那时我才 17 岁,我在沙滩上观望浪潮,抱怨生不逢时。而现在,我 29 岁,已经在海中游泳多时。就在这几年,OpenAI 发布 ChatGPT 后,这片海似乎又卷起了一波巨大的浪潮,又有人站在了浪潮之巅,但我还没有。我已经无法再抱怨生不逢时,因为我已经在海里了。在很多个深夜,我差点就想承认,我这辈子只能是一个普通人,我太高估自己。但到了第二天,我又开始不服气,还是不能接受作为一个普通人活着,想做出伟大的产品,想做一家伟大的公司,想在世界上留下一点美妙的痕迹。
知道答案的人只有未来的我自己,所以每当这些迷茫时刻,我总会想起昨夜派对的《夜海的秘密》:
生命中所有来去 都是月亮的潮汐
只有闭上眼才能看到 夜海的秘密
你会看到有船从身旁驶去
船上站着来自未来的自己
他逆着霞光 看不清模样
如一尊塑像 带着先知般的哀伤
只是沉默望着你 一句未讲
你蓦然落泪 想一路追上
跟随他去往 那迢遥未知的远方 可是未来还未来 唯有此刻 是真实
昨夜派对的歌的歌词,就像诗一样,能给我一点疗愈。我习惯通过文学作品自我疗愈。别人问我,为什么还能保持阅读的习惯?我都会回答:如果你发现我某一段时间读特别多的书,那就是因为我这段时间过得非常不好,我需要从书中寻找答案。
2024,我读了 30 多本书。
因为想做一家伟大的公司,我读了柯林斯的《基业长青》和《卓越基因》,研究那些成功的企业是怎么走过来的。
因为想做出伟大的产品,我读了梁宁的《真需求》,lululemon 创始人的《lululemon 方法》,张小龙的《微信背后的产品观》。
其中一本叫做《做难而正确的事》(英文名是 Fall in Love with the Problem, Not he Solution) 让我印象很深刻,它不仅是一本给我打兴奋剂的创业鸡汤,它还教会了我,什么是真正的 Make something people want.
这些书让我对做产品有了另一个体会:如果我想做一个影响范围非常大的产品,我就需要做让人上瘾的「毒品」,要做满足用户「贪嗔痴」的产品。因为 PMF (product-market fit) 的最重要的指标是用户留存率。
恰好我读到了一本《玩家思维:游戏设计师的自我修养》,了解到了游戏让人沉迷的原理,大概也能运用到产品中去。
今年上半年我的朋友启师傅来佛山,我们在先行书店见了一面,期间我们聊到,做互联网产品有点厌倦,想做一些真正看得见摸得着的东西,能让用户在手上把玩,然后赞叹一句 wonderful 的东西,而不是拿着手机给别人看,说「你看我写的这个 App…」。
于是我想到 18 年我曾经卖过一段时间的程序员贴纸,那时我发现国内没有人在做,在国外买又非常贵,动辄一张几美元。那时我联系了一家质量非常好的厂家,做了一批质量很好的开源项目 logo 贴纸,卖得非常不错。更重要的是,中国的程序员终于可以在国内买到质量又好又便宜的贴纸。不过因为我还在上班,有点忙不过来,最后关掉了店铺。
后来我在杭州参加 AdventurX 的活动,趁着机会又见了多年的网友 Linmi, 他是 Notion 中文社区的负责人。我们也聊到了这件事。他鼓励我重新把这件事做下去。
回到家后,我重新认真思考了这件事。我确实应该重新捡起来卖贴纸这门生意,但不能像几年前一样只卖贴纸。我相信程序员(或者泛互联网从业者)需要的不止是贴纸,我们有我们独特的文化,我们有我们真正发自内心热爱的东西,我们乐意把它展示出来。
所以我决定把这件事用经营一个品牌的方式重新去做,贴纸只是其中一个产品。无论在后来是卖贴纸还是卖其它东西,我希望能聚集一群有相同文化认同的朋友,做出这个群体喜欢的产品。我想了很久品牌的名字,最终还是冒了一个风险,取了一个只有程序员会懂的名字 PaddingLeft, 这是一个 CSS 属性的名字。幸运的是,我居然能买到 padding-left.com 这个域名。
我花了些时间选择工厂,甚至跑到了工厂观察他们的机器,和工厂聊价格排期。终于重新上线了店铺。
贴纸卖了一段时间后,其实没有赚到多少钱。期间我一直在想下一个单品应该做什么。恰好那段时间我一直想给自己买一条项链,何不就做项链?
起初我跟一些人聊这个想法,他们都不认可做项链,认为程序员没有戴项链的习惯。这个观察其实不无道理,可是在做这个品牌的时候,我其中的一个想法是可以通过 PaddingLeft 的产品,让用户在使用我们的产品的同时能增加自己的时尚属性,摆脱大众对互联网工作者的刻板印象。而且项链可以做得非常精致,也适合送礼。
这个想法有点自大,但我认为值得尝试。
第一批项链做出来后,卖得也不错。
做 PaddingLeft 的这段经历,虽然也和互联网有点关系,但后来我才慢慢意识到,我在做和做软件截然不同的东西。我对供应链、库存有了新的认识,这些是在做软件的时候不需要处理的问题。和传统行业的人打交道,沟通的方式也和在互联网公司里沟通的方式截然不同。关于这些,我想在以后可以专门再写一篇和大家分享。
在开单的喜悦过后,我又开始想,这到底是一门多大规模的生意?18 年我卖贴纸,我只是把它当作赚外快来看待,如果一个月能带来 2000 块的收入,我会觉得是不错的零花钱钱。但是现在,我是在为自己的生计赚钱,我要思考的问题变成了,从商业上来讲,这是一个值 2 万人民币的 market, 还是值 5 万,还是值 10 万?如果它只是一门值 5 万的生意,我有必要做下去吗?或者说,它有可能发展成价值 20 万规模的生意吗?它是一个可以「流动」的生意吗?
就在刚刚,又有人在店里下单买了些程序员贴纸,于是我走到工作台一张一张地放进包装袋。我边发货,边盘算这单赚了多少钱,得到的数字是 8 块。我忍不住笑了。我曾经的日薪是这一单的 100 多倍。我做的这件事情,它真的有意义吗?
没有人知道答案,我只能安慰自己,这件事总得有人做,而我适合做。我了解程序员、设计师、产品经理这些人喜欢什么,因为我就是程序员。每卖出一张贴纸,我都会给对应的开源项目捐一块钱,以现在的定价,我基本是在做慈善。现在也有很多店做程序员贴纸,但没有人这么做过,因为我做过开源,我知道开源项目的窘境,这就是文化的一部份,也是做这个品牌的意义。如果你曾经买过 PaddingLeft 的贴纸,你会发现我用的自封袋和普通的透明袋有点不同,因为我用的是环保可降解的自封袋。这对用户来说没有丝毫影响,但我挺享受这种自我感动,这也是其中的意义。
直到现在,我还不知道,我还要在海里游多久,才能游到浪潮之巅。我想起曾经的一场梦,梦到在一个饭局,张一鸣就坐我旁边,我说我会有一天像你这样的。张一鸣笑了笑,我也笑了笑,然后梦就醒了。
我的这些执着在多年后是否会成为笑话?Think different 广告中的那句「只有那些疯狂到认为自己能改变世界的人,才真正改变了世界」这句话,到底是不是真的?妈妈,你 10 年前和我说的,算命的说我 30 岁会创业成功,到底是不是真的?