开发者为什么该用 YAML 写简历:git 版本控制、双语同步、CI 自动构建 PDF

· 约 5 分钟 📋 简历生成器

程序员维护简历的现状:每次更新打开 Word,复制旧版本,改一遍,导出 PDF,重命名 resume_v3_final_final.docx。两个月后想知道”3 月份改了哪一条”——不知道。中英双版同步——一周后发现内容偏差。换模板——重新排版 4 小时。

这些痛点本质都是没用版本控制。把简历当代码项目对待,git + YAML 一次解决全部。

Word 维护简历的 5 个工程性痛点

痛点WordYAML + git
历史可追溯final_v3_v4.docx 文件名打架git log 一眼看每次改动
内容 diff二进制无法 diff一行 diff 看清改动
多版本管理多个 docx 副本,容易投错分支 / tag 隔离
双语同步改一份忘一份git diff 强制提醒
模板与内容耦合内容嵌在排版里,改模板要重排数据 / 渲染分离

最后一条最关键——Word 简历里的”内容”和”排版”是焊死的。换主题 = 重新做一份。YAML 简历里字段名是稳定接口,喂给不同模板渲染器即可。

YAML + git 的标准工作流

仓库结构

resume/
├── resume.zh.yaml      # 中文主版
├── resume.en.yaml      # 英文主版
├── README.md           # bio 概述 + 项目链接
├── exports/            # 历史 PDF (.gitignore 进 exports/*.pdf)
└── .gitignore

commit 规范(仿 conventional commits):

git commit -m "feat(experience): add Doubao MoE pretraining role"
git commit -m "docs(skills): bump from Webpack to Vite"
git commit -m "fix(date): correct internship end month"
git commit -m "refactor(summary): tighten phrasing for senior pitch"

半年后用 git log --oneline 能一目了然每次改动的意图。

多版本投递——用分支:

git checkout -b branch/anthropic
# 强化 LLM alignment 经历,淡化早期 Web 项目
git commit -am "tailor for Anthropic Member of Tech Staff"
# 投递使用这条分支生成 PDF

不同岗位拉不同分支,main 保持基线,cherry-pick 通用改动。

把简历放公开 GitHub 的隐私边界

完全公开仓库 = 任何人能扒到联系方式 → 爬虫 / 骚扰电话 / 已知漏洞针对。

3 种处理策略

策略适合牺牲
完全 public + 脱敏主动求职、想被 HR 主动联系当前在职信息暴露
public 概述 + private 完整大多数情况投递时要切仓库
完全 private在职被动求职失去 social proof

脱敏推荐做法

basics:
  name: Lin Zixuan
  email: linzixuan.public@gmail.com  # 不用工作邮箱
  phone: ""                           # 留空,需要时邮件索取
  location: 北京                       # 城市级别即可,不写区

README.md 里直接写:“完整简历请发邮件至 X”——主动权在你手里。

额外信号:维护良好的 GitHub 简历仓库本身是”会用 git / 重视工程素养”的证明,比简历里写”熟练使用 git”强 10 倍

用 GitHub Actions 自动构建 PDF

每次 push → 自动出 PDF → 投递时拉 release:

# .github/workflows/build-resume.yml
name: build-resume-pdf
on: { push: { paths: ['resume.*.yaml'] } }
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npx playwright install chromium
      - run: node scripts/render-pdf.js  # 调用浏览器打开工具页 → print to PDF
      - uses: actions/upload-artifact@v4
        with: { name: resume-pdf, path: '*.pdf' }

每次 commit 都有最新 PDF 可下载,避免”投递前忘了导出新版”。

不同岗位的简历重点

                    突出                            弱化
前端工程师          性能 / 可访问性 / 设计系统      后端服务设计
后端工程师          系统设计 / 高并发 / DB 优化     UI 细节
DevOps              可观测 / SLO / 故障复盘         业务功能
全栈工程师          端到端 product 思维             单一深度
ML / 算法工程师     量化指标 / 论文 / 模型规模      Web 框架知识
DevRel              OSS 影响 / 社区 / 写作产出      内部业务系统
独立开发者 / SaaS   ARR / 用户量 / 端到端交付       团队协作经验

同一份基线 YAML,针对不同岗位 cherry-pick 不同 highlights:

# branch/frontend
experience:
  - company: 字节跳动
    highlights:
      - 主导抖音电商前端基建升级,构建时长 9min → 3.5min
      - 推动 SSR 改造,落地页 LCP 3.2s → 1.4s

# branch/devops
experience:
  - company: 字节跳动
    highlights:
      - 设计前端 CI 流水线,构建时长 9min → 3.5min,并发 build 队列时间 -70%
      - 推动可观测体系建设,前端 SLO 制定 + 故障定位时间 4h → 25min

同一段经历不同切片——HR 拿到的是岗位最相关的版本。

开发者简历的 6 个加分项

  1. 项目 URL 必填——HR 真的会点。name: 我的开源框架 没 URL = 不存在
  2. 量化代替形容词——持续维护380 PRs / 38 contributors / 月均 12 个 issue closed
  3. 挑岗位匹配的 15-20 个技能,不堆 50 个名词——堆砌反而显得”会得多但都不深”
  4. 写「PR 数」代替「项目数」——前者证明你”能融入工程流程”,后者只证明你”能 setup repo”
  5. 链接到博客 / 个人站——HR 真的会读,写作能力是隐形加分
  6. GitHub contribution graph 截图(可选)——绿格密度本身是 signal

ATS 兼容的 PDF 输出

PDF 输出方式简表(详见另一篇 AI 简历教程):

  • 浏览器打印 → PDF(本工具采用):矢量、文字层完整、ATS 可解析、文件 < 100KB
  • LaTeX → PDF(RenderCV 走这条路):同上 + 印刷级排版,但需要本地 LaTeX 环境
  • ⚠️ Word → 导出 PDF:可用,但中文字体替换风险
  • html2canvas / jspdf 截图模式:一张大图,ATS 完全读不到 → 海外大厂秒拒

测试方法:PDF 阅读器里 Ctrl+F 搜公司名 / 技能名 → 能高亮 = ATS 能解析。

最后:工程师”应该”用工程方法做事

写简历是一次自我”推销”——但本质也是数据维护问题。把它当代码项目对待:版本控制、双版同步、CI 自动化、模板换皮,每个环节都用程序员熟悉的工具解决。

1 小时初始化 git 仓库 + YAML 写法 = 此后每次更新只花 5 分钟,远少于 Word 拖拽改格式的时间。

❓ 常见问题

简历公开放 GitHub 仓库会不会泄露隐私?

会,但有标准应对。直接 push 含手机号 / 邮箱 / 当前在职公司的 YAML 是大忌——爬虫会扒、面试官会搜、HR 会用之前面试笔记反查。正确做法:(1) public repo 放脱敏版——电话写 +86 138 0013 ** 或干脆删掉,用 GitHub 邮箱代替私人邮箱;(2) private repo 放完整版——投递时按需导出;(3) README 只放概述 + 链接,敏感字段在 .env 或 git-crypt 加密的 yaml 里。额外好处:HR 看到一个正经维护的 GitHub 简历仓库,本身就是"会用 git"、"有工程素养"的证明,不需要在简历里写"熟练使用 git"。避坑**:(1) 别 commit .env、个人邮件草稿;(2) 别 push 还在协商的 offer / 薪资;(3) 切换公司前先把当前公司的 highlights 改成 [redacted] 再公开。

简历该用 markdown 还是 YAML?

结构化用 YAML,正文用 markdown——两者各有所长。YAML 优势:字段强制结构化(公司 / 职位 / 起止 / highlights 字段名固定),diff 友好(改一处就一行 diff),换模板不影响内容(同一份 YAML 喂给不同模板渲染)。markdown 优势:写自由长文(cover letter、博客)方便,内联格式(粗体 / 链接 / 代码块)所见即所得。实务:(1) 简历主体用 YAML,因为字段固定、HR 关心的就是这些字段;(2) highlights 内容字符串里允许 markdown 内联粗体 / link),保留表达力;(3) cover letter / portfolio README 用 markdown。反模板:用纯 markdown 写简历——版式一改就要重新缩进 / 重排,YAML 字段名才是稳定接口。

GitHub 个人主页能代替简历吗?

不能完全代替,但可以做主战场。GitHub 个人页(github.com/<user> README)的优势:(1) 一直有,不用单独维护 PDF;(2) 可以放 pinned repo 突出代表作;(3) GitHub 自带的 contribution graph 是最强 social proof。劣势:(1) HR 系统(ATS)抓 PDF 简历,不抓你的 GitHub README;(2) 个人页内容长度受限,不适合放 5+ 段经历;(3) 投递时仍要给一个 PDF 附件。最佳实践:GitHub 个人页是"门面"——精挑 1-2 个项目、写好 bio、放邮箱链接;正式投递走 PDF 简历。两者互相补充,不互相替代。特殊岗位:DevRel / OSS 维护者岗位 → GitHub 主页比简历重要 10 倍;做产品 / 业务 → 简历 + LinkedIn 比 GitHub 重要。

跳槽频繁(< 1 年一跳)怎么写不让 HR 怀疑?

不要隐瞒,要主动解释。隐瞒只会让背调时崩盘——HR 拿到工作年限不一致的两份信息,直接黑名单。3 种合理写法:(1) 明确标注合同性质Apple Inc. (合同制 / 6 个月) 比裸写日期诚实;(2) 解释外部原因:公司倒闭 / 业务线砍掉 / 合并裁员,写在 highlights 里 → "公司战略调整裁撤整组,转岗";(3) 强调主动选择 + 成果:跳槽是因为完成了里程碑("参与发布 v1 后转向更挑战的岗位")。反例:连续 3 年每 8 个月一跳但每段都写一堆光辉成果——HR 会问"既然这么牛为什么要跳"。实务:跳得多的话,早期短经历可以合并写(比如把 2 段 6 个月经历合成一段"2019-2020 自由顾问 / 多项目"),成熟期长经历单独写。

副业 / freelance / 个人项目放工作经历还是项目板块?

有客户 / 有营收 → 工作经历;纯爱好 → 项目板块。判断标准是"对方付钱过吗"+"持续多久"。工作经历的门槛:(1) 有正式合同 / 发票 / 付款记录;(2) 持续 3 个月以上;(3) 输出物对客户业务有可量化影响。反例:写"独立开发者,2020 至今"但没说做过哪些项目 → HR 看作"没工作的间歇期";正例:写"独立开发者 2020 至今 / 服务 5 家中小企业 SaaS / 累计 ARR $80K"——具体 + 量化。项目板块:(1) 个人 demo、学习项目;(2) 开源贡献(不是主导,是贡献者);(3) 黑客松作品。模糊地带:(1) 给朋友/家人做的免费项目 → 项目板块;(2) Side project 后来商业化 → 看进展,开公司了就工作经历,还在原型期就项目板块。

用 LeetCode 排名 / Codeforces rating 作亮点 OK 吗?

应届 / 校招 OK,社招大多别写校招:算法竞赛是有限的"公平 signal",HR 没办法 30 秒判断你的代码能力,竞赛排名是廉价代理。LeetCode > 1500 题 / 周赛全球前 5%、Codeforces > 2000 分(CM 以上)、ACM 区域赛金银牌——可以列。社招:(1) 工作 3 年以上还在写"LeetCode 1500 题"——HR 会问"那你工作做了什么";(2) 算法岗 / 面试官岗 → 适合保留;(3) 普通工程岗 → 用工作业绩替代。避坑:(1) 别写不可验证的数字("全球前 5%" 而不写具体 rating);(2) 别把 OJ 排名当主要卖点 → HR 心里"这是个考试机器,不是工程师";(3) 把竞赛精力转化成开源 / 项目作为亮点更值钱。

简历有小错(typo / 时间格式不一致)发现后该重投吗?

单字 typo 不重投,结构性错误重投。重投会让 HR 系统标记你"两份简历"——可能被自动去重也可能造成混乱。单字 typo / 标点错误:忽略,HR 一秒带过;事实性错误(公司名拼错 / 职位名错 / 时间错 1 年以上):发邮件给 HR/招聘官说明 + 附正确版本;结构性问题(投错版本:英文岗投了中文版 / 错版本号 / 缺少关键板块):邮件道歉 + 重投。避免重投陷阱:(1) 本地预投自检流程:导出 PDF → 关掉编辑器 → 用阅读器从头读一遍;(2) 不同岗位用不同 base 改造,但每次投前 diff 检查;(3) 时间格式不一致 → 用 Jan 20242024.01 二选一并锁定。实务:投递前找朋友帮看 5 分钟,比自己刷 5 遍发现得多。

开源贡献 vs 个人项目,哪个更打动 HR?

取决于贡献的"质"和"被使用的范围"开源贡献的优势:经过 PR review,代码质量有 social proof;进入主流项目(React / Linux / TS / kubectl)即使是小 PR 也有"我跟世界级代码协作过"的背书。个人项目的优势:体现端到端 product 能力——选题、设计、实现、推广全包;可以集中体现技术广度(前后端 + DevOps)。HR 视角排序(高 → 低):(1) 主流项目 maintainer 角色(top 10% contributor);(2) 自有项目 > 1k stars / 真实用户量;(3) 知名项目零星 PR;(4) < 100 stars 的练手项目。实战建议早期工程师(< 3 年)个人项目权重高——证明"我能从 0 做出东西";资深工程师(5 年+)开源贡献权重高——证明"我能融入大团队"。两者都做最强,但时间有限的话按阶段选。

📋 打开 简历生成器 YAML 编辑·实时预览·A4 打印为 PDF·中英双栏·全程本地

📖 同一工具的其他教程