 So I'm really excited that you all came out. I am a morning person. My name is Ernie. I am a morning person. And I'd like to say that it's all just because of the way that I am normally. I've been up since like 5 AM this morning. But mostly it's because I'm from the future. And by the future, of course, I mean the Eastern Time Zone. And I'd like to let you all know that in three hours you will all be bright and shiny and happy and awake as well. So I'm from Louisville, Kentucky. I started saying Louisville after they corrected me for the first two weeks when I said Louisville. And you may know us as the purveyors of fried chicken and also the Kentucky Derby. I have been in Louisville for about 13 years now. And despite that, I guess I've never really properly been kind of Louisville-ized because the Kentucky Derby has never really been a thing for me. I've never gone. I've got no interests really. For me, I think it's kind of amusing that in NASCAR, we like to tease people. We like to tease people for watching cars go around in circles continuously turning left. That's like, oh, such a redneck thing, right? And we like to joke about that. And yet, if horses continually turn left, for some reason, that's something you should wear fancy hats to and drink mint jellips and the like. So I'm not exactly sure about that. So I affectionately call the Kentucky Derby NASCAR with legs. And that's how Louisville I am. OK. So I work for a company called Invisium Security. And I get to work from Louisville remotely. We do application security consulting. And we produce a screencast called SetCasts that, as of last Friday, we just made free. I found the most cheesy free graphic I possibly could. I would encourage you to check that out. So did you all have a good time last night? Did you go to parties? Have a nice dinner, et cetera? Yeah? Yeah? Great. So I had a good time, too. I went with a group of friends to a restaurant called Neighborhood. It was pretty great. I really love this part about conferences in general. But I really enjoyed the time to kind of catch up with friends and just kind of chat about all the rubious and non-rubious things in our lives. I ordered a delicious sounding item from the menu called the Local Animal. As a carnivore, I hardly approve of the local animal. Polish sausages, braised pork, fried eggs, mustard, molasses glaze, or Rugalon, I'm thinking what's not to like, right? So in Sandy's talk this morning, you may have heard her mention that we're all going to die sometime. Now, I took a bite. It was delicious for about five seconds. And then suddenly something happened. Something ignited inside my mouth. It was somewhat unpleasant. I asked the waitress if, in fact, there was an explosion of the dragon population in Poland. She told me that in the mid-'90s, in fact, there was. So if you happen to see the hashtag dragon flesh around, that's what that was all about last night. So oh, yes, yes, that's right. On a bet, I had to include dragon flesh in the talk. So that's that. OK, enough screwing around. So it's business time. You may have heard earlier this year that TDD is dead. In the ground, buried, et cetera. So I got to thinking earlier this year. Well, that's great. But maybe Rails is getting kind of dead these days. And oh, hey, I didn't expect that. So I've been thinking about this a lot because it scares me because I think a lot of Ruby's popularity, obviously, is owed to Rails. Wow, there are so many of you. I love this. Hi, everybody. So I think that Rails is slightly dead, though, in the sense that what we think of as a Rails app these days is very rarely this kind of thick server-side rendering stuff. It's more often the case now that we're writing APIs to support iOS devices. We're writing for JavaScript, NBC frameworks. We're writing all kinds of client-side MVC, and we're writing stuff to support that. And so I think that it's interesting because it seems like we're all not able to escape writing JavaScript anyway. So obviously, I mean, the solution is that we should all move to Node.js. So that's what I'm here to talk to you about today. I don't want you to do that. That's a horrible idea. In fact, oh, I'm not done trolling. In fact, there's this thing, this term, that we use. And it's sort of like, hey, so I'm stuck with this language on the browser. I've been using it so much. Yeah, why not just throw in the towel? Let's just use it everywhere. So anyway, in fact, I've been talking about some stuff since that Rails is a dead slide. But a lot of you probably started kind of freaking out or tuning me out. The interesting thing about polarizing statements is that oftentimes they tell you less about what the speaker has to say than they do about what you all kind of are already thinking, or what you have in your head. Does it freak you out to hear me say Rails is dead? Does it make you go, that's insane. I just started learning Rails two weeks ago. If it's dead, screw you guys. I'm going home. And I really got worried about this because I'm like, what's going to happen to Ruby? Like what is going to happen to Ruby if I get into a situation where Rails is no longer the de facto standard for the case for Ruby in the enterprise, right? And I can tend to romanticize things. And so there's part of me that really sort of has to kind of check myself regularly to make sure that I'm not just kind of getting romantically entangled to the point where it becomes this sort of creepy obsession where it's like a little intense, maybe a little too much. Oh jeez, I shouldn't have looked. So there's the opposite of, sorry. Okay, so there's the opposite of this. It keeps going. So the opposite of this, the opposite of this, where you're creepily obsessed with the technology is the technology agnostic person, right? You know these people. They're all like the right tool for the right job, right? And everything has its place and et cetera. And I don't tend to trust these people because usually they're just afraid to give an opinion. Like they want to just kind of say everything's right. I personally would rather have a favorite. I think it's okay. It's fine to have favorites. Because there are some tools that are not really suitable for any job, and there are some tools that are downright dangerous to use. So then if I'm concerned about Ruby, if I'm concerned about what's next, then I have to start looking at why did I choose Ruby, right? And for all of us that's a little bit different, in the mid 90s some of you all may have been familiar with this guy, his name is Duke. He showed up, he is the mascot for Java. Also in the mid 90s this album showed up. It's called Dukie. Dukie had a different name as well at some point. A lot of you spent time writing Java code and listening to Dukie and saying, this is awesome, Java and Dukie forever. And then after a while you started figuring out that maybe you weren't thinking quite such positive thoughts about Java anymore and maybe it was like Dukie. People got really fed up with the ceremony of Java. And so a lot of people came from Java to Ruby as sort of Java refugees, right? Now I didn't really, I fled from Java pretty early on whenever I saw it, so I didn't really come as a Java refugee. I would like to point out at this point however that I was doing Minecraft before it was cool. So when I was in junior, early senior high my parents wanted me and specifically my father wanted me to dig out an unfinished basement under the house. This is an actual shot that I asked him to send me in a hurry last week of the area that is still not dug out underneath the house. I think you see where I'm going with this. He gave me a pickaxe. Unfortunately this pickaxe did not exist when I was a teenager. This pickaxe did however. He gave me a pickaxe and said get down there and dig out the underneath the house and we're gonna make a finished basement down there and it's gonna be great. You could have your room down there it would be some privacy for you. He had this big grand plan because he had built my house with his bare hands. And so he kind of knew a thing or two about this. This on the other hand was me in junior high. I would like to say that it looked differently in senior high but not too much. The mullet came, the mullet went. It's not too much better. And this equation really did not compute. I was not the mining type. And a lot of it came down to me not really seeing the end result. I spent more energy trying to figure out how to get out of that work or kind of explain that oh yes I totally did dig. Don't you see that area over there? Then I did actually doing the work. My father some time ago finally acknowledged that it turned out that once he saw me get a job doing programming that it wasn't that I was lazy I was just selective. I'm going somewhere with this and it is that I hate busy work and I think most of us do. I hate busy work even if it has an agile button. And so because of this I gravitated towards a language called Pearl at the time. Now Pearl looks really pretty right? It doesn't look that pretty, not at all. This is Pearl sometimes referred to as a right only language. This is all one subroutine from a 14,000 line long pearl module. I'd like to point out that in this subroutine we are actually dealing with one giant regex. This is the search, this is the replace. Yeah, right? So one of the virtues actually there are three virtues of Pearl, that the creator of Pearl Larry Wall head coin. Laziness and patience and hubris. These all applied to me. Again I was a young buck who knew lots of things and thought he was infallible. It got out of the way and the philosophy of Pearl is there's more than one way to do it, right? And the idea is that this gives, for me anyway this leaves the creative process open. It's like the idea that just because this one way is maybe better in certain circumstances it doesn't mean it is the way to do things. This is in stark contrast to another language called Python. Python, if you don't know, has a few little Easter eggs in its repel. One of them is this little Zen of Python thing you can get up by saying import this in the repel. In particular, two of the core philosophies of Python that are very starkly contrasted with those of Pearl and certainly of mine is explicit, is better than implicit, and there should be one and preferably only one obvious way to do it, which Python then helpfully goes on to show you exactly how much they mean it when you try to quit the repel. So that's fun. So then I found after working with Pearl for a while I found Ruby and I was really happy. And like many of you here, I came to Ruby through Rails and I fell in love with Ruby for a lot of reasons, but firstly it's flexibility. It was very much in line with the there's more than one way to do it philosophy. It oftentimes feels like when you step into a problem and you're using Ruby, you feel like a superhero. You feel like there's nothing you can't possibly accomplish because if the language doesn't have the feature you can totally monkey patch it in anyway, right? And there's this other thing, readability that was huge for me for Ruby. I had come from a language, which you saw earlier looked like line noise. So being able to have like stuff like optional parans around things and just kind of a lot of, a lot of like a lot less noise in the code. A real focus on readability was huge for me and I found a lot of joy in that. I found a certain level of expressiveness. In fact, Steve Yeggy, because he's way smarter than me, long ago wrote that somehow Matt's had stolen basically all the good things from everywhere and made them all work together so well that you didn't even know that it was all there. And so these things all really appealed to me and they definitely run true for me. But you know, it's not always always good. Every good side tends to have a bad side and certainly with Ruby we have flexibility which is great, but sometimes in practice looks a little more like this. It's really easy to shoot yourself in the foot. Not nearly as smart or elegant as you think you are most of the time. And then there's the other big problem we've had for a while and which Matt's acknowledged yesterday, which is the story that every programmer parent likes to tell their programmer children before going to bed, the concurrency story. Our concurrency story at the moment looks a little like this. So, this is another one I can't look at because I just lose it. And you know, a couple of years ago, a couple of years ago, Matt's had said that he's not the threading guy. That's cool, he doesn't have to be that. He's like so many other things that aren't threading guy and we owe the language that we use today and love today to him, so that's totally cool. But at the same time, we need a concurrency story in today's day and age. So you guys are thinking at this point, well, he's obviously never heard about Jay Ruby and celluloid. Like clearly we have a concurrency story, right? But I'd like to introduce you to this guy, Tony Arcieri, who happens to have created celluloid and also happens to be what I would call a threading guy. And he's actually said, actually after RubyConf in 2012, he actually said that there were four language features basically missing for him from Ruby that would have made his life writing concurrent applications and writing any kind of concurrency library better. First being deep freeze, the idea of being able to freeze an entire object graph and ensuring that it's immutable from that point on, that makes concurrency a lot easier to manage. Another being deep copy, giving a whole set of the object graph a new duplicate copy to ensure that you're not gonna have any kind of a problem there. Do we have a problem back there? We good? Okay, all right. Another being ownership transfer, the idea of being able to actually take a thread that has ownership over an object graph and saying, okay, this other thread owns it now so that only one thread is able to mutate something at a given time. And the last being concurrent data structures. You need a consistent memory model to be able to accomplish this, but the idea being that much like Java has different types of primitives and structures that you can use that are guaranteed thread safe, we would like to be able to provide that stuff in the Ruby land as well. So he went on to finish up by basically saying that he can't solve these problems without VM level support for these kinds of features. And I had checked up with him on IRC a while back to verify that's the case and he kind of summed it up this way. Eventually you're in a place where you're trying to build a jet engine of Silly Putty. And Silly Putty's awesome. Silly Putty's really cool because it's super flexible and you can make copies of the comic strip and all kinds of neat things like that. Stick things to walls, whatever, right? But this worried me because I feel like more and more I'm running up against situations where I do need a good concurrency story and so what if Rails is dead? And of course that's silly, right? Rails isn't quite dead yet. Okay, we're all using Rails today, probably. And realistically, yeah, Monty Python fans in the house. Good. But not only that, programming languages don't really die so much as just go into stasis. I mean, I still know people today that are using RPG that are friends of mine, strangely enough, and it's not this kind of RPG. It actually looks like this, this is RPG. And it was invented in 1959. People still write it today. See, they were doing hashtagging before it was cool in RPG. And so really it came down to this. I think some of the discomfort that I personally found whenever I was thinking about what happens to Ruby, Rails dies, is that it's a question of where do I actually get my identity? If you put people to it and you say, give them a tag like this and you say, you can write anything on this, but it can't be your name. They'll eventually push comes to shove, write something in. And it might be like, don't make me do this. But oftentimes it's gonna be, at least in the US, it's gonna be their profession. And so for the longest time I had seen myself as a Rails coder. And then I realized Rails was annoying me a lot. And I really liked Ruby still. And so I was like, well no, I'm a Rubyist. That's what I am, I'm a Rubyist. And then that seemed to kind of narrow because I was starting to experiment with other languages again and finding some of them were really interesting too. I don't wanna be a Rubyist, I'm a programmer, right? That's what I am, I'm a programmer. And these are all true things about me. They're not necessarily the truest thing about me. They aren't something that covers sort of the motivation for why I do things. And so to explain where I'm going with this, kind of to back up and explain how I got into programming. So when I was five, we got on Atari 2600. This dates me, I realize, I am old. And I thought it was amazing. I loved to play video games and then a year later we got a Cocoa 2, a TRS-80 Color Computer 2. And if any of you had this, you're gonna find this next screen, especially in nostalgia inducing. Check out that cursor. That cursor says there ain't no party like a Tandy soft party. That's what that cursor says. If we get somebody in the back and I, whoo, whoo. So I found out that like, oh my gosh, like these games that I love so much, I can totally write these. That's within my power. I can make games just by typing things into the computer. And so like most of you, I started off with a very simple program. Any of you familiar with basic? Probably did something like this. I was very excited to find out that I could make the computer lie to me. This was something that was very exciting for me. So when I discovered that I could tell the computer to lie to me, I was hooked at this point. I loved programming from that point on. Okay, we're totally live coding this, by the way. Can you tell? And so I really loved experimenting with all of the various code that I could find. I would go to the school library, I would check out books and type in the stuff and it would have an appendix like, yeah, that's great, right? It was so much cool. So anyway, I spent a lot of time writing basic. And that was the only computer I had for years and years and years. And eventually in my CS classes at high school, they moved us on to Pascal. And my CS teacher was awesome. He told us at the time, I'm gonna give you the entire coursework for the whole year. You can do it, however quickly you can do it, and then you can move on and do whatever you wanna do. So I blew through the book in like a month because I wanted to get back to doing fun stuff and I wasn't finding Pascal fun. It's like, where are the line numbers? I'm so confused right now, what happens? And immediately I went back to writing some games, which was the whole reason I wanted to be a programmer to begin with. So I wrote a poker game and I wrote a pong game. You know, simple little clones of stuff. I wrote a breakout clone, wasn't that though, it was this one. And I realized, you know, this was just like just this year that I really grasp this because I'm slow sometimes, but like it's not so much that I love to be a programmer, but I love to create things. That's what I love to do. I like to build things. I like to see them work and see other people enjoy them. And that was a big wake up call for me. And it explained a lot of what about Ruby specifically appeals to us as Rubyists, right? Matt's got so much right in that the focus on the language was that people wanted to express themselves. And I always feel like programming is a written communication. And it's about how it feels and that you should enjoy it and embrace that fun and creative side of programming. And that's what makes it so much fun to me personally, is that creative side. And I've gotten to the point where I now look at the creative capacity of a new language as the thing that makes me excited. Not just language features, right? Language features are great and all, but the thing about language features is unless they're enabling you to think about a problem in a new way or create something new and impressive that you weren't able to do before, then they're not really buying you too much. Now that does not mean stay like me with basic for years and years and just write little simple games. There's a lot of value in checking out new languages because they help you think about problems differently. And, but I wanna talk about the really the most important language feature that Ruby has in my opinion. And that's the people. And that's what I love about RubyConf and that's what I love about Ruby Conferences in general is that you get a chance to meet other Rubyists. The Ruby community is by far, far and away Ruby's best language feature. And I love all you guys, you're awesome and I'm so thankful to be part of this community. And you find that Rubyists are in generally pretty happy people. They're innately curious people. And we like to be, and we're constantly being surprised usually in good ways by how flexible the language is and by how much we can accomplish with it. But the really important thing in the core at all of this is that I think that in the Ruby community we get better than many other communities that in reality we're all human beings and we have stories and we relate to one another as individuals a lot more than just people that crank out code. And that's why I've come to kind of, you may have noticed a lot of people going out and kind of checking out new languages, new technologies, it's pretty common now. I know Tony's pretty excited about Rust these days and I know that we have Matt Amonetti is very into go. We have people checking out Elixir and in fact one of our own, Jose, in fact created the language. And I got a little worried that everybody was going elsewhere seeking new and exciting things and what'll happen to Ruby. But I've come to realize that that diaspora of Ruby programmers turns out to be a good thing. But while we're on the topic of diaspora I don't mean this goofy social networking thing that probably nobody uses. Do you think it really makes any sense to trust any kind of software whose logo is an asterisk? Like it feels like it's hiding something. It feels like it's hiding something from you. So, but so we have this diaspora that we're seeing. And I think it's okay. You know Rubyists are going out and they're checking out Skull and they're checking out Haskell and they're checking out Elixir. And it's okay because when we go out to these different languages, you know, we're bringing a, you noticed. Okay. All right. So, and maybe a few of us, maybe a few of us. Go ahead. You can do it. There we go. So maybe a few of us are even going back to Java but wherever we go we're bringing this notion that the language should serve the programmer. The programmer shouldn't serve the language. And that, believe it or not, in a lot of communities feels kind of foreign. Like, well, what do you mean this is unwieldy? But we have a really high bar as Rubyists for how far we want the language to come to be human, to meet us where we are. And I think that's a really important differentiator. And more importantly than that, as we go out and as we spend time in these other communities, we come back with important ideas. We come back sometimes with people that are like, I got to check this Ruby thing out because these guys are all deliriously happy like all the time and what's going on with that. And so it's really important to remember that, you know, we don't, it's like Sandy said this morning. Change is constant. What we're doing is going to impact future generations of programmers. And we owe a lot of what we have now because we're standing on the shoulders of giants, people that have created languages before. And so it's really important to realize that these languages don't die. The ideas and the people and the community, that's what endures. These relationships that we make at conferences like this, that's what endures. And these ideas that we bring, we need to carry along with us. So that Ruby, whether we all write Ruby code 10, 20 years from now, Ruby will still be alive and well in the philosophy that we carry with us today. That's really all I've got. Thanks so much for your time.