技能花园:用Git和Markdown打造个人技术资产管理系统
我在整理自己的 GitHub star 时,突然意识到一个问题:我 star 过两百多个仓库,收藏过一百多篇文章,但真正能讲清楚原理、能在项目里直接上手的技术,不超过十个。收藏夹塞得越满,心里反而越没底。
那时候刚好注意到一个项目名:ConardLi / garden-skills。我没有从头到尾读过这个仓库的源码,也不打算在这里云分析它的实现。真正吸引我的,是“garden-skills”这个组合词。它把“技能”和“花园”放在一起,这个比喻比“知识库”“笔记系统”“工具箱”都更接近本质:技能不是靠收藏来的,是靠养出来的。
这篇文章不打算解密某个具体开源项目,而是借这个项目名,聊一聊开发者应该如何系统性地管理自己的技能资产。如果你也收藏了很多资料、报了课、买了书,最后却发现可复用的能力没有明显增长,那这篇文章可能对你有用。
1. 技能管理的真正痛点不是信息太少,而是没有生长机制
1.1 收藏不等于学会,为什么囤积型学习一定会失效
先回想一下我们最常见的学习路径:遇到一篇好文章,点击收藏;看到一个不错的仓库,点一下 star;听说某本书很经典,加进购物车。这些动作的共性是——它们都不需要消耗太多脑力,也几乎不会触发后续行动。
我把这种模式叫做“囤积型学习”。它的最大问题不是浪费时间,而是制造了一种虚假的掌控感。收藏的那一刻,我们以为信息已经属于自己了,但实际上它只是暂时停在了浏览器缓存里。知识没有经过理解、实践、纠错、调用,就不会变成技能。
技能和信息的区别,在于技能必须经过身体的参与。写代码、调接口、修 bug、做优化,每一步都伴随着反馈。没有反馈,就没有校正;没有校正,就没有生长。收藏夹里唯一发生的变化,是条目数量在增加。
garden-skills 这个项目名给我的第一个信号,就是把“技能”从名词变成了动词。花园不是一堆植物的名字列表,而是一套持续发生的养护过程。
1.2 数字花园相比传统知识库,到底差别在哪里
“数字花园”并不是一个很新的概念。早在很久以前,很多写作者就把自己的博客、笔记、项目仓库称为 digital garden。它和传统知识库的核心区别是:知识库偏重存储和检索,数字花园偏重成长和连接。
传统知识库的典型形态是这样的:按目录分类,按标签整理,每条笔记是独立的知识单元。它的使用方式是“需要的时候去查”。这本质上还是一个图书馆,里面的书不会自己生长。
数字花园不一样。它有播种阶段(把灵感、资料、半成品放进来),有培育阶段(持续补充、修改、扩展),有修剪阶段(删掉不需要的、纠正过时的),有收获阶段(把成熟的部分公开分享、投入实践)。它不追求每条知识都完整,而是追求树上总有一些果实是熟的。
garden-skills 把“花园”这个词收窄到了“技能”上。这比泛泛的知识管理更具体。技能比知识更强调实践和反馈,也更需要可视化自己的阶段状态。你没法说“我收藏了 Git 技能”,你只能说“我正在学习 Git 的分支管理,已经能解决日常合并冲突”。
1.3 这个项目名真正的价值,是逼你把技能阶段化
接触了很多项目之后,我发现高质量的开发者通常有一个共同点:他们能够准确说出自己现在处于什么阶段,下一步要做什么。不是“我会 Vue”,而是“我用 Vue 做过两个中后台项目,能独立设计组件边界,但对源码级别的响应式原理还没有完整梳理过”。
这就是阶段化的表达。garden-skills 这个名字隐含了同样的结构:花园里的植物是有生命周期的,有的还在种子期,有的刚发芽,有的已经开花,有的可以收割。技能也应该这样管理。
如果一项技能没有明确阶段,它就很容易被无限期搁置。“以后有空再学”是一句最昂贵的话。并不是因为你真的缺时间,而是因为你没有给技能设定一个可见的生长状态。
2. 把技能当花园经营:一个四阶段生长模型
2.1 播种期:怎么判断哪些技能值得种下去
花园的第一步不是盲目撒种,而是选择种子。技能管理也一样。你不可能在有限的生命里精通所有东西,所以播种期最重要的任务是筛选。
我一般用三个条件来判断一项技能是否值得进入自己的花园:
- 它是否解决你当前真实遇到的问题。注意“当前”和“真实”两个词。当前,意味着不是未来某天;真实,意味着不是幻想中的需求。
- 它是否与你已有的技能树有交集。如果一个新技能完全独立于你的现有体系,它能长出来的概率很低,因为你缺少触类旁通的土壤。
- 你能否在未来三个月内给它安排至少一次实践机会。知识如果没有用武之地,播种之后很快就会干枯。
这三个条件过滤下来,值得进种子池的技能通常不会太多。这是好事。种子太多,不是花园,是仓库。
播种期还要做一件事:为每个技能写下一句话动机。不是“想学 TypeScript”,而是“我想让这个项目在重构时少踩类型问题,所以需要掌握 TypeScript 的泛型和类型收窄”。动机越具体,后续的培育就越有方向。
2.2 培育期:刻意练习和结构化输入必须同时进行
技能真正开始生长的阶段是培育期。这个阶段最常见的错误,是把“输入”当成“培育”。看视频、读文档、刷教程,这些只是养分,不是生长本身。生长必须发生在你动手做的过程里。
我建议的培育节奏是:每次学习,先给自己设定一个最小实践目标。比如,学 Promise 的时候,不要只读完语法就结束,而是写一个基于 Promise 的请求队列;学 CSS Grid 的时候,不要只记住属性,而是复刻一个实际页面的布局;学一门后端语言的时候,不要只跑通 Hello World,而是写一个能读文件、能处理参数的小命令行工具。
培育期还需要“结构化输入”和“零散探索”并行。结构化输入解决“我不知道我不知道什么”的问题,零散探索解决“我知道但还没理解透”的问题。前者靠课程、文档、经典书,后者靠博客、源码、社区的碎片经验。二者缺一不可。
更重要的是,每个培育期的技能都要有“上一次触碰时间”。如果你发现某项技能已经超过两周没有打开过,它大概率不是在培育,而是在休眠。
2.3 修剪期:砍掉技能不是失败,是成本控制
花园最容易被忽视的工作是修剪。很多人只肯播种和培育,舍不得砍掉任何东西,结果整个花园变得杂乱无章,真正的重点反而不突出。
技能修剪的最现实理由是:维护成本。每项技能都需要持续关注行业变化、更新知识结构、维护相关工具链。你掌握的技术越多,需要分摊的注意力就越分散。与其十个技能都停留在 60 分,不如三个技能到 85 分。
修剪并不意味着“忘记某门技术”。它说的是:把某项技能从“在培”状态移到“归档”状态。归档之后,如果真有机会派上用场,重新捡起来的成本会比从零开始低得多。这是一种理性的资产管理,不是一场失败。
什么时候应该修剪?我判断的标准很简单:过去三个月里,这项技能既没有新的实践,也没有新的产出,而且未来三个月也看不到使用计划。符合这三条,就该修剪。
2.4 收获期:用输出物证明技能真的存在
一项技能有没有真正掌握,不看输入了多少,只看输出了什么。输出物可以是项目代码、技术文章、内部分享、开源 PR、工具脚本,甚至是帮同事解决的一个具体问题。这些是技能花园的果实。
收获期最容易被忽视的问题是:很多人觉得自己“还没有准备好”,不敢公开输出。但技能管理不是演讲比赛,不需要等到完美再上场。一个粗糙但完整的项目,比一个完美但永远不落地的想法有价值得多。
我更建议把收获期纳入日常节奏,而不是放在学习结束之后。学到一个新技巧,马上想一个可以把它用起来的地方。写一篇文章记录踩坑经过,做一个 demo 验证想法,把这些输出放到自己的 GitHub 上。当你的花园里每项在培技能都有至少一个可见的果实,你的技能栈就不是简历上的一行字,而是可以被任何人检验的证据。
3. 用 Git 和 Markdown 搭建自己的技能花园
3.1 一个最小可用的仓库结构
如果你不想用一个复杂的知识管理工具,直接用 Git 仓库 + Markdown 文件就能搭一个技能花园。它的优点是完全本地、可版本管理、可搜索、不依赖任何平台。
常见写法是这样的:
skill-garden/ ├── README.md # 花园总览,记录当前正在培育的重点技能 ├── seeds/ # 种子池:想学但还没开始的技能 │ ├── docker.md │ └── typescript.md ├── seedlings/ # 幼苗:正在打基础,还不能独立使用 ├── growing/ # 成长期:已经能实际使用,还在深化 ├── harvested/ # 收获:有明确输出物,能够稳定使用 ├── archived/ # 归档:暂时不再使用,但保留知识脉络 └── pruning-log.md # 修剪记录:哪些技能被砍了,为什么每个技能都用一个独立文件来描述,内容不需要很长,但必须包含几条关键信息:当前状态、最后一次更新时间、实践记录、输出物列表、下一步行动。
这样一个结构解决的核心问题,不是记录“我会什么”,而是让技能的成长过程变得可见。你打开仓库的瞬间,就能知道哪些技能正在生长,哪些已经停滞。
3.2 每项技能的培育记录模板
技能文件的写法决定这个花园能不能长期运行。太复杂会懒得维护,太简单又没意义。我一般用这样的结构:
# TypeScript 状态:growing 最后更新:2025-XX-XX 投入时长:约 12 小时 ## 当前目标 掌握泛型工具类型的写法,能用它减小重复类型定义。 ## 实践记录 - 2025-XX-XX:重构了一个枚举转联合类型的工具函数,解决了之前 any 滥用的问题。 - 2025-XX-XX:读完了类型推断相关章节,做了一份要点摘录。 - 2025-XX-XX:在项目里落地了一个带泛型约束的 API 封装。 ## 输出物 - [项目代码] xx 项目 src/utils/typing.ts ## 下一步 用类型挑战完成 5 道中等问题,纠正条件类型的理解偏差。注意,这里最关键的不是“记录做了什么”,而是“让下一步变得明确”。每次只更新文件,不用想得太复杂。如果一个技能文件长期没有被更新,它就是一个强烈的信号:这项技能实际处于休眠状态。
3.3 建立固定的培育节奏和 review 机制
技能花园最需要的不是工具,而是节奏。我试过很多方案,最后发现最简单的规则反而最有效:每周进行一次技能盘点,每月做一次修剪。
每周盘点只问三个问题:
- 这周我触碰了哪些技能?
- 它们都处于什么状态?
- 下周准备推进哪个方向?
每月修剪做四件事:
- 查看所有技能文件的最后更新时间。
- 把超过一个月没有更新的幼苗降级回种子池。
- 把三个月以上没有应用的技能移到归档。
- 更新 README 中“当前重点”的列表。
这套机制的价值不在于仪式感,而在于倒逼你面对真实情况。你没法假装某个技能还在“学习”中,如果它的上一次更新记录停在三个月前。
3.4 技能花园建了但用不起来,先按这个顺序排查
如果你发现自己建好了目录,却一两个月没碰它,不要急着责备自己懒。更可能的原因是某个环节出了问题。我建议按下面的顺序排查:
- 先看种子池是否太满。如果里面躺着几十个“想学”的技能,你在潜意识里会认为这个项目是个无底洞,根本不愿打开。解决方法是先砍到三项以内。
- 再看你的 review 机制是否真的进入了日程。没有固定日程的机制等于没有机制。把每次盘点定为 15 分钟,放在日历里,别放在“有空时”。
- 再看每一项技能的下一步是否足够小。如果写着“学习 React 源码”,这个任务模糊到无法执行。要改成“读懂某一次 render 更新的调用链路”。
- 最后看维护成本是否过高。如果你把技能记录写成了长篇笔记,每次更新都要花很多精力,那你就很难坚持。宁可每份记录只有五句话,也不要追求精美完整。
排查完之后,记住一句话:一个能用起来的简单系统,胜过设计精巧却无人问津的复杂系统。
4. 从个人技能花园到工程化实践
4.1 为什么单次建目录不等于建立了系统
很多人模仿别人的目录结构,建了同样的文件夹,甚至写好了 README,然后就没有然后了。这就像买了一堆园艺工具,却从没在地里挖过一铲土。
问题的根源在于,他们理解的是“结构”,而不是“机制”。结构是静态的,机制是动态的。技能花园真正运转起来,靠的是“更新—反馈—调整”的循环。每条实践记录都会告诉你哪些有效、哪些无效;每个输出物都会告诉你这项技能距离熟练还有多远;每次修剪都会让你对“我应该成为什么样的人”更清晰。
所以,如果你也想尝试类似 garden-skills 的做法,我的建议是:不要一次性把整个体系搭完美,先挑一项你正在学习的技能,写一个简单文件,记录一次真实实践,设定一个本周要完成的动作。让这个最小循环转起来,再逐步扩展。
4.2 用简单的自动化辅助维护
如果你的技能花园已经运行了一段时间,有几处手动维护会变得很繁琐。这时候可以加一点自动化。思路不复杂,也不一定非要写成完整应用。
常见做法有三个:
- 用 git log 统计每个技能文件在过去一段时间内被更新的次数。两周没动的文件,直接列为“疑似休眠”。
- 在技能文件顶部用 yaml front matter 维护状态和更新时间,用一段脚本扫描所有文件,生成一份“花园健康报告”。
--- name: TypeScript status: growing last_updated: 2025-XX-XX ---- 在输出物文件夹里为每个项目建立一个索引,链接到 GitHub 仓库或文章链接。这样你把“收获”和“技能文件”关联起来,不用手动整理简历时再去翻找。
这些自动化不需要多么高级。哪怕只用一两条 shell 命令,也算把花园带进了工程化阶段。
4.3 适用边界:这个方法适合谁,不适合谁
任何知识管理方法都有边界。garden-skills 这种“技能花园”的思路,最适合的人是那些需要长期积累、且技能体系相对清晰的技术工作者。比如前端工程师、后端工程师、数据工程师、算法工程师,还有需要同时维护多个技术栈的技术管理者。
它在以下场景里价值最大化:
- 你正处于从初级走向中级的阶段,需要可视化自己的成长路径。
- 你同时接触多个技术方向,很难靠记忆判断精力该放在哪。
- 你希望从“学过很多东西”过渡到“正在深耕某些方向”。
但也要坦诚说清楚它的不适用场景:
- 如果你只想快速通过一个认证或面试,直接刷题、做项目、背答案可能更高效,技能花园的长期跟踪对你来说太重了。
- 如果你更习惯用比较成熟的笔记软件管理知识,不一定要把整套目录搬进 Git。形式并不重要,关键是“更新—反馈—调整”的循环有没有建立起来。
- 如果你正处于团队协作环境中,需要和同事共享知识库,那就不要用个人花园代替团队 Wiki。两者定位不同,一个是个人成长,一个是团队资产。
这套方法真正的成本,不是建仓库的那半小时,而是后续每一次如实更新自己的记录。它和所有给生活留出余量的方法一样,考验的是持续和诚实。
4.4 长期价值:技能管理最终会变成自我管理
坚持维护自己的技能花园一段时间以后,你会慢慢发现,这件事已经不只是技术管理了。它开始反过来影响你的决策方式。
你会更清楚自己擅长什么,也会更早发现什么方向并不适合自己。你不会因为某个技术“热门”就冲动学习,而会先问一句:它和我当前的花园有没有交集,值得种吗?你在面试、述职、写简历的时候,会有一份真实的、长期更新的证据链,而不是临时拼凑的项目列表。
更重要的是,你会接受一个事实:技能一定是会过时的。花园里的植物不会永远长青。但这并不意味着养护没有意义。那些在培育过程中形成的思考方式、调试直觉、设计品味,才是花园真正留给你的东西。
5. 现在就能开始的最小行动
看完整篇文章,你不需要马上搭一个完整的技能花园。只需要做一件事:挑出你正在学、或者最想学的一项技能,写三句话:
- 它当前处于什么状态?
- 上一次碰它是什么时候?
- 这周打算做哪一个最小的动作推进它?
然后把这个文件存进一个叫 skill-garden 的文件夹里,用 Git 初始提交。
如果过了一周你还愿意打开它,就说明这个方法对你有效。如果不想打开,那也不是你懒,而是方法需要调整。
garden-skills 这个名字真正想表达的,也许不是让你把技能管理得井井有条,而是提醒你:所有值得拥有的能力,都应该像花园里的植物一样,被耐心地播种,认真地被培育,甚至要舍得及时修剪。长期的复利,从来不是收藏出来的,而是生长出来的。
