Sandi Metz

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》第二版的推广信息。
评论点赞收藏100 天前

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

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

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

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

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

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

Breaking Up the Behemoth

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

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

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

Why We Argue: Style

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

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

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

The Half-Life of Code

This post originally appeared in my Chainline Newsletter. I've been thinking about the half-life of code. In his Software that Fits in Your Head talk, Dan North defines the half-life of software as (I...
评论点赞收藏3407 天前

代码的半衰期

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

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

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

Make Everything The Same

This post originally appeared in my Chainline Newsletter. Due to popular request, I'm re-publishing it here on my blog. It has been lightly edited. As part of my local ruby meetup (#westendruby), I've...
评论点赞收藏3765 天前

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

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

The Wrong Abstraction

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

POODNYC 2015 Scholarships have been awarded

Scholarships for the Oct 19-21 Practical Object-Oriented Design Course (POODNYC) in New York City have been awarded! Winners are listed below, but before I introduce them I'd like to give an overview ...
评论点赞收藏4053 天前

POODNYC 2015 奖学金获奖名单揭晓

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

Suspicions of nil

I'm feeling suspicious of nil. What is nil? In a recent newsletter I pondered true and false and suggested that thinking of them as normal, everyday objects could expand your ideas about OOP. Today I'...
评论点赞收藏4299 天前

对 nil 的怀疑

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

POODNC Scholarships Have Been Awarded

Scholarships for the Oct 29-31 Practical Object-Oriented Design Course (POODNC) in Durham, NC have been awarded! Winners are listed below, but before I introduce them I'd like to give an overview of t...
评论点赞收藏4397 天前

POODNC 课程奖学金已颁发

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

The Shape at the Bottom of All Things

I've been teaching a fair amount, which means I've been revisiting my 'class problems' regularly. When I chose the problems, I thought that I understood them completely (hubris, I know) but now that I...
评论点赞收藏4404 天前

登录芦苇

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