写点什么

Effective Ruby LiveLessons——Sam Phippen 访谈

  • 2015-12-15
  • 本文字数:2845 字

    阅读完需:约 9 分钟

Sam Phippen 制作的 Effective Ruby LiveLessons ,是一系列讲解了专业的 Rubyists 的最佳实践的视频教程,它针对各个阶层的 Ruby 程序员。这个系列的视频基于 _Effective Ruby__,_Peter Jones 所著的有效的软件开发系列丛书之一。

视频教程包含了亲自示范,来帮助观看者理解每个项目是如何实行的。InfoQ 和制作者谈了一些有关视频中可以学到的课程,以及 Ruby on Rails 的最佳实践。

InfoQ: Nil被许多的Ruby程序员用于检查方法的返回值。你认为在检查方法的返回值时,是抛出异常好还是使用nil**** 好?

我之前确实有谈过这个主题;可以点击这里查看幻灯片。在这里使用 nil 的核心问题是 nil 没有一些其他对象含有的操作。这导致了从一个方法返回它的时候是有问题的。这样做强迫了调用方注意到你的方法调回对象没有按照相同的接口。这是非常有问题的。

说到抛出异常,我也并不非常确定这是一个好的解决方法。这完全取决于上下文。对我来说,这个问题提出的两个分支并不是很准确。当你在面对执行一个不可靠的方法时,我认为会有其他更好的选择。我会寻找一些明显意味着“空容器”或“默认值”的这类型的方法。如果不可能的话那我会看一些类似于选项类型实现的方法作为替代。

InfoQ: 你对于方法链以及遵从得墨忒耳定律的建议是什么?

得墨忒耳定律,是一项定律。但是,要注意:得墨忒耳定律经常被人误解。在我的 LiveLessons 上,我特别指出的是,这个定义让你在同一类型中点链。当我对得墨忒耳渐渐有更多了解时,对我而言它真正的意义在于:不要跨越体系结构的边界传递信息。这是比“不要点链”更难以表达解释的概念的一种方式。举例来说,我完全可以接受用方法链来建立活动记录范围。在那种情况下,你不仅不能跨越体系结构的边界,你事实上还只是在一个单独对象上修改状态。

所以我猜想,对,遵循得墨忒耳定律,但在你对它过于虔诚之前先了解它意味着什么。

InfoQ: RoR运用于网络空间的很大一部分。你认为它已经影响了多少在Ruby**** 和其他更严格类型化的语言中的异常相关最佳实践?

Ruby on Rails 使用各式各样的技术来处理异常情况。我不确定我是否赞同 Ruby 使用异常作为最佳实践。我会说,类型系统给了我们提前于运行时间的大量安全性,这是 Ruby 所不能提供给我们的,并且在那些地方,异常可以变得相当方便。

InfoQ:一个Ruby**** 开发者在测试他们的代码时应该更多依靠部件或行为测试吗?

当谈到写测试的时候,专注于建立一个为你和你的团队工作的测试结构是很重要的。确实,现代测试练习就是敏捷的一个方面。敏捷可以带给我们的最好的东西就是一套用来修改随着时间推移修改我们团队工作方式的工具。这就意味着我们的测试练习也应该随着时间不断变化。换句话来说,我认为各个应用程序和团队会影响是什么做出了最好的测试,而不是一些社区指令。

InfoQ:你可以给Ruby on Rails apps**** 中的数据资源使用监控提些建议吗?

使用 New Relic。New Relic 是让我成为一个好的顾问的秘诀所在。能够弹出那些图表以及获得大量的洞悉力是十分有帮助的。

InfoQ:你是如何看待在RubyRails中测试的?有抱负的程序员应该坚持使用RubyRails**** 提供的默认测试工具或者接触其他测试框架?

我在 RSpec 的核心团队中,所以很显然我这里的答案是很有偏倚的。我对“我应该使用哪一种测试框架?”的典型反应是:“这是视情况而定的。” Minitest 有一套非常集中和限制的功能,但是这对你没有关于 RSpec 的应用程序有一定的限制。也许你会发现那些限制有用,并且其本身应该使用 minitest。RSpec 是测试框架的一个强有力的庞然大物。我喜欢说,如果你能想象一个测试,你就可以在 RSpec 上写出来。为此目的,RSpec 让你编写和测试你想要的任何代码。这里可能会有的问题就是,你的设计是弱于它的。RSpec 也擅长于测试遗留代码,所以如果你有一个遗留的应用程序,这可能是好事。再次地,警告和取舍。选择一个适合自己的。

InfoQ: 你可不可以提供更多关于Ruby中的 ****lambda proc**** 的信息以及为什么两者只能择其一呢?

如果我必须要自己实际建立一个,我会一直使用 lambda。这就是去处理 lambda 如何得到堆栈帧相对于 proc。当你在 ruby 中创建一个块时,你总是要去分配一个 proc,所以那就是你要日复一日要去使用它们的地方。

InfoQ: 在编程中处理日期是在每种语言中最困难的问题之一。你对于日期时间库以及最佳实践给有抱负的 Ruby 程序员的建议是什么?

在我的 LiveLessons 上我给出了一个建议,但真实的答案会稍微复杂一点。这取决于你的应用程序、数据库以及一堆其他因素。更重要的是,最佳实践会随着时间不断变化。因此,我会建议查找目前的最佳实践并且实施它。

InfoQ:记忆—在Ruby中,这和其他设计模式对有抱负的程序员都非常感兴趣。你会给想提高自己的编程技能的新手到中级Ruby开发者除了LiveLessons**** 系列以外推荐什么呢?

看 Sandi Metz 的 Practical Object-Oriented Design in Ruby: An Agile Primer 。然后,再看一遍。当谈到处理对象时,Sandi 毫无疑问地搞定了。这本书将改变你如何永久编写 Ruby 并且向好的方向发展。

InfoQ:你看有哪些其他语言的坏习惯在大部分时间折磨着RoR**** 程序员呢?

过于势在必行。我认为这导致人们会认为他们不能提取对象并且导致系统设计不佳。每当我与初学者 / 刚进入 Ruby 的人工作时,我让他们比在其他方面我会做到的更经常地提取对象。这只是为了确保他们知道这样做是可以的并且它将铸成一个更好的系统。

InfoQ:你可以讨论一下在Ruby中隐藏继承层次如何运作以及如何与其他语言比如Java,在继承上进行比较?

简单地说,每一个对象都会得到一个单例类,这个单例类在继承链中是看不见和直接的。他可以被用来在不修改该类型的所有其他对象的前提下,在单独对象中添加方法。Java 没有这个,我猜测,因为你通常不会在 Java 中动态修改类?一个更完整的解释大概需要一千个单词,并且会覆盖 Ruby 中的大部分元编程架构。在未来,我可能会有一本书来把这个解释包含在内。

InfoQ:你能谈一谈Ruby**** 中的分代垃圾收集器以及在配置它时,开发者需要考虑的任何因素吗?

我真的从来没有配置过垃圾收集器。说实话,从我看到的来说,Ruby 核心团队一直在持续不断的工作,为了常见的(阅读 Rails)工作量来优化它。因此,对于内部构件我不知道太多。但是,这是关于 Ruby 的一件很好的事情。为了能够编写语言,我不需要去知道 GC 的内部构件。

关于作者

Sam Phippen是来自英国伦敦的一名传奇的电脑黑客。他在 Fun and Plausible Solutions 有限公司修正了各种大小的数据问题。他作为 RSpec 核心团队的成员,帮助争取正义的力量。他很难过,他不能拥抱每一只猫。

查看英文原文: Effective Ruby LiveLessons - An Interview with Sam Phippen


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-12-15 17:097938
用户头像

发布了 218 篇内容, 共 74.2 次阅读, 收获喜欢 76 次。

关注

评论

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

鸿蒙(HarmonyOS)原生AI能力之文本识别

猫林老师

鸿蒙 HarmonyOS 鸿蒙应用开发 鸿蒙原生应用开发 HarmonyOS NEXT

AI 智能体(AI Agent)的应用

北京木奇移动技术有限公司

AI应用 AI智能体 软件外包公司

周亚辉的朋友圈,揭开潜藏在AI冰山下的秘密

新消费日报

当Kmesh遇上Ambient Mesh

华为云原生团队

云计算 容器 云原生

开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布

JackJiang

即时通讯;IM;网络编程 MobileIMSDK-鸿蒙端

具身智能赛道很火,值得ALL in吗?

机器人头条

机器人 特斯拉 大模型 人形机器人 具身智能

音乐NFT系统的技术难点

北京木奇移动技术有限公司

区块链技术开发 软件外包公司 音乐NFT

10个案例告诉你mysql不使用子查询的原因

威哥爱编程

MySQL sql

推荐一款免费的数据库SQL审核,性能诊断与优化平台

威哥爱编程

sql SQL工具

人工智能与云计算的结合:如何释放数据的无限潜力?

天津汇柏科技有限公司

云计算 AI 人工智能

华瑞指数云受邀参加航空航天信息技术交流会,以信创存储推动行业高质量发展

科技热闻

荣耀x腾讯云AI代码助手 重构智能时代开发模式

极客天地

新终端·创未来 | 2025上海国际消费电子展开启预定!

AIOTE智博会

消费电子展 消费电子展会 消费电子博览会 消费电子展览会

秒验简介与下载说明

MobTech袤博科技

第79期 | GPTSecurity周报

云起无垠

AIGC GPT

重塑 Java 开发体验:SoFlu-JavaAI 产品体验官招募!100%有礼!

飞算JavaAI开发助手

开发工具 Java. 有奖评测

数据筑底,构建管理会计数据基础

用友智能财务

数据 会计

在香港吃饭必不可少的“OpenRice”,也有原生鸿蒙版了!

最新动态

财务规划的成功战略之一:建立数据驱动型决策

智达方通

企业管理 全面预算管理 财务规划 智能技术

京东商品视频数据接口(JD.item_get_video)

tbapi

京东API接口 京东商品视频接口 京东视频接口

ClkLog埋点分析系统集成指南

ClkLog

sdk 数据集成 开源软件 用户画像 埋点分析

原生鸿蒙2024年度先锋榜:高品质原生应用焕新数字生活体验

最新动态

网络安全养生秘籍-轻松完成等保测评流程

行云管家

网络安全 等保 等级保护 等保测评

荣耀 | 7thonline第七在线荣获托比网与易观之星两项大奖

第七在线

算力荒缓解,自主化智算还有必要吗?

脑极体

AI

AI智能体的开发流程

北京木奇移动技术有限公司

AI大模型 AI智能体 软件外包公司

淘宝天猫API接口详解:商品详情与关键词搜索商品的实用指南及代码示例

代码忍者

淘宝API接口 淘宝评论API

webGL开发框架的技术难点

北京木奇移动技术有限公司

软件外包公司 数字孪生开发 webgl开发

【新年专刊】新的一年设定2025目标--催化型画布

ShineScrum

个人目标

合合信息在视觉内容安全领域的创新与应用 - 应对伪造挑战的前沿进展

申公豹

人工智能 安全

Effective Ruby LiveLessons——Sam Phippen访谈_Ruby_Alex Giamas_InfoQ精选文章