Glean 拾遗
日刊 · 时间线

每天拾几条。

2026-09-18 · 周五 3 条
← 09-17
日历 ▾
2026 · 09
MoTuWeThFrSaSu ·123456789101112131415161718192021222324252627282930
有日刊 今天
09-19 →
06:01

内部质量不是成本:高质量软件反而更便宜

High Internal Quality Makes Software Cheaper, Not More Expensive

Martin Fowler 反驳了一个常见取舍:花时间打磨软件质量,还是尽快交付功能?他把软件质量拆成用户可感知的 external quality(界面、缺陷)和用户看不见的 internal quality(架构、命名、模块划分)。用户愿意为前者多付钱,却无法判断后者,于是内部质量常被当成可以砍掉的开销。Fowler 的论点是:internal quality 的作用是降低未来每次改动的成本,其成本实为负值。他用累积功能量对时间的伪曲线说明,低内部质量的项目初期推进快,随后 cruft 迅速堆积,改动越来越慢;他访谈的资深开发者表示,劣质代码数周内就会显著拖慢进度。文章也承认顶尖团队同样会产生 cruft,差别在于他们用自动化测试、频繁 refactor 和 continuous integration 把它压住。作者坦承软件产出无法测量,因此结论依赖经验判断而非数据。适合需要向管理层解释重构价值的工程师。

martinfowler.com · 15 min · Code Quality · Refactoring · Software Engineering · Technical Debt
06:01

数据库技能不是加分项:从 2006 年 MySQL 分面搜索说起

Your Database Skills Are Not 'Good to Have'

2006 年,作者在纽约杂志数字团队用 MySQL 4 加 Perl 给时装周做分面搜索:秀场图按「2006」「bag」「red」等标签分类,用户可下钻筛选,每个属性还要带精确计数。当时 Solr facets 尚不存在,Autonomy 的计数不对,Endeca 刚出隐身期,三个人的团队只能自己啃 SQL,靠 EXPLAIN、GROUP BY 和反复调 MySQL 服务器参数把延迟压下去。 二十年后作者看到的却是相反趋势:工程师给普通规模的问题上 DynamoDB 这类「行星级」数据库,却对自己正在用的关系库缺乏基本掌握。文中复述一次电商事故——商品列表页要 10 秒以上,且无流量时一样慢,同一页面同时踩了缺索引、ORM 循环逐条查询(单页 200–500 条 SQL)、SELECT 全部列三个坑。作者的主张是:现代 RDBMS 在被证明有罪之前都是清白的,举证责任几乎全在工程师身上;文末给出排障顺序(慢查询日志 → 高频查询 → EXPLAIN → 只取必要列 → 必要时写原生 SQL)与三类反模式。适合后端与数据工程师。

renegadeotter.com · 14 min · Database · MySQL · Performance · Software Engineering
06:01

兰尼斯特有债必偿:先分清三种技术债再动手

A Lannister Always Pays His Technical Debts

作者把技术债分成三类:审美债(只犯强迫症,不影响用户和交付速度,交给自动化代码分析就行)、可延期债(范围可控,需要在 sprint 里逐步销账)、毒性债(半成品变成 workaround 磁铁,新功能一层层叠在上面,越拖越大)。毒性债的两个典型来源是缺测试和缺文档:没有集成测试兜底,就不敢对代码动大锤;没有 README 和 runbook,每次复现 bug 都要重新逆向一遍系统,这是有实际美元成本的时间损耗。作者还主张 TODO 注释基本等于永不做,应该把它变成看板上的正式卡片,并给债务故事打标签,让团队能看清新功能与债务的比例。债务列永远不会空,但也不能失控增长。适合一线工程师和技术负责人。

renegadeotter.com · 8 min · Refactoring · Software Engineering · Technical Debt