I am Aaron Patterson (tenderlove), Core team member of Ruby and Rails, and Software Engineer at GitHub. Ask me anything!

Hi everybody!

My name is Aaron Patterson, aka "tenderlove". I am a Senior Software Engineer at a small startup company called GitHub. I'm on the Rails Core team, which is the team responsible for developing and maintaining the Rails web framework. I'm also on the Ruby Core team which is the team responsible for developing and maintaining the Ruby language.

I love programming, cats, and cooking (specifically meat curing). I am also a mechanical keyboard enthusiast and amateur / beginning hardware hacker. Please ask me anything!

As some ideas for stuff to talk about:

  • I've been working on a compacting GC for Ruby so we could talk about that.
  • I've been looking at speeding up template rendering so we could also talk about that.
  • Concurrency and parallelism in Ruby
  • Making stuff with AVR chips
  • Which mechanical switches are best
  • Cat stuff
  • How puns are created

Comments (75)

Mark's photo

What's your opinion on Crystal? Is it a good idea to make a statically typed Ruby (if you agree with that description), is that something Ruby needs? Is a new language better than a gradual change like e.g. Typescript or mypy?

Aaron Patterson's photo

Programmer and Friend to Cats

OMG!! Thank you for this question! I love Crystal! Honestly, if I had more time in my day I would love to mess with the internals. Crystal uses the Boehm GC, and I think it could benefit from a custom GC like Ruby's GC.

As for static typing in Ruby, it's a tough question. I understand the benefits, but as someone that came from the Java world (don't tell anyone I came from the Java world), my hands are tired from typing types. I personally would prefer a gradual typing system like Typescript (but for Ruby). I know the Stripe folks have been working on something that seems extremely interesting.

I'd prefer to keep the same language, but introduce gradual typing. But that doesn't mean I would not use a different language 😉

I hope this answers the question!

Agung Setiawan's photo

Thank you for doing the AMA

How did you first contribute to Ruby? In your opinion, what skill and what experience one need to be able to contribute to the Ruby language development?

And, how do you learn Japanese? :D

Aaron Patterson's photo

HOW DO I START THIS, AM I DOING THIS RIGHT?????

Arnaud Berthomier's photo

So far, so good. 🤣

Dave Kimura (kobaltz)'s photo

What are your thoughts about Javascript Frameworks (React, Vue, etc) and Rails verses Rails + Stimulus/Turbolinks?

Aaron Patterson's photo

Programmer and Friend to Cats

Hmmmmm, that is a good question. I really prefer to write as little JS as possible, so on personal projects I'll use Stimulus / Turbolinks. However, I have no opinion on what JS framework is best. I trust the front-end folks I work with to pick the best tool for the job, and I do my best to support their choice.

Alberto Rocha's photo

I have noticed several developers are migrating from ruby to new languages, not because these new languages are better, but because developers like to be trendy. Do you agree this is not good for a developer's career? Since the developer doesn't deepen their knowledge in the language details and never becomes a real senior in the field. Also, companies are hurt by the lack of senior professionals.

Aaron Patterson's photo

Programmer and Friend to Cats

I do agree with this. I think it's still possible to be a good systems programmer even if you switch languages, you just have to study POSIX. You'll have to learn how POSIX stuff is handled in each new language, and that can be a barrier. But I do think that frequent switching makes it difficult to be a senior in that language.

Sandeep Panda's photo

What's the best part of being Rails core team member? Who do you admire the most in Rails community?

Aaron Patterson's photo

Programmer and Friend to Cats

I guess the best part of being on the Rails core team is that I get to help shape the direction of Rails in the future. I admire many people in the Rails community for different reasons. DHH for his skill to cut through bullshit, Rafael for his patience and selflessness, Eileen for her drive and skill. I try to pick out the good qualities of the people around me and incorporate them in to myself. I feel lucky to be part of such a good community!

Samuel Cochran's photo

What is your favorite pun?

Show all replies
Fabian Zitter's photo

And just because i can show off my language skills here: tenimotsu wa te ni motsu?

Philip Lambok's photo

Hi, Aaron.

Can you share how you structuring your rails project?

Thanks.

Show all replies
Aaron Patterson's photo

Programmer and Friend to Cats

We explicitly render views with local variables. But typically we'll pass a view object because passing a ton of variables gets to be too cumbersome.

Sandeep Panda's photo

Why are there more cat videos than dog videos on the internet?

Aaron Patterson's photo

Programmer and Friend to Cats

Ah, probably because cats are super adorable. 😉

Arnaud Berthomier's photo

It's nice to see the GC is getting improved 💖. There is some research suggesting that using malloc_trim(3) during garbage collection could limit fragmentation too (at the OS level). Do you think this could be combined with a compacting GC in the Ruby VM, and do you have an estimation of how much this would improve mem usage?

Aaron Patterson's photo

Programmer and Friend to Cats

Good question! We actually use jemalloc at work, so the OS level fragmentation issues that Hongli pointed out don't really impact us. See this link:

joyfulbikeshedding.com/blog/2019-03-14-what..

I do think that combining this with a compacting GC would be helpful, but it's hard for me to estimate the improvement since it's very application specific. The next thing I want to work on is implementing a "variable width allocator" for Ruby. Right now Ruby's GC can only allocate fixed width slots. That means that things like string are allocated via the OS allocator, and that's what causes the fragmentation. If Ruby's GC could allocate various sizes, then the GC could control the fragmentation as well as compaction at the same time. This would fix the fragmentation issue and also be allocator independent. IOW it wouldn't matter if you use jemalloc or just glibc.

Tiago Celestino's photo

What do you think about people that say it Ruby is a magic language?

Aaron Patterson's photo

Programmer and Friend to Cats

It's only magic if you don't understand how it works. If you take the time to learn, the "how does this work?" magic goes away. However, the magic of the joy of programming remains. 😊

Chris C's photo

Hey Aaron,

Thanks for the AMA!

What does your average day at work look like?

Aaron Patterson's photo

Programmer and Friend to Cats

Hi!

My average day is very structured. I wake up at 6:30, go to the gym, study Japanese, pet the cat, go to work. I work at home, so "going to work" is just going to my home office. The stuff I work on varies day to day, but it's typically working on Ruby, working on Rails, and supporting other developers at work. It's hard to say what I do because it's mostly just random stuff people need at that moment. Also I check email. I get too many email. 😉

Loke Carlsson's photo

What do you think about the JAM stack?

Aaron Patterson's photo

Programmer and Friend to Cats

It's fine. Honestly I don't have too much of an opinion on it. I'm not a JS person, so in my personal projects I wouldn't use it. But I trust the front-end people I work with to make good decisions in that space.

andreas wagner's photo

heya, do you know about the Hanami framework? have you worked with it? what do you think about their approach in terms of structuring apps and software paradigms?

also: i am glad you do the things you do, both on the ruby language, and on the pun twitters. thank you for your contribution :) also: friday hug, on a sunday :Pheya, do you know about the Hanami framework? have you worked with it? what do you think about their approach in terms of structuring apps and software paradigms?

also: i am glad you do the things you do, both on the ruby language, and on the pun twitters. thank you for your contribution :) also: friday hug, on a sunday :P

Eugene Pirogov's photo

Hi Aaron Patterson! Thanks for the AMA! A couple of questions:

  1. What would you say to a 20 y.o. you?
  2. What's your best memory of 2018?
Tim Case's photo

What's your thoughts on Rubocop?

Kasper Grubbe's photo

Also, what's your thoughts on Robocop?

Melvin's photo

Hey Aaron, I just saw ya speak at The Traversal conference the Turing School hosted last week in Denver. You talked about keeping instance variables out of your views and it made me wonder what other ways can ya pass around state under the hood without using instance variables in ruby/rails. Also have ya played around with elixir/phoenix? Are there any projects at github that you know of using that language/framework?

Show all replies
Melvin's photo

Can i join the channel. :)

Sandeep Panda's photo

Hey Aaron! Thanks for the AMA. :) What other languages do you use (and admire) besides Ruby?

Aaron Patterson's photo

Programmer and Friend to Cats

Hi!

Languages I use besides Ruby that I actually like: Elixir. I use many languages, but I was trying to think of other languages I use that I really like, and I think Elixir is the top. It's easy to use like Ruby, but functional like Scheme. I really like it.

Nikhil Rangpariya's photo

How To Get Clean and Maintainable Code in Rails with Service Objects?

Y's photo

What do you think about Ruby 3x3 ?. Matz had promised to add concurrency support in ruby 3. Do u think this will make significant performance increase?. How about the languages like elixir and go. Will the new ruby performance will catch up the performance of modern languages that are competing for speed.

Nikolay Shebanov's photo

Hey Aaron,

How should I approach the mechanical keyboard world if I do like the mac layout (i.e. 4 keys to the left of the space button) and prefer to not switch (bad pun)?

P.S.: I should've asked you this when we rode a limo together...

Vipul's photo

Future of RoR.

Cheah Jer Fei's photo

How do you see Ruby in 5 years?

Cheah Jer Fei's photo

Since you've been working on GC for Ruby, what do you think about non GC languages like Rust?

Cheah Jer Fei's photo

How do you value a Software Engineer?

Cheah Jer Fei's photo

How is it like working in Github, like what do you normally work on? And how do you manage your time to work full time, learn new stuff and contribute to RoR?

Fabian Zitter's photo

So, this is a question involving a pretty harsh background story, so the weak of constitution might want to skip this...

You’ve been warned, so here it goes: Last year on ruby kaigi, I was kind of trotting around about a serious issue, but couldn’t muster the strength to ask you. No, it’s not “will you marry me”, but close in how serious it was.

I seriously needed a cat sticker, but you always seemed to be engaged in important conversations, so when I finally got around asking you for a car sticker, (and of course received it) I put it into my ruby kaigi visitors pass plastic wrapper thingy, but instead of heading straight home and putting it into the hotel save, I went to the Shopify karaoke party.

Long story short, I got drunk and lost the stickers! I know, I know... Please don’t blame me, I was young and I swear someone might have stolen them and sold them on the black cat sticker market.

So, here is my question: if you could, would you go back in time and approach me earlier about the stickers?

James Gardner's photo

What do you think about the importance of communication skills for software developers?

How important it is for you or for the software developers at your level?

Michael Minton's photo

I saw you at an Elixir conference last year. Was that just for fun or do you have an active interest in Elixir?

Guilherme Carreiro's photo

Hey Aaron :-)

How do you split (%) your daily routine? Between coding, code reviewing, playing games with your cat 🐱 and studying? (I really try to find a balance between these things).

Cheers,

Aaron Patterson's photo

Programmer and Friend to Cats

Hi! Honestly it's really hard. Basically I just made a habit and then stick to it. But, I wake up at 6:30 go to the gym, get home at 8, study for an hour, work until 5 or 6, do some personal projects and cook. I don't always get to do personal projects, so sometimes I have to cut that. The rest is pretty consistent though. I have to pick the things that are important to me and the cut the rest.

Zack Burt's photo

Hey Aaron!

Do you have any suggestions for typically-overlooked channels for recruiting experienced Rails talent?

Ashish Kumar Sahoo's photo

What's that one feature available on Rails but not on other frameworks?

Aaron Patterson's photo

Programmer and Friend to Cats

Hmmm, good question. I don't know all the frameworks that are out there, but one thing I like about Rails is that it comes with so much just baked in for you where many other frameworks require you to plug things together. I think this good "out of the box" experience is my favorite feature that Rails provides that most other frameworks don't.

Rupesh Krishna Jha's photo

Hi Aaron Patterson , thanks for AMA, Since I love to contribute in open source on github so I want to know about journey to become a developer at Github and also what makes you a better developer ?

It would be very inspiring for me .

Show all replies
Rupesh Krishna Jha's photo

Full stack web developer || Open source enthusiasts

thanks a lot Aaron Patterson, for your reply . It's really great talking to you . Thanks again for sharing your journey .

muktesh's photo

What do you think about future of Concurrency and parallelism in Ruby? How would be that in comparison to current state of concurrency and parallelism in other languages?

Thanks.

Aaron Patterson's photo

Programmer and Friend to Cats

Good question, and I could talk about this for a long time (but probably shouldn't). Concurrency and parallelism are tough to get right. Anyone that has written threaded code knows this. Koichi has been working on a concept called "guilds" which I think can be thought of as kind of "actors". The idea is that most concurrency bugs come from mutating shared data. So Guilds don't allow that. If you want to share data, you have to copy it, or you need to make a read-only version of that data. I think one thing that would help push Ruby forward towards a more concurrent / parallel world would be if there was an easy way to declare deeply nested read-only data structures.

Kiran Patil's photo

Hi Aaron,

What are the upcoming Github contributions to rails ?

How are you handling multitenancy in Github ?

Is it based on any standard gem like "apartment" .. ?

Are you planning to contribute toward multitenancy as well to rails ?

Thanks.

Aaron Patterson's photo

Programmer and Friend to Cats

Hi.

Right now we are working on upstreaming custom Rails template compilation stuff we have. Template rendering in our application is much faster than the default, but the way we've implemented it, it won't work in all cases. We're currently working to eliminate those corner cases and upstream the work we've done.

We have custom code for dealing with multitenancy. Our goal is to upstream everything we can, so we'll contribute this as well (though we don't have any concrete plans right now).

Tobias Bühlmann's photo

Will we see you at Ruby Unconf Hamburg this year and will you bring gorbypuff stickers?

Aaron Patterson's photo

Programmer and Friend to Cats

Hahahaha! Sadly, I don't have any plans to be at Ruby Unconf this year. If I can make it, I will absolutely bring stickers!!

Amalrik Maia's photo

What is your process to learn a new large codebase?

Aaron Patterson's photo

Programmer and Friend to Cats

Oh this is a good question. The very first thing I do is open Vim in the codebase and run ctags. That way I can quickly jump around the code and figure out what's going on. From there, it depends on the project. For example, a Rails application, I will read the routes file so I can figure out what routes go to which controllers. For a C application, I'll jump to the main function and read that. For a Ruby gem, I'll check a test file or the README and learn how the sample code works. I think the main, best tool though is to make sure to use ctags/Vim or some combination that lets you jump around code quickly.

Max's photo

Any tips how to get remote job in product based in USA, without living in USA?

(Secret question: 3 cats or 5 cats?)

Aaron Patterson's photo

Programmer and Friend to Cats

Hello!

To be honest, I'm not sure. I think it's becoming more common for US companies to hire remote workers, even outside the US. But I would definitely say it's not the norm. I would just suggest looking for US companies that have an international presence and see if they hire remote in your country.

(I have 2 cats, but I want 3)

Milica Maksimović's photo

Hey Aaron,

Thanks for finding the time to do the AMA!

Which keyboard and switches do you use and can you give some tips to people who are just getting started with mechanical keyboards? Would you recommend those gaming keyboards or not?

Aaron Patterson's photo

Programmer and Friend to Cats

Hi!!

Thank you for asking this question!!! The keyboard I use everyday is the ErgoDox EZ. I love it because I have to type a lot for my job, and the vertically staggered switches are much more comfortable than the horizontally staggered switches on regular keyboards. It does take time to get used to, but since I have to type all day for my job, it was worth it. My switches are Kailh Box Navy switches. I chose them because they are the loudest switches I could find. I love loud switches and I work from home 😉

A gaming keyboard could work, but I'm not sure I'd recommend it. From what I understand (I don't really play PC games), gamers seem to prefer Cherry Red switches which are linear switches. They don't give you the same feedback as you type. I think that feedback is important for typing tasks, so I wouldn't use those switches. If you can get a gaming keyboard with Cherry Browns, or Blues, that would be better, but I don't know if the keyboard would also be good for gaming.

Wang Y's photo

Which improvements in terms of concurrency and parallelism in Ruby can we expect to see?

Rafael Morais's photo

Do you feel like Ruby and RubyOnRails are becoming less relevant?