跳到主要内容
175 个 reactions,一个 diff

175 个 reactions,一个 diff

原石
原石

· 阅读约 5 分钟

先贴命令。

$ git log --since='1 month ago' --oneline | wc -l

这是我数一个月的方式。commit 是整数,要么有,要么没有。

上个月在 DEV 上读到一份别人的月度开发报告,七月版,作者叫 FrancisTRDev。我把整份报告数了一遍,能算工程产物的只有一件:一个 PR 合进了 Forem。就这一件。剩下全是数字和计划。

哪种数字呢。他有篇帖子叫 "I am that I am.",七月的一周进了社区 Top 7,175 个 reactions,79 条评论,系统连阅读时长都标好了,七分钟,像包装上的净含量。月报自己的评论区 43 楼,一大半是恭喜进榜的。

先说明白:我不针对这个人。报告写得很认真,下月目标一条条列着——考 Salesforce 认证、发作品集、继续混社区。我针对的是这套记账法。

这套记账法的问题在于,reactions 什么也不告诉你。175 个小红心说明这篇帖子受欢迎,仅此而已。它不含一行能跑的东西,不含一个取舍,五年后翻出来还是 175 个小红心。diff 不一样。我随手从自己的 log 里翻一条:

--- a/src/kv.c
+++ b/src/kv.c
@@ -141,3 +141,7 @@
-    e->val = malloc(vlen);
-    memcpy(e->val, val, vlen);
+    /* 短值内联进 entry,省一次 malloc。阈值 16 是拍的,没测过。 */
+    if (vlen <= 16) {
+        memcpy(&e->inl, val, vlen);
+    } else {
+        e->val = malloc(vlen);
+        memcpy(e->val, val, vlen);
+    }

五年后我看这条 diff,能看出这个月我干了什么、为什么干、哪句是拍的。175 个 reactions 给不了这个。所以整份月报里我真正尊重的就是那一行:a PR merged into Forem。PR 有边界,被人 review 过,要么在主干里要么不在,二进制的。声量是模拟信号,diff 是数字信号。

月报里另外几项也想说一句。用 LeetCode 学 Ruby、全力备考认证,都不是坏事,我自己也刷题。但学习是输入,认证也是输入。输入值得记,只是别记进“成就”那一栏——输入和产出混在一页,月底的清单会很好看,好看得让人误判。

也不是说聊天没用。他推荐的三篇帖子里,一篇是别人在 DEV 的第一年回顾,一篇是 Cesar Aguirre 的 AMA,十年出头的工程,病过,burnout 过,被裁过,正在重建职业生涯,底下 105 条评论。那种评论区我读得下去,里面流通的是别人踩过的坑。Cesar 自己还在月报底下留了言,说几个月后可能再办一场。这种留言比 43 楼“恭喜进榜”值钱。

评论和评论不一样,跟注释和注释是一个道理:i++; // i 加一 和“为什么这里故意不返回错误”不是同一种注释。

第三篇推荐我单独说,那是整份月报里我最想点开的:GrahamTheDev 用 576 个浏览器窗口渲染贪吃蛇。83 个 reactions,不到 "I am that I am." 的一半。但那是整份月报涉及的东西里,唯一一个真做出来的东西。

说句题外话。576 个窗口,复杂度是天文数字,而我天天骂复杂度——但这不是我要骂的那种。复杂度分两种。一种是税,被收的时候你不知道自己买了什么,抽象税的本义就是这个;一种是票价,自愿付的,买的就是这场演出。贪吃蛇一格一个窗口,整个作品的意义就在这个荒谬里,复杂度在这里不是成本,是内容本身。我没看他的实现,纯猜:一个宿主进程开 576 个窗口,每个一屏纯色,蛇动一格就改一个窗口的背景色。就算猜错了,硬问题也在那儿摆着,576 个窗口的合成开销、窗口管理器扛不扛得住、格子怎么对齐。把一个玩笑当工程做,这是自愿付的票价。

对比一下我天天骂的那种。我手头那个玩具存储引擎,前阵子差点加一个插件式的编码层:一个 struct、一组函数指针、一个注册入口,“以后想换序列化就换”。后来砍了,砍成两行:

if (hdr->enc == ENC_RAW)
    return raw_decode(buf, len);
return lzf_decode(buf, len);

这两行上面现在贴着条注释:“只会有两种编码,别问。”注释我改了三遍。第一遍写的是“暂不支持插件”,后来发现这行注释我自己都看不懂了——“暂”是什么意思,谁定的期限。插件层那一百多行,那玩意儿买来的是一个永远不会到来的“以后”。576 个窗口买的是一场演出。同样是复杂度,一个值,一个不值。

扯回来。月报里还有一个细节我留着没说:有人在 YouTube 上做了个视频,评论他某篇帖子,他自己是偶然刷到的。这件事没有任何指标能量度,但它是整份报告里我最羡慕的一行,有人不但在读你写的东西,还拿去做了点别的。这种事记一笔就行,千万别拿来当目标,一当目标就没了。

要是哪天我也写月报,就一个 make target:

report:
	@git shortlog -s --since='1 month ago'
	@git diff --shortstat $$(git rev-parse 'main@{1.month.ago}') main

跑出来大概长这样:

$ make report
14   yuanshi
 3 files changed, 61 insertions(+), 22 deletions(-)

人名,行数,完。没有 reactions,没有榜单,没有净含量。

月报可以写,社区也值得混。但账要分两栏:一栏记声量,一栏记 diff。月底只对第二栏负责。

Top 7 每周换人。主干不换。

原石
原石

把代码当文章写的系统工程师,以源码立论、单线程式拒绝复杂度。

查看主页 →

评论(2)

小赵小赵

公司里我 mentor 说 PR 才是给以后的自己写笔记,reactions 是给别人看的。不过你说的模拟信号和数字信号,能再举个例子吗,有点懵。

驻场的驻场的

我们内网git倒是能用,但commit msg全是「修改」「更新」「fix」,五年后翻出来照样不知道干了啥。diff还在,信号没了。声量是模拟的,我们的commit也是模拟的😂