 Thank you, Floor. Hi, everyone. Hope you're having a good time. I'm giddy. I'm so giddy to tell you my little story. It's a topic that's really close to my heart. And in order to do so, I'm going to tell you a tiny little bit about me. And in order to do so, we're going to have to go back in time. Three years into the past. This is Ramon. Say hello, Ramon, of the past. He's a little shy. You'll have to forgive him. But despite being shy, Ramon is very happy. He's been making Mac software for a couple of years now. And he's a freelancer. He's using Ruby in his tool chain. And he's having a wonderful time doing so. But over that time, he started to develop an itch. He's been hearing about Ruby gems. He's been hearing about conferences. He's been hearing about meetups. He's been hearing about Rails Girls. And he's starting to get really excited about all this. And he wants to contribute. He wants to help. But he doesn't feel he's good enough yet. So he thought he'd start small. He went to a local Mac developer meetup in his hometown of Vienna, Austria. And he went in. And as he went through the door and listened to a heated, almost violent argument about text editors, he quickly turned around and went back to his hobbit hole. His night was ruined. So he wasn't feeling very confident in his ability to be able to contribute. So he thought, how about instead of I... How about before I improve the world of programming, how about I introduce other people to the world of programming? And so me and my girlfriend opened an after-school activity in the Vienna International School called Computer Game Programming. And we've been doing it for... I think this is our fourth or fifth year now. It's been... Right, three, I can't do math. Um... Ha, ha, ha. We've been doing it for a couple of years and it's been wonderful. The VIS has been absolutely generous to lend us their kids to experiment on. And the kids are wonderful. They're a diverse group of kids. Last year, actually, we had more girls and boys, which was just delightful to see. The interest was just coming all over the place. I loved it. And my goal in computer game programming has always been to tell the kids, kids, I want you to go home and feel like hackers. And I say, not this. I don't mean the businessman in a ski mask. I mean the... Why is it always a businessman in a ski mask? I mean... I mean the clever person who solves problems and feels good about it and learns and contributes. And so this after-school activity was once a week and for the most of the time, we were using and are still using the Gosu gem in Ruby, which, you know, you probably heard about it last year at Yuru Camp. And there's been, as you saw in the last couple of talks, lots of cool alternatives. But at the time, this is what I thought was best. And so when you start teaching kids, you're often told that you should do some research. You should talk to people who know about this. I did none of that. I went ahead first and I faced a lot of challenges, but challenges I'm grateful I faced. I think the two biggest, the first one of those is that it's an after-school activity. It's, you know, it's the afternoon. It's late and the kids are often tired. I'm trying to compete with English and math and French and German and so much more. But, you know, they're still interested, just tired. The other thing is that since it's one hour every week, sometimes some of the knowledge doesn't carry over from one week to the next. Now you're thinking maybe give them homework. Are you kidding me? If I give them homework to kids in an after-school activity, they'd laugh in my face. And the second challenge, which is a little more personal, is that, you know, between semesters, they get the option to stay with us or move on to another activity or just, you know, straight up quit. And when they did, no matter the reason, it killed me on the inside. Like, I thought that maybe I had failed them or my teaching methods just weren't good enough. But, you know, over the years, I've come to terms with the fact that there's a number of factors that could affect their decision. Maybe, you know, maybe they want to do sports during the summer semester. Maybe they want to... Maybe a Minecraft club just opened and they want to go play Minecraft all afternoon, which is fair enough. That's a fun game. But I've also come to terms with the fact that maybe not now, but maybe I've planted a seed that will blossom into an interest in programming that they can use in their careers, turn it into a career, or just use at work and become the heroes of the office. You never know. So let's look at some of the things I've learned when I've been teaching kids. The first being the most important because if there's one group of people out there who's not afraid to just wreck things, it's kids. So in our first example, we've been going over a... We've been making a space adventure where you have your little spaceship at the bottom and the asteroids are coming down at you and you've got to dodge them left and right. And when the kids got the ability to set the speed at which the asteroids would move, it was blinding. And then they wonder, why isn't this working? And I told them, well, set the speed too high. Or another time we had a little game where we had learned to place the monsters on the screen and they asked me, Ramon, what's a good amount for a fun game? And I tell them, I think four or five is good. And I figured, they're going to go nuts and put in 10. Nuh-uh. It's closer to 50,000. You'd be surprised at how much you could hit the number nine. Ha, ha, ha, ha. Or when we were making a jump-and-run game, you know, a little platformer and they'd ask me, you know, what's a good strength? And, well, you get the idea. And at the beginning, they just really annoy me because I was kind of like, come on, let's make something fun because I was not only teaching coding, but also game design. And I thought, why not make a game that's fun to play as well as supposed to just chaos? But I gave it some thought and I came to terms with the fact that, maybe not for the player, but they're having a blast. You know, they're going over and showing the kids, hey, the other kids are showing them and saying, hey, check out what I did. Look at this. This is a mess. Ha, ha, ha, ha. Not only that, but when they'd ask me, Ramon, why doesn't this work? I could turn it around in them and say, well, why doesn't it work? What do you think? And they'd answer quite succinctly and I thought, well, that's very good. And they learned. They learned, yeah, okay, I can't put in 50,000 enemies on the screen. And as a developer, it kind of reminded me that I got to go out there and have more fun. I got to play with my things. In order to understand what I'm doing, I really should be a little more playful. And I also have to take more things from, I have to also appreciate that which I have because often when I'm developing, I don't know about you, but I often find myself just in a hurry to get stuff done, right? And so I don't take a step back. And often things that I take for granted, you know, when teaching someone, you forget to mention those things. I'll show you an example. I show this code to the kids and I say, all right, everybody, what's this going to do? And they all correctly, correctly quit back, prints out Anna. Fantastic. Turn around. What does this code do? And they tell me, prints out Anna. We know it's a name error. So what did I do wrong? I didn't mention to them that code goes from one line to the next. And I was really baffled by this. I thought, and I explained to them, you know, like when you read a book, you go from start to finish, you go one line to the next, your story has a beginning, a middle, and an end. And one of the kids interrupts me and says, hold up, Ramon, have you ever read an adventure book? Like a choose your own adventure book? You know, you jump between pages? You ever read a complicated story before Ramon? Yeah, they were right. Now, we were making lots of text adventures towards the beginning of the year. Now, that might sound boring, but kids love it because they get to write their own silly, fun stories. And it's just, I really recommend it. And, but then comes a big day and I tell them, all right, dang, let's make some graphics happen. And I explained to them how coordinates work. And I tell them, your X is your position along the horizontal line of the screen and the Y is the vertical position on the screen. And when both are zero, you're at the top left of your window. And a kid interrupts you and says, hold up, why is it at the bottom left like in graphs? Why are you programmers making us do this in a complicated way? I'd never thought of that. I went and looked it up and I found out something that I found pretty interesting. You see, old CRT or cathode ray tube monitors used to print out line by line from left to right, top to bottom, line, line, line. That's pretty cool. I understand a little bit more now about what I'm doing. Let's talk about practicing. I'm still getting to grips with the concept of practicing as a developer. So toward the beginning of teaching kids, I tell them, all right, new concept, an array, a list. You can control several enemies on the screen at once. This is how it works. Here's how you make a new one. Here's how you delete one. Here's how you have them interact. Here's how you iterate over a list. Go use it, have fun. Wow me. I don't understand. We took a step back and we started making tiny exercises. Here's why don't you try doing this with an array? Have one with 50 enemies. Take one away, put one in, iterate over them. Kill every single one of them. Now, I used to open every session with this and they didn't like that at first. They're kind of like, come on. I want to do my shiny graphics. I want to download them off Google. It's going to be fun. But as we kept doing this, it became a contest. They wanted to beat the teacher. They were like, I know, I know, I know. And it just became a challenge that actually became their favorite part because then they really understood it. And it reminded me of how when I stink at something, I just got to keep doing a little bit every day and then I'll get good at it. I still can't draw though. Let's talk about simplicity. Now, when we were doing our graphics-based games, I tell them, all right, everyone, this is how you make your character move five pixels to the right per update. You take your X coordinate of your character and just increase it by five. It kind of looks like math. It's pretty simple. And I get really ready. I'm like, all right, now I'm going to knock their socks off. Bam. Does that look cool or what? I ask them. Kid says, hold up. I like the top one. And I figured that's a fluke. What does the rest think? You agree. Oh. What? But it's so nice that other way. It turns out that when you have something that, you know, this is, I like this line of code. This is a line of code to make the character either move five pixels to the left or stick it to the left side of the screen. But sometimes verbosity can be really good. Maybe it's a little more pedantic. But when you show your code to people who maybe haven't worked with this language before or even haven't worked out a lot with code before, it just, it kind of works better in some contexts. And I think this is something that I need to remember. And you might need to, too. Finally, let's talk about showing and reading code. Now, let's get into the mindset. One hour a week, the clock is ticking and problems are coming up, typos everywhere. And I'm on, I don't know how to do this. How do I fix this? And I'm getting really freaked out and they're saying, come on, fix it. And I'm like, come on, surely you, you know, do you remember how Ray works, right? And they're like, I don't know. And so I get really freaked out. I'm like, okay, I'll do it this one time. So what happened? A bad dynamic was created and every time one of them would have a problem, they just go, this is broken. Come fix it. And the moment that happened, my heart sank. I thought, oh, no, I'm creating lazy people. So I thought it was something really fun. I thought, okay, if there's an issue like here, you might see an issue here. Their code doesn't work. I thought, call over one of your buddies. See what happens. And the buddy, having not looked at that code a lot, found it instantly, missing end. Next thing I know, pair programming happened. I've never done pair programming before, and the kids were using it before I was. Wow! As a result, not only was I now reading lots of different code because different people come up with ideas differently for solving problems, right? Not only am I now reading lots of code, I've witnessed firsthand the benefit of pair programming. That's pretty awesome. And this, amongst other lessons I've learned, the underlying aspect that bubbled out of me was confidence. So three years on, what happened? Well, I picked up my bag, I kicked back the tears, and I went to my first Vienna RB session, the Vienna Ruby Developer Group session. Next thing I know, I'm coaching at a Rails Girls workshop. If you told me that two years ago, sorry, if you told me that three years ago, I wouldn't have believed you. Next thing I know, I'm going to conferences. I went to Urukamp last year. It was a delight. Now I'm speaking here. What? Thank you. And I'm contributing to open source. This is Team Tessie from the Rails Girls Summer of Code. We're having a blast together. So what I want to give back is to just maybe, if you haven't yet, give teaching a try. It's amazing. And it doesn't just have to be kids. Try Rails Girls workshops. They're a ton of fun. And I'm sure there's a lot of other institutions that do stuff like this that I really recommend teaching out. Checking out. So I think I've overstepped my time. So I'm just going to thank my wonderful girlfriend, Birgit, and my sister, Pilar from Team Tessie, for making those wonderful illustrations that you just saw. And I want to thank Urukamp for letting me speak here. And I want to thank everybody here for being so lovely and giving me the time. I'd like to start a coding group for kids at my place. Do you have some resources that could help me get started? Yeah, there's a ton. They're definitely check out the GOSU GitHub page. They have their documentation is pretty top notch. I think HackityHack still has a lot of good tutorials. The name escapes me. KidsRuby is a great utility and resource repository. And I'm sure there's tons that I am just panicking and not remembering. But... Kurodojo, I think it's another great program for kids. That's the one that they have small bits everywhere in the world, right? Yeah, that's pretty great. Great. Okay, another round of applause for Amon. That was amazing.