“skills”这个单词,现在多半躺在两种地方:一种是简历上的“专业技能”区块,另一种是聊天里轻飘飘的自我描述。我自己的经历比较特殊,它是我在 GitHub 上一个仓库的名字,起初只是用来存放“我会点什么”的 Markdown 清单,后来慢慢长成了一套能盯住自己成长节奏的技能管理系统。这篇博文就围绕我个人搭建skills项目的完整过程,讲清楚它到底解决什么问题、适合谁用、怎么从零搭建、以及怎么让它持续产生价值。如果你正在整理简历、规划学习路线,或者需要帮团队做技能盘点,这篇文章可以给你一套可以直接抄走的思路和模板。
1. 项目定位与整体设计
1.1 它不只是一份“我会什么”的清单
在第一版 skills 仓库里,我犯过一个典型错误:把所有接触过的技术名词全部塞进去,写完之后感觉自己像个“全栈天才”。但真正面试或做项目时,只要被问到两类问题,我立刻现原形:第一类是“你在这个技术里处理过什么有难度的点”,第二类是“你最近一年还在用它吗”。于是我开始反思,一份只有名词和形容词的清单,本质上没有信息量,它既不能回答“你的技能是否还有效”,也不能回答“下一步该学什么”。
所以第二版我把它改成了一张带状态的技能表:每个技能必须有最近使用时间、熟练度等级、关联项目证据、下一步行动。这样一来,技能存在本身不再是重点,技能的状态变迁才是。换句话说,skills项目不应该是静态的“我会什么”,而应该是动态的“我现在学到哪、正在学什么、下一步补什么”。这个定位上的转变,决定了后面所有字段、模板和脚本的设计方向。
如果你也想维护一个技能管理项目,我建议你先别急着写内容,先问自己一个问题:我搞这个清单是为了应付简历,还是为了指导自己的真实行动?如果答案是前者,你会很快放弃;如果答案是后者,后面这套模型才对你真正有价值。
1.2 为什么技能树比技能列表更靠谱
人的认知是网状结构,但列表只能呈现线性关系。技能树天然更适合承载技能之间的关系。
首先是依赖关系。想学 Vue3 之前必须先有 HTML/CSS 和 JavaScript 基础;想学 Flink 之前必须理解流式处理。如果没有依赖边,你会出现“底层没铺好就往上盖楼”的情况。其次是优先级,技能树里的每个分支都有权重,贴近工作目标的分支应该优先点亮。再次是可拆分性,一个大技能可以被拆成多个叶子节点,拆着拆着,你就会发现自己所谓的“会”其实只覆盖了树的一小片区域。
我在第一版清单里写“数据分析”四个字毫无感觉,当我把它拆成“数据清洗、可视化、统计建模、指标口径设计”之后,才看清自己真正熟练的只有“可视化”。这个发现有点残酷,但也让我明白了:列表会让你产生“我已经会了很多”的错觉,树状结构则会不断逼你承认“我还有哪些树枝是空的”。对想长期成长的人来说,后者比前者重要得多。
1.3 这套方法适合谁,能解决哪些问题
skills项目的适用面比想象中宽。对个人,它是求职面试的底账;对团队,它是一张可量化的战斗力地图;对自由职业者和做内容的人,它能帮你在接单和选题时时刻清楚自己的能力边界。我身边有朋友用它做年度规划,把年初想提升的三项技能写在树上,年底回看树形图的变化,比写任何总结都直观。它最大的价值不是记录,而是把模糊的自我认知转化为可检索、可比较、可推演的数据结构。
如果你从未做过技能盘点,我的建议是先别学我这套,只管打开一个空白文件,列一份“我能做的事情”清单,哪怕只有十几条也足够。等这个动作重复两三周之后,再把清单迁移到结构化模板里。反之,如果你已经很熟悉自己的领域,那么请把重点放在依赖关系和证据这两件容易被忽略的事情上,因为这两件才是决定技能树能否长期更新、而不是变成一页死文档的关键。这套方法不挑行业,产品经理可以记录业务模型和需求分析技能,设计师可以记录用户研究和视觉表现,运维工程师同样可以为每个系统模块建立技能节点。
2. 核心方法拆解:技能建模的三个关键设计
2.1 技能分类体系:四个层级与粒度控制
整个项目最需要想清楚的,就是技能怎么组织。我参考“能力地图”的思路,把技能分成四个层级:领域 Domain、大类 Category、单项技能 Skill、子技能 Sub-skill。
| 层级 | 作用 | 示例 |
|---|---|---|
| 领域 Domain | 区分大的专业方向 | 前端开发、后端开发、数据、管理 |
| 大类 Category | 把领域内相似技能分组 | 框架、语言、工程化、运维 |
| 单项技能 Skill | 一项可以被独立评价的能力 | React、Vue、Node.js |
| 子技能 Sub-skill | 更具体的操作点 | Hooks、状态管理、SSR、性能优化 |
这个分类看似简单,实际操作中最大的难点是粒度控制。我的标准是:能够在简历上作为一行标题、能够在面试中用三分钟讲清楚一个案例,就算合适的粒度。过于抽象无法行动,比如“懂微服务”不是一个能维护的节点;过于具体又难以维护,比如“会用useState”单独成项就太碎了。你可以把它合并到“Hooks 使用”这个子技能里。
还有一个判断规则:如果某个子技能总是作为独立重点出现,说明它应该被升级为单项技能。比如我在做前端项目时,发现“性能优化”不再只是 React 下的一个技术点,而是贯穿在打包、渲染、接口设计里的核心问题,于是我就把它独立成项。这种“节点升级”本身也是技能成长的信号。
2.2 技能等级刻度:用行为特征代替形容词
很多人的技能表格都用“熟练、精通、了解”这类词,问题在于每个人对它们的定义都不一样。我自己定了一组行为化等级,实际使用效果比形容词稳定得多:
| 等级 | 名称 | 行为特征 |
|---|---|---|
| D | 了解 | 看过资料,能听懂别人讨论,但无法独立完成 |
| C | 入门 | 在参考文档或示例的帮助下能做成项目,但调试时间长 |
| B | 熟练 | 能独立完成常规任务,知道为什么这么做,能解释原理 |
| A | 精通 | 能解决边界问题、能优化性能、能在团队内带人 |
| S | 专家 | 能定义团队级实践、能抽象方法论、能对外输出 |
为什么不用数字 0 到 4?数字很适合量化,但缺少与行为的映射,时间一长你会忘记“2 分”到底意味着什么。行为化描述虽然麻烦,却能在每次盘点时提供稳定标尺。我给这张表取名叫“技能刻度尺”,每次打分前先看一遍,防止手一抖全给定成 B 以上。
更重要的是我给自己加了一条“举证才给分”的规则:一个技能要标到 B 或以上,至少要有两个项目实例支撑,其中一个要能说明你处理过非教科书场景。写“精通 React”可以,但你必须能列出两个不同场景的项目,并解释其中一个解决过状态管理或性能上的边界问题。如果只写过增删改查,那就老实待在 B 以下。这条规则看起来严苛,但长期看是在保护你自己,因为你不会因为简历上写得太高而恐慌,也不会因为面试提问超出安全区而翻车。
2.3 技能依赖关系:最小前置集怎么定
技能树如果没有依赖关系,就只是一棵静态的“知识科目表”。我的做法是给每项技能加一个prerequisites字段,记录学习它之前必须先掌握的东西。比如 Node.js 的依赖可能包括“JavaScript 基础”“HTTP 协议”“模块化思想”。在渲染时,可以用脚本把这些依赖画成有向图,如果有循环依赖就说明哪里定义错了。
但这里有个很容易踩的坑:依赖不要写太多。我最早的版本给每项技能列了七八个前置,结果看着整棵树全是未满足条件,根本不知道从哪开始,直接陷入“学无止境”的焦虑。后来我改成“最小前置集”原则,只列出不掌握就没法理解当前技能的项,整棵树的指向性立刻清晰了。比如学 React,最小前置集就是“JavaScript 基础”“DOM 操作基础”“ES6 常用语法”,不需要把“HTML 语义化”也塞进来。依赖越精简,你越容易找到自己的第一块拼图。
3. 实操过程:从零搭建你的 skills 项目
3.1 第一步:全量盘点与隐性技能挖掘
搭建技能树的第一步不是写模板,而是把你能想到的材料全部摊到桌面上。我推荐的动作是:把简历、OKR/绩效文档、项目记录、GitHub 仓库、学习收藏夹全部打开,凡是你能做、做过、学过的东西,先全文抄进一张草稿表。
但这时你一定会发现,技术技能容易写,隐性技能很难想起来。我用的方法是“项目倒推法”:不要直接想“我会什么”,而是列出最近 6 个月你参与过的所有项目、任务、甚至帮人解决的问题,然后问自己:如果这个环节换一个人来做,他需要具备什么能力?比如我给运营写过数据分析脚本,这里既有 Python 技能,也有“业务指标理解”这个隐性技能;再比如我帮团队设计过数据库表,那就不能只写“MySQL”,还要写“表结构设计”和“容量规划意识”。
这些技能在传统分类里不好归类,所以我专门建了一个领域叫“软技能与协作”,把沟通、复盘、文档、项目管理、培训都放进去。这一层经常被低估,但它恰恰是团队里最有价值的部分。盘点时不要追求一天做完,建议每天花 15 分钟,连续做一周,先把节点铺满,不要管分类和等级。就像搬家,先把所有箱子搬到客厅,再逐一归位,不要一边装箱一边贴标签。
3.2 第二步:用 YAML 把技能数据结构化
我试过用 Markdown 表格、Excel 和 Notion 来维护技能数据,最后选择了 YAML 作为主文件格式。原因是 Markdown 适合写但不适合查询,Excel 适合看但不适合版本管理,而 YAML 既容易阅读、又能被脚本解析,后续可以自动生成表格、树图、雷达图甚至简历片段。下面是我现在使用的精简模板:
- domain: 前端开发 category: 框架 name: React level: B status: active last_used: 2025-11-20 projects: - 个人博客后台 - 电商中台运营看板 prerequisites: - JavaScript/ES6 - HTTP 基础 - 组件化思维 next_action: 完成 SSR 项目实战并输出笔记字段不多,但足够支撑大多数复盘。status我用了三个值:active表示正在用,dormant表示暂时不用,learning表示正在学。next_action是整份数据里最重要的字段,它把“知道自己缺什么”变成“下次具体怎么补”。每次复盘时,我会先看这个字段有没有被更新,如果三个月都没动过,就说明这项技能的维护已经失去了意义。
如果你刚开始,不建议直接写这么复杂的 YAML。先在空文件里放 10 条你觉得最核心的技能,每个字段都填上,跑通一次“录入—查看—修改”的流程,再慢慢扩展到整个技能树。数据量超过 30 条以后,你可以给每条记录补上evidence字段,放项目链接或文章地址,作为技能等级的证据链。
3.3 第三步:可视化输出与技能图谱
结构化数据的好处是,你可以用脚本生成各种视图。我用 Python 读取 YAML 后输出 JSON,再配合 ECharts 生成雷达图和树图。核心逻辑不复杂,下面是一个最小示例,说明 YAML 解析后如何变成图表数据:
import yaml import json with open("skills.yaml", "r", encoding="utf-8") as f: data = yaml.safe_load(f) # 按 domain 统计 level 分布,用于雷达图 result = {} for item in data: d = item["domain"] result.setdefault(d, []).append(item["level"]) print(json.dumps(result, ensure_ascii=False, indent=2))可视化不是为了发朋友圈,而是为了扫一眼就发现自己身上的“偏科”和“空窗区”。我第一次生成雷达图,才发现“后端开发”的分布极其单薄,但简历上却写着“全栈”,这个视觉冲击比任何复盘表格都大。如果你不想写脚本,也可以用 Notion 的数据库视图或飞书多维表格,把 YAML 或 CSV 导进去,用分组、看板和雷达图功能实现类似效果。
这里有一个操作心得:图表视图不要做太复杂,信息密度太高反而会让你不想打开。我的主页上只有两个图,一个是按领域生成的熟练度雷达图,一个是按依赖关系生成的最小树图。够用就好。
3.4 第四步:月度复盘与持续迭代
建立仓库只是开始,真正的价值来自复盘循环。我的节奏是每月一次“30 分钟技能体检”,固定在每月第一个工作日早上。流程分四步:
第一步,看整体状态变化,对比上个月的领域雷达图,注意哪些方向在涨、哪些方向在缩;第二步,逐项检查active技能的last_used字段,超过 90 天未使用就考虑降级或改成dormant;第三步,更新next_action,至少让现在重点推进的三项技能有具体的下一步任务;第四步,调整分类结构,加入新学会的技能,删除重复或者已经并入其他节点的记录。
复盘不要太久,因为人在 30 分钟之后的判断质量会急剧下降。用这种固定节奏,我一年下来大概迭代了 1200 多条技能状态,但每次投入的时间成本非常低。更有意思的是,因为skills文件是存在 Git 仓库里的,每次提交记录都变成了我的成长日志,年底回看 diff,比任何周报都诚实。
4. 常见问题与排查技巧实录
4.1 盘点时总漏掉隐性技能怎么办
几乎所有人都会被这个问题卡住。最有效的办法不是凭空回忆,而是用“项目倒推法”加“求助记录法”。前者可以找项目里的环节,后者可以翻聊天记录、邮件、论坛回答,看看过去半年你都在帮别人解决什么问题。我发现自己的一项隐性技能,竟然是通过帮同事解释“为什么接口返回这么慢”才意识到的:这背后是“HTTP 缓存策略”和“接口设计意识”。这些技能没有挂在任何项目计划里,但它们确实构成了你的真实能力。
我更推荐的是建立“软技能与协作”这个固定领域,哪怕你一时想不起具体条目,也能在复盘时提醒自己:这个季度有没有做过跨部门沟通、有没有写过复盘文档、有没有带过新人?这些行动背后对应的都是可记录、可评估的技能节点。隐性技能一旦被写进skills,你就会更主动地使用它们,这是一种非常正向的自我暗示。
4.2 技能等级虚高怎么自检
等级膨胀是这类项目最容易出现的问题。我的解决办法是“举证才给分”,但这套规则在复盘时很容易被自己偷偷“网开一面”。后来我增加了一个红色警示:如果一个技能被标记为active且等级在 A 以上,但projects里少于两个近一年内完成的示例,就必须降级。这个规则不依赖我的主观判断,而是数据自动校验,能有效堵住自欺欺人的口子。
如果你已经在简历里写了比较高的等级,但心里清楚自己没到那个程度,怎么办?我的建议是不要急着改简历,而是用两到四周的时间,主动找这个技能相关的边界问题来做。做完之后,把项目记录补充到skills的projects字段里,验证自己是不是真的有资格保留这个等级。如果补齐实例之后还是觉得吃力,那就主动降级,好过面试时被一轮深挖问到卡壳。
4.3 技能树和工作完全脱节怎么处理
很多人建完技能树就放着吃灰,原因是技能树在设计时没有锚定真实工作。解决办法是把“下一步行动”直接挂到当前任务上。比如你在做后台系统,那next_action就写“在运营看板中实践状态管理工具 X”,而不是写“学习状态管理”。前者是工作场景里的真实反馈,后者是额外学习负担,执行意愿完全不一样。
另外,每季度可以把技能树和部门的业务方向对一遍。如果公司战略从 Web 转向终端,你的前端技能树就要相应增加终端方向的分类。我自己吃过一次亏,花了半年时间猛刷 Node.js,但当时的岗位根本用不上,反而耽误了真正需要的云服务技能。这个教训让我养成了“先看市场和业务需求,再改技能树”的习惯。技能树不是永久的,它应该跟着你的现实坐标不断调整。
4.4 没有外部压力时,靠什么维持更新
个人项目最难的就是自律。我的方法有两个。第一是“社交公开”:把技能仓库设为公开,在个人主页挂上可视化页面,偶尔发一条更新动态。公开之后你会觉得自己正在被围观,不好意思让数据一直停在三个月前,这种轻微的表现欲比任何打卡软件都有效。第二是把复盘变成一个仪式:准备一张固定的复盘清单,从“是否有技能标记为 learning”“哪些技能三个月没用过”“有没有隐性技能被忘记”等几个固定问题入手。仪式感不是形式主义,它是给大脑一个启动信号,让你不用纠结“今天要不要做”,而是直接进入执行状态。
5. 应用场景:从个人成长到团队协作
5.1 简历优化与面试准备
用skills项目维护的数据可以直接导出简历片段,因为等级、项目、最近使用时间都是现成的。我求职前会生成两个版本:完整版给自己看,简化版给公司看。简化版只保留目标岗位需要的active技能,每条配上最近项目作为证据。面试之前,我会重点刷自己标为 A 和 B 的技能;凡是标为 D 和 C 的,绝对不主动写进简历。
这个策略帮我避开了很多“看起来全能但一深挖就空”的尴尬。面试官经常问“你最近在学什么”,这时候你仓库里learning状态的技能就是最诚实的答案,结合next_action说一下自己的学习计划,会让对方觉得你是一个有方法的人。比起背一堆面经,维护自己的技能数据更像是“长期主义的外挂”。
5.2 团队技能矩阵与人才盘点
如果你是技术 Leader 或者项目负责人,可以把这套方法搬进团队。具体做法是让每位成员维护自己的skills文件,然后合并生成一张技能矩阵。矩阵的行是成员,列是技能,颜色深浅对应熟练度。有了这张矩阵,排任务时你就不再只看“谁有空”,而是“谁会且最有把握”。
我在团队里推广之后,最大的收益不是数据准确,而是大家学会了用统一语言讨论“会不会”,把“我不会”变成“我还没点亮这个节点,需要两个项目的练习机会”。这比口头评估公平得多,也更容易激发出学习意愿。要注意的是,团队场景有隐私问题,我的落地方式是自动化导出外部可见版本时,忽略next_action等纯个人字段,只保留技能等级和项目名称。
5.3 用 AI 辅助学习路径规划
技能树最被低估的用法是生成学习路径。当你有了一棵带依赖关系的技能树,你就能获得一条从当前 level 到目标 level 的可行路径。我给一位初级同事做过这样的规划:他想走数据工程方向,我先看他的技能树,发现 Python 是 B 但 SQL 只有 C,于是把“SQL 进阶”设为第一步,并指定了两个学习资源。
最近两年,我还开始结合 AI 工具辅助这一步:让 AI 根据我的skillsYAML 推荐下一阶段练习项目,或者把我写的一段next_action展开成可执行的周计划。当然,AI 的输出只能作为素材,最终路径必须由人来判断,因为它不了解你工作中真实约束。我的原则是:AI 负责出题和找资料,人负责选择和坚持。如果你也在用类似方式,记得把 AI 推荐的资源带回skills的projects或next_action,让循环继续转起来。
5.4 对外接单与个人品牌的技能边界
自由职业和内容创作其实更需要一个准确的技能边界。我第一次接私单时,对方让我做“一个能用的系统”,我以为就是写接口和前端页面,结果还需要设计数据库、部署服务器、配置监控,每一项都是一整块技能。后来我才学会先打开自己的skills,看看哪些技能是 B 以上,哪些只是 C,再决定这个单子怎么报价、怎么找搭档。
如果你也在做个人品牌,技能树还能帮你规划内容选题。我通常会把learning状态的技能作为内容方向,因为边学边写是最快建立权威感的方式。写出来的文章顺手又成为这个技能的evidence,一举两得。对我来说,skills项目已经不只是个人工具,它同时是报价单的管理后台。
6. 最后分享几个实操细节
最后聊几个我踩过坑之后总结出来的小细节。
第一,不要追求一次到位。你的技能树一定会在三个月后长得面目全非,这不是失败,而是因为你有了新的认知。
第二,一定给每一项 active 技能保留一条“证据链”,无论是文章链接、代码仓库还是项目截图。没有证据的熟练度都是想象,它在面试和实际协作中都不可靠。
第三,把skills项目当成一个长期陪伴的笔记本,而不是求职季的突击工程。每天做选择时,你都会问自己“这个任务对我哪一项技能有推进”,答案自然会引导你往长期价值上倾斜。
第四,如果实在坚持不下来,就降低复盘的粒度。连续三个月只更新 5 项技能,也比一次性写 100 项然后再也不碰要好。小步慢跑,好过心血来潮。