☰
用纯文本、YAML与Python打造可持续维护的个人技能管理系统
2026/10/21 4:54:05 网站建设 项目流程

“skills”这个项目,其实是我给自己做的一套个人技能管理系统。主题很简单:用纯文本文件把那些散落在简历、脑图、笔记、聊天记录里的技能点,统一收拢成一份能长期维护、能统计、能追溯的技能清单。它能解决一个特别实际的问题——你明明做了很多事,但年终总结或面试时却说不清自己会什么。我这套系统用 YAML 存数据、用 Python 做统计、用版本控制管历史,整套东西轻到只有一个目录加两个脚本,却能持续用上几年。适合想系统梳理技能栈的开发者、正在准备跳槽的职场人,以及带团队时需要做技能盘点的人。

1. 整体设计与思路拆解

1.1 为什么用“纯文本+版本控制”而不是在线表格

最早我也试过用在线表格、笔记软件、甚至白板来管理技能,结果都撑不过两个月。问题不在记录本身,而在工具太重:表格要设计列、要维护视图;笔记写起来随意,但查起来全靠记忆;白板画完就拍照,拍完就再也不看了。技能管理需要的不是花哨的展示,而是三个字:快、稳、可追溯。

所以我决定把所有技能存成纯文本文件。YAML 这种格式人类可读、机器可解析,键盘敲起来也没负担;Python 脚本负责读取、统计、输出报告;再用版本控制工具记录每次增删改,这样半年前的某条技能记录还在,随时可以回滚或对比。整个过程就像维护一份代码仓库,只是仓库里存的不是代码,而是“我会什么、做到什么程度、有什么证据”。

这种设计有一个额外好处:不依赖任何在线服务。文件在自己手里,脚本在自己手里,哪怕几年后某个平台倒闭了,这套技能库依然能用。对于个人数据来说,这种“可迁移、可长期保存”的特性比协作功能重要得多。

1.2 设计核心:少即是多、证据优先、定期复盘

技能管理系统最容易失败的原因,是一上来就追求“大而全”。我曾经也想把会用但没实际用过的工具全记进去,结果技能列表膨胀到几十条,反而没法用。后来我给自己定了三条设计原则。

第一,少即是多。只记录那些“能带来结果”的技能。什么叫能带来结果?独立完成过一个项目、解决过一个线上问题、产出过一份被采用的设计方案。光是“听说过”“看过教程”的,先放进待探索区,不算正式技能。这样技能库永远保持精简,每一条都是可用的弹药。

第二,证据优先。技能等级不能靠感觉,要靠证据。我要求每条技能必须挂至少一个证据链接或产出描述,比如项目仓库、线上地址、数据截图、文档链接。没有证据的技能,就算自评再高,也只允许标到“熟练”以下。这一条规则直接避免了“简历上写精通、面试现场翻车”的尴尬。

第三,定期复盘。技能库不是写完就扔的档案,而是需要季度性维护的活系统。我设定每个季度做一次完整 review:新增了什么、提升了什么、放弃了什么,全部反映到记录里。复盘过程控制在半小时内,否则又会沦为形式。

1.3 先选“技能表+标签”,不要一上来就建技能树

很多人提到技能管理就想到技能树、知识树,觉得要把所有能力画成一棵大树,从根到叶层层分类。实际做下来,技能树在初期几乎必死。为什么?因为维护一棵树需要你时刻关心“这个节点该挂在哪一层”,而维护一张扁平的技能表只需要关心“这条记录对不对”。树的分类成本远大于收益。

我的做法是:一张技能表,用分类字段和标签字段做多维切分。分类解决“属于哪个大领域”的问题,标签解决“跨领域怎么找”的问题。比如“用 Python 写自动化脚本”这个技能,分类是“编程开发”,标签可以是“python”、“自动化”、“效率工具”。想查和自动化相关的技能时,按标签过滤就行,根本不用管它在树的第几层。

这种方法的好处是灵活。人的能力从来不是严格树状的,更像是网状结构。技能表加标签,恰好能表达网状关系,又不需要复杂关系数据库。等技能数量超过一百条、你真的需要一棵树来做学习路径规划时,再迁移也不迟。初期别加太多结构,先跑起来。

2. 核心字段与等级标准,把模糊感受变成可量化数据

2.1 一条技能记录里该放什么

我最终设计的技能记录字段不多,但每个字段都有明确作用。一条记录类似这样:id 是唯一编号,用来引用和排序;name 是技能名;category 是所属领域;level 是熟练等级;status 表示当前状态,比如“活跃”还是“冷却”;tags 是标签列表;evidence 放证据;learning_resources 放学习资源;next_step 写下一条行动计划;last_reviewed 记录上次复盘时间;note 放备注。

id、name、category、level 这些字段不用解释。我想重点说说 status 字段。技能不是一成不变的,有的技能几个月不用会生疏,我把它标成“冷却”,提醒自己需要时先复习;有的技能正在重点提升,标成“活跃”;有些曾经用得很熟、但以后大概率不再用的,标成“归档”。归档不删除,保留了历史积累,又不影响当前统计。

evidence 字段是整个系统的灵魂。它可以是一个 URL,也可以是一句具体的描述,比如“用 X 框架完成某系统,支撑日均 X 次调用”。这句话必须能向陌生人说清楚“我到底做了什么、产生什么结果”。没有 evidence 的技能,我默认视为“未验证”。

last_reviewed 也很重要。每次复盘时更新它,这样我可以按这个字段排序,优先 review 那些很久没碰的技能,防止某个技能悄悄过时了还不知道。

2.2 等级标准怎么定才不虚

等级是技能系统里最容易翻车的环节。“熟练”“精通”这种词,一百个人有一百种理解。我给等级定义了一套可操作的六级标准,每个人都可以直接套用。

L0 表示听说过,能说出大概用途;L1 表示系统学过,但没有实际产出;L2 表示在项目里用过,有可验证的产出;L3 表示能独立交付,遇到一般问题不需要求助;L4 表示能带人,可以指导别人完成任务;L5 表示能定义标准,能影响团队甚至行业怎么做这件事。

注意,L1 升 L2 必须有证据。这避免了一个常见陷阱:上过几节网课就觉得自己会了,实际上项目里一用就卡壳。L3 升 L4 必须有“指导他人”的记录,比如带过新人、写过团队规范、做过内部分享。L4 升 L5 则要看是否参与过标准制定或方法论输出,这个门槛很高,一般人到 L4 就足够了。

这种等级标准还有一个好处:可以和别人共用。带团队时,我给团队每个成员发同一套等级定义,大家自评结果才有可比性。否则有人喜欢谦虚,有人喜欢夸大,盘点出来的技能矩阵根本没法看。

2.3 分类与标签的极简规则

分类和标签如果没有规则,过两个月就会变成一团乱麻。我踩过这个坑:今天写“Python”,明天写“python”,后天写“Python 编程”,统计出来三个不同的技能,实际指的是同一个东西。所以现在我有几条硬规则。

分类只分四个大类:通用能力、专业硬技能、软技能、管理与影响力。四类足够容纳大多数职业场景,不到万不得已不新增类目。如果某技能不知道放哪,就放“通用能力”或者暂时放进“待定”,等复盘时再调整。

标签规则:全部小写、用短横线连接、同一概念只用一种写法。例如“python”而不是“Python”,“web开发”而不是“web开发/Web开发”。标签数量控制在每个技能三到五个,目的是交叉检索,不是穷举。

定期清理标签。我每个季度会扫一遍标签列表,把超过半年没用过的标签直接删掉。删掉标签不会删掉技能,只是让系统更干净。没有清理机制的标签系统,最终都会失控。

3. 实操过程与核心环节实现

3.1 初始化目录结构

整套系统的目录结构非常简单,我直接放在个人工作目录下的 skills 文件夹里。

skills/ ├── data/ │ └── skills.yaml ├── scripts/ │ ├── stats.py │ └── add.py ├── reports/ └── README.md

data 目录放唯一的技能数据文件,这个文件是整个系统的事实来源。scripts 目录放两个小脚本:add 用来快速新增技能,stats 用来生成统计报表。reports 目录放自动生成的 Markdown 报告,比如年度技能总览、季度变化记录。README.md 记录系统使用规则和等级定义,防止三个月后自己忘了当初为什么这么设计。

这个结构刻意保持精简。不要一开始就设计一堆子目录、一堆模板,那只会让维护成本大于收益。目录够用就行,以后真的需要再扩展。

初始化时只需要一个命令:把目录建好,再创建一个空的 skills.yaml。我用 mkdir -p 一次性建出整棵目录,然后创建 README,把等级定义复制进去。

mkdir -p skills/data skills/scripts skills/reports cd skills touch data/skills.yaml

3.2 写入第一条技能记录

创建好空文件后,第一条技能记录我建议从当前最擅长、最有证据的一项开始,不要选最想学但还没学会的。第一条记录会决定你对这套系统的第一印象,应该是一个让你有信心的技能。

下面是我当时写入的简化示例。

- id: dev-001 name: Python 自动化 category: 专业硬技能 level: L3 status: 活跃 tags: - python - automation - efficiency evidence: - "用 Python 编写报表生成脚本,每天自动汇总数据并发送邮件" - "开发内部日志解析工具,处理日均 2 万条日志" learning_resources: - "Python 官方文档" next_step: "学习异步编程,提升批处理效率" last_reviewed: "2025-01-10" note: "工作里应用最多的一项技能,可作为自动化类任务的基础"

注意 YAML 的缩进统一用两个空格,不要用 tab,否则后续脚本解析会报错。字符串里的冒号后面要有空格,行内注释虽然 YAML 支持,但我建议少用,因为写多了会让文件显得杂乱。

第一条记录写入后,先跑一次最简单的“人工检查”:打开文件看一眼,字段是否齐全、缩进是否一致、标签是否规范。这一步养成习惯后,后面加记录基本不会出问题。

3.3 写一个检索和统计的小脚本

手工维护 YAML 文件的体验还行,但要做到“快速统计”还是得靠脚本。我写了一个不到六十行的 stats.py,用 Python 读取 YAML 文件并按分类、等级、标签输出统计结果。核心逻辑很简单:读取文件、遍历记录、按维度分组计数、输出 Markdown 表格。

import yaml from collections import Counter with open("data/skills.yaml", "r", encoding="utf-8") as f: skills = yaml.safe_load(f) or [] def count_by(category): items = Counter() for s in skills: if category == "level": items[s.get("level", "未知")] += 1 elif category in ("category", "status"): items[s.get(category, "未知")] += 1 elif category == "tag": for t in s.get("tags", []): items[t] += 1 return items.most_common() def render_md(title, data): lines = [f"## {title}", ""] lines.append("| 维度 | 数量 |") lines.append("| --- | --- |") for k, v in data: lines.append(f"| {k} | {v} |") return "\n".join(lines) if __name__ == "__main__": print(render_md("按分类统计", count_by("category"))) print() print(render_md("按等级统计", count_by("level"))) print() print(render_md("按状态统计", count_by("status"))) print() print(render_md("按标签统计", count_by("tag")))

这个脚本不需要安装复杂依赖,只需要 PyYAML。运行后直接在终端看到统计结果,也可以把输出重定向到 reports 目录,生成一份可保存的报告。

后来我还加了 add.py,命令交互式询问名称、分类、等级、证据,然后把内容追加到 YAML 文件里。这样新增技能时不用打开编辑器、也不用记 YAML 语法,十秒钟就能完成。

3.4 用版本控制沉淀每一次变化

技能库是活文档,需要记录每次变化。把 skills 目录初始化为一个版本仓库后,每次修改都形成一个提交,这样我可以随时查看“三个月前我记录了什么”“上次复盘我更新了哪些字段”。

初始化命令很简单:

cd skills git init git add . git commit -m "init: 初始化技能管理系统"

之后的每次新增或修改,我习惯用一次提交记录。比如:

git add data/skills.yaml git commit -m "add: 新增数据分析技能,等级L2"

季度复盘时,我会打个标签,比如 v2025-q1。这样将来想对比两个季度的差异,直接对比两个标签即可。版本控制带来的另一个好处是风险低:不小心删了一条记录,随时可以从历史记录里恢复。

有的朋友喜欢把技能库放在云盘同步,这样多设备都能看。我更推荐用版本仓库同步,因为云盘同步是“文件名冲突”的,而版本控制能合并历史。尤其当你和我一样有“改完忘了存”的坏习惯时,版本控制能救你很多次。

3.5 如何让这套系统进入日常

工具建好了,最难的其实是“坚持用”。我准备了几个降低使用门槛的方法。

在 shell 里加别名,让命令短到不用思考。我配置了这样的函数:

skills() { cd ~/skills && python3 scripts/stats.py } skilladd() { cd ~/skills && python3 scripts/add.py }

这样在任意目录下输入 skills,就能看到技能库的统计概览;输入 skilladd,就进入新增技能的交互式流程。命令越短,使用频率越高。

我给自己定的更新节奏是:平时遇到新技能、新项目、新产出,当天顺手记录;每周五下班前花五分钟浏览一遍本周改动;每个月做一次小的技能库整理;每个季度做一次完整复盘。这套节奏不重,但能保证技能库一直和数据同步。别把它当成一件额外任务,要把它当成工作流程的一部分。

4. 常见问题与排查技巧实录

4.1 为什么总是坚持不下去

技能系统失败的第一大原因不是工具难用,而是记录得太重。很多人的流程是:打开笔记软件、新建文档、找分类、写一段长文、再插入链接,半个小时过去了。这么高的成本,谁也坚持不了。解决办法是把记录动作拆到最小。

先不要写完整描述,先只记录一行:技能名、等级、粗略证据。后面再补。我当时用 add.py 就是这个思路,30秒就能存一条。等有完整产出和链接时再回来补全。把“记录”的门槛降到最低,坚持就不再靠意志力,而是靠顺手。

另外我建议把技能库和每天的工作日志打通。每天下班前,如果今天做了值得记录的事,就直接打开技能库补一条。我就是这样保持了一年多没断,靠的不是自律,是“当天事当天记”的习惯。

4.2 自评等级失真怎么办

等级失真最典型的场景是“高估自己”。我以前写过“精通某语言”,结果面试被追问底层实现时支支吾吾,当场打脸。后来立了一条规矩:没有证据,最高只能定到 L2。有证据也未必能到 L3,因为 L3 意味着“独立交付”,要能说清楚交付物的规模、复杂度和产生的影响。

还有一个有效办法是互评。带团队时让每个人按统一标准自评,然后两两结对交叉评审,互相看证据、互相质疑等级。你会发现,别人眼中的你和自己眼中的你经常不一样。互评能逼迫你拿出证据来,也能暴露那些你“以为会但实际不会”的技能。

如果单人使用,可以设置一个“冷静期”:任何技能升到 L4 之前,必须保留三个月持续实践的证据。三个月能过滤掉大量临时热度带来的虚高自评。

4.3 分类混乱、标签泛滥怎么治理

YAML 文件用久了,标签不规范的问题一定会出现。最彻底的治理方案是“季度清理”。每个季度末,导出一份标签统计,把相似标签合并,把冷门标签删除。分类也一样,如果某个分类下长期只有一两个条目,就并入相近分类。

我实际操作中遇到过一个很麻烦的情况:同一项技能由于名称不同被记成了两条,比如“爬虫”和“数据采集”其实是一回事。后来我定了一条规则:新增前先搜索 name 和 tags,确认已有同类技能后直接更新原记录,不新建重复条目。搜索动作只需要几秒,却能防止长期的数据污染。

如果已经出现重复,我没有用太复杂的去重算法,直接人工合并。因为技能库总量不大,人工检查更可靠。合并时保留证据较多的那条,把另一条的 evidence 追加过来,然后删除多余条目。

4.4 多设备同步和隐私问题

技能库里会写不少细节,比如具体项目内容、技术栈、甚至问题排查过程。这些信息不一定适合公开。我的处理方案是分两层:敏感项目用代号或模糊描述,精确信息留在本地索引文件里。技能库本身可以同步,但敏感字段不进入同步范围。

多设备同步时最让人头疼的是冲突。两个人的版本库或两台电脑同时修改同一个 YAML 文件时,合并可能出现冲突。目前我采取的策略很简单:一台电脑负责“写”,其他设备只负责“读”。也就是新增和修改技能都在主力电脑上完成,手机和平板只用来查看报告。这样几乎不会产生冲突,也省去不少合并烦恼。

如果你确实需要多设备编辑,可以按分类拆成多个 YAML 文件,一个文件管一个分类。这样两个设备同时改不同分类时,不会产生冲突。我刚开始用的单文件方案够用,等技能量大了再拆不迟。

4.5 从“收集技能”变成“实践技能”

技能收集癖是很多人的通病:看到一个新技术,收藏、记录、写进技能库,然后就再也没有下一步。技能库如果真的只变成了收藏夹,那还不如不做。我的规则是:收藏没关系,但必须在 next_step 字段里写下具体的实践计划,并且在三个月内启动一个最小项目去练习。

如果三个月后还是没有实践,下次复盘时直接把该技能从活跃列表移到“待探索”状态,不占统计权重。这听上去有点残酷,但非常有效。经过几次清理,留下的技能基本都有真实可达的证据。

我见过很多人技能清单写得满满当当,真到被要求“现场演示”时却拿不出手。问题不在于记不记,而在于有没有把“记下的内容”转化为“真实的能力”。技能管理系统的最终目的不是一份漂亮的清单,而是逼着自己用证据倒逼实践。

5. 从个人到团队:技能资产还能怎么用

5.1 自动生成个人技能地图

技能库攒了半年后,我想要一份直观的技能地图用于年度复盘。给 stats.py 加一个参数输出分类和等级的交叉表就可以,也可以用图表库生成雷达图或条形图。我的做法是输出 Markdown 表格,直接粘贴进复盘文档,效果足够清晰。

一个比较实用的视图是“分类 × 等级”矩阵图:横向是四个分类,纵向是 L0 到 L5,每个格里显示技能数量和名称。这样能一眼看出哪个领域已经成体系、哪个领域还是空白。做职业规划时,这个矩阵比简历好用得多。

手工生成矩阵不难,核心就是遍历技能记录,组织成二维结构,再按 Markdown 表格格式输出。如果你习惯做报告,也可以让 Python 脚本直接把矩阵写到 reports 目录,和季度复盘记录一起提交到版本仓库。

5.2 简历和面试前的高效复盘

准备面试时,技能库就是我的素材库。我会按目标岗位要求,把相关分类的 skill 条目筛出来,再逐条打开证据链接,快速回忆当时的项目细节。这样一小时以内就能完成过去要我花一整天才能做完的“我都做过什么”整理。

更直接的做法是从技能库导出简历片段。脚本按分类生成列表,每条技能名后紧跟证据描述。这些证据描述本身就是简历项目经验的原始素材。当然,简历不可能只靠一个列表,但技能库能保证你在写简历时不会遗忘关键成果。

面试前我还会专门看 next_step 字段。下一个打算提升的点往往是面试官最爱问的“你对自己的发展有什么规划”。技能库里的行动项比临时想出来的回答更真实、更有说服力。

5.3 团队技能矩阵和新人培养

当我把这套系统带到团队里时,效果比预想中好。团队版只需要在原始基础上加几个字段:owner(负责人)、proficiency(熟练度)、last_verified(最近验证时间)。每个成员维护自己的 YAML 文件,汇总到团队仓库后,按技能名横向对比,就能生成一张团队技能矩阵。

这张矩阵对带团队的人价值很大:能看出哪些技能只有一个人会,这是风险点;哪些技能多人具备,可以互为后备;哪些技能整体偏弱,需要安排培训。新人入职后,我直接让他从技能库里挑选相关技能,照着 evidence 和 learning_resources 学习,比从零摸索快得多。

团队维护的重点是统一等级标准。我们会在团队 README 里写明等级定义,并定期做一次交叉评审。否则每个成员自评尺度不同,矩阵会失真。这个话题展开能写一整篇,但核心就一句:标准一致,矩阵才有意义。

5.4 给这个系统留一个“AI接口”

最后说一个目前正在尝试的方向:把技能库和 AI 助手结合。思路很简单,把 YAML 文件作为上下文交给 AI,让它根据我的等级和证据生成学习路线、模拟面试题、或者识别相邻技能。不需要复杂工程,只需要把技能数据作为提示词的一部分。

我现在会在季度复盘前,把当前技能库导出成纯文本,让 AI 帮我分析“哪些技能最值得提升”“哪些技能有协同效应”“按当前水平适合投什么方向的岗位”。它的建议不一定全对,但能提供不同的视角,正好弥补个人盲区。

当然,使用任何 AI 工具都要注意数据隐私。敏感项目描述我在前面已经建议过要用模糊化表达,和 AI 交互时同样要遵守这个原则。不要把私密信息发送给外部接口,这是个基本底线。

现在这套 skills 系统已经陪我走过一年多,最大的体会不是技术方案多精妙,而是它改变了我对“技能”的理解:技能不是简历上的一句形容词,而是一连串可验证、可追溯、可复盘的真实记录。如果你也想梳理自己的技能资产,别追求一步到位的宏大系统,先从一个 YAML 文件、一个统计脚本、一条带有证据的技能记录开始,坚持一个季度再回头看,你会感谢当时那个动手的自己。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询