Fred Hebert

RSS: https://ferd.ca/feed.rss
Fred Hebert(ferd)的技术博客,《Learn You Some Erlang》作者,关于编程、Erlang 与系统设计。

控制与复杂性:系统设计中的张力

系统设计中存在两种对立思路:分析分解与控制,以及复杂性与涌现。前者将整体拆解为部分来理解和管理,后者认为复杂系统无法被完全分析,只能通过动态调整来适应。随着系统规模扩大,控制手段的边际收益递减,反而更容易引发意外后果。LLM正在重塑软件开发实践,但人与LLM不可互换,理解这两种思路的张力有助于避免政策冲突。
评论点赞收藏5 天前

队列无法解决系统过载问题

作者通过水槽比喻深入剖析了分布式系统中滥用队列处理过载的弊端。文章指出,盲目增加队列只是推迟了崩溃,并未解决核心瓶颈。真正的解决方案是识别系统硬限制,实施背压(Back-pressure)或负载卸载(Load-shedding),从而建立明确的服务质量边界和更可靠的API设计。
评论点赞收藏68 天前

复杂性无处可逃:为什么软件工程中无法真正消除复杂性

作者基于Resilience Engineering中的“必要多样性”原理,反驳了软件工程中一味追求“简单”的迷思。文章指出复杂性无法消除,只能转移。通过Rebar3构建工具和微服务架构的案例,说明将复杂性外化或隐藏会导致“shims”和认知负担的隐性增加。主张工程师应承认复杂性的存在,将其安置在文档、培训或明确的设计中,而非假装它不存在。
评论点赞收藏84 天前

它们为你描绘的画像

作者通过对比AI SRE与编程助手的营销话术,指出前者被定位为替代/监控工具,后者被定位为增强/合作伙伴。文章深入分析了这种差异背后的职场权力结构、对SRE工作的贬低,以及向泰勒主义工厂模式倒退的风险,呼吁建立更尊重人的工作类比。
评论点赞收藏173 天前

软件加速与不同步:为什么盲目提速会导致系统崩溃

文章借用Hartmut Rosa的社会加速理论,构建了一个关于软件开发中“循环”与“同步”的分析模型。作者指出,单纯加速某个环节(如AI辅助编码)会导致与其他环节(如代码审查、运维反馈)的脱节(Desynchronization),进而引发系统性的隐患和事故。文章强调,真正的效率提升需要理解不同工作循环之间的同步需求,有时战略性地“慢下来”以维持系统稳定性,比盲目加速更重要。
评论点赞收藏222 天前

可操作的软件:从复杂性、可观测性到运维人员的心智模型

文章深入探讨了软件系统的可操作性和可观测性。作者指出“简单”是相对的,随着系统规模扩大,复杂性不可避免。文章区分了监控(Monitoring)与可观测性(Observability),强调后者能推断内部状态。核心观点是引入“心智模型”概念,认为运维人员基于不完整的局部信息构建模型进行故障排查。作者主张关注“Operator Experience”,通过优化信息结构和人员协作来提升系统韧性,而非单纯追求代码层面的简单。
评论点赞收藏309 天前

持续的权衡与事故作为导航地标

文章提出将事故视为“导航地标”而非单纯的决策失误集合。通过分析事故背后的持续权衡(tradeoffs),揭示组织日常运作中的结构性矛盾。作者主张从系统视角审视事故,将其作为评估战略方向是否正确的信号,而非仅关注技术修复或追责。
评论点赞收藏329 天前

我们赞美机器背后的鸿沟:AI编程助手的隐性适配成本与设计反思

作者基于SRECon演讲经历与一线观察,提出AI编程助手采用率分化的理论:成功用户并非因为更聪明,而是构建了复杂的“脚手架”和隐性技能来弥补工具设计的缺陷。文章批评当前AI工具过度拟人化导致用户承担了大量本应由设计解决的适配工作,并呼吁回归以人为中心的交互设计,而非盲目崇拜机器能力。
评论点赞收藏432 天前

Erlang的禅意:为何我们要拥抱崩溃

本文深入解读Erlang“Let it crash”哲学的核心逻辑,通过火箭发射、森林火灾等类比,阐述了如何利用进程隔离、消息传递、监控与链接机制将故障转化为构建高可用系统的基石。文章还介绍了监督树(Supervision Trees)的不同重启策略及Bohrbug与Heisenbug的区别,适合对并发编程和容错架构感兴趣的开发者。
评论点赞收藏491 天前

AI应用中,人类应该在哪个环节介入?

作者基于认知系统工程和弹性工程理论,深入探讨了在AI自动化部署中人类介入的最佳位置。文章指出当前AI缺乏通用智能,存在上下文差距,并提出了评估AI工具的一系列关键问题,如是否会削弱人的技能、是将人变成监控者还是增强者、是否会导致团队依赖单一英雄角色等。旨在帮助工程师和管理者在引入AI时建立更负责任的设计思维,避免盲目自动化带来的系统性风险。
评论点赞收藏526 天前

20分钟掌握Awk

一篇关于Awk语言的入门教程,涵盖语法结构、数据类型、模式匹配及特殊变量。作者结合Erlang Crash Dump解析的实际案例,展示了Awk在服务器日志分析中的具体应用,适合需要处理文本数据的运维和开发者阅读。
评论点赞收藏619 天前

局部优化无法达成全局最优

作者基于系统论和韧性工程视角,深入剖析了为何局部优化往往无法解决全局问题。文章指出,在缺乏系统结构重组的情况下,单纯追求效率(如引入LLM自动化或局部代码优化)只会转移瓶颈、增加系统复杂性并掩盖脆弱性。通过Clarkesworld杂志拒稿、美国医生与保险博弈及NASA案例,论证了“摩擦”作为系统压力信号的重要性,并批评了盲目追求指标和自动化的倾向,主张通过理解系统压力来寻找真正的结构性解决方案。
评论点赞收藏635 天前

我的博客引擎竟是 Erlang 构建工具

Ferd 分享了他如何利用 Erlang 的构建工具 Rebar3 的编译器基础设施来构建自己的静态博客。文章详细解释了 Rebar3 的 DAG 依赖追踪机制,并展示了如何通过编写少量代码将博客生成过程集成到标准的 Erlang 编译流程中。这是一种极客式的工程实践,展示了如何复用现有工具链解决特定问题,虽然对普通开发者不具通用性,但体现了独特的技术视角和工程美学。
评论点赞收藏712 天前

击败CAP定理检查清单(2013)

这是一篇2013年的经典技术讽刺文,以检查清单的形式,逐一驳斥那些声称能“击败”CAP定理的方案。文章列举了分布式系统中常见的错误假设,如忽略网络延迟、分区、时钟漂移、硬件故障等,并指出许多所谓的新方案只是对现有AP或CP系统的拙劣模仿。内容极具技术洞察力,适合分布式系统工程师阅读,能引发对系统复杂性的深刻反思。
评论点赞收藏750 天前

论文解读:组织运作知识如何赋予员工权力又使其疏离

一篇组织民族志研究笔记。研究发现,当员工深入梳理组织运作流程后,往往会发现组织结构并非精心设计的整体,而是局部行为的混乱集合。这种认知会导致两种结果:一是感到无力而疏离,二是获得改变现状的赋能感。这解释了为何部分核心员工在了解真相后会选择边缘化,以便更有效地推动变革。
评论点赞收藏801 天前

评可观测性的定义:从技术指标到社会技术系统的全面视角

作者Ferd Caiazzo对Hazel Weakly关于可观测性的定义提出补充。文章深入探讨了洞察与问题的区别、数据可用性与可观测性的差异,并强调系统不仅是技术的,更是社会技术的。作者认为可观测性不仅是技术监控,还涉及组织学习、人员状态和复杂系统的自我映射,主张结合控制论、认知工程和组织行为学来全面理解可观测性。
评论点赞收藏879 天前

可协商的抽象:当外部上下文重塑代码边界

作者结合ReVault项目的实际重构经历,论证软件抽象并非客观真理而是受成本、部署等外部上下文影响的“可协商”产物。文章深入探讨了当引入S3存储导致计费模式变化时,如何迫使接口重构并意外暴露出新的性能瓶颈,从而挑战了传统的静态模块化设计原则。
评论点赞收藏913 天前

分布式系统阅读指南:从核心理论到工程陷阱

作者整理的一份分布式系统基础理论与工程实践的阅读清单。涵盖同步/异步模型、故障模式(如拜占庭故障)、共识算法、FLP不可能性、CAP/PACELC定理、消息传递语义、状态机复制等核心理论,以及端到端原则、分布式计算谬误、网络分区、脑裂、超时和时钟漂移等工程陷阱。适合希望系统梳理分布式系统知识体系的工程师。
评论点赞收藏919 天前

RHIP框架解析:为何医生至今仍坚持使用传呼机

文章基于NPR访谈,探讨医生为何仍使用传呼机。通过旧金山一家医院的试点项目,作者引入RHIP框架(风险、习惯、身份、权力)分析新技术推广失败的原因。研究发现,尽管新通讯工具更高效,但传呼机在可靠性、职业身份象征及维持权力边界方面具有不可替代性,新技术反而因模糊了工作与生活界限导致接收者感到无力。
评论点赞收藏927 天前

跨越未曾涉足之河:原型作为必要的临时脚手架

作者以开发P2P同步软件为例,反思了过度规划与原型开发的矛盾。通过“未渡之河”的比喻,阐述了在缺乏先例时,构建临时“脚手架”(Falsework)进行迭代探索的重要性,而非追求一次性完美设计。
评论点赞收藏940 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。