00:00:00.480
Um, I was talking to the rocketeers a moment ago, and as it turns out, I realized there was an oversight: we haven't done a Friday hug yet and it is, in fact, Friday. I was told, you know, we don't really do that, and I was just like, that's not going to stand. So, we're going to do a Friday hug. But before I do that, I want to thank all the sponsors and the organizers at Hashrocket for having us out here. Just a round of applause for them, please.
00:00:14.460
And I have it on very good authority that you should probably actually just give any rocketeers you see a hug. You know, when you see them, they would totally love that. So, if we could just get the blood flowing and the energy pumping, it’s the last talk of the day. I know you’re all full of food and information, and your brains are overflowing, but if we could all just stand. If you don’t know what a Friday hug is, it’s hugging the internet.
00:00:25.279
So imagine the internet is in front of you and just outstretch your arms. Say, "I can’t do one properly!" All right, and on the count of three: one, two, three! Okay, thank you very much for your patience. That was well worth sacrificing some of my time.
00:00:44.000
So, uh, my name is Ernie Miller. I work for a company called Invinsium. We are an application security consultancy based out of Herndon, Virginia, in the DC area. If you’re not too familiar with the geography, I’m guessing everyone in this room has applications, and you probably want them to be secure, so you should all talk to me later. I would like to talk to you.
00:01:05.000
I work remotely from Louisville, Kentucky. If you are familiar with Kentucky, it’s probably because we are purveyors of fine fried chicken. Perhaps you are familiar with some of our other fine products from Kentucky. Um, I thought so. Right, so, you know, there was a distillery tour last night and I was just like, ‘Oh, so you have distilleries? How cute!’
00:01:20.880
Um, I did the pirate ship tour; it was very wet. You may also know us from the Kentucky Derby. Now, I have a confession: though I’ve lived in Louisville for years now and I love living there, I have never attended a Kentucky Derby. I find that kind of funny. So here are some cars, and they are repeatedly turning left. This is what they do, and we call this NASCAR. I guess people like to watch it, and some people make fun of those who do it, you know, because they drink too much and put stupid things on their heads.
00:01:41.399
And that’s obviously a very redneck thing to do, right? So here are some horses; they are also turning left, and, um, I guess that's fancy. We also have people that come out to watch them, drink too much, and put stupid things on their heads. But that’s obviously, you know, an indicator of their high society membership. So just once again for comparison, this is why I affectionately call the Kentucky Derby ‘NASCAR on legs.’
00:02:02.560
Um, but anyway, it’s business time at this point. We need to get down to some business. I have some very serious things to discuss. You all may have heard, around this time last year, some troubling news about TDD. As it turns out, TDD is dead. We didn't know it was, but I have good news everyone: 90% of everything is crap.
00:02:15.960
So it includes 90% of that talk in which TDD was declared dead, and it probably includes 90% of this talk too. So some more bad news, everyone: we’re already 10% into the talk, and if you’ve enjoyed what you’ve seen so far, it’s all downhill from here. So what if I were to tell you that Rails was dead? What would you think about that? Oh, there.
00:02:35.360
Okay, so I don’t really mean dead-dead, but let’s think about it for a minute. You know, the way that we use Rails today is oftentimes to provide a backend API to some native applications, whether it be Android or iOS or Windows Phone. Do people actually use Windows Phones? Anyone in the audience use Windows Phone? Woo, okay.
00:02:44.400
Um, or maybe some client-side MVC frameworks, right? We’re using it to provide data for other application frameworks at this point, less so than building thick server-side rendering engines. So the way that we use Rails has obviously changed. If Rails is dead, I guess I’m here to tell you that we should just throw in the towel and use JavaScript for our full stack.
00:03:04.320
So the rest of my talk will be about Node.js. No, no! Don’t do that; there is no excuse for that. Um, Ruby is still a wonderful language, and I would much rather see you all using Rails than Node. In fact, I’m having a hard time understanding why someone would choose to use the same language that they’re stuck with on the browser for over a decade. Like, ‘Oh, well, since we’re stuck with it, I guess we should just continue to use it everywhere. It must be really good.’
00:03:19.760
Um, so anyway, honestly, the stuff that I said in the past minute and a half really doesn’t matter because whenever you hear ‘Rails is dead,’ you probably made an assessment about what I was actually going to say next and shut off. Um, that’s actually the interesting thing about polarizing statements: a lot of times, they end up telling you as much about yourself as they do about the statement itself or the content of the statement.
00:03:39.360
And I know, like for me, when I started thinking about, you know, what if Rails is dead? I reacted really kind of badly to that, and this has been bugging me for probably the past almost two years. There have been a lot of things in Rails that I’ve just been kind of like, ‘Huh, why is this happening?’ And I’ve gotten concerned because it’s kind of like, ‘Well, if this happens, I want to keep writing Ruby, and what’s going to happen to Ruby if Rails dies?’ I mean, what’s going to happen?
00:03:55.760
So I started kind of questioning what is it about that that I should take away. I tend to be a bit of a romantic; I can fall in love with things very easily. So a lot of times, I find myself getting really attached to a specific technology, like Ruby especially. It’s easy to fall in love with, and there’s a fine line between falling in love and maybe getting a bit creepily obsessed.
00:04:13.640
Stalkerish. Um, and you know, a lot of times, you don’t know that; you don’t know it until the other people kind of tell you, ‘You know, that’s a little weird that you’re so obsessed with that Ruby thing.’ This keeps going for a little while; I try not to look because I start laughing every time I see it.
00:04:29.919
So, what's the alternative, right? If you don’t get really kind of passionate and fall in love with the technology you use, well, a lot of people would say, ‘Well, it’s better to be technology agnostic.’ Right? And you know these people, um, they’re the ones that are saying, ‘Oh, it’s the right tool for the right job,’ and I think that’s a really convenient way to avoid choosing favorites. I think it’s okay to choose favorites. It’s okay to have a tool that you really would prefer to use if, in fact, it will do the job.
00:04:51.880
There’s no problem with that because the fact is there are some tools that are essentially unsuitable for any task, and then there are some tools that are flat-out dangerous to use. So if that’s the case, it’s probably worth asking ourselves why we choose to use Ruby. So what brought us to Ruby? Well, for a lot of us, raise your hand if you recognize this guy right here. Right? This is Duke; he was, uh, I think he still is—I don’t know if they retired him—he’s kind of cheesy: he is the mascot of the Java programming language.
00:05:12.079
Back in the mid-90s, this guy landed, and people kind of fell in love with Java for a while. It was the ‘Write Once, Run Anywhere’ promise that it offered. It’s an object-oriented language, everything sounded pretty good, it was less hassle to use than C++. Plus it had that wonderful mascot. But as we used Java and continued to use Java, we figured out after a while that it had a lot of ceremony involved in using it in a production capacity.
00:05:31.280
You had to know a lot of different things to get Java up and running, and there was a lot of configuration. For instance, a lot of people came to Ruby as sort of Java refugees. Now, I wasn’t one of the Java refugees; I took a different path, and I want to explain a little bit about how that came to be. Um, I don’t mean to burst anyone’s bubble, but I was doing Minecraft before it was cool. When I was a kid, my dad handed me a pickaxe.
00:05:50.840
Unfortunately, this one didn’t exist: it was an actual pickaxe. He sent me down the stairs to our not just unfinished basement but the crawl space of the basement and said we were going to dig out the basement—meaning me, of course. He gave me the pickaxe and a wheelbarrow and some buckets and said, ‘You know, I want you to take X number of loads of dirt out every day, and eventually, we’ll have this cleared out.’ Now, I know I’m a strapping young lad today; however, this was me then, and this equation here did not compute. I was not ready to do this.
00:06:09.919
It really came down to me not understanding sort of—I didn’t see the destination my dad had in mind. To me, this all felt like busy work. As I got into programming later and started working more hours and being really passionate about what I did, my dad actually offered me this: this is verbatim the apology he gave me at one point. He said it turned out I was just selective; I wasn’t really lazy. So, I guess that’s good.
00:06:29.240
And I knew even then that I had a very low tolerance for busy work—things that felt like busy work—which steered me well clear of Java right off the bat. I don’t even like busy work that has an agile button. Even if it has an agile button, it feels problematic to me. So I actually gravitated at the time towards a language called Perl.
00:06:45.679
Um, and this looks pretty right; this is Perl here. Um, unfortunately, this is actually what Perl looks like: look again. Often described as a write-once programming language. And I know you can’t see this; it doesn’t matter; trust me, I’m sparing you the gory details. But what this is is about 60 lines of Perl, of 14,000 lines in this particular source code, and it’s all one giant regex. This is the search that is the replace. Yep, that’s Perl.
00:07:04.640
So, one of the things, as I was learning Perl, I read a book called Programming Perl by Larry Wall, the language's creator, and he emphasized the three virtues: laziness, impatience, and hubris. And again, as a guy who was probably about 20 at this point, those all sounded pretty good to me, and I signed on to that. We also, in Perl, had a philosophy, pronounced ‘timt,’ which don’t ask me, but there’s more than one way to do it. Right?
00:07:26.840
I think it’s important because this appealed to me because I didn’t want to be told there’s only one way to do something. I wanted to be able to find my own way, something that worked for the way that I thought. I felt like it let that creative part of my brain stay engaged. I wasn’t just learning through rote memorization a specific thing to do, but there were lots of possible roads I could take to the same goal. I liked that philosophy.
00:07:48.959
You can compare that and contrast that to Python, another language that was popular at the time and still is. Um, in Python, they have a REPL, much like IRB. You get to it just by running the Python interpreter with no arguments. If you type ‘import this’ inside the REPL, there’s this little Easter egg that prints out these tenets called the Zen of Python, one of which states there should be one and preferably only one obvious way to do it.
00:08:05.320
And it then goes on to make it painfully obvious how serious they are about that when you try to quit the REPL. Um, let me zoom in on that for a second: you can type ‘quit.’ It then says, ‘I know what you meant to do, but I’m not going to do it because you did not do it the one and preferably only one way.’ So this is Python!
00:08:18.560
Uh, that didn’t really appeal to me at the time. Um, and then I found Ruby, and to be more specific, I found Rails. How many of you are using Ruby today because you found it through Rails? Most of the room, right? I expected that. Right? Um, so we owe a debt of gratitude to Rails, don’t get me wrong.
00:08:37.000
But moving on back to the Ruby side of things, one of the things I fell in love with about Ruby was how flexible it was. Um, you can, if it doesn’t do what you want it to do, there’s a pretty good chance you can twist the language and contort it in such a way to make it do that thing. Thing: people have done crazy things. Just look at ActiveSupport, and it makes you sort of feel like a superhero, right? Like there’s nothing you can’t do. This language is so malleable that you can force it to do even crazy things that are horrible ideas.
00:08:57.680
And another thing that Ruby really, really spoke to me was that it cared about readability. Um, little things like optional parentheses or using underscores versus camel case or curly braces. A lot of the stuff that I was used to, especially with Perl, which reads like line noise oftentimes, it really appealed to me that it was so readable. Steve Yagi, a guy who was and is much smarter than me, put it really nicely in saying that Matt had combined all of these things—the best from so many languages—and he somehow made it all work together so that you don’t even realize it has all that stuff.
00:09:15.760
So, Ruby was great, and I really loved Ruby. Um, but it’s not really fair to talk about that without noting that every rose does have its thorn, and Ruby has some issues as well. You know, that very flexibility that we love can very often come back to bite us. And, uh, you know, we think, ‘Oh, it’s great that I have so much flexibility,’ but oftentimes we just kind of screw ourselves over.
00:09:34.640
And then there’s the story that every programmer likes to tell their children before bed: the concurrency story. We always talk about Ruby’s concurrency story, and this is a pictorial example of Ruby’s concurrency story as it sits right now. And you know, a couple of years ago at RubyConf, Matt said, ‘I’m not the threading guy,’ and that’s totally cool; he’s the Ruby guy. He gave us Ruby. We owe him an infinite amount of gratitude for that. He doesn’t have to be the everything guy.
00:09:51.679
Um, so maybe we don’t quite know what to do. You know, we’re trying to take some steps, and right around now, you’re probably saying, ‘Well, you know, Ernie, that’s really not fair, because we have JRuby and we have Celluloid. These are Ruby’s concurrency stories.’ Um, and so Celluloid is an actor-based concurrency model for Ruby. It’s inspired a lot by what you see in Erlang, for instance, and I would like to introduce you to Tony Arcieri who created Celluloid.
00:10:12.760
He is, in fact, a threading guy, and he’s actually said about Ruby that without certain features in the language—ones that I’m going to go through—we’re going to be in a hard place in a while. One of them is deep freeze: that is, if we can’t deep freeze an entire object graph and mark it as immutable, then it’s going to be very difficult to ensure that we can implement an actor-based concurrency model in a way that we can’t subvert just through our own ignorance or intention.
00:10:30.920
We also might need deep copy, so we could copy an entire object graph. Now, we get an entire object graph without having to do any extra work. Some of these, mind you, we can do with third-party libraries, but not 100% reliably, and again, it’s not baked into core. Um, another one is ownership transfer; that is, if we could say that one thread is now allowed to own an object and will be the only one allowed to change that object, that would be something that would really help with implementing actor-based concurrency.
00:10:50.440
And then the last is a concurrent data structure. If you come from Java, for instance, you know that Java comes with a whole myriad of concurrent data structures that you can use. They’re guaranteed to be thread-safe in the way that they work, but that would need us to have a well-defined memory model. Um, and Tony, in the blog post that he wrote about these, he actually went on to say that he doesn’t think he can solve these problems effectively without support from the Ruby VM.
00:11:09.479
And I had checked in with him before kind of building this talk on IRC, and I asked him to verify that he still has, you know, these feelings and is still adequately describing how he felt about Ruby. He kind of ended the discussion after saying, ‘Yes,’ with, you know, ‘Eventually, you’re in a place where you’re trying to build a jet engine out of Silly Putty.’ Um, I mean, I like Silly Putty; Silly Putty is awesome, right? But you probably don’t want to try to build a jet engine out of it.
00:11:30.680
So, there are things that we are doing to make—take steps to fix some of these now in Ruby that we hadn’t been doing originally, but I’m still concerned because you know, what if it’s too late, and what if Rails is really dead? And if Rails is dead, what’s going to happen to Ruby? Well, we all know that Rails is not quite dead yet. Um, and honestly, languages don’t generally die. That is, I have friends that still use RPG—it doesn’t stand for role-playing game, unfortunately; it stands for report program generator.
00:11:48.759
The language was first created in 1959. This is a slightly more modern syntax for the language. Just take that in for a second, and this stuff is downright painful, but it’s not dead. If it can survive, then I’d say that Ruby will be fine. It’s not going to die. But again, going back to that kind of self-reflection and thinking about, you know, what did the anxiety that I felt when I thought about Ruby kind of going away if Rails did, where did that come from?
00:12:07.760
If you give somebody a name tag like this—you’ve all seen these, right? You give somebody a name tag like this and you tell them I don’t want you to put your name on it, I want you to put something else about yourself on it that will identify you. In America particularly, we will oftentimes fill that in with our job. Maybe we might say father, husband, or friend, but most of the time it’s, you know, ‘What do I do?’ It’s a very common thing. You get on an elevator with somebody; you’re making small talk right after, ‘What’s the weather like today?’ or ‘How do you like the weather?’ It’s, you know, ‘What do you do?’
00:12:25.840
And, uh, you know, for me, um, I think for a long time initially I thought of myself as a Rails coder, right? I was a Rails guy, and then I started to realize there were a lot of things about Rails that were driving me nuts. I’m like, ‘Well, I guess I’m not really a Rails coder; I’m a Rubyist, right?’ And that’s what I am, and you know, I liked that because the term Rubyist has certain connotations for me that we’ll talk about later, but I love the Ruby community.
00:12:44.640
And so I liked that as a terminology. But, you know, then I started thinking, ‘You know, this Go thing’s pretty neat,’ and you know, ‘Elixir is pretty awesome,’ and ‘Jose is a pretty cool guy,’ so if he’s doing this Elixir thing, that might be pretty sweet. So maybe I’m just a programmer. And you know, all of these things are true; they’re all true about me, but none of them are really the truest thing about me.
00:13:05.440
And you know, if I look back to when I was growing up and I first started getting interested in programming, my parents got me an Atari 2600. Who had an Atari 2600? Yeah, that thing was awesome! Okay, so I started playing these video games, and I was just like, ‘I can have these in my house? This is amazing!’ And then about a year later, they brought home one of these color computer twos. I was six at the time. I got one of these, and I realized that these games that I loved to play, these were something that people created using computers.
00:13:24.960
And this was a big eye-opening moment for me. And so, naturally, I got interested in programming. Um, this is what the screen looks like. Notice that flashing cursor that says, ‘There ain’t no party like a TandySoft party.’ And, um, one of the things that I found out very quickly was that I could program the computer to lie to me, which made me very, very happy. And I know that maybe go-to was considered harmful and all that, but it was really great for my six-year-old ego, let me tell you.
00:13:46.560
And so I started writing little programs, getting them out of books or whatever and typing them in. Um, saving them to tape, which by the way, if you play on a regular audio recorder, sounds awesome. Um, and there we go; that’s running in an emulator that I tracked down. I was surprised that on the first try, I was able to type all that stuff. I would not have forgotten any of the commands.
00:14:04.520
But all through high school, I spent time with—we’re just going to leave Ernie as cool up there for a minute. Um, okay, I was surprised as I went through high school, though, I was still stuck with BASIC for a very long time, and we didn’t have a lot of budget at our school. We did have a CS program, but it was mostly like Apple IIs. Uh, occasionally, I got to work on an Apple IIgs, but it was mostly BASIC.
00:14:23.760
And then I had been programming for about three years in BASIC in high school, and then Pascal came along, and I went back to square one. We actually had a really awesome CS teacher; this was my senior year, um, and he actually gave me the whole year's course material and told me, ‘Go ahead and work at your own pace. After you finish, you can do whatever you want.’ So, I did the year’s course material in like a month because I wanted to get back to what I really wanted to do.
00:14:43.440
And so, after I finished, he asked me if I’d be willing to make a poker game for him and the other teachers to play on break. So I made a little poker game, and I made a Pong clone, and I made a breakout clone—not that one, this one. Um, and you know, a year later, I remember going back to the school; my sister was still going there, and we had people saying—because you know, of course, you put credits in the game, right?—we had people coming up to me and saying, ‘Oh, you’re that Ernie Miller; we still play your games!’
00:15:00.160
And this was like a year later. I mean, okay, they weren’t exactly amazing or anything, but the satisfaction I had of here I was creating games like I wanted to do when I was six. Um, you know, yeah, okay, so it took me a long time, but I got there, and I was making some games, and I realized, um, as I started kind of reflecting on this and what got me into programming to begin with, is that it really wasn’t about programming; it was about creating.
00:15:17.440
You know, I’m a creator; that’s what I am. I want to create things and that's the best thing. Um, I was talking to Jonathan on the drive here from the airport about this, you know, we are driven to learn new technology by being driven to create something. You know, that's the best way to find a way to learn something is to find something you want to make and then start making it.
00:15:35.279
And it’s really expressed well in Ruby in that some of the stuff that Matz was saying about this back before most of us were actually using the language is that he wanted people to express themselves and to feel, uh, and enjoy, and be part of the fun and the creative process of programming. And so it’s starting to make sense to me now that, you know, Ruby’s philosophy is the same philosophy that I had.
00:15:52.760
And it’s really all about creation, and whatever tool you choose, a programming language is only going to be as valuable as what power it gives you to create. And so that doesn’t mean, you know, like me, I went back to BASIC right away because I knew how to create cooler things there, and I didn’t want to relearn the same things in another language.
00:16:11.960
Um, this does not mean do what I did; this means learn new languages. Uh, but it’s a filter that you put them through: does this new technology enable you to do things you couldn’t have done before? Does it change the way that you think about a problem or approach a solution? If they make things easier, well, that’s a good reason to consider adding this tool to your tool belt.
00:16:31.280
And you know, more importantly, especially around Ruby, I love conferences, and I’m really thankful to Ancient City Ruby for having an ample hallway track for us to spend time to get to know one another. I’m sorry that it’s coming to an end after this, but I hope you took advantage of the hallway track. The best thing for me about Ruby is the Rubyists and the community.
00:16:48.160
Uh, Rubyists are happy. They tend to be happy folks; they do reflect that the language was designed with happiness in mind. Um, and you know, they're innately curious, and we’re still regularly being surprised, usually in a good way, about the things that we can do with Ruby.
00:17:07.360
But it’s really all about the human beings. And I think the thing that scares me the most about what would happen to Ruby if Rails dies is that I would feel like I would drift apart from all of you. I think the community is an amazing community, and it took me a while to realize that if it’s really about the people, the people aren’t going anywhere.
00:17:25.680
Well, maybe metaphorically they’re going places. There’s been something of a diaspora of Ruby programmers, um, and I don’t mean this diaspora, but while we’re talking about it, this is the social networking application Diaspora if you’re familiar with this. Um, I don’t really trust any product whose logo is an asterisk. I feel like they’re hiding something, like maybe this, for instance.
00:17:42.240
But there has been a diaspora of Ruby programmers, and, you know, we’re— it means a scattering, right? A scattering of people, and we’re going out, and we’re trying these other languages, and we’re bringing back ideas, and we’re taking ideas to these other communities. Oh, you noticed something, did you? Oh, it’s okay; it’s all right.
00:18:02.760
Maybe some of us are even going back to Java or at least using some Java now and again. Go ahead, little guy; you can do it. Nope. NOP. Oh, there we go. All right. So maybe we’re even going back to Java, but the thing about it is, is you know, we’re going to these other communities, and we’re taking ideas with us.
00:18:22.440
And we hold programming languages to an immensely high bar. I mean, Ruby is an intensely human language. It comes to us; it makes things easier for us. We don’t have to do a lot of work to make it do our bidding, and we hold other languages to a higher standard as a result.
00:18:39.280
So we go to these other languages, and we’re like, ‘Oh, your tooling is horrible; let’s fix that!’ Or we go to these other languages, and we say, ‘You know, do you—is this really the syntax you need to use? This is really unwieldy. Like, what’s going on here?’ We expect more, and, um, you know, it’s really interesting because then we also learn a lot from those communities, and we bring that stuff back to the Ruby community as well.
00:18:58.400
Um, and I mean, you see that going on every day. And um, I guess what I’ve really started to realize is that, you know, the people aren’t going anywhere, and they’re bringing some amazing ideas back and some amazing people back. They might begin to think, ‘Well, there must be something about this Ruby thing because these people are all ludicrously happy!’ And they showed up at our office, and you’re like, ‘What’s up with them? You know, we need to find out what this Ruby thing is all about.’
00:19:15.760
And, you know, Ruby’s influence is being felt today. If you look at Swift, for instance, it cites Ruby as one of its primary influencers in terms of its syntax, and there are plenty of other languages coming out today that look to Ruby for inspiration. And I’d like to think that, um, that’s going to continue and that Ruby’s influence, regardless of where that language itself goes, is going to be felt for a long, long time to come.
00:19:34.480
And that you all are going to do amazing things to advance programming as a result of your time spent with Ruby. Um, so right about now, I want to take a moment for a shameless plug because it’s directly related to this human aspect and the stuff that I care so much about in this community. I care so much about...
00:19:52.920
Um, pretty recently, I launched a website called Human Development, and I had written a blog post back in December about the general idea, and you can read it. You can read it on the site—it’s just sort of a draft right now; I’m still kind of feeling it out. Um, but the general idea is that it acknowledges the human element of software development; it puts that first.
00:20:10.000
Uh, I think that over time, we’ve begun to subvert the term Agile in a way that’s unhealthy for sustainable development practices. Uh, I don’t think it has to be that way, but I think it is that way for most of us. And I really, really care about all of you and about our community, and I want development to be less painful.
00:20:29.600
Um, so because of, uh, you know, it’s not really enough to have a website if you don’t have some way to promote it, I also have stickers! I would suggest you all come to me and get a sticker and/or a hug. You can get both if you like, I suppose. Um, and I really want to talk to you more both about the ideas in this talk and also the ideas involved in humane development and see what I can do to help make our profession a happier place.
00:20:50.440
Um, that’s actually all I’ve got, so, well, it’s been a pleasure.