我爱 Ruby
Ruby 对开发者幸福感、表达力和适合 DSL 的特性始终有很强吸引力,尤其适用于快速原型开发以及用 Rails 做 Web 工作,但它也因可维护性、隐式行为以及与现代有类型生态相比偏弱的工具链而引发担忧。评论者将 Ruby “读起来像英语”的风格和强大的元编程,与 Rust、Kotlin、TypeScript 和 Python 等语言在安全性和 IDE 支持上的优势进行对比,常常把类型系统和显式性视为自己转向其他语言的原因。围绕的核心争论是生产力与长期清晰度之间的权衡:愉快、简洁的代码,与调试“魔法”、理解全局状态以及在大型、长寿代码库中工作的挑战。
总体情绪
- 许多评论者说 Ruby 独具愉悦感且高效,尤其适合“把事情做完”和快速原型开发。
- 也有人非常不喜欢在 Ruby 中工作,尤其是在大型或遗留代码库中,理由是可维护性问题和“魔法”。
- 还有一些人如今不再日常使用 Ruby,但仍然对它怀有强烈的喜爱。
表现力与语法
- 支持者强调 Ruby “读起来像散文”的风格、带
?的谓词方法、blocks/yield,以及链式 Enumerable 操作,都极具表现力。 - 批评者认为“读起来像英语”被高估了;自然语言本就不精确,而充满 DSL 的代码可能比普通代码更难理解。
- 对“表现力”究竟意味着什么也存在争论;有人把它与 DSL/metaprogramming 能力联系起来,另一些人则把它看作“我喜欢这门语言”的含糊标签。
类型与工具
- 许多人从 Ruby 转向了 Rust、TypeScript、Kotlin 等,并表示自己已经离不开强静态类型。
- Ruby 的渐进类型方案(Sorbet、RBS)普遍被认为笨拙或痛苦;有些人觉得 Ruby “需要”更好的内建类型,另一些人则认为那会背离它基于消息传递的本质。
- 与有类型生态相比,工具链被认为更弱:跳转定义和静态分析都很脆弱,尤其是在 Rails/元编程代码中。不过也有人指出,较新的 LSP/调试工具正在改进这一点。
元编程、“魔法”与可维护性
- Ruby(尤其是 Rails)因强大的元编程和 DSL(RSpec、Cucumber、Rails 路由/校验)而受到赞赏,它们显得优雅而简洁。
- 同样的特性也被指责带来不透明、隐式的行为:动态生成的方法、大量继承、全局可变状态以及深层抽象链,使得本地推理变得困难。
- 人们描述了追踪某个方法在哪里定义、或某件事为什么会发生的困难;也有人反驳说,运行时自省(pry、
method(...).source_location)才是预期中的工作方式。
注释与文档
- 关于“代码即文档”存在强烈分歧。有些 Rubyist 很少写注释,而是依赖清晰的高层代码和 DSL。
- 很多人认为注释对于解释“为什么”、设计决策和非显而易见的约束至关重要;缺少这类注释被视为可维护性上的异味。
性能、生态与工作机会
- 有些人认为 Ruby 的性能通常足以应付 Web 开发,因为数据库或网络延迟才是主要开销;另一些人则更偏好更快或类型更强的语言来做严肃后端。
- Ruby 因其愉快的生态和友好的社区而受到称赞,但也有不少人觉得 Ruby/Rails 的工作机会相比 TypeScript/React 和其他技术栈正在减少。