Hacker News 中文摘要

RSS订阅

编程小技巧 -- Small Programming Tricks

在日常工程中,令人惊讶的生产力往往来自一些小而具体的知识块:知道某个语言特性存在;明白无法解释的 tcp 延迟可能和 TCPNODELAY 设置与 Nagle 算法有关;掌握能摆脱困境的 git 命令;或是善用 sed 重写文件的小技巧。这些小块知识显然构成认知基础,但有些特别有价值且无需太多前置理解,比如即便不懂 python 也能用 python3 -m http.server 在目录里启动简单服务器。

正文

日常工作中,相当多的工程生产力其实来自零散的小知识点:知道某个语言特性存在,知道说不清的 TCP 延迟多半和 Nagle 算法、TCP_NODELAY 有关,知道从麻烦里脱身该念哪句 git 咒语,或者知道一个用 sed 重写文件的技巧。

这听起来是自明的——你掌握的任何东西都由更小的知识碎片组成,这些碎片当然重要。但有些碎片格外值钱,而且不需要多少配套的心智基础。你完全不懂 Python,也能用 python3 -m http.server 在某个目录里起个简单服务器,但它仍可能让工作稍微轻松一点。举几个例子:

  • 你大概知道 ctrl + r 可以搜索终端的命令历史,但装上 fzf 后可以把 ctrl + r 配成模糊搜索。想要更强,可以用 atuin 把 shell 历史换成可搜索的 SQLite 数据库。per-directory-history 能在「只搜当前目录跑过的命令」和「搜索全部历史命令」之间来回切换。最后,历史记录存多少也是可以配置的:stackoverflow 上的回答。

  • SELECT 可以不带 FROM。想测试数据库里某个函数实际怎么工作,或者提醒自己 SELECT TRUE <> NULL 的结果时,这很有用。

  • PostgreSQL 和 MySQL 都支持 explain analyze,它会真正执行你要优化的查询,并给出多得多的性能信息。

  • 正则里的 \b 是词边界断言,用来匹配单词的开头或结尾很方便。

  • 给指标配上对数,可以大致了解某个字段取值的分布:用 Math.floor(Math.log10(userInGroupCount)) 算出桶,然后 metrics.increment("my_metric", { bucket })。

  • 现代 JS 已经支持 Array.flatMap、Object.entries 和 Promise.withResolvers。

  • 在 NodeJS 里,创建一个 https.Agent 并传给 http 请求 fetch(url, {method, agent}),就能保持与外部资源的连接不被断开。这对延迟的影响可能非常大。

  • git log -S pattern(「git pickaxe」)能列出所有添加或删除过某个字符串的提交。在老旧代码库里尤其好用。(git log -G pattern 类似,但也会显示那一行被移动的情况。)

  • 和 cd - 类似,可以用 git checkout - 回到上一个 HEAD。

  • 你大概不需要 find。很多 find 命令都能用 **/*.md 这样的 glob 代替。多数 shell 原生支持,bash 则要用 shopt -s globstar 打开。

  • 同理,多数人应该用 rg(ripgrep)而不是 grep、ack 或 ag。

  • zsh 的高级补全默认没开:需要把 brew 的 site-functions 目录加进 FPATH,再 autoload -Uz compinit 并执行 compinit。

这些你可能早就知道,也可能你的工作领域让这些技巧全无用处。即便这一批对你没用,我打赌你也攒了一套自己的技巧,年复一年让工作变轻松。

在公司里,更多的知识往往是这种小而高杠杆的碎片:

  • 要调试 $PROBLEM,用 $DATA_SOURCE。
  • $PERSON 对 $AREA 了解极多,卡住时他很乐意帮忙。
  • 关于 $HARDTHING,$OVERHERE 有不错的文档。
  • 出现 $THING 时,意味着我们该手动扩容了。
  • 要对某个服务做滚动重启,运行 $THIS_COMMAND。
  • 这个 $UTIL 让 $THAT_PROBLEM 很容易脚本化。

在之前的一家公司,我每天在 Slack 上给工程团队分享一个技巧,既有技术类的也有公司特有的,大家觉得挺有用。哪怕 10 个里你已知 9 个,第 10 个文档或技巧也可能帮你省下时间。一天一个刚好,不会用知识淹没别人,偶尔还能引发有用的讨论。如果你在公司里比较资深,不妨考虑做类似的事。


  1. 这个技巧我最早大概是在 Julia Evans 的博客上看到的,她的写作常常正好体现这种思路:小知识很有力量,也很有趣,还很平易近人。

评论

社区对“编程技巧在 AI 时代是否还有用”存在分歧,不少人感慨手写代码与命令行钻研被 AI 取代而乐趣不再,但仍有用户积极补充工具链用法或从 AI 行为中反向学习。

认为 AI 正让手写代码与旧技巧失去价值

  • 学术界与日常开发中 AI 代理编排已取代大量手工编码,虽然生产力提升,但以往钻研编辑器与 shell 技巧的乐趣和必要性大幅下降(较多人) > 在 AI 做大量工作的现在,这些知识对我的用处正变得越来越小(@bufordtwain)

认为文中技巧多属 CLI 且公开分享易显傲慢

  • 文中内容多偏 bash/zsh 等命令行用法而非真正编程;此外公开分享小技巧容易显得自大,因为对已知者而言过于显然(较多人) > 只有少数是真正的编程技巧,且分享众人皆知的东西可能让人觉得自大(@winternewt)

对每日推送技巧感到厌烦

  • 若在团队频道每天收到一条技巧分享,会让人感到打扰但不便明说(少数人) > 我本会觉得每天在 Slack 发技巧很烦,但为了不显得刻薄就闭嘴了(@NegativeLatency)

反而可从 AI 的命令执行中学到新技巧

  • 不让 AI 完全自主,而是逐条审批它运行的命令,能观察到如 perf 等自己不懂的高级用法,以此反向积累知识(少数人) > 给 AI 真实任务并细看它用的命令,很可能会发现你不知道的技巧(@kccqzy)

有价值的补充

  • 编程中应尽量避免分支,不用 if 或逻辑表达式,常可使代码更易读且对 CPU 更友好。
  • 用 zoxide 替代 cd 可智能记忆路径,用 Makefile 固化常用命令而非依赖临时历史,能提升可复用性。
  • 遇到超大量文件匹配时,高级 glob 会触达扩展上限,此时仍需回退到 find 命令,且 find 本身能力远不止匹配。
  • 实用 macOS 技巧:Ctrl+Option+- 可撤销终端输入,命令后接管道 pbcopy 可直接存入剪贴板;script 命令能记录完整终端会话供调试复盘。
  • 推荐通过个人 TIL 网站或《Unix Power Tools》书籍系统沉淀技巧,也有开源工具如 zhist 可增强 zsh 历史检索体验。