Sandi Metz Blog

RSS: https://sandimetz.com/atom.xml
Sandi Metz 的博客,Ruby 开发者与作家,《Practical Object-Oriented Design in Ruby》作者。

面向对象编程提供了什么?(2018)

作者Sandi Metz从心理学概念“可供性(Affordance)”切入,类比门把手的设计来解释面向对象编程(OOP)的本质。她认为OOP的核心在于构建拟人化、多态、松耦合的对象,并通过消息传递协作。文章指出,大型且充满条件分支的类,本质上是未能利用OOP特性、仍停留在过程式思维的表现。作者建议将条件分支转化为多态对象和工厂模式,从而避免“大泥球”代码。文末附带了其新书《99 Bottles of OOP》第二版的推广信息。
评论点赞收藏55 天前

与其制造错误的抽象,不如接受代码重复

本文核心观点是“重复代码比错误的抽象代价更小”。作者Sandi Metz指出,程序员常因沉没成本谬误,试图通过增加参数和条件判断来修补不再适用的抽象层,导致代码变得难以维护。她建议当发现抽象出错时,应果断将代码内联,恢复重复,从而看清各处的实际需求,再重新提取正确的抽象。这是一种反直觉但实用的重构策略,旨在打破对既有代码的盲目维护心理。
评论点赞收藏55 天前

Sandi Metz《99瓶OOP》Python版发布:面向对象设计实战指南

本文主要介绍Sandi Metz所著编程书籍《99 Bottles of OOP》的Python版本发布及第二版更新情况。该书是一本关于面向对象设计原则的实践指南,通过重构经典编程练习来讲解代码优化技巧。新版增加了三章内容,篇幅更长,并提供多种编程语言和格式下载。对于关注软件工程、代码质量和设计模式的开发者来说,这是一个值得关注的资源更新信息。
评论点赞收藏638 天前

错误的抽象:为何重复代码比糟糕的设计更廉价

资深开发者 Sandi Metz 提出“重复代码比错误的抽象更便宜”。文章描述了当需求变化时,强行维护一个不再适用的抽象层会导致代码充满条件判断,变得难以理解。她建议遇到这种情况时,应通过内联代码重新引入重复,打破沉没成本谬误,从而让设计回归清晰。 这一观点挑战了过度设计的行业惯例。对于深受复杂遗留代码困扰的工程团队而言,这种反直觉的“回退”策略提供了极具价值的重构思路,容易引发关于代码整洁度与设计哲学的激烈讨论。
评论点赞收藏2948 天前

拆解巨兽:关于应用演变与重构的思考

作者基于对应用演变的思考,提出三个看似无关但内在联系紧密的设计思路。文章旨在通过揭示这些概念间的关联,帮助开发者理解如何重构和维护复杂的单体应用,避免其变得难以管理。
评论点赞收藏3258 天前

为什么我们会争吵:关于沟通风格

作者基于多年企业内授课经验,对比了两种截然不同的团队文化:一种是和谐协作、专注于技术本身;另一种则是充满痛苦与争执。文章旨在探讨代码争论背后的深层原因,特别是沟通风格如何影响团队氛围,并试图将激烈的意见分歧转化为积极的建设性力量。
评论点赞收藏3315 天前

代码的半衰期

文章引用了 Dan North 关于软件半衰期的概念,即代码变得面目全非所需的时间。作者分享了一个高质量应用的代码半衰期仅为六周的案例,旨在引发对软件维护成本和代码设计质量的思考。
评论点赞收藏3362 天前

与其错误的抽象,不如选择重复

资深开发者Sandi Metz重申其经典观点:当抽象不再适用时,引入重复代码比强行维护错误的抽象更划算。文章详细描述了错误抽象如何因“沉没成本谬误”导致代码变得复杂难懂,并给出了具体的重构步骤:回滚抽象、内联代码、删除无用部分。这不仅是技术建议,更是对工程师心理陷阱的深刻洞察,极易引发关于代码整洁与重构策略的讨论。
评论点赞收藏3689 天前

错误的抽象:为何重复有时比过度设计更好

David Heinemeier Hansson 反思其早年提出的“重复比错误的抽象更便宜”这一观点。他承认该观点在 RailsConf 2014 演讲后引发了强烈争议,甚至被部分同行认为荒谬。文章探讨了抽象层设计中的常见陷阱,强调过度抽象往往导致代码难以维护和理解,而适度的重复反而更灵活、更易调试。核心论点在于:开发者应谨慎引入抽象,除非能明确证明其能解决长期存在的重复问题,否则宁愿保持代码的简单和直观。
评论点赞收藏3846 天前

POODNYC 2015 奖学金获奖名单揭晓

Sandi Metz 宣布 POODNYC 2015 面向对象设计课程纽约站的奖学金已发放。文章简要介绍了申请人池的情况和评选流程,并列出了获奖者名单。这是一篇关于特定编程课程奖学金结果的通告。
评论点赞收藏4007 天前

对 nil 的怀疑

作者延续之前关于面向对象编程中真值对象的思考,这次聚焦于Ruby中的nil。文章指出nil不仅是空值,更是NilClass的一个实例,且是一个响应70多个方法的单例对象。作者试图通过这种具体的、面向对象的视角来重新审视nil,打破开发者对其作为“特殊空值”的固有认知,从而扩展对OOP的理解。
评论点赞收藏4254 天前

POODNC 课程奖学金已颁发

作者宣布 Practical Object-Oriented Design Course 奖学金获奖名单,并简述了评选过程和透明度机制。主要目的是鼓励更多人申请或推荐他人参加该课程。
评论点赞收藏4352 天前

万物底部的形态:一位资深开发者对代码结构的反思

资深开发者Sandi Metz分享教学中的反思。她原本认为解决编程问题有多种同样优秀的代码形态,但现在开始怀疑这一观点。通过反复讲解经典案例,她发现了代码结构中隐藏的新规律和惊喜,暗示存在某种更底层的、决定代码质量的形态法则。
评论点赞收藏4358 天前

通过押注“错误”来确保“正确”

作者通过一个赌场赌代码是否会改变的比喻,提出在软件开发中,预测代码不变往往导致失败,而假设代码必然变化并为此设计(如模块化、测试),才是正确的做法。核心观点是拥抱变化而非预测稳定。
评论点赞收藏4462 天前

我们该如何定义设计?

作者 Sandi Metz 以资深开发者的身份,探讨了面向对象设计(OOD)在业界引发的两极分化争议。她指出,尽管许多开发者视 OOD 为累赘并极力避免,但她基于长期实战经验认为 OOD 能降低成本、提升产出并保持编码乐趣。文章的核心洞察在于,即使是反对 OOD 的人,其观点中也有 99.9% 与作者达成共识,暗示了争议往往源于对“设计”定义的误解而非本质对立。这是一篇关于软件工程哲学与沟通的经典反思。
评论点赞收藏5154 天前

Ruby 中的 Case 语句与 kind_of? 陷阱

Sandi Metz 指出 Ruby 中 case 语句配合 kind_of? 检查类型是一种代码异味。她主张对象应该通过多态行为来响应消息,而不是让外部逻辑去检查它的类型。这是一种经典的面向对象设计原则讨论,对于 Ruby 开发者有明确的指导意义和争议点。
评论点赞收藏6273 天前

SOLID设计原则:依赖注入与TDD的协同

文章探讨了TDD与SOLID面向对象设计原则之间的协同作用。作者Sandi Metz指出,虽然TDD是必要的,但仅靠它无法保证代码拥有良好的设计。只有结合SOLID原则,代码才能在长期变更中保持健壮。文章强调TDD与设计反馈循环的对称性:遵循OOD原则能让测试更容易编写,同时提升测试质量。
评论点赞收藏6356 天前

登录芦苇

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