【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

采访 Sandi Metz:谈 Practical Object-Oriented Design in Ruby 一书

  • 2013-08-27
  • 本文字数:2693 字

    阅读完需:约 9 分钟

InfoQ 就 Practical Object-Oriented Design in Ruby: An Agile Primer一书采访了其作者 Sandi Metz。

这本书于去年出版。就设计实践而言,如果没有清晰的上下文和设计动机,看上去会非常复杂,而本书采用的是注重实效的方法,因此受到了 Ruby 社区的热烈欢迎,很多非 Ruby 爱好者也非常喜欢。

尽管书中的示例是以 Ruby 实现的,但是这本书可以看做通用的软件设计书籍,因为作者对动态语言与静态语言之争并无偏向。

老道的开发者会在书中发现他们曾经遭遇过的痛点。而新手则会发现相关设计实践的清晰解释和示例,进而更清楚地理解在特定上下文中采用特定实践的优缺点。

尤其重要的是,这本书强调设计是否足够好——即既能满足当前对应用(需求)的认知,又能将未来修改的代价降到最低——需要连续不断地评估。用 Sandi 的话说:

“易懂、合理、可用且堪称典范的代码不仅可以满足今日之需求,加以修改,还可以满足未来之需求。”

InfoQ 采访了 Sandi,谈到了她的新书是如何得到大家认可的,如何从开源代码中学到东西,如何合理使用代码分析工具及其他主题。

InfoQ:本书的目标读者是哪些人?你认为专家级开发者和新手是不是都能从本书获益?

Sandi本书最初其实是为年轻、没多少经验的自己编写的,那时我已经写过几年的面向对象代码。或许可以称本书所面向的读者为“中级人员”。在写作时,我认为经验较少的读者还不能领会本书,而经验丰富的读者可能又不感兴趣。

然而,本书出版之后,看了读者的选择,很明显我想错了。很多绝对的新手告诉我,他们认为本书非常有用,而不少有经验的程序员也说他们很是喜欢。读者的范围比我预想的要广得多。

还有一点我也颇感吃惊,很多非 Ruby 爱好者也在读这本书。这本书是关于面向对象设计的,特定于 Ruby 的内容非常少,因此有其他读者喜欢或许不算意外。但是我并没有考虑到这类读者,他们认为书有用,我非常高兴。

InfoQ:你的书中谈到了很多堪称典范的代码,也传达出这样一种理念,即近朱者赤,近墨者黑,好的代码和坏的代码都会影响周围代码。在行业招聘中,看上去大家在都在关注一个开发者有多么好,但公司内烂代码对个体能力的不良影响有多大呢?

Sandi根据我的经验,在实际业务中,真正的应用程序中也包含大量不完美的代码,现实世界就是如此。很明显,新手没有足够的经验,对于不好的例子,他们并不知道如何修改,甚至无从判断其优劣,所以不可避免地需要有经验的程序员予以指导。

有经验的程序员也是在工作之中历练出来的,实践出真知。我们既要依赖同事的指导,也要亲手实践以改进自我。老手有责任教导新手。

幸运的是有了开源世界,每个程序员都可以接触到比其公司内多得多的代码,也可以接触到比其公司所雇佣的少数员工多得多的“老手”。新手不必为不知道如何编写(甚至识别)堪称典范的代码而苦恼,但是走出去、接受方方面面的影响也是他们必须承担的责任。

InfoQ:新手如何才能做到既不破坏现有代码,又能在实践中学习设计呢?书中你提到,如果坚持使用某种模式,却对决策所伴随的折中方案没有清晰的认识,这很危险。想要掌握面向对象设计的新手是不是还有其他需要避开的障碍?

Sandi新手应该大量编写代码,并将这些代码展示给有兴趣的人看看,再就是看看别人写的代码。Github 是大家的朋友,什么都替代不了自己投入时间练习。

InfoQ:代码分析工具是天堂还是地狱?

Sandi对判断力不错的人而言是天堂,对其他人而言则是地狱。对于走查代码和对某些东西进行计数这样不需要动脑子的工作,代码分析工具非常不错。但是结果如何处理还得人来决定。

有的代码分析工具,比如有些东西本来是应该避免的,但是我们还给出了技术上“还不错”的设计,工具会给出不错的分数;而对于重要的事务,“不好”的设计也永远不会把分数搞得很差。如果代码分析工具支持前者而反对后者,这种情况下听取工具的建议就是浪费金钱。

有力量抵制编写过度考虑未来的代码,有勇气留下有味道但永远不会改变的代码,这是人区别于工具的品质。

InfoQ:在定义依赖规则和违反规则的情况时,你是如何看待这类工具的作用的?它们是否有助于产生更好的设计?还是说好的设计实践对上下文太过依赖,以至于无法从这样的硬性规则中获益?

Sandi我喜欢分析工具,也喜欢这些工具提供的数据。它们能让我的设计切实可靠,能指出我忽视的问题和所犯的错误。我认为谦逊的程序员都应该利用这些信息,不过对结果应该持保留态度。

InfoQ:根据你的经验,在遗留应用中,有哪些最常见的设计味道?关于如何修复有问题的代码,你是否有什么建议,我们应该从哪里开始呢?

Sandi个人认为,对象和方法包含了太多责任,这是最大的问题。这种问题非常普遍,所以我的第一个建议是“让事务更小巧”。

InfoQ:对于对实际的面向对象设计有兴趣的读者,你有其他的推荐读物吗?

Sandi可以阅读 Growing Object-Oriented Software Guided by Tests

InfoQ:你的书是如何被 Ruby 社区接受的?你是不是感觉面向动态语言——特别是 Ruby——的软件设计著作存在空白?

SandiRuby 社区的积极响应让我非常吃惊。尽管受过理论训练的 Ruby 爱好者看上去的确非常喜欢,但是最热情的回应却是来自自学的 Ruby 程序员。我每天都能听到有些人说,他们非常渴求这些信息。我得谦虚点,别老重复太多赞美之词了,但是我们还是可以看个例子,一位高兴的读者在 Twitter 上对我说,他有醍醐灌顶的感觉。

其实这本书包含的新东西很少。事实上,我原来还以为有些想法是我的首创,但是后来发现,可能最好还是说我“重新发现”了这些想法。

因为现有著作我不可能都读过,所以不知道这些想法已经存在。因此,这类著作的空白并不在内容上,而在可读性上。大家热情的响应说明,普通程序员群体还是非常希望这一空白被填补起来的。

InfoQ:你能否与 InfoQ 分享一下你的下一个项目,比如是写书、开源项目还是有其他打算?

Sandi我为这本书制作了一系列视频,而且探索了一些教学的可能性。我很享受编写这本书给我带来的机遇,唯一的缺点是我不得不专门安排时间编写代码。

关于受访人

Sandi Metz有 30 年的项目经验,她负责的都是好不容易存活下来并得以发展和改变的项目。作为杜克大学的软件架构师,她每天都要编写代码,她的团队负责为客户解决大规模面向对象应用中的实际问题,而这些项目都是演化发展了 15 年以上的。她致力于以切实可行的方式将软件开发出来。_Practical Object Oriented Design in Ruby_ 一书是她多年以来白板画图的精华,也是她关于面向对象设计诸多讲话的必然结果。Sandy 曾在 Gotham Ruby Conference 上做过多次演讲,她生活在北卡罗来纳州的都兰姆。

查看英文原文: Interview with Sandi Metz on Practical Object-Oriented Design in Ruby

2013-08-27 03:142200
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 130.1 次阅读, 收获喜欢 34 次。

关注

评论

发布
暂无评论
发现更多内容

路径万千,华为云数据库选择珠峰北坡登顶,给世界一个更优选择

YG科技

苏光牛:坚持产品能力的升级,做金融数字化的坚实数据底座

YG科技

海量数据运维要给力,华为云GaussDB(for Cassandra)来助力

YG科技

go语言中如何实现同步操作呢

高端章鱼哥

Go 语言

【精彩回顾】华为云亮相2023开放原子全球开源峰会

华为云开源

#云原生 #开源

瓴羊Quick BI数据门户,让企业数据管理一目了然

巷子

inBuilder今日分享丨RPM包制作入门

inBuilder低代码平台

鲸鸿动能对话汽车之家,全链路营销助力新增长

最新动态

“息壤”引领首个算力互联互通验证平台建设,天翼云开启算力互联网新纪元!

天翼云开发者社区

人工智能 云计算

停机不收费!华为云RDS for MySQL降本有奇招

轶天下事

宝兰德应用服务器软件与华为云GaussDB完成兼容互认证

YG科技

从新手游上线看游戏数据库选型

YG科技

挑选最佳美国主机,让你的网站飞跃

一只扑棱蛾子

美国主机

解析数字信息时代下的信息安全挑战:大道至简——JNPF快速开发平台的低代码之光

快乐非自愿限量之名

低代码 信息安全 企业数字化 低代码数字转型

[Paddle] ERNIE-UIE 通用信息抽取模型(含自定义细分领域模型训练)

alexgaoyh

paddle 文心 ERNIE 数据标注 ernie-uie doccano

深耕数据库根技术,华为云云原生数据库推动汽车产业数智升级

轶天下事

数智底座必备能力之轻松驾驭新技术

用友BIP

数智底座 Pass平台

赋能政企深度用云,华为云数据库大咖有话说

YG科技

全量通过!华为云GaussDB首批完成信通院全密态数据库评测

YG科技

AI赋能文明的发展,就看低代码了吗?

EquatorCoco

低代码 AI赋能

「悟道·视界」视觉大模型系列,6项领先成果技术详解

硬科技星球

一文弄懂 OceanBase 用户管理和访问控制

爱可生开源社区

MySQL oceanbase

即时通讯系统为什么选择GaussDB(for Redis)?

YG科技

分布式机器学习(Parameter Server)

这我可不懂

机器学习 分布式

MacOS专业截屏指南——截屏技巧和截屏工具分享

互联网工科生

macos mac截图工具

Redis跳跃表是如何添加元素的?

王磊

java面试

共筑数字化未来 金山办公携手华为云完成文档中心和GaussDB适配

YG科技

悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

硬科技星球

2023-06-27:redis中什么是缓存雪崩?该如何解决?

福大大架构师每日一题

Redis 7 福大大架构师每日一题

谷歌正研发“人类最强大模型”!开启智能模型的新纪元:探索迭代发展和低代码开发平台的无限可能

不在线第一只蜗牛

低代码 谷歌 人工智能模型 ChatGPT

“云创未来,共享生态”——支付宝小程序云产品发布会,报名开启!

TRaaS

小程序

采访Sandi Metz:谈Practical Object-Oriented Design in Ruby一书_Ruby_Manuel Pais_InfoQ精选文章