2025年我最喜欢的10篇技术文章
受 Piglei 的程序员阅读清单:我喜欢的 100 篇技术文章 启发,我也分享一下我在 2025 年读过、最喜欢的 10 篇文章。 它们不是关于具体的语言或技术,更多是关于思维方式、通识和软件工程的内容。希望给你带来启发。
目录
- The Law of Leaky Abstractions
- Nothing is Something
- Advice for Tech Non-Profits
- A Conspiracy To Kill IE6
- You Are NOT Dumb, You Just Lack the Prerequisites
- 阻止文明倒塌:Jonathan Blow 在莫斯科 DevGAMM 上的演讲
- The power of the RSS reader
- Pure and impure software engineering
- The XY Problem
- 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 基类开始,为了满足不同的需求,很自然地写出来 RandomHouse 和 EchoHouse 两个子类。但当第三个需求需要同时具备前两个功能时,继承就非常别扭了。
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
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、加工食品。这些东西吸引人是因为无需付出太多努力。但是它们会消耗大量时间,进一步消耗我们的第二笔费用预算。
希望这些分享有给你带来新的启发。