<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Engineering Manager · 仁才德</title>
    <link>https://jared.lynskey.co.nz/zh-cn/tags/engineering-manager/</link>
    <description>关于软件工程与研发团队领导力的短文——绩效评估、招聘与团队扩张、CI/CD、DevOps 监控、智能体 AI。写于首尔。</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <copyright>© 2026 仁才德</copyright>
    <lastBuildDate>Sat, 07 Nov 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/zh-cn/tags/engineering-manager/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>在韩国当软件工程师：一半的工作是눈치（察言观色）</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2026/2026-10-22-software-engineer-in-korea/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2026/2026-10-22-software-engineer-in-korea/</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +1300</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>korea</category>
      <category>Seoul</category>
      <category>career</category>
      <category>Nunchi</category>
      <category>communication</category>
      <category>culture</category>
      <category>Engineering Manager</category>
      <category>Hiring</category>
      <category>leadership</category>
      <category>startups</category>
      <category>Freelance</category>
      <category>new zealand</category>
      <description>一个 2019 年起在首尔工作的新西兰人，讲在韩国当软件工程师是怎么回事：工程能力走到哪儿都通用，但工作的一半是눈치（nunchi），不用别人开口就读出场合想要什么。它是什么，为什么「optics」是错的翻译，它在开发团队里出现在哪儿，我成了被读的经理之后有什么变化，以及我想对考虑来韩国的人说的话。</description>
      <content:encoded><![CDATA[<p>我从 2019 年开始在韩国做软件：一家研究公司、两家初创公司、二十个月的工程经理，2025 年 10 月起做自由职业。工程能力走到哪儿都通用，Web 后端才不管你是从哪个国家部署的。没人告诉你的是，工作的另一半是눈치（nunchi）。这个韩语词说的是不用别人开口，就能读出场合想要什么，跟中文的「察言观色」很接近。没人告诉你的原因也简单：真要说出口，就不叫눈치了。</p>
<p>我是住在首尔的新西兰人。这篇写的是从内部看到的韩国开发现场，坐在招聘桌两边看到的东西，以及我想对考虑来韩国工作的人说的话。</p>

<h2 class="relative group">我是怎么来的
    <div id="我是怎么来的" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e6%98%af%e6%80%8e%e4%b9%88%e6%9d%a5%e7%9a%84" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>入口是读研。在新西兰怀卡托大学读完本科，又在一家电信公司做了一年网络运维之后，我于 2017 年 3 月到 2019 年 2 月在庆熙大学读计算机科学硕士。实验室每学期都会去参加韩国国内的两个计算机学术会议 KSC 和 KCC。2018 年在平昌举办的 KSC，赞助商里有好几家韩国大型科技公司，还设了面向求职学生的招聘展位。如果你是在韩国读研的外国学生，这一点值得知道。</p>
<p>之后的经历是这样的：</p>
<table>
	<thead>
			<tr>
					<th style="text-align: left">时间</th>
					<th style="text-align: left">职位</th>
					<th style="text-align: left">公司</th>
					<th style="text-align: left">做的事</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">2019 年 6 月 – 2020 年 6 月</td>
					<td style="text-align: left">研究主任</td>
					<td style="text-align: left">一家计算机视觉研究公司</td>
					<td style="text-align: left">在游戏引擎里生成训练数据，以及一个可再生能源监控的界面</td>
			</tr>
			<tr>
					<td style="text-align: left">2020 年 6 月 – 2022 年 9 月</td>
					<td style="text-align: left">全栈开发</td>
					<td style="text-align: left">一家客服 SaaS 初创公司</td>
					<td style="text-align: left">客服平台本身，以及它的云基础设施和 CI/CD</td>
			</tr>
			<tr>
					<td style="text-align: left">2022 年 9 月 – 2024 年 2 月</td>
					<td style="text-align: left">全栈开发，代理负责人</td>
					<td style="text-align: left">一家创作者平台初创公司</td>
					<td style="text-align: left">一个内容创作者平台和一个社区应用，后端用 Python、Rust 和 Java</td>
			</tr>
			<tr>
					<td style="text-align: left">2024 年 2 月 – 2025 年 10 月</td>
					<td style="text-align: left">工程经理</td>
					<td style="text-align: left">首尔一家软件公司</td>
					<td style="text-align: left">带一个工程师团队，从定范围一直到上线的交付</td>
			</tr>
			<tr>
					<td style="text-align: left">2025 年 10 月至今</td>
					<td style="text-align: left">DevOps / MLOps 工程师</td>
					<td style="text-align: left">自由职业</td>
					<td style="text-align: left">本地部署的基础设施：高可用 PostgreSQL 和 LLM 推理服务</td>
			</tr>
	</tbody>
</table>
<p>工程是熟悉的那一半。在那家客服初创公司我才明白，交付软件的很大一部分其实是运维；创作者平台的后端跑在比我今天会选的多得多的技术栈上。韩国特有的差别都在边边角角。Naver 是你必须在意的搜索引擎：我给 Kiwi Alumni 上线新网站的时候，SEO 是按 Google 和 Naver 两边一起做的。韩国平台的爬虫名字你很难猜到（Naver 的爬虫叫 Yeti，KakaoTalk 的链接预览来自一个叫 kakaotalk-scrap 的东西）。还有，韩国的网上银行到现在还要你在电脑上装它们自己的安全软件。</p>
<p>不过这些都不是难的部分。</p>

<h2 class="relative group">눈치是什么，为什么不是「optics」
    <div id="눈치是什么为什么不是optics" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%88%88%ec%b9%98%e6%98%af%e4%bb%80%e4%b9%88%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%8d%e6%98%afoptics" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>눈치是一种感觉：不靠别人说了什么，而是从情境里察觉别人在想什么、要什么、期待什么。눈 是「眼睛」的意思。用 2019 年的《The Power of Nunchi》一书把눈치介绍给英语世界的 Euny Hong，把这个词译成「eye-measure」，也就是「用眼睛量」。它出现在不少日常说法里。说一个人「눈치가 빠르다」（눈치快），是说他很会看场合；说一个人「눈치가 없다」（没有눈치），是说他完全看不懂，这可不是夸人。而「눈치를 보다」（看눈치）是一直留意别人的反应，通常是上级的，好让自己站在不被讨厌的那一边，相当于中文的「看眼色」「看脸色」。</p>
<p>英语里大家这时候会拿出来的词是「optics」，我觉得用错了。optics 讲的是不管实际如何，从外面看起来怎样，比如「在裁员的同一周宣布发奖金，optics 很难看」。它关乎外表，管理它的是被看的那个人。눈치大多指向相反的方向：重点不是你在别人眼里怎么样，而是你把别人看得有多清楚。两者唯一的交点是「눈치를 보다」：观察所有人，好管理自己在他们眼里的样子。外媒写韩国职场时写到的，正是这个版本。</p>
<p>那些文章举的例子大同小异：不要比组长先下班，真要休年假（연차）时得看的눈치，聚餐（회식）时什么时候可以走，以及要反驳上级的话，是在会上说还是会后私下说。不管你怎么看这些例子，它们的形状是一样的：每一条都是所有人都遵守、却没人说出口的规矩。</p>
<p>而且这和语言是两回事。韩语在话里，눈치在话以外的一切里。</p>

<h2 class="relative group">눈치在开发团队里出现在哪儿
    <div id="눈치在开发团队里出现在哪儿" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%88%88%ec%b9%98%e5%9c%a8%e5%bc%80%e5%8f%91%e5%9b%a2%e9%98%9f%e9%87%8c%e5%87%ba%e7%8e%b0%e5%9c%a8%e5%93%aa%e5%84%bf" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>开发团队靠的正是这种形状。第一次当经理几个月后，我写了<a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-05-05-team-norms/" >一篇关于团队规范的文章</a>，开头是这样的：我处理的摩擦大多不是技术问题，而是大家对一些事各有各的默认假设，比如代码评审该多快回、「完成」到底指什么、催第二次算不算没礼貌。那时我没用这个词，但那张清单每一行都是눈치要读的东西。每一条都是团队心照不宣的约定，新人只能靠观察学会。</p>
<p>同一篇里我还抱怨过，新人学规范是「当成口口相传的民间故事」，而不是在入职时被明确告知；也抱怨过跨国团队默认自己的标准就是所有人的标准。要描述눈치靠什么运转，我找到的最好的英语词就是 folklore，民间故事。如果团队里只有你一个外国人，偏离标准的就是你，而那些「故事」哪儿都没写下来。</p>
<p>代价最大的地方是站会。2023 年我写过<a href="https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-09-23-reactive-vs-proactive-communication/" >自己负责的一个项目落后了</a>，我却一直等着有人来问。三周后终于有人问了，那时已经是一场灾难。눈치好也解决不了这个问题。会看场合，你就知道哪些话没人想听；可它不会告诉你照样要说。我从中得到的习惯正好和等待相反：在别人问之前，先用文字说出来。「这件事比我预想的要久，现在估计要 8 到 10 天，不是 5 天。要砍范围，还是推迟截止日期？」</p>

<h2 class="relative group">当你成了被读的那个人
    <div id="当你成了被读的那个人" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bd%93%e4%bd%a0%e6%88%90%e4%ba%86%e8%a2%ab%e8%af%bb%e7%9a%84%e9%82%a3%e4%b8%aa%e4%ba%ba" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>2024 年 2 月，我开始在首尔一家软件公司带一个工程团队，눈치的方向就此反了过来。当开发的时候，是我在看场合；当了经理，我自己就是场合。我在会上说了什么、没说什么，回消息有多快，几点下班，全都成了别人可以读的东西。</p>
<p>我当项目负责人时写过的很多东西，当了经理之后更加适用。如果大家不敢放心地告诉你哪里出了问题，<a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-01-02-engineeringmanager/" >你就会是最后一个知道的人</a>。<a href="https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-09-25-transperency/" >信息捂得太久</a>，大家是能感觉到的，你留下的沉默会被小道消息填满。会上五个人等着你回答时，<a href="https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-10-13-i-dont-know/" >「我不知道」感觉像是失败</a>，而这恰恰是它值得说出口的原因。还有我反复想起的一句话：别人读不到你的意图，只读得到你的话。在一个靠눈치运转的团队里，他们照样会去读：读你的表情、读你跳过了什么、读你几点走。所以最好少给他们留猜的余地。</p>
<p>我靠的都是些不起眼的做法。和每个人做一对一，聊的是这个人而不是这个 Sprint，再问一个能解决大部分问题的朴素问题：「有没有什么需要我或者团队帮忙，好让你的工作更顺利？」</p>
<p>一份简短的团队规范，三到五条，写在所有人都看得到的地方，包括经理违反了规范会怎样。主动去问那些在八个人的会上永远不会开口的人，而不是等他们开口。再就是用一句坦白的「不行，原因是这样」，代替一句之后再也不会被提起的「再看看」，因为含糊的回答只是又多了一件需要察言观色的事。我入职一个月左右时，<a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-03-03-product-team-outing/" >产品团队的团建</a>是从一家咖啡馆开始的，先做了一个关于彼此价值观和团队规范的工作坊。一家公司能给눈치的回答，很少有比这更直接的：花一整个上午，把平时不说出口的东西说出来。</p>

<h2 class="relative group">作为外国人被招进去
    <div id="作为外国人被招进去" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%9c%e4%b8%ba%e5%a4%96%e5%9b%bd%e4%ba%ba%e8%a2%ab%e6%8b%9b%e8%bf%9b%e5%8e%bb" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>我没有一套针对韩国求职的打法。我有的是招聘经理那一边的经验，由此得出的建议，就是在签合同之前，先对公司用一用눈치。</p>
<p>我当经理招人的时候，最想招的开发者从来不在招聘网站上；而且<a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-07-01-internships/" >我以前也写过</a>，创始人更愿意招自己已经共事过的人。所以最好的入口，是任何能让别人在招你之前先看到你怎么干活的地方。小公司的实习经常会悄悄变成一份正式工作邀约。黑客松能让人看你一整个周末：2023 年，我和另外三个人组队，拿下了由 Lunit Global 主办的 Seoul Tech Impact Hackathon 冠军，做的是一个应用，用来找韩国那些没有地址的路边小吃摊。</p>
<p>然后是<a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-07-12-coffee-chats/" >咖啡聊天</a>。我写过，一个人在轻松的聊天里怎么表现，比一场排练过的面试更能说明和他共事是什么样子，而且这是双向的。对候选人来说，这是进去之前读懂一个团队的唯一机会。如果坐在候选人的位置，我会问：团队现在面临的最大挑战是什么？你为什么加入，又是什么让你留下来？在这里工作有什么可能会让我意外的事？最后一个问题，是在礼貌地请对方提前把눈치告诉你。如果对方在人员流动或公司方向的问题上含糊其辞，这本身就说明了很多。</p>

<h2 class="relative group">如果你要招外籍开发者
    <div id="如果你要招外籍开发者" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e6%9e%9c%e4%bd%a0%e8%a6%81%e6%8b%9b%e5%a4%96%e7%b1%8d%e5%bc%80%e5%8f%91%e8%80%85" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>如果你在韩国带团队，准备招一个从别的地方来的开发者，最有用的一件事就是那篇团队规范文章里的一句话：把隐性的东西变成显性的。别让他们把你的规矩当民间故事去学。第一周就告诉他们：评审一般多久回、「完成」指什么、催第二次算不算没礼貌、大家实际几点下班、休假除了填表还有没有别的讲究。最后两条是典型的눈치问题，团队里的人连想都不会想到要说。</p>
<p>之后就是一些让人少猜一点的无聊习惯。在别人问之前先说：周五给相关人员发一封三行的邮件（这周上线了什么、接下来做什么、有什么担心的），只要十分钟。会上别等安静的人开口，直接去问他们。给真正的答复，包括「不行」，并且附上理由。还有，用同样的问题、同样的评分标准面试每一个候选人。这一条我花了些时间才学会，但这是公平比较人的唯一办法，否则你会偏向最近聊过的那个人。这也意味着，不懂你团队潜规则的候选人，和懂的人被问到的问题一模一样。</p>

<h2 class="relative group">这里的新西兰社群
    <div id="这里的新西兰社群" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%bf%99%e9%87%8c%e7%9a%84%e6%96%b0%e8%a5%bf%e5%85%b0%e7%a4%be%e7%be%a4" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>2018 年我还是学生的时候，在 Kiwi Chamber 的一场领导力早餐会上负责拍照，事后写道，我非常喜欢为促进两国关系的活动做志愿者。2020 年 1 月起，我担任 Kiwi Alumni 的主席。这是一个面向在韩新西兰人，以及在新西兰读过书、如今在韩国生活工作的人的社群。这是志愿职位，大部分是和人打交道的工作：组织活动，和新西兰驻韩大使馆及各教育机构建立关系，还有一些不起眼的活儿，比如新 logo，比如一个会员真能找到东西的网站。2023 年我们和大使馆一起办了 <a href="https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-09-22-kiwi-alumni-my-role/" >Kiwi Alumni Night</a>，还上了 KTV。</p>
<p>那晚之后我写下的一句话，最接近这篇文章的主旨：在韩国和新西兰都生活过的人，知道怎么在两者之间架桥，因为两种文化他们都经历过。如果你来韩国工作，不管你来自哪里，去找这样的人。他们会用大白话告诉你，那个场合到底在说什么。</p>

<h2 class="relative group">在首尔做自由职业
    <div id="在首尔做自由职业" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8%e9%a6%96%e5%b0%94%e5%81%9a%e8%87%aa%e7%94%b1%e8%81%8c%e4%b8%9a" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>辞掉经理的工作后，我在 2025 年 10 月开始做自由职业。实际做的是合同制的 DevOps 和 MLOps 工作，大多是本地部署：先搭了一个高可用 PostgreSQL 集群，然后在同一批硬件上搭 LLM 推理服务。做下来发现，质量把控比铺管道多：盯着 trace 和多轮对话，找模型输出从哪里开始跑偏。2026 年 2 月起，我还在另外做一款自己的集市加社区应用。</p>
<p>做自由职业并不能让你摆脱눈치，只是换了要读的对象。不管到哪个团队，我最先看的都是监控，因为它比 README 更能说明一个团队。这算是对系统用的눈치：读的不是团队说自己在做什么，而是它实际在做什么。</p>

<h2 class="relative group">想对考虑来韩国的人说的话
    <div id="想对考虑来韩国的人说的话" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%83%b3%e5%af%b9%e8%80%83%e8%99%91%e6%9d%a5%e9%9f%a9%e5%9b%bd%e7%9a%84%e4%ba%ba%e8%af%b4%e7%9a%84%e8%af%9d" aria-label="锚点">#</a>
    </span>
    
</h2>
<ol>
<li>从一扇能让人在招你之前先看到你干活的门进来。我走的是读研这条路。黑客松、小公司的实习，或者你自己国家在这里的社群，作用都一样；而在社群里，你能找到两边都生活过的人。</li>
<li>别把小公司排除在外，我职业生涯的大部分时间都在小公司。十个人的公司里，没人可以让你把无聊的活儿推给他，而你做的东西真的会上线。</li>
<li>加入之前先读懂团队。用好咖啡聊天，问问在这里工作有什么会让你意外的事，对方在人员流动上含糊其辞，要当回事。</li>
<li>别等别人来问。估算要延期、改动有风险、别人在等你做决定：先说，用文字说。</li>
<li>把没写下来的规矩大声问出来：评审多久回、「完成」指什么、催第二次算不算没礼貌。如果没人写下来，主动提出你来写。</li>
<li>学会你技术栈周边的那一圈。在这里，Naver 和 Kakao 的重要性，是你的 Google 习惯覆盖不到的。</li>
</ol>
<p>工程是你来之前就能准备的那一半。눈치是你在工作中才学得会的另一半，而我知道的最快的学法，是请别人把没说出口的那部分说出来，并且自己先说。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2026/2026-10-22-software-engineer-in-korea/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>咖啡聊天（Coffee Chat）是什么？和面试有什么不同，该问些什么</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-07-12-coffee-chats/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-07-12-coffee-chats/</guid>
      <pubDate>Fri, 12 Jul 2024 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Engineering Manager</category>
      <category>Team</category>
      <category>People</category>
      <category>Team Size</category>
      <category>Scaling</category>
      <category>Efficiency</category>
      <category>Talent Scouting</category>
      <category>Coffee Chat</category>
      <category>Recruitment</category>
      <category>Hiring</category>
      <category>Culture Fit</category>
      <category>Networking</category>
      <description>咖啡聊天（coffee chat）是在咖啡馆或视频通话里进行的 30–45 分钟非正式对话，用来看双方值不值得深谈，它不是面试。为什么它成了我认识开发者最好用的方式，我怎么安排、问些什么，如果你是被邀请的一方该穿什么、聊什么，以及人们把它搞砸的几种方法。</description>
      <content:encoded><![CDATA[<p>我最想招的开发者从来不在招聘网站上。他们正埋头做自己的产品，对现状还算满意，对猎头消息保持着理所当然的警惕。今年转做工程管理之后，我用来认识这些人的工具简单得有点不好意思：一杯咖啡。</p>
<p>咖啡聊天就是 30–45 分钟的非正式对话，在咖啡馆或视频通话里都行。没有白板，没有面试官团，没有陷阱题。我讲我们在做什么、为什么做，对方讲自己在做什么、接下来想要什么，聊完双方就知道值不值得继续深谈。招聘与其说是筛选问题，不如说是匹配问题，而要交换匹配所需的信息，我不知道还有什么比这更快的办法。</p>

<h4 class="relative group">我为什么坚持做这件事
    <div id="我为什么坚持做这件事" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e4%b8%ba%e4%bb%80%e4%b9%88%e5%9d%9a%e6%8c%81%e5%81%9a%e8%bf%99%e4%bb%b6%e4%ba%8b" aria-label="锚点">#</a>
    </span>
    
</h4>
<p>我已经不把这些聊天当成招聘了。它们就是聊天，只是每隔一阵子，其中一场会变成一次入职——有时是十八个月之后，对方的处境变了。能稳定产出好员工的管道，是靠这样的关系一点点垒起来的，不是靠职位广告。</p>
<p>它还解决了职位描述的老问题。JD 天生只能写得笼统。喝着咖啡，候选人可以问真正要紧的问题：头六个月做到什么算成功？我会和谁一起工作？团队眼下最棘手的技术难题是什么？听到诚实回答的人，会自己做出正确的取舍。</p>
<p>另外，聊天是在“演示”你的文化，而不是“描述”它。你有没有做功课、是不是真的好奇、尊不尊重对方的时间，这些比任何招聘页面都有说服力。反过来也一样——一个人在放松的对话里的样子，比排练过的面试更能告诉你和他共事是什么感觉。</p>
<p>咖啡聊天最见效的几个场景：接触没在找工作的人；在正式流程之前给内推热热身；以及和正在考虑职业转向的人聊聊——从 IC（个人贡献者）转管理、从创业公司去大厂，或者反过来。在人才紧张的市场里，你想要的人多半都属于其中一类。</p>

<h4 class="relative group">我怎么安排一场咖啡聊天
    <div id="我怎么安排一场咖啡聊天" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e6%80%8e%e4%b9%88%e5%ae%89%e6%8e%92%e4%b8%80%e5%9c%ba%e5%92%96%e5%95%a1%e8%81%8a%e5%a4%a9" aria-label="锚点">#</a>
    </span>
    
</h4>
<p>第一条消息决定一切。模板化的开场白只会被删掉。先做功课，再坦白来意：</p>
<p><em>“你好 Sarah，我看了你在 QCon 上关于分布式系统的演讲，也读过你写事件溯源的博客。我们在 [公司] 扩展支付基础设施时正遇到类似的挑战。愿不愿意来一场 30 分钟的咖啡聊天？没有面试议程——只是想听听你的看法，也分享一下我们在做的事。”</em></p>
<p>这样写有效，是因为它具体、不藏目的，而且给出了价值（一次关于有趣问题的交流），而不是单方面索取时间。接下来是把麻烦留给自己：多给几个时间选项，选对方方便的地点（线上就用不需要下载的视频工具），发一封信息完整的日历邀请，别让对方猜。</p>
<p>聊天本身有个松散的形状就够了。开头几分钟是真诚的寒暄，说清楚为什么找对方。然后听对方讲：现在的工作、喜欢什么、烦什么、下一步想要什么——这一段你的任务主要是听。再讲你们的事：使命、团队真实的难题，包括难啃的部分，因为候选人尊重坦诚，而且对推销的味道极其敏感。最有价值的是接近尾声的开放环节：什么条件成立，对方才会考虑挪动？最后把下一步说清楚，哪怕下一步只是“保持联系”。</p>
<p>聊完 24 小时内发一条简短的感谢，提到对话里某个具体细节；答应过的东西——引荐也好、链接也好——尽快兑现。这段无聊的收尾，才是公司文化的现场演示。</p>
<p>如果你打算长期做，就用一个简单的表格记下聊过的人，隔段时间问候一下，哪怕手上没有空缺。这也不必是管理者的专利——很多最好的聊天，发生在你的工程师约自己圈子里厉害的人喝咖啡的时候。好的内推往往就是这么来的。</p>

<h4 class="relative group">值得一问的问题
    <div id="值得一问的问题" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%80%bc%e5%be%97%e4%b8%80%e9%97%ae%e7%9a%84%e9%97%ae%e9%a2%98" aria-label="锚点">#</a>
    </span>
    
</h4>
<p>我常问的：</p>
<ul>
<li>“你最近做过的最有意思的问题是什么？”</li>
<li>“下一份工作里，你希望有什么不一样？”</li>
<li>“你喜欢怎样学习？希望怎样在职业上成长？”</li>
<li>“有什么问题是你想问的、能帮你判断这里合不合适的？”</li>
</ul>
<p>如果我坐在候选人那一侧，我会问：</p>
<ul>
<li>“团队现在面临的最大挑战是什么？”</li>
<li>“这个职位的成功怎么衡量？”</li>
<li>“晋升路径是什么样的？”</li>
<li>“你当初为什么加入？为什么留下来？”</li>
<li>“关于在这里工作，有什么事是会让我意外的？”</li>
</ul>

<h4 class="relative group">如果你是被邀请的那一方
    <div id="如果你是被邀请的那一方" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a6%82%e6%9e%9c%e4%bd%a0%e6%98%af%e8%a2%ab%e9%82%80%e8%af%b7%e7%9a%84%e9%82%a3%e4%b8%80%e6%96%b9" aria-label="锚点">#</a>
    </span>
    
</h4>
<p>搜“咖啡聊天是什么”的人，大多其实坐在我对面：有人约了他们，他们想知道自己要面对的是什么。下面是我站在发邀请这一侧，想告诉你的话。</p>
<p>它不是面试。没人给你打分，也没有测试，所以不用准备标准答案。但它终究是第一印象，所以把它当成见一位未来的同事，而不是朋友的朋友。和面试不同的是，你可以尽管好奇，而且对方期待你问的和答的一样多。</p>
<p>穿你平时在那家公司上班会穿的衣服。拿不准的话，商务休闲永远不会错。如果是视频通话，打开摄像头，找个安静的房间，这比穿哪件衬衫重要得多。</p>
<p>准备大约半小时就够了。看看这家公司做什么，以及对方写过或做过的东西。准备一个两分钟的版本，讲讲你现在在做什么、接下来想做什么，因为这个问题一定会来。再带上两三个自己的问题，上面那份清单就是个不错的起点。</p>
<p>至于聊什么：你的工作、你喜欢它哪里、你对他们的工作好奇什么。薪资先放一放，除非对方主动提起。问一句他们心里有没有具体的职位、如果有的话流程会是怎样，完全没问题。</p>
<p>一般是发起邀请的人买单。你可以主动提一下，但别为这个推来推去。一天之内发一条简短的感谢，提到你们真正聊过的某件事，你就已经比大多数人做得好了。</p>
<p>如果你自己也想约一场，那就开口。消息写短一点，说清楚为什么找的是这个人，让对方容易答应：“我一直在关注你们团队做的新搜索功能，我自己也在考虑转去做平台工程。接下来几周你有没有 30 分钟，喝杯咖啡或者打个电话？时间按你方便来。”这么具体的请求，大多数人都会答应。</p>

<h4 class="relative group">把它搞砸的几种方法
    <div id="把它搞砸的几种方法" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%8a%8a%e5%ae%83%e6%90%9e%e7%a0%b8%e7%9a%84%e5%87%a0%e7%a7%8d%e6%96%b9%e6%b3%95" aria-label="锚点">#</a>
    </span>
    
</h4>
<p>最快的一种是把它变成暗中面试。一旦开始考察技术能力、往里塞行为面试题，那份默契就破了——这些留给正式流程。其次是用力过猛地推销：留得住的员工，都是把难处看清楚之后才加入的人。毫无准备地出现，或者聊完就消失，伤害更隐蔽——每一场聊天都在决定这个人会怎么向自己的圈子描述你的公司。</p>
<p>站在我这一侧，警报信号是：对什么都没有好奇心的候选人，纯粹交易感的对话，以及用同一种怨气描述每一任前雇主的人。候选人也该有自己的清单：说不清这份工作为什么重要的对接人，谈到流失率或公司方向就闪烁其词的回答，还有那种比起理解你更热衷于推销的人。</p>
<p>不是每场咖啡聊天都有下文，事实上大多数没有，这没关系。关键在于，下次要填一个重要岗位时，你不是从一页空白的招聘启事开始，而是从一摞真实的对话开始。发出去的应该是一句“喝杯咖啡吗”，而不是一份职位描述。</p>

<h4 class="relative group">延伸阅读
    <div id="延伸阅读" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bb%b6%e4%bc%b8%e9%98%85%e8%af%bb" aria-label="锚点">#</a>
    </span>
    
</h4>
<p><strong>本站相关文章：</strong></p>
<ul>
<li><a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-12-19-star-interviews/" >开发者面试中的 STAR 方法</a> —— 聊天进入正式面试流程后用得上</li>
<li><a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-02-10-prioritizing-onboarding/" >刚当上工程经理，我先做这三件事</a> —— 团队靠什么运转，正是你在匹配的东西</li>
<li><a href="https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-07-01-internships/" >为什么你应该去创业公司实习</a> —— 和考虑去创业公司的人聊天时的有用背景</li>
</ul>
<p><strong>外部资源：</strong></p>
<ul>
<li><a href="https://review.firstround.com/articles/hiring-engineers/"  target="_blank" rel="noreferrer">First Round Review：工程师招聘</a> —— 经验丰富的创业公司操盘手写的招聘指南</li>
<li><a href="https://larahogan.me/blog/first-one-on-one-questions/"  target="_blank" rel="noreferrer">Lara Hogan 的“第一次 1:1 该问的问题”</a> —— 本是为 1:1 写的，用在咖啡聊天里同样好使</li>
<li><a href="https://www.kalzumeus.com/2012/01/23/salary-negotiation/"  target="_blank" rel="noreferrer">Patrick McKenzie 谈薪资谈判</a> —— 值得一读，帮你理解候选人那一侧的处境</li>
<li><a href="https://whothebook.com/" target="_blank" rel="noreferrer">Who: The A Method for Hiring</a> —— Geoff Smart 和 Randy Street 的系统化招聘框架</li>
<li><a href="https://hbr.org/topic/subject/hiring-and-recruitment"  target="_blank" rel="noreferrer">哈佛商业评论：招聘专题</a> —— 有研究支撑的人才招募文章</li>
</ul>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-07-12-coffee-chats/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>工程团队绩效评估怎么做：我的流程，附模板和反馈示例</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-04-27-performance-reviews/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-04-27-performance-reviews/</guid>
      <pubDate>Sat, 27 Apr 2024 00:30:03 +0000</pubDate>
      <dc:creator>Me</dc:creator>
      <category>Engineering Manager</category>
      <category>Performance Reviews</category>
      <category>KPI</category>
      <category>Feedback</category>
      <category>Software Engineering</category>
      <category>Leadership</category>
      <description>我怎么给软件工程师做绩效评估（绩效考核）：双方各自该期待什么、我用的谈话流程、贴合个人的KPI，外加一份可以直接照抄的评估模板、自评问题，以及具体到能照着改的反馈示例。</description>
      <content:encoded><![CDATA[<p>对软件工程师来说，有用的绩效评估是一场双向对话，而不是一纸判决。工程师带着自评来，经理带着具体的例子来，散会时双方手里有两三个一起商定的可衡量目标，还有一份书面记录。下面是我怎么主持一场评估、我填的模板，以及具体的反馈和含糊的反馈放在一起是什么样子。</p>
<p>今年开始带工程团队之后，绩效评估从“发生在我身上的事”变成了“我要负责主持的事”。写这篇文章一半是为了理清自己的思路，所以请把它当成摸索中的笔记，而不是标准答案。</p>

<h2 class="relative group">到底为什么要做绩效评估
    <div id="到底为什么要做绩效评估" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%88%b0%e5%ba%95%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e5%81%9a%e7%bb%a9%e6%95%88%e8%af%84%e4%bc%b0" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>不管什么级别，目的归根结底就两条：让人能持续成长，让表现超出角色期望的人真正得到回报。</p>
<p>很多小公司说自己没时间没资源做评估，于是默默退回到只看工龄：谁待得久，谁就“该升了”。我认为这是个错误，而且不只因为工龄是个偷懒的指标。跳过评估，等于砍掉了公司和员工之间的双向沟通渠道，工作关系会因此变质。</p>
<p>这是双向的。工程师可能真心相信自己在用对公司最好的方式工作，但习惯、方法、沟通风格却在不知不觉中跑偏，没有反馈，就没人能发现。反过来，从不通过正式渠道听员工说话的公司，会舒舒服服地对员工的真实想法一无所知。</p>

<h2 class="relative group">双方各自该带着什么期待进场
    <div id="双方各自该带着什么期待进场" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%8c%e6%96%b9%e5%90%84%e8%87%aa%e8%af%a5%e5%b8%a6%e7%9d%80%e4%bb%80%e4%b9%88%e6%9c%9f%e5%be%85%e8%bf%9b%e5%9c%ba" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>员工这边的清单并不复杂。他们想知道自己的工作和团队目标怎么对上，哪里做得好，哪里要改进，而且要具体，不是一句“加强沟通”。他们希望贡献被认可，希望认真聊聊职业发展和培训机会，希望整个流程公平、看工作本身而不是办公室政治。</p>
<p>站在我这边，我期待每个人带着自我评估来：自己觉得哪里做得好、哪里不行。我希望看到的是对反馈的开放态度，而不是辩护律师的开场陈词；希望能认真讨论未来目标，也希望听到他们对自己在团队中位置的真实感受。评估同时也是我做规划的时候：团队构成、潜在的晋升、谁需要哪种成长机会。</p>

<h2 class="relative group">一套框架套不住所有工程师
    <div id="一套框架套不住所有工程师" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%80%e5%a5%97%e6%a1%86%e6%9e%b6%e5%a5%97%e4%b8%8d%e4%bd%8f%e6%89%80%e6%9c%89%e5%b7%a5%e7%a8%8b%e5%b8%88" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>工程团队里的人文化背景、经验、专长各不相同，同一份评估剧本不可能对每个人都有效。“一视同仁”和“公平对待”不是一回事，方式必须随个人的需要、职业阶段和贡献而调整。底线是：每位工程师的角色和职责都清晰明确，并且和薪酬真正匹配。</p>
<p>最容易出问题的地方是头衔和薪水。当有人对自己的职级感到模糊，或觉得自己该晋升了，含糊的鼓励就是毒药。有效的是具体：一起商定作为下一级别基准的具体挑战或项目目标，让晋升有客观标准，而不是靠感觉。薪酬同理。如果有人觉得报酬偏低，或想承担更多责任，就把可衡量的目标写进他的计划，写清楚下次评估前要做到什么才能支撑这个变化。然后到了下次评估，双方都得对着这份约定说话。</p>
<p>改进类的反馈也一样。针对具体短板的具体培训、工作坊或项目，有用；“继续提升技能”，没用。</p>

<h2 class="relative group">基准从第一次面谈就开始定
    <div id="基准从第一次面谈就开始定" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9f%ba%e5%87%86%e4%bb%8e%e7%ac%ac%e4%b8%80%e6%ac%a1%e9%9d%a2%e8%b0%88%e5%b0%b1%e5%bc%80%e5%a7%8b%e5%ae%9a" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>和新下属的第一次评估面谈，主要就是定基线：这个角色到底包含什么、怎么支撑团队和公司目标；用哪些可衡量的结果来评判表现；近期和长期目标分别是什么。这也是聊公司文化和行为规范、反馈的频率和方式、可用的资源和导师支持、以及这个位置能看到的职业路径的好时机。没有一样是激动人心的，但做了这些，后面每一次评估都会轻松。</p>

<h2 class="relative group">之后我用的议程
    <div id="之后我用的议程" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b9%8b%e5%90%8e%e6%88%91%e7%94%a8%e7%9a%84%e8%ae%ae%e7%a8%8b" aria-label="锚点">#</a>
    </span>
    
</h2>
<ol>
<li>闲聊。听起来不重要，但它能把房间里的紧张感卸掉，后面的对话会诚实得多。</li>
<li>过一遍议程，谁都不会被某个话题打个措手不及。</li>
<li>上次评估以来的成长。把进步明确说出来，人往往看不见自己的进步。</li>
<li>当前表现，先讲优点。</li>
<li>需要改进的地方，每一条都配上具体、现实的目标。</li>
<li>职业规划，以及现在的工作是否真的朝着那个方向。</li>
<li>下次评估前的目标和行动项。</li>
</ol>

<h2 class="relative group">KPI只有因人而设才有效
    <div id="kpi只有因人而设才有效" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kpi%e5%8f%aa%e6%9c%89%e5%9b%a0%e4%ba%ba%e8%80%8c%e8%ae%be%e6%89%8d%e6%9c%89%e6%95%88" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>产品团队里工程师的KPI，必须同时贴合团队目标和个人。前端、后端、全栈的职责不同，初级和资深的差别更大。提交量也许能说明一个初级开发者的状态，但对一个主要产出是架构决策的资深工程师毫无意义。所以KPI要在对话中商定，而不是从模板里抄。</p>
<p>我关注的几个方面：</p>
<ul>
<li>代码质量：错误率、编码规范的遵守程度、返工修bug的频率</li>
<li>项目交付：里程碑和期限的达成</li>
<li>创新与解决问题：效率改进、真正啃下来的硬问题</li>
<li>协作：代码评审、对团队目标和讨论的贡献</li>
<li>个人成长：学习目标的完成、认证、新掌握的技术</li>
<li>客户影响：用户反馈、上线功能的使用情况</li>
</ul>
<p>在可量化这一侧，我最近对单元测试越来越感兴趣。InfoQ的<a href="https://www.infoq.com/articles/unit-tests-performance-review/"  target="_blank" rel="noreferrer">这篇文章</a>讨论了怎么把单元测试纳入绩效评估，既讲落地的机制，也讲它对团队文化的影响，主张用定性加定量的方式衡量代码健康度。如果你在找不把工程师简化成代码行数的KPI，值得一读。</p>
<p>不管选什么，都要在评估或1:1里一起商定，并随着角色、项目、技术的变化及时调整。没人认可过的KPI，只是一根用来敲打人的棍子。</p>

<h2 class="relative group">我填的模板
    <div id="我填的模板" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e5%a1%ab%e7%9a%84%e6%a8%a1%e6%9d%bf" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>我给每个人建一份文档，每次评估往里加一节，这样所有记录都在一个地方。骨架是这样的：</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gu">## 绩效评估：[姓名]，[周期]
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gs">**角色和职级：**</span> [头衔，以及这个职级在本团队意味着什么]
</span></span><span class="line"><span class="cl"><span class="gs">**上次评估定下的目标：**</span> [从上一节复制过来]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 自评（工程师提前填写）
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> 做得好的地方，举一两个例子
</span></span><span class="line"><span class="cl"><span class="k">-</span> 做得不好的地方，以及换作现在会怎么做
</span></span><span class="line"><span class="cl"><span class="k">-</span> 一年后想在做什么
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 上次目标的进展
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> [目标]：达成 / 部分达成 / 未达成，附依据
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 优点（具体例子）
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> [做了什么、什么时候、带来了什么改变]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 待改进（每项配一个目标）
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> [行为或技能] → [“更好”是什么样子]，截止 [日期]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 职业发展与职级
</span></span></span><span class="line"><span class="cl"><span class="k">-</span> 对照下一个职级现在处在什么位置，还差什么
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 到下次评估前的目标
</span></span></span><span class="line"><span class="cl"><span class="k">1.</span> [可衡量的目标]
</span></span><span class="line"><span class="cl"><span class="k">2.</span> [可衡量的目标]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">### 商定的行动项
</span></span></span><span class="line"><span class="cl">- [谁] 在 [何时] 前 [做什么]</span></span></code></pre></div></div>
<p>自评在面谈前一两天交上来，绝不在面谈时当场写。先读过它，谈话就不一样了：有一半的时候，我准备提的事工程师自己已经点出来了，面谈就可以直接用来商量怎么办。</p>

<h2 class="relative group">自评问题
    <div id="自评问题" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%87%aa%e8%af%84%e9%97%ae%e9%a2%98" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>下面是我提前发出去的问题。它们故意问得很开放，这样回答告诉我的是一个人怎么看待自己的工作，而不只是做了哪些事：</p>
<ul>
<li>上次评估以来，你最自豪的是什么？为什么是它？</li>
<li>你在哪里卡住过？什么能让你早点脱困？</li>
<li>队友或代码评审者给过你的哪条反馈，让你一直记着？</li>
<li>上次定的目标里，你觉得哪些达成了？哪些想放弃或调整？</li>
<li>接下来想学什么？现在的工作给了你这个机会吗？</li>
<li>作为你的经理，我哪些地方应该换个做法？</li>
</ul>
<p>最后一个问题换来的尴尬沉默最多，换来的有用回答也最多。</p>

<h2 class="relative group">具体的反馈是什么样子
    <div id="具体的反馈是什么样子" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%b7%e4%bd%93%e7%9a%84%e5%8f%8d%e9%a6%88%e6%98%af%e4%bb%80%e4%b9%88%e6%a0%b7%e5%ad%90" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>大多数糟糕的评估反馈并不刻薄，而是含糊。区别看下面，右边是我努力去写的那种：</p>
<table>
	<thead>
			<tr>
					<th>含糊</th>
					<th>具体</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>“加强沟通。”</td>
					<td>“支付系统迁移那次，延期是在Sprint评审会上才暴露出来的，而你两周前就发现了。下次一看到进度要滑，当天就在团队频道里说一声。”</td>
			</tr>
			<tr>
					<td>“这个季度干得漂亮。”</td>
					<td>“你写的那份缓存方案对比，让我们一次会就做了决定，不用开三次。凡是要花一天以上才能选定的事，都继续这样写。”</td>
			</tr>
			<tr>
					<td>“要更有资深的样子。”</td>
					<td>“到了下一个职级，我希望你能端到端地负责一个功能的设计。搜索改版的设计评审由你来主持，带两个方案和各自的取舍来。”</td>
			</tr>
			<tr>
					<td>“代码质量有待提高。”</td>
					<td>“你最近十个PR里有三个因为漏掉边界情况需要补修。提交评审前先把失败路径的测试补上，下个季度我们再看一次这个比例。”</td>
			</tr>
	</tbody>
</table>
<p>每一条具体的反馈都点出一件事，说明它带来了什么变化，再指向这个人接下来能做的事。这样写更费时间，所以我逼自己整个季度随手收集例子，而不是评估前一晚才拼命回想。</p>

<h2 class="relative group">写下来
    <div id="写下来" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%99%e4%b8%8b%e6%9d%a5" aria-label="锚点">#</a>
    </span>
    
</h2>
<p>面谈结束后，写一份纪要：讨论的要点、提出的问题、行动项、双方认可的目标。听着很官僚，但正是这份书面记录，能避免六个月后那句“我们当时没这么说吧”。写下来的问题会被持续跟进而不是蒸发，行动项直接成为下次评估的开场议程，落在纸面上的目标也会被认真对待。</p>
<p>说到底，整个体系就这么几条：第一天就把期望讲清楚，KPI贴着人来定，凡事留记录，每个行动项都跟进到底。缺少双向对话和可衡量结果的评估就是走过场，而工程师从收到日历邀请那一刻起，就能闻出走过场的味道。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-04-27-performance-reviews/featured.jpg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>从工程师到工程经理：到底变了什么</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-01-02-engineeringmanager/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2024/2024-01-02-engineeringmanager/</guid>
      <pubDate>Tue, 02 Jan 2024 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>engineering manager</category>
      <category>career</category>
      <category>leadership</category>
      <category>team management</category>
      <description>从软件工程师转做工程经理，不是升职，而是换了一份工作。两份工作每天的内容有什么不同，哪些能力最要紧，以及在拿到头衔之前怎么为这次转型做准备。</description>
      <content:encoded><![CDATA[<p><strong>不是升职，是换了一份工作</strong></p>
<p>我自己很快就要走这一步了，所以最近一直在找过来人聊，能找到的书也都翻了翻。目前最清晰的一条结论是：从工程师到工程经理，不是往上走一级，而是横着跨进一份完全不同的工作。你的产出不再是代码，而是团队做出来的一切。这话人人都说，但据说人人都还是低估了它的分量。</p>
<p><strong>到底变了什么</strong></p>
<p>你不再亲手解决技术问题，转而去解决人的问题。日历被 1:1、计划会议和跨团队协调填满，招聘和绩效评估也落到了你桌上。工作的重心变成：确保团队拥有干活所需的东西——背景信息、清晰的优先级，以及尽可能少的干扰。</p>
<p>别扭的地方在于，你还得保持足够的技术水平，能在架构讨论里站得住脚、做出靠谱的技术判断，同时又要接受&quot;写代码的人不再是我&quot;这个事实。我见过几个两头都想抓的经理，结果多半是两头都做砸。</p>
<p><strong>工程师和工程经理，放在一起看</strong></p>
<table>
	<thead>
			<tr>
					<th></th>
					<th>软件工程师</th>
					<th>工程经理</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>你的产出</td>
					<td>代码、设计、代码评审</td>
					<td>团队交付的东西，以及团队本身</td>
			</tr>
			<tr>
					<td>评判标准</td>
					<td>你自己工作的质量和影响</td>
					<td>交付、留人，以及大家成长了多少</td>
			</tr>
			<tr>
					<td>典型的一天</td>
					<td>专注时间、pull request、设计讨论</td>
					<td>1:1、做计划、招聘、帮人扫清障碍</td>
			</tr>
			<tr>
					<td>反馈周期</td>
					<td>几小时到几天：测试通过，功能上线</td>
					<td>几个月：招来的人站稳了，有人升职了</td>
			</tr>
			<tr>
					<td>亲手做的技术工作</td>
					<td>一周里的大部分时间</td>
					<td>评审和架构上的拍板，很少再处在关键路径上</td>
			</tr>
	</tbody>
</table>
<p>过来人提醒得最多的，就是反馈周期这一行。当工程师时，你几乎每天都能拿到一点小小的成就感。当了经理，成就是真的，但来得很慢，你得习惯在一段时间里都不知道某个决定到底对不对。</p>
<p><strong>看起来最要紧的几项能力</strong></p>
<p>沟通占了大头。你成了团队、产品和管理层之间的翻译，光是确认这三拨人在聊同一件事，就能耗掉多得惊人的时间。比任何流程都管用的是信任：如果大家不敢告诉你哪里坏了，你就会是最后一个知道的人。日历是真的会把人活吞的，守住思考的时间、留给团队的时间，是一场没有尽头的仗。还有，你得明白公司到底想干成什么，否则你根本没法把团队带向一个有意义的方向。</p>
<p><strong>头衔到手之前的准备</strong></p>
<p>我反复听到、也能亲自作证的一条建议：在别人给你头衔之前就开始带。带一个项目，指导一个人，牵头做点什么。过去一年我一直在做项目负责人的角色，这段经历比任何一本书都管用。当然书也有用——Camille Fournier 的 &ldquo;<a href="https://www.oreilly.com/library/view/the-managers-path/9781491973882/" target="_blank" rel="noreferrer">The Manager&rsquo;s Path</a>&rdquo; 是人人都推荐的那本，读完确实明白为什么。技术也别放下，架构之争永远不会停。最后，找一位已经完成这个转变的导师，他们能帮你绕开那些事后看来&quot;这也能踩？&ldquo;的坑。</p>
<p><strong>取舍</strong></p>
<p>你对&quot;东西怎么造&quot;的影响力变大了，但很少再亲手去造。我猜有些日子会觉得很爽，有些日子会想写代码想得不行。过来人都说这很正常。半年后再来问我吧。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2024/2024-01-02-engineeringmanager/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>越是优秀的管理者，越敢说&#34;我不知道&#34;（以及怎么说才得体）</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-10-13-i-dont-know/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-10-13-i-dont-know/</guid>
      <pubDate>Fri, 13 Oct 2023 00:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Engineering Manager</category>
      <category>Leadership</category>
      <category>Communication</category>
      <category>Management</category>
      <description>在职场说&#34;我不知道&#34;并不失礼，也不代表没准备。为什么这句话反而能赢得信任，几种拿来就能用的说法，以及为什么一定要带上下一步。</description>
      <content:encoded><![CDATA[<p>这些年共事过的管理者里，让我真心佩服的那几位都有一个共同的习惯：被问到不懂的东西时，不装懂，直接说&quot;我不知道&quot;。也不含糊其辞，就一句话：&ldquo;我不清楚，我们查一下。&rdquo;</p>
<p>最近常想起这件事，因为我自己也开始带项目了，那种想蒙混过去的冲动是真实存在的。开会时被问到一个问题，五个人等着你的答案，这时候说&quot;我不知道&quot;感觉像认输。其实不是。多数时候，这恰恰是最有底气的一步棋，前提是后面跟上下一步：去问谁，或者什么时候给答复。</p>

<h3 class="relative group">装懂迟早穿帮
    <div id="装懂迟早穿帮" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%a3%85%e6%87%82%e8%bf%9f%e6%97%a9%e7%a9%bf%e5%b8%ae" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>软件这行变化太快，没有谁能把所有东西都装进脑子里。而工程师对装懂的嗅觉出奇地灵。只要被团队抓到一次不懂装懂，之后你说的每一句话都会被暗暗打折扣。反过来，一个承认自己有盲区、然后老老实实去补上的管理者，说出来的答案大家反而信——因为大家分得清什么是真答案。</p>

<h3 class="relative group">&ldquo;我不知道&quot;是起点，不是终点
    <div id="我不知道是起点不是终点" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%88%91%e4%b8%8d%e7%9f%a5%e9%81%93%e6%98%af%e8%b5%b7%e7%82%b9%e4%b8%8d%e6%98%af%e7%bb%88%e7%82%b9" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>关键在后面那半句。说完&quot;我不知道&quot;就没了下文，那叫甩手。好的管理者会接着问出更好的问题——&ldquo;和我们现在用的方案比怎么样？&ldquo;&ldquo;如果这个假设错了，会坏在哪里？&quot;——然后把问题抛给对的人。每个团队里都有那种几乎住在数据库里的人，或者把前端所有恶心的边界情况都摸透的人。你不需要什么都懂，你需要知道谁懂，并且真的去问。</p>

<h3 class="relative group">职场上怎么说&quot;我不知道&quot;才不显得没准备
    <div id="职场上怎么说我不知道才不显得没准备" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%81%8c%e5%9c%ba%e4%b8%8a%e6%80%8e%e4%b9%88%e8%af%b4%e6%88%91%e4%b8%8d%e7%9f%a5%e9%81%93%e6%89%8d%e4%b8%8d%e6%98%be%e5%be%97%e6%b2%a1%e5%87%86%e5%a4%87" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>我给自己定的规矩是：别让&quot;我不知道&quot;成为一句话的结尾。下面几种说法，都是真能说出口的：</p>
<ul>
<li>&ldquo;这个我暂时不清楚，周四之前我查清楚给你答复。&rdquo;</li>
<li>&ldquo;这块小李比我熟，我们直接拉他问一下。&rdquo;</li>
<li>&ldquo;我没有十足的把握，倾向于是 X，但拍板之前我想先确认一下 Y。&rdquo;</li>
<li>&ldquo;具体数字我手上没有，会后我发到群里。&rdquo;</li>
<li>&ldquo;这个我还没仔细研究过，不想瞎猜，明天给你准话。&rdquo;</li>
</ul>
<p>说&quot;我不知道&quot;算不算不礼貌？只要带着下一步，就不算。真正让人不舒服的，是一句&quot;不清楚&quot;之后就没了下文，或者一个信心满满、事后发现是编出来的答案。面试也是一样：不知道就直说，然后讲讲你会怎么去弄清楚。这比硬猜一个答案更能让面试官看清你。</p>

<h3 class="relative group">决策质量会变好
    <div id="决策质量会变好" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%b3%e7%ad%96%e8%b4%a8%e9%87%8f%e4%bc%9a%e5%8f%98%e5%a5%bd" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>软件领域的决策往往影响深远，所以值得诚实地区分&quot;哪些我有把握，哪些是在猜&rdquo;。提前承认自己的盲区，就能在拍板之前而不是之后把缺的信息补齐，也让持反对意见的人敢开口——而那恰恰是你最需要听到的声音。定了就把理由讲清楚；错了就认。没有什么比一个不肯认错的管理者更能扼杀团队的坦诚。</p>
<p>这些道理一点都不复杂：多问，多听比你懂的人讲（永远有人比你懂），在猜的时候承认自己在猜。&ldquo;我不知道，但我们一起查查&quot;这句话给我攒下的信用，比任何一次蒙混过关的回答都多。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-10-13-i-dont-know/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
    <item>
      <title>终端和VS Code里查看Git分支图：用它追进度，不搞微观管理</title>
      <link>https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-06-02-project-progress-git-graph/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/zh-cn/posts/2023/2023-06-02-project-progress-git-graph/</guid>
      <pubDate>Fri, 02 Jun 2023 11:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Git</category>
      <category>Git Graph</category>
      <category>VS Code</category>
      <category>Project Management</category>
      <category>Engineering Manager</category>
      <description>git log --graph命令怎么用、怎么设成别名、怎么对比两个分支，VS Code里的Git Graph插件和自带的提交图。再说说我怎么用它掌握进度，又不盯人。</description>
      <content:encoded><![CDATA[<p>想看Git分支图，最快的办法是在终端里运行<code>git log --graph --oneline --all --decorate</code>：所有分支都会画成字符线条，一行一个提交，分支名和标签名标在它们指向的提交旁边。在VS Code里，可以直接用源代码管理视图里自带的Source Control Graph，也可以装Git Graph插件，得到一张更大、能点击的图。两种方法在文末都有详细说明。</p>
<p>没人喜欢被问&quot;进展怎么样了？&quot;。可作为在公司带项目的人，我又不能不知道进展。我的折中办法是Git提交图：先看图，再决定要不要问人。大多数时候，答案已经在图里了。提交活动、分支、合并一眼可见，谁也不用为此开会。</p>

<h3 class="relative group">从图里到底能看出什么
    <div id="从图里到底能看出什么" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%8e%e5%9b%be%e9%87%8c%e5%88%b0%e5%ba%95%e8%83%bd%e7%9c%8b%e5%87%ba%e4%bb%80%e4%b9%88" aria-label="锚点">#</a>
    </span>
    
</h3>
<p><figure><span class="mc-img" style="--lqip:url('data:image/webp;base64,UklGRqoAAABXRUJQVlA4IJ4AAAAQBgCdASogABgAPw1yrE0mIyIhKAqoxiGJ5QC3uywCxQFpuHEPXSkTd6B0z2RWZa4T7Y8RfsruOsAA/vd8+2CpyheBOdEz3RjVNYlC9RtFoqjOvb/UUWB572vAmnOtzv/AnG5mtp9GYAzXQce5Jk69dXACVLuYiXixGTwngnNtwm/gJSEGWEDi7N2CT1vDSW68w98W/Qmb3QPw7xAAAA==')"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Git Graphs"
    width="2560"
    height="1920"
    src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp 800w, https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_b6056380eece4a86.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_1c52b3c34db54258.webp"></span></figure>
</p>
<p>如果你没仔细看过：图上每个节点是一次提交，每条岔开的线是一个分支，整张图就是项目的时间线。这个布局里的信息量出乎意料地大：</p>
<ul>
<li>扫一眼就知道有几个活跃分支、提交频率如何。</li>
<li>突然安静下来的分支，或者几个星期没合并的分支，多半是有人卡住了。这种预警很值钱。</li>
<li>合并频率反映团队的协作方式。合并勤快，说明工作在持续集成；分支活得太久，往往意味着有人在孤军奋战。</li>
</ul>

<h3 class="relative group">打扰更少，对话更好
    <div id="打扰更少对话更好" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%89%93%e6%89%b0%e6%9b%b4%e5%b0%91%e5%af%b9%e8%af%9d%e6%9b%b4%e5%a5%bd" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>明面上的好处是：不打断任何人也能掌握进度。更大的好处在真需要谈的时候：谈话从图出发，而不是从猜测出发。&ldquo;这个分支从周二就没动过，有什么卡住了吗？&ldquo;比&quot;有什么进展吗？&ldquo;强太多了。</p>
<p>把节奏挑明也有帮助。我的习惯是大多数早上扫一眼，每周认真看一次。团队知道这个节奏，所以谁也不会觉得突然。</p>

<h3 class="relative group">别把它变成监控
    <div id="别把它变成监控" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%88%ab%e6%8a%8a%e5%ae%83%e5%8f%98%e6%88%90%e7%9b%91%e6%8e%a7" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>这一条我得反复提醒自己。提交数不等于价值——一次深思熟虑的提交可能顶五十次刷存在感的提交。能看到每次提交，不代表有资格质疑每个决定；要信任团队，只在模式真正不对劲时才介入。而且把图带进谈话时，它是反馈的起点，不是起诉的证据。</p>

<h3 class="relative group">在终端里看图
    <div id="在终端里看图" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8%e7%bb%88%e7%ab%af%e9%87%8c%e7%9c%8b%e5%9b%be" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>只要装了Git就行：</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git log --graph --oneline --all --decorate</span></span></code></pre></div></div>
<p>各个参数的作用：</p>
<ul>
<li><code>--graph</code>：在左侧画出分支和合并的线。</li>
<li><code>--oneline</code>：每个提交只占一行，显示短哈希和提交信息的第一行。</li>
<li><code>--all</code>：显示所有分支和标签，包括远程分支，而不只是当前所在的分支。</li>
<li><code>--decorate</code>：把分支名和标签名标在它们指向的提交旁边。新版Git在输出到终端时默认就会显示，但加上这个参数，用管道传给别的命令时名字也不会丢。</li>
</ul>
<p>每天早上敲一遍这么长的命令太累，设个别名：</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git config --global alias.graph <span class="s2">&#34;log --graph --oneline --all --decorate&#34;</span>
</span></span><span class="line"><span class="cl">git graph</span></span></code></pre></div></div>
<p>历史长的仓库，整张图怎么滚都滚不到头。几种缩小范围的办法：</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git graph --since<span class="o">=</span><span class="s2">&#34;2 weeks ago&#34;</span>    <span class="c1"># 只看最近两周</span>
</span></span><span class="line"><span class="cl">git graph -20                      <span class="c1"># 只看最近20个提交</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline main..feature                <span class="c1"># feature有、main还没有的提交</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline --left-right main...feature  <span class="c1"># 两边都显示，用 &lt; 和 &gt; 区分</span></span></span></code></pre></div></div>
<p>最后两条是对比两个分支。这里用的是普通的<code>git log</code>而不是别名，因为别名里的<code>--all</code>会把其他分支全都带回来。两个点显示<code>feature</code>有而<code>main</code>没有的提交；三个点加上<code>--left-right</code>，会把两边各自独有的提交都列出来，一眼就能看出一个长期分支已经跑偏了多远。</p>

<h3 class="relative group">在VS Code里看图
    <div id="在vs-code里看图" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9c%a8vs-code%e9%87%8c%e7%9c%8b%e5%9b%be" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>VS Code自带提交图。打开源代码管理视图（Ctrl+Shift+G），里面有一个Source Control Graph分区，这是1.93版（2024年8月）加入的。默认只跟踪当前分支和对应的远程分支，用图标题栏上的分支选择器可以加上别的分支。随手看一眼的话，这就够了。</p>
<p>想一次看全所有分支，就装mhutchie开发的Git Graph插件（在扩展视图里搜&quot;Git Graph&rdquo;）。打开方式有三种：状态栏上的Git Graph按钮、源代码管理视图顶部的Git Graph图标，或者在命令面板里运行 <em>Git Graph: View Git Graph (git log)</em> 。点一个提交可以看它改了哪些文件；先点一个提交，再按住Ctrl/Cmd点另一个，就能对比这两个提交。不过这个插件从2021年起就没有发过新版本，所以自带的提交图也值得会用。</p>
<p>如果看不到Git Graph按钮，多半是插件没找到仓库。它默认只检查你打开的那个文件夹本身，不会往子文件夹里找。直接打开仓库所在的文件夹，或者在设置里调大<code>git-graph.maxDepthOfRepoSearch</code>就行。</p>

<h3 class="relative group">其他工具
    <div id="其他工具" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%b6%e4%bb%96%e5%b7%a5%e5%85%b7" aria-label="锚点">#</a>
    </span>
    
</h3>
<p>大多数Git工具都能看图。<code>gitk --all</code>是Git自带的历史浏览器。GitHub、GitLab、Bitbucket的仓库页面都有&quot;network&quot;或&quot;graph&quot;视图。桌面客户端里，SourceTree（Atlassian出的免费工具）、GitKraken、Tower，以及Windows上的TortoiseGit，也都能画提交图。</p>
<p>选哪个都行，目的只有一个：看懂进度，而不是数提交。</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-06-02-project-progress-git-graph/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
