2025年我最喜欢的10篇技术文章

Piglei 的程序员阅读清单:我喜欢的 100 篇技术文章 启发,我也分享一下我在 2025 年读过、最喜欢的 10 篇文章。 它们不是关于具体的语言或技术,更多是关于思维方式、通识和软件工程的内容。希望给你带来启发。

目录

  1. The Law of Leaky Abstractions
  2. Nothing is Something
  3. Advice for Tech Non-Profits
  4. A Conspiracy To Kill IE6
  5. You Are NOT Dumb, You Just Lack the Prerequisites
  6. 阻止文明倒塌:Jonathan Blow 在莫斯科 DevGAMM 上的演讲
  7. The power of the RSS reader
  8. Pure and impure software engineering
  9. The XY Problem
  10. Everything Must Be Paid for Twice

1. The Law of Leaky Abstractions

https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/

abstractions 是为了方便使用者、减少心智负担。但是因为它隐藏了细节,abstraction 不能 cover 所有的 case,导致出现 corner case 的时候不得不深入底层去找到问题所在。但这就与最初的减少心智负担相违背了。

abstractions save us time working, but they don’t save us time learning.

延伸阅读 Avoid Mini-Frameworks
因为 abstraction 会泄露,所以不要制造蹩脚的抽象。 尽量避免在现有框架的基础上再套一层框架来解决痛点,原因有:

  • mini framework 针对当前的痛点建模。当未来需求或者问题发生变化,很难跟上
  • 写 mini framework 要求对基础框架有深入了解,长期跟进有基础框架的发展有代价
  • 很容易缺乏维护,可能作者走了之后就没有人了解它的工作原理了

2. Nothing is Something

https://www.youtube.com/watch?v=OMPfEXIlTVE

referenced from https://kyleshevlin.com/nothing-is-something/

从一个全新的视角来看 dependency injection 和 composition。

演讲一开始从 smalltalk 里没有 if 关键词讲起:从存粹的 Object Oriented 的视角,if 并不是必须的语言关键词。

第二部分从一个 House 基类开始,为了满足不同的需求,很自然地写出来 RandomHouseEchoHouse 两个子类。但当第三个需求需要同时具备前两个功能时,继承就非常别扭了。 House 并不是啥也没有 (Nothing),而是带着默认实现 (Something)。把可变化的部分变成参数: House 可以接受两个参数,order(RandomHouse 的功能)和 formatter(EchoHouse 的功能)

class house
  def initialize(orderer:DefaultOrder.new, formatter: DefaultFormatter.new)

这样就可以轻松组合出这三个需求了。

3. Advice for Tech Non-Profits

https://mitchellh.com/writing/advice-for-tech-nonprofits

很多捐赠者(尤其是机构和高净值个人)并不接受类似刷信用卡或者每个月多少美元的捐款方式,比如 Github Sponsor。他们通过 donor-advised fund (DAF) 来捐赠。并且需要知道:

  • 为什么需要他们要捐款。你需要多少钱来做这事?把钱花在了哪?还有谁在捐?
  • 你们会如何使用捐款?捐款者当然不希望资金被浪费

作者是 Mitchell,Ghostty 的作者。Zig 的 捐赠者

4. A Conspiracy To Kill IE6

https://blog.chriszacharias.com/a-conspiracy-to-kill-ie6

作者在 Google 工作时和其他开发者密谋从 YouTube 内部扼杀 IE6,产生的连锁反应,并且最终成功的故事。

5. You Are NOT Dumb, You Just Lack the Prerequisites

https://lelouch.dev/blog/you-are-probably-not-dumb/

很多人在学数学/计算机的时候感觉力不从心,看不懂,觉得自己笨笨的。但其实只是你缺少或者不熟悉前置知识,导致一次性需要处理大量概念。 就像走过电影院,因为错过了开头看不懂剧情。理解上的差距并非由于能力不足,而是由于先决知识的匮乏。

6. 阻止文明倒塌:Jonathan Blow 在莫斯科 DevGAMM 上的演讲

https://www.gcores.com/articles/110509

我们很自然的以为“科技当然显然必然自动地向前进步”。但事情并不是这样,正好相反,科技在不付出巨大努力的情况下,是逐渐倒退的。代际之间的交流和传承需要巨大的努力。

7. The power of the RSS reader

https://marco.org/2013/03/26/power-of-rss

RSS 应该被用来关注那些不是经常更新的网站,那些你平时也不会想着点进去看看的网站。避免长尾效应被切断。

8. Pure and impure software engineering

https://www.seangoedecke.com/pure-and-impure-engineering/

作者把编程工作分为两种截然不同的类型,一种是 pure engineering,旨在尽可能完美的解决技术问题,开源项目通常属于此类。另一种是 impure engineering,旨在尽可能高效解决现实世界的问题,受雇于科技公司的通常属于这类:工程师被要求在 DDL 之前尽可能完美的交付产品或功能。 Pure engineering 更像是艺术或研究,engineer 受到审美感的驱动,不断测试和改进来达到理想的状态。 Impure engineering 像是建筑工人,为别人的问题构建解决方案,必须按时完成,这意味着妥协。 这两种工程方向都很有价值。现在的 AI 对 impure engineering 更有帮助。

9. The XY Problem

https://xyproblem.info/

XY 问题是指询问如何实现你的解决方案,而不是真实的问题。

  • 用户不知道 X 怎么做,他认为可以把 X 问题迁移至 Y 问题,但他也不知道 Y 怎么做
  • 向他人询问 Y 的解法
  • 他人觉得 Y 问题很奇怪,花了很多时间才明白用户是想解决 X 问题

无论是向他人求助还是受到他人的询问的时候,心里都应该有 XY 问题的意识。避免浪费时间和精力。

10. Everything Must Be Paid for Twice

https://www.raptitude.com/2022/01/everything-must-be-paid-for-twice/

买一本新小说可能花费你 20 元,但是只有你再花费 10 个小时专心阅读之后,你才能感受到第一笔费用的价值。只支付第一笔费用,就如同把钱扔进垃圾桶一样。

现在还出现了很多低成本的第二笔费用的享受,手机 app、加工食品。这些东西吸引人是因为无需付出太多努力。但是它们会消耗大量时间,进一步消耗我们的第二笔费用预算。

希望这些分享有给你带来新的启发。