Matz

We will have a short interview about you as the final nominee for the Ruby Prize.

Jeremy Evans
Jeremy

Yes

Matz

Ok, first I have to ask you, how you feel about that? The Prize and being nominated.

Jeremy

I feel very honored to even be considered. I was just thrilled to be selected as one of the final nominees. All the final nominees have done amazing work for Ruby. So I was happy to be included with them.

Matz

For the audience, could you tell us about the recent works, including about the keyword arguments.

Jeremy

Oh, ok. So I got more involved in Ruby recently after the RubyKaigi. Mostly by submitting bug reports. And then Endo-san recommended that I be a committer, and you accepted. I was very thrilled about that. I have wanted to be Ruby committer and get more involved for a long time. So, for a while after I was made a committer, my main focus was going through many of Ruby’s bugs. Ruby has the issue tracker, Redmine and there were, when I started, about 1400 and something open bugs. Many of them were very old and stale, a lot of them had already been fixed, some of them closed, some of them still existed and were not difficult things to fix. So I spent a long time going through that and fixing bugs that I could fix, closing bugs that were old or stale or already fixed. Probably until late August I was mostly working on that. Then in late August at the developers meeting, you approved the changes for keyword arguments. So in September, I spent most of my time working on changes for keyword arguments. I had an initial patch for keyword arguments since March, but it turns out it was not nearly as comprehensive as it needed to be. Some people had mentioned today during the talks that the internals were gaining simplicity and unfortunately, I don’t know how true that is. There are some very many complex cases in the internals, where things are handled differently mostly for performance. So certain things are optimized and take different arguments. So it’s not like you call a Ruby method and everything goes through one C function. There are tons of C functions and things were handled very differently in them, and methods that are defined with def are called differently internally than methods that are defined with define_method, or functions written in C, or procs defined with Symbol#to_proc. So there are many cases that were not thought of originally, that we needed to go through and try to figure out every single possible case where keyword arguments could be used and not only make sure it’s handled correctly the way we want it to in Ruby 3, but trying to do so in the most backwards compatible manner in Ruby 2.7. So for pretty much anything that people are actually using, if they have a method call that will break or change behavior in Ruby 3, the method call will warn in Ruby 2.7. So that proved to be pretty challenging and took a lot of time. The other thing, other than those two things that I worked on, was making all the changes related to the removal of $SAFE, the global variable, and the removal of taint and untaint. Things like that that also took a large amount of time because so many core classes and libraries that ship with Ruby use that. $SAFE has been sort of pared down, starting out at 4 safe levels, then went to 2 and then 1 and now removing it completely, so there were so many places that need to be changed. I think the challenging part there for the standard library, it gets challenging because all the standard libraries have been gemified and the gems often need to support older versions that might need to use taint and untaint. Not so much taint, but especially untaint, they want to return untainted versions and in Ruby 2.7 that’s going to be warned. But in the older versions we don’t want it to warn, we just need to call them untaint. Dealing with those backwards compatibility issues are very challenging. So those are the three main things I have worked on since I have become a committer.

Matz

Yeah, since Ruby needs to progress to obtain the attractiveness of the community, but at the same time we have to keep compatibility. We have some kind of tough problems. Hahaha. Next question is, how you got involved in Ruby? So how you met Ruby?

Jeremy Evans
Jeremy

So I first started using Ruby shortly after Rails came out in 2004. Before trying Ruby generally on the command line, I was familiar with PHP and Python and then I heard about Ruby. People were saying how easy it is and I tried it and I remember the first thing that really drew me to Ruby was one thing that was really difficult in Python to do, that Python at that time couldn’t even handle. This was using Ruby’s ‘begin, rescue and ensure’, in one clause. You had to have it separated. You could have ‘begin’, the equivalent is rescue’s equivalent in Python, you could do that but you couldn’t also combine it with ‘ensure’. This was before Python had the “with” statement and you couldn’t handle transactional things like you can in Ruby where you have a block and you use ‘ensure’ to make sure that you open a transaction and you close it when it’s done. It was very difficult in Python at the time and Ruby made it so easy. Ruby just in general made the code I was writing so much easier to write and very easy to read. I was so happy about that and I started converting all the code I was writing to Ruby. I work for a government department. I have been working for the same place for 19 years and at the time I was the only programmer, so I was writing all the code in Ruby and now we have many many large systems internally that are written completely in Ruby. Our whole department is automated with Ruby. So it’s just amazing. We only have me and one other programmer now and we support quite a large programming operation. It speaks of the power of Ruby that only two people can support this large programming operation, keep it functional, and add features whenever they are requested. We are probably much much faster than any other government department that I know of, in that regard. And I think that the huge majority of that is the fact we use Ruby and other government departments use Java, C# or something like that.

Matz

Well, then the next question is, how you got involved in programming?

Jeremy

Oh ok

Matz

How old are you?

Jeremy

(laughs) It may surprise people, but I just recently turned 40 years old. So, how I first got involved in programming, is well, I was a mathematics major. I was also studying a lot of accounting. Programming is not something I really considered as a profession. I was actually hired at a place, the government department where I work at now, as an auditor. So I was doing auditing and I didn’t really like that. It was not really for me. I only liked the department itself. Something opened up in the computer department and I had a lot of experience working with computers doing like support level stuff. So I started out doing client support and they kept adding responsibilities to me. So I had to do server support. At that time it was all Windows servers. They wanted me to create a firewall. So I had to learn UNIX and maintain the firewall. Then they asked me in 2003 to start maintaining our department’s website. At that point, to do that correctly, I needed to learn programming. Because it was fairly large and I needed the database to run well. So that was really my first thing and at that time I only had exposure to PHP and I was using PHP. And then for a little while I was using Python internally and quickly, within a couple of years after starting programming professionally, I came on to Ruby and ever since then I have been using Ruby continuously. The whole time and it’s been great. I really like and enjoy programming and fixing problems and Ruby makes it so much fun to do that, much more so than any other programming language I have used.

Matz

So that means that unlike other programmers, you didn’t start very young, during the childhood, you started after graduation

Jeremy Evans
Jeremy

Yeah, I was 23 before I started programming professionally and people who learn and they grow up with it, it comes more naturally to them. I don’t know if it came as naturally to me. I am very happy with the way it turned out.

Matz

Yeah that’s the thing. Some people ask me if it’s too late to start programming after graduating.

Jeremy Evans
Jeremy

No. No, I don’t think so. I definitely think that people can start programming later in life and become very successful at it. So I would like to encourage everyone, if they haven’t started programming, doesn’t matter what their age is, if it’s something they are interested in doing, they should start. I often use programming for automating things I do. Shortly after I learned about Ruby, I ended up creating my own accounting system. So I had a little bit of background in accounting and I was using Quicken at the time, which was Windows-only at that time and I was trying to get away from being reliant on Windows. I didn’t really like Windows and some programs were Windows-specific. So, I ended up writing my own accounting program, originally in Rails and it was great for me to get away from that and from Windows. Pretty much now, all of the stuff I use is open source stuff. It is great to be able to automate the things you do to improve your own life. It used to take me much more time to do that sort of thing. By writing my own programs, it helps me take less time and have more time to do other things. So that’s a powerful thing. If you are not a programmer, I see a lot of people doing the same routine tasks over and over all the time and if they knew programming, they could automate it for themselves and save themselves time in the long run, but it’s obviously difficult for some people.

Matz

The last question is, could you tell us about your daily life to the extent that is not a problem.

Jeremy

(Laughs) So, I have children. I get up, help get them ready for school. My wife does most of the work and then I go to work. I rarely work overtime. Fairly simple get in about 7:30am and leave about 4:00pm.

Matz

Do you work from home?

Jeremy

No. I work for a government department. I am the IT manager there. So, in addition to my programming responsibilities I also manage a small team, I manage a programmer and I manage a couple of support staff that handle laptops, desktops, servers, that sort of thing. So I sort of wear the manager hat. I wouldn’t say I truly enjoy that but it is something that I am responsible for and I take seriously. The part that I really enjoy is still doing a lot of the programming, overseeing the other programmer’s work and helping her complete it and also doing some of the more advanced programming myself. I don’t deal too much, these days, with implementing day to day features. People request features in our applications and we have to implement them and most of that work is done by the programmer and I oversee it. I spend a lot of time working on the libraries to improve how they work so that the programmer’s job is simpler. So a lot of my time is spent there. Recently, since becoming a Ruby committer, a lot of my time is spent improving Ruby itself. So, one of the things about keyword arguments, my main reason for getting involved there is that Endo-san’s original proposal was less backwards compatible than I wanted and it would have required a lot of changes and all my libraries, my applications etc.. So part of the reason I did it was for purely selfish reasons. I wanted to avoid too much backward compatibility issues with my own software. So I spent a huge amount of work on keyword arguments really just to make my own life easier. I think it’s good for everyone, not just me, because it’s much more backwards compatible and I think it’s a good choice generally, but it was my own impetus, the impetus was really was that I wouldn’t have to make so many changes to my own code.

Matz

Yeah, thank you very much. So, congratulations. Congratulations again for the final nomination to the Prize

Jeremy Evans
Jeremy

Thank you very much.

Matz

You know, I appreciate your work. Actually, long work. Since, you were there are the RubyKaigi speaker ten years ago.

Jeremy

Yes, I have been involved with Ruby for a very long time now, in terms of developing libraries.

Matz

Quite a long time

Jeremy Evans
Jeremy

I think, my first request to Ruby was in 2009. It was my first time I was actually involved in Ruby core. I submitted a feature request that was open for a number of years. It was for changing, so, when you use the splat in an array to call as arguments. Instead of calling to_a directly, you would call this *@ method, you would call this unary splat method, like we have unary minus and unary plus. It was an interesting idea but it was deemed not worth it. It was open for a number of years and I don’t think it was rejected for like 5 or 6 years. The second time I got involved, I was working on the Date library which was very very slow at that time and then Funaba-san ended up taking sort of my ideas for it and rewriting it in 1.9.3, greatly improving Date performance and that sort of, I got more involved, started studying more about it and submitting more patches. But I didn’t get heavily involved, like, I was not compiling Ruby myself till after I became a committer. Then was sort of I when I got really involved in it and tried to make as many improvements as I could.

Matz

Yeah. We should have made you a committer long before.

Jeremy Evans
Jeremy

I don’t know if I would have been ready before that. I mean. I didn’t have as much experience writing C when I started, so, it’s probably best that it took a long time. I could get the experience I needed in order to become a committer. So I think it was good choice. It worked out very well and I am very happy with the way it worked out.

Matz

Ok. Thank you very much and congratulations again.

Jeremy

Thank you very much, Matsumoto-san.

糸柳茶蔵インタビューへ
辻本和樹インタビューへ