2018 RubyRussia会议发言人Aaron Patterson访谈

你好 我们继续在RubyRussia会议上对发言人进行一系列采访。 亚伦·帕特森(Aaron Patterson)是Ruby核心团队和Rails核心团队的成员,Rails核心团队是一家名为GitHub的小型创业公司的领先软件工程师。 帕维尔·阿尔根托夫(Pavel Argentov)在第二次前往俄罗斯之前就与亚伦进行了交谈。



让我们从标准问题开始。 你个人的红宝石故事是什么? 你是怎么赶上这列火车的? 告诉我你的成就? 您使世界变得更美好了吗?

我在2006年发现了Ruby。 那时我是一名Java程序员。 让我们更早地开始:我是Perl程序员,然后成为Java程序员,但我不想成为笨蛋。

怎么了

当我用Perl编写时,我们已经有了自己的Web框架。 Rails有很多功能:您可以更改代码,重新加载页面并检查发生了什么。 一切都正常。 当我们切换到Java开发时,它变成了这样:您需要重新编译所有内容-需要10分钟才能检查刚刚进行的所有更改。 我比Java更喜欢像Perl这样的动态语言。 预期会使用Perl 6,因此,在我等待Perl 6时,我了解了Ruby。 想到:“哇! 这就是我所需要的!” 因此,我开始做Ruby-例如,在业余时间用于辅助项目。 你知道,只是为了好玩。 一切始于此。 终于,在2008年,我已经在Ruby工作。

已经是Rails吗?

是的,我的朋友决定创办一家创业公司。 -我们将使用Rails。 您想在同一公司与我们合作吗? 我是这样的:-是的,当然,我会很高兴在“轨道”上工作! 我就是这样开始的。

老实说,我不喜欢在这家公司工作。 因此,在任何机会,无论在工作场所,我都编写了开放源代码。 这样做如下:-好的,该项目需要2天。 然后,我在几个小时内完成了此事,并将其余时间用于开源。

我们称之为:“不要撞到减速带!” 我从容地坐在这里,修理房事。 别烦我,PLIZ!

是的 因此,在这里,我开始使用开源进行很多工作。 在这项工作中,我开始编写Nokogiri,并且通常在Ruby开源上工作。 所以我一般都去开源。 他只是“做出了贡献”,直到有一天他加入了Ruby Core和Rails Core团队。

那么,您是如何加入Rails核心团队的呢?

我们只是发现了错误并开发了Rails应用程序。 找到了错误,我修复了它们并发送了补丁。 我刚刚发送了补丁。 最后,他们对我只是在推动请求请求感到厌倦。

就像,现在把事情掌握在自己的手中,对吧?

是的,可以肯定! 总而言之,这就像蛮力攻击!

听起来合理! 那么您对Rails的总体贡献是什么?

我在框架的几乎所有部分上都做了很多工作。 主要是超过Active Record。 我特别喜欢修复错误并提高性能。 此附件的原因是它使某人的应用程序更好。 如果应用程序变得更好,每个人都会感到高兴,并且您不需要为此做任何事情。 这就是为什么我喜欢研究它的原因。

您进行了一些“小”改进,使所有工作正常进行。 但是,您不是必须设计“大”东西吗?

通常,每当我在Rails中做一些建筑上的事情时,它都在里面。 例如,在路由器内部使用URL,关联,小控件的架构-诸如此类。 这些事情都不是必须引起注意的。 用户可以看到它们,但是形式不是:“这是真实的东西!” 我尝试坚持那种风格。 我认为这确实不错,因为David( DHH -P.A.)喜欢制作新的出色功能。 相反,我对自己说:“那么,让我们将它们作为您的高级功能。 您看,事实就会变得很美!”

是的,必须由他人来完成所有手动工作。 例如,您在会议上的演讲将涉及Ruby的某些深度工程部分,尤其是有关Rails的部分。 演示实际上是关于什么的?

实际上,我将讨论Ruby内部。 我的演讲全文还没有结束。

GC,性能,所有这些,生命,宇宙42?

我正在考虑谈论垃圾收集器,Ruby编译过程和字节码。 基本上,关于虚拟机中的字节码及其与垃圾回收器的关系。 关于我在GC中进行的一些性能改进。 我不希望谈论Rails。

我们的会议以前称为Rails Club。 我们的组织者进行了思考,并重新命名了整个想法,这主要是因为Matz表示他从未参加过会议,标题中都带有“ Rails”一词。 所以,现在我们是“红宝石俄罗斯”!

所以,我将谈论Ruby内部!

您认为,Rails程序员应该怎么做才能在代码中获得更好的性能?

有几种策略。 首先,一般来说,不要做任何特别的事情。 只需编写您的应用程序。 启动它,获取客户,反馈等。 立即分析检测到的瓶颈。 在与客户实际合作发现瓶颈之前,切勿处理瓶颈。 如果您处理的并不是真正的瓶颈,那是浪费时间。 这次可以用于新功能。 但是,我认为很多人会说同样的话,所以让我们谈谈真正影响性能的因素。 首先,仅查看页面进行的数据库查询。 这是第一道防线-尝试减少花费在特定请求上的时间。 查询本身-自动化和减少。 您将不会相信我们忘记添加索引的频率。 哈! 因此,至少将索引放在正确的位置。

我进行技术面试,并想象人们如何忘记甚至一般的指标。 为什么您完全需要为此担心?那么,您对红论者应该知道的其他事情怎么说? 摩擦学家应该知道哪些技术方面的事情才能更好地完成工作?

有几个这样的作品。 我认为,第一个是要了解Ruby语言本身。 仔细学习语言。 第二个是要很好地理解UNIX。

您是第一个说“我”的人,说您需要了解UNIX。 因此,我个人从UNIX世界来到Ruby。 我从事Linux,FreeBSD和大量Perl代码的工作。 我以另一个Perl的身份来Ruby从事系统管理员事务,然后才发现它也是一种Web语言。 因此,您说您需要了解UNIX。 如何以及为什么?

研究POSIX标准及其与操作系统的交互方式非常重要,因为一旦开始扩展,您将立即遇到此问题。 你...

...应该知道费勒将军是谁,为什么他要阅读我的文件?

哈哈 您需要知道什么会改变性能。 也许您不需要特别地记住这一点,但是您应该知道它们(系统调用-P.A.)存在,以及如何搜索它们,因为您一定会遇到这种经济情况。 它们很重要,因为该应用程序已部署在UNIX服务器上,因此您需要了解该应用程序将如何与将在其上运行的OS进行交互。 另一个重要的一点是,如果您在UNIX上具有此技能,则可以将其应用到其他语言中。 如果遇到任何问题,您始终可以从这一点开始。 这也许是我建议程序员学习的主要内容。

您认为让摩擦论者知道任何其他语言是否有用? 如果不了解Ruby以外的知识,是否有可能成为一名优秀的Ruby程序员?

好问题。 老实说,我不知道。 我认识的所有好朋友都知道其他语言。 但是,我不知道是否有必要学习其他语言才能成为一名优秀的Ruby程序员。 我认为人们会学习其他语言。

好观察! 从医学的角度来看,一个人知道的语言越多,延迟患阿尔茨海默氏病的时间就越多。

哈哈

40岁以后,您必须考虑这些事情...

我快40岁了! 我很高兴知道!

让我们谈谈Ruby本身。 Ruby是一门拥有悠久历史的语言。 他有未来吗? 不久前,我在圣彼得堡参加了俄罗斯最大的IT会议之一。 当地的红宝石社区没有参加这次会议。 我经常不得不做Ruby辩护法:Ruby并不是那么死,他们仍然写Ruby。 顺便说一下,R​​uby具有最著名的Web框架-以及所有这些。 现在市场上的每种主要语言都具有某种Web开发工具。 快去,Rust,随便吧。 Ruby在这个生态系统中的位置是什么,“ Ruby辉煌的过去”有未来吗?

我认为这个问题的答案有几个方面。 Web框架有许多不同的语言,但是我仍然认为,如果从开发人员的人机工程学角度来看它们,无论如何,Ruby仍将是最重要的。 它易于使用和出售。 问题在于Ruby不再是“崭新而又辉煌的”。 人们想通过一些新事物而迷失方向。 他们想赶上Rails之后的下一班火车。

他们想要新车的味道!

是的 关于未来... Ruby中有很多新的开发,特别是关于JIT和Koichi:guilds合作的对象。 我想说Ruby绝对有未来,但是每个人都必须为此而努力。 如果我们做出正确的努力,未来一定会。

Ruby在Web开发以外的领域是否有其他见解? 还是您知道在Web开发之外现在使用Ruby的任何示例?

好问题! 这很难回答,因为我只处理Web开发问题。

我问,因为这是我个人的利益。 例如,Python社区的家伙喜欢吹嘘自己在科学计算领域的成功。

我知道有一个小组致力于Ruby中的科学工具。 但是我认为Ruby的真正替代方法是系统管理。

我们如何将其他语言的开发人员带入我们的社区?

这是一个非常好的问题! 我认为我们只需要关注开发的人机工程学,着眼于使开发Web应用程序尽可能容易的原因。 我们需要集中精力降低登上和编写Web应用程序的新开发人员的入门门槛。 因此,我们将吸引更多的新程序员。

现在该是有关JavaScript的好莱坞问题了。 众所周知,有一种说法:“所有可以用JavaScript重写的内容都必须用JavaScript重写。” 您认为Rails也将用JavaScript重写吗? 我们讨论了开发Ruby的人体工程学。 这是Rails最好的东西。 俄罗斯一位非常著名的程序员说:“许多语言都不错,但只有Ruby才有Rails。” 但是,JavaScript开发人员往往对此表示怀疑。 我们如何与JavaScript竞争? 还是我们应该和他共生?

的确只有Ruby有Rails。 如果您查看JavaScript的网络框架,则在开发人机工程学方面,我认为它们与Rails不具有可比性。 事实是,由于我们正在编写Web应用程序,因此必须使用JavaScript。 我们必须是JavaScript社区的一部分。 共生对我们很有用。 如果可以在服务器上运行任何语言,为什么要使用JavaScript? 但是语言很好,我认为我们需要共生。 易于开发仍在我们这边,在Rails社区中尤其受到赞赏。 所以,您参加了IT会议,您必须在那里担任Ruby的代表吗?

这是非常非正式的,因为我什至都没有关于公司或语言的T恤。 因此,我只是找到了最聪明的年轻人群体,他们原来是蟒蛇派,然后我们开始聊天。

对于我们来说,如果我们与其他语言一起合作而不与他们竞争,那将是一件好事。 就我个人而言,我认为使用Ruby进行编程比使用其他语言更加容易和有趣。 为什么不呢 我们正在谈论其他编程语言以及是否应该了解它们。 我相信,摩擦论者学习其他语言非常重要。 诸如Java,Haskell或其他功能如Elixir或Lisp之类的东西。 我认为研究不同的范例很有用,因为当您学习新事物时,可以将其拿走并用自己的语言使用。 Ruby的一个好功能是我们可以在程序中使用各种语言的技术。

是的,例如,我们拥有用于功能编程或执行map / reduce或其他功能的工具。

是的,我们可以使用所有这些。 如果您使用鼓励使用这些技术的语言,则可能会找到解决问题的更好方法。 我不确定是否有必要学习其他语言才能成为一名优秀的摩擦论者,但这项研究一定会对我有所帮助。 老实说,我花了50%的时间在C语言中编程。

C使手指更强壮!

我正在用C编程,以便其他人可以在Ruby中编程。

Ruby内部是用纯C而不是++编写的吗?

干净。 如果更多的代码是用Ruby编写的,那就太好了,但是老实说,出于性能原因,一些主要的事情应该用C编写。 我正在做的事情之一...我们需要改善内存配置。 因此,我正在研究Ruby中的内存分析工具。 由于所有内部都是用C编写的,因此我必须用C编写工具。 在工作中,我编写了大量代码。

Ruby如何处理FFI等?

如果您的工作中需要一个或两个函数的C库,则FFI可以很好地工作。 如果事情更复杂...那么一切都会更复杂。 使用FFI时,您基本上会编写类似于Ruby的C代码。 但是,您仍然必须做一些神秘的事情,例如内存管理。 我个人发现,如果您使用C来管理内存等,则在这些世界之间切换更容易。 在其他情况下,我改用Ruby。

在Ruby中,我们是否有其他语言的接口?

一些与JavaScript的接口。 我看到一个从事科学任务的人,所以他与Python进行了交互。

它是否直接与语言运行时交互?

是的,完全正确。 不像炮击之类的东西。该项目仍处于试验阶段。 当他演示时,他说“一切正常,但可能会失败!”

我认识一群创建过Rust的著名摩擦论者。 您为什么认为人们这样做,他们做得如何?

我喜欢Rust,我认为这是一种非常好的语言。 人们选择Rust的原因...他们想要一种比C语言提供更多安全功能的语言。 用Rust重写Ruby真的很棒。 我个人是Rust的忠实粉丝,我爱他。

有什么用? 是更安全,更快还是什么?

我认为这更安全。 我不确定它是否比C更优化,但是绝对更安全。 这就是我喜欢他的地方。 当我编写C代码时,几乎可以确定它不是SEGV,但不是100%肯定。 但是当我用Rust写作时,我相信还有更多。 当我用C编写时,我很确定不会有内存泄漏。 使用Rust,很显然是白色的日子,不会有内存泄漏。 这就是为什么我个人更喜欢Rust而不是C。 我也开始学习Rust,因为我想在上面编写Ruby扩展。 有一个名为“ Helix”的整个项目-专为此目的。 通常,当我用C编写代码时,就像:“好,我有一个C库,我必须编写几个拐杖来从Ruby访问它。” 为此使用Rust是一门麻雀大炮。 在我理想的世界中,一切都将在一天之内用Rust重写整个系统。 Rust将成为我们的新C。 如果您需要快速解决问题,请使用Ruby编写。 操作系统将基于Rust。 每个人都会很高兴。

Rust足够成熟吗?

好吧,我不知道。 我想是的 在Mozilla,他们使用它-并感到满意。

通过在Rust中运行程序来“看到寄存器”的机会是什么?

哈哈,我不知道! 希望低! 看到这根本不是荒谬的。

特别是在浏览器中启动某些内容时。

是的 弹出有关崩溃的消息,您就像这样:“确定”。 哈! 在工作中,我们用C ++编写了一些东西,有时当我崩溃时,我会像这样:“嗯……”

我想用一种语言编程,而不是用宏汇编器编程! -当我从C切换到Ruby时,这是我最喜欢的笑话...

你说的没错 每当我用C编写代码时,问题就是我应该考虑什么。 我真的不认为要解决的问题。 使用Ruby,我不需要考虑所有这一切(低级经济-P.A.)。 我只关注程序的逻辑,我在做生意。 这就是我这么爱Ruby的原因之一! 当我在Java 1.3期间最精打细算时,那时泛型才在那里出现。 每次我必须编写诸如map之类的东西(例如集合或迭代器)时,我都必须执行“ iterator.next()”,然后强制转换结果值……然后进行必要的操作。 然后我开始学习Ruby,而地图已经在Perl中了……

哦,奇迹! 就在我手中,我有一个需要的确切类型的对象!

是的,完全正确。在Java中,我必须编写15行代码才能实现我在Ruby中作为单行可以完成的工作。我会用Ruby编写代码,我会更快地完成工作!而不是写所有这些垃圾!理解这一点使我感到很不高兴。我花了几个小时来增加流量!

存在的恐怖!

没错! . Ruby. !

, Ruby ?

, , , . , . , , , . , , , . , .

, 90- . . C++. , « ». «» . Java, Perl. Ruby , .

. -, C++ Java, . , ints. , , . Ruby — . . , . , .

, . . , .

OO Perl. , , OO- . Java, , OO. -. Ruby — , .

, ?

! , : , Ruby — , . , , Ruby, . , , , Ruby . - , : , Ruby- !

. , Emacs Ruby, : « , !»

, , — , , . . , Ruby .

6 . 因此,在会议上见! 该网站上的所有详细信息。

您可以在hype.codes上阅读英文原版

非常感谢支持俄罗斯主要Ruby活动的公司:

一般合伙人-Toptal
黄金合伙人- 盖特库克帕德
银牌合作伙伴-InstamartUCHi.ruJetBrainsQlean
课后合作伙伴-Teachbase
铜牌合作伙伴-BookmateInSales

Source: https://habr.com/ru/post/zh-CN424787/


All Articles