The Changelog: Software Development, Open Source - Exercism.io and Crowd-Sourced Code Reviews (Interview)

Episode Date: October 16, 2013

Adam and Jerod talk with Katrina Owen about Exercism.io - an open source platform for crowd-sourced code reviews on daily practice problems. Practice problems are available in Ruby, Elixir, JavaScript..., Python, Haskell, and Clojure, and other languages are in the pipeline.

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome back, everyone. This is The Change Log, where our members support a blog, podcast, and weekly email covering what's fresh and what's new in open source. Check out the blog at thechangelog.com, our past shows at 5by5.tv slash changelog, and subscribe to The Change Log Weekly. It's our weekly email covering everything that hits our open source radar. You can subscribe
Starting point is 00:00:29 at the changelog.com slash weekly. This show is hosted by myself, Adam Stachowiak, as well as our managing editor today, Jared Santo.
Starting point is 00:00:38 Jared, say hello. Hey, how you doing? It's good to have you on the show again. It's been, what, a couple shows? Yeah, I'm glad to be here as always. Excited about our guest today.
Starting point is 00:00:48 Yeah, me too, me too. And this is episode 108, and today's show is sponsored by DigitalOcean. DigitalOcean is a simple cloud hosting provider. They're dedicated to offering the most intuitive and easy ways to spin up a cloud server. Users can create a cloud server in literally 55 seconds. That's a marketing thing, but it's also the truth. Literally 55 seconds. And pricing plan is sold at only $5 per month.
Starting point is 00:01:16 You get half a gig of RAM, 20 gigs of SSD drive space, one CPU, and one terabyte of transfer. With the recent public launch, if you go back a couple shows and listen to episode 105, John O'Nolan was on here talking about Ghost and his blogging platform. So they just did a public launch of Ghost
Starting point is 00:01:34 and DigitalOcean is happy to tell you all that they have an official one-click Ghost image. You can literally go and click and boom, you got Ghost on an SSD drive in the cloud so they uh that was created by the makers of ghost so thanks to hannah for that you can get a new ghost blog up and running in literally 55 seconds try it out uh use our promo code the changelog
Starting point is 00:01:57 october to save 10 bucks go to the uh go to their website digitalocean.com, and get started today. Excited to have our guest on today, Katrina Owen. She's an instructor at Jumpstart Lab and maker of Exorcism, got that pronunciation right, which we hope to learn quite a bit about on this show today. So Katrina, without further ado, welcome to the show. Thank you. So where do we begin with you? I mean, I feel like we kind of know you from a few blog posts and a few talks and the work you do in the community.
Starting point is 00:02:32 But, you know, tell us a bit about yourself. What's the backstory on you? So I'm an accidental developer. I actually started out in biology a few years ago. Wow. And got a degree in genetics and absolutely hated the idea of working in a lab. So before I even got ever got a job with my genetics degree, I started, uh, helping people out with their websites and kind of messing around with a little bit of, a little bit of PHP, mostly at first. Uh, and then finally I just knocked on someone's door and said hey would you give me a job and they did so you studied genetics which i'm sure is a deep subject
Starting point is 00:03:12 right i mean that's dna right but and other things i'm sure i'm i'm trust me i'm not first and i'll have a degree in that but so you're an accidental is this recent? How long have you been programming? About six years. Okay. Yeah, I graduated from university in, I guess, 2006 and then – or 2006, 2007, somewhere around there. And I think I got my first job as a programmer in late 2007. Wow. And from what I understand, you just came here to the US, so you live in Denver, so we kind of mentioned in the intro that you're an instructor, which, I mean, that's pretty freaking neat that you're an instructor six years later after learning the program. And Jumpstart is not just anybody. They're really well-respected, so, I mean, that's cool.
Starting point is 00:04:03 Jumpstart is awesome. Jumpstart Lab does amazing. So, I mean, that's cool. Jumpstart is awesome. Jumpstart Lab does amazing Ruby training, Rails training, that sort of thing, some JavaScript. They're starting to work on some iOS stuff and ops code stuff. There's a lot of really interesting things going on with them. So you got out of genetics because you didn't want to work at a lab. And here I am. Jumpstart lab. Good. Nice. I was thinking, I mean, because I guess, so what was it about the lab or a lab that kind of turned you off? And what ultimately is,
Starting point is 00:04:40 I guess, transpires back to that from what you do as a developer. So the lab work during college is probably not very similar to the lab work that you would do in an actual lab. But it's very repetitive, lots of waiting, lots of just kind of turning a machine on and waiting for four hours for something to replicate and then looking at it in some way. Sounds like video rendering or something, doesn't it, Jared? Yeah. Sounds like a bad test suite. Yeah. Yeah, right?
Starting point is 00:05:11 And so I just couldn't bear the thought of doing that. I wanted to be a lot more hands-on, a lot more like problem-solving on a daily basis rather than spending several years with a hypothesis and trying to make observations that might prove it right or wrong. And then what's the ultimate product of doing all that? Like, is it just a yes or a no? I was right or wrong?
Starting point is 00:05:35 Is there any like real world change? Oh yeah. You cure cancer and you. Oh, that's no big deal, right? Clone people and stuff. You know, it's, it's pretty awesome in theory. So let's go back to you knocked on someone's door and said, give me a job, and they did? Yeah.
Starting point is 00:05:50 Can you elaborate on that? It sounds pretty amazing. Yeah, so my resume basically was a bunch of, like, I helped people do this, and I built that. And it's basically, you know, not very impressive. But then it said, and I have a degree in genetics. And the CTO looked at it and said, you must be pretty smart. So I got the job. And at first, all I really was going to do was help them test stuff and write little scripts and debug and whatever.
Starting point is 00:06:22 But within a very short time, I was writing production code. So I think it took about three months before I was really productive. Absolutely dangerous. Like I wouldn't want it to have me as the only developer, but on a team of smart people, they absolutely kept me busy and I was producing content and being useful. You had some pretty good guidance then. I did, yeah. And so that's a good place to start from and then now you're in the same position now
Starting point is 00:06:55 which we'll talk here in a bit more in detail but exorcism it's really about that crux there which is learning writing code, practicing and then ultimately the other side of that, which is code reviews and stuff like that. So I mean, it's about doing exercises and keeping it kind of bite-sized and simple, but at the same time dealing with the problem. Yeah. So one of the things I... I was very frustrated when I was learning how to program because everything seemed so arbitrary or confusing or like everything would explain it as though I knew all the things. The blog posts would be making assumptions about what I knew or the read-me's would be making assumptions about what I knew. And often I was just confused and frustrated. A lot of the, the things when, when you're picking up programming without any formal
Starting point is 00:07:51 background, there's at least six years ago, there was very little guidance on doing, doing well, like programming, choosing good names or structuring your code in a good way or writing unit tests and proving that you were that your code was behaving the way you expected it to behave it was all very like copy stuff from javascript websites or php websites and kind of mess with it until it works and that that i found that to be very frustrating and i got kind of obsessed with the whole XP thing. I read everything I could find about XP and pair programming and TDD and all of those things and tried to figure out how to make that work in my environment at work. So – go ahead, Jared. Go ahead. I was just going to say, so the company that you worked at was not doing XP at the time, and you brought that to the equation?
Starting point is 00:08:45 Or they were already engaged in it, and you just want to learn more? No, nobody at the company I was working at did any sort of testing or pairing or any of that. We didn't have a continuous integration server. We didn't actually have a test environment when I started working there. It was straight to production. So I'm trying to just get an idea of your career arc. Was it from this job to Jumpstart Lab or has there been things in between? There's been one thing in between. So at this job, the PHP job, it was a startup.
Starting point is 00:09:15 It was very exciting. I stayed there for about two and a half years, almost three years. And I kind of taught myself how to write tests at that job. So I would write tests for everything I did. I put together a CI server that I just ran locally. And nobody else in the company really cared to run those tests, which was, I guess, fine. I mean, I just used it to help in my own development. But after a while, I got frustrated with that and decided to move to a different language and at least find a company where they cared about testing more than they did at the previous company. And this was at the time when I was also moving back to Norway. So I studied genetics in Norway, moved to L.A., worked at this startup, and then moved back to Norway after three years. And in Norway, I went to a Ruby meetup. And I guess there were probably 15 people there.
Starting point is 00:10:15 The next day, a couple companies called me up and said, hey, you should come talk to us. And so one of those companies hired me on as a developer. And I more or less learned Ruby on the job there. I stayed there for a couple years, two and a half years about. And let's see, from there I did the talk therapeutic refactoring, which let me travel around and talk to people and meet people at a bunch of conferences. And I also was kind of done at the company. I love the company I worked at in Norway. They are absolutely amazing. They always come up with great ideas. They're always inventing things like new, right? The latest, their latest project is taking government map data and using it to show on the
Starting point is 00:10:59 web 3D maps of Norway. And then you can select a square of Norway and click and you get sent a 3D printed model of the landscape that you selected, which is awesome. And so they're always making up things like that. But I felt like I had kind of done what I had to do there. I had really brought testing in to the organization. That was kind of what I was hired to do. And I was ready to move on. And I met Jeff from Jumpstart Lab at a conference and we talked and eventually, well, he sent me an email saying that I should work for him. That's always nice. It's always really nice. You should work for me. Well, I have a job now that I really like. So I spent some time thinking that over and ended up in Denver. So is Norway home or do you just go there for school?
Starting point is 00:11:58 I've been back and forth all my life. My mother is Norwegian. Okay. Yeah. life my mother is nor uh norwegian okay yeah i understand that uh earlier this year was you're now in denver which we mentioned a bit ago but so now you're in denver this was like i guess january time frame or first part of the year time frame you came and officially began at jumpstart and moved i guess you probably don't shorten at the jumpstart but so jumpstart lab but um and now you're in denver which is a i was was just up in Denver in the summertime, and I love Denver.
Starting point is 00:12:29 I think it's beautiful, and the mountains, and just like having that as the backdrop is just amazing for just the scene. Yeah, it is an amazing place. The weather here is absolutely amazing. Sunshine, except every once in a while, but only for a very short time. It will rain or snow. So when I was talking to Jared before, and you keyed off this a little bit, you mentioned your talk, therapeutic refactoring, and kind of the ramifications, I guess, from that, which is, I guess, more like the result. So you kind of gave this talk that was at Cascadia.
Starting point is 00:13:05 Was that the first time you gave it or was this the most recent time you gave it? I gave it at Nordic Ruby in Stockholm. Okay. And they don't record. Bummer. Yeah, right? But there were several people at that conference who organized their own conferences and among them ben blithing of cascade cascadia ruby was in the room and he um said that i should fly to wherever that was seattle and give it there and it was recorded
Starting point is 00:13:32 by confreaks so it ended up both on the confreaks.net or.com website and youtube from there i know that jared kind of put it off a little bit because i guess somebody has suggested him to watch and he's like i guess I'll watch it whenever. But he watched, and he was really thrilled about it. So I guess talk a little bit about what therapeutic refactoring is. When I was working at this Ruby job in Norway, I felt very stressed out about always having to – there was always this pressure to ship, and there always is because that's what we do.
Starting point is 00:14:04 That's the whole point. Right. And, um, and I, I felt like I was always in so much of a hurry that I didn't really learn very much. I'd, I'd often be throwing code that I wasn't happy with, um, into the, into the repository. And I felt like I never had time to go back to it. And after one day, I just realized that I wanted to spend time, just a little bit of time, making sure that something was beautiful. I didn't care what. And so I'd come in really early in the morning before anyone else got to work and spend about an hour just writing tests and refactoring some tiny piece of code in the project. And I did this on a daily
Starting point is 00:14:48 basis for quite a long time, probably about a year. And it transformed how I thought about programming in many ways. So the first thing was that because I was writing tests and refactoring for my own pure pleasure, it bothered me to wait for the test suite to run. So waiting for any number of seconds, if anything over a second, was very, very frustrating and not pleasurable. And I was there just to refactor for the pure pleasure of it. So I started looking into how to design my code in such a way that the test suite would be very, very fast and very responsive. And that led me into sort of this refactoring loop that had this immediate feedback and never really took me out of flow. So I ended up in this flow state for a long time and it was very, very pleasurable.
Starting point is 00:15:47 It felt very therapeutic. I felt, um, smarter in a way. So normally during the day, whenever, when all the pressure was on, I basically just felt like an idiot. Like I'm not smart enough. Yeah. Right. And I think we, most of us feel like that. I definitely know there are people who don't, but a lot of us do. It's really hard. And during those refactoring sessions, I felt like I understood things and I was on top of things. And I kind of lost my sense of self. And it just felt really nice. So I wanted to talk about that.
Starting point is 00:16:22 And I had a bunch of code examples that I wanted to share with people just because it's always so much fun to go show, oh, this is what it looked like before and it was horrible. And now it looks awesome. How many times have you given that talk since? It's eight, maybe. Wow. That's when you know you got a good talk is, you know, first you do it, it's not recorded. And, you know, that's kind of how legends are made. Did you hear this one? Oh, it wasn't recorded. You can't see it. You know, you should have been there.
Starting point is 00:16:52 And then you record it, you know, on Confreaks. And there it's out there in the public for everyone to see and watch and enjoy and spread. And then yet people at other conferences still ask you to come and give that same one, which we can just go to confreaks.com or whatever website and watch it. And yet people still want to see it live and see it again for the first time. So that's pretty astounding. I'm actually going to be giving it again in San Francisco on November 1st at FlowConf. Yeah. Nice.
Starting point is 00:17:22 FlowConf, yeah. So what is it about refactoring that just gets nerds excited, like nerds like us excited? What is it? That feeling, that therapeutic feeling you said that you had, what do you think it is that generates that? I have no idea. It's such a good question.
Starting point is 00:17:43 Because, I mean, we all react that way like as you're even talking i'm thinking about refactoring i'm like yes there it's kind of like a cleansing feeling like you're taking you know you you you have this dirty code that you wrote and it works and you know it's it's okay the tests pass the code is functional right the the maybe the product owner is even happy but it's not like up to i don't know what beauty or it's not up to your standards perhaps and then when you get a chance to do that you know it's almost like you're you're taking a shower or something but i'm not sure like what's at the core of that of that feeling she said uh one thing you did say katrina was flow and i i
Starting point is 00:18:22 don't know if you're a fan and i know that you've done some stuff with uh I think it was Java Ranch you mentioned before so you must be a fan of Kathy Sierra and she talks a lot about flow and the state of flow and you know being in that I mean you even said things like I felt smarter you know that's that's study of the brain if you go and study that stuff you definitely are smart in that in that moment of time because you're at a state of bliss mentally that you know you're just like the super being of katrina you know that's who you are for those that hour that 40 minutes of flow yeah yeah i think that's a huge part of it i think another part of it is like i think as a group we tend to enjoy obsessing over details. Yeah. I mean, isn't some of that where the bike shedding and yak shaving all come about so frequently?
Starting point is 00:19:15 You know, the more minuscule the details, the more we like to think about and argue about. Yeah. Maybe. I think that makes sense. I know for me, sometimes when I'm isolated, and I can kind of lament a little bit with you on that state of bliss for the bit there, even if it may not be super useful when I'm done, like whatever I've just shipped,
Starting point is 00:19:39 it might be optimizing one line to be easier to read, and I can imagine how this is going to change three other things I'm working on to make those smaller, more readable, more bite-sized, more translatable, whatever the reasons are for it. I think that that might also be part of the refactoring. It's like this constant kind of making things better, even if it's just for yourself. Yeah.
Starting point is 00:20:07 So moving from the refactoring over to, to your project exorcism, it seems like that really is all about, um, I mean, it's about code review. It's really about refactoring, isn't it? Oh, absolutely. It totally grew out of this love of obsessing over the details. And that's why I call it nitpicking on the site. Like all the comments are nitpicks. I mean, it's not really bike shedding, even though sometimes it feels like it. Because it can be a profound discussion about what we value in code
Starting point is 00:20:38 and why we value these things. And the discussion becomes really interesting because different people value different things or different things in different contexts. And so there's a real breadth in those discussions there. So just backing up, can you, for the listeners, describe Exorcism, what its goals are, and basically how it works? Sure. So Exorcism is a site where we made up a bunch of exercises in the form of a test suite.
Starting point is 00:21:07 So a test suite for every exercise. And the goal, the first goal is to, you download the exercise, you get this test suite, and the first goal is to make it pass. Write production code that will make the test suite pass. And then you submit that code to the website and you get feedback on the code that you wrote. So names, the choices that you've made for how you've named things, the methods, the classes, if there are many variable names, which methods from the core library you've chosen or the data structures that you've chosen or how you've chosen to arrange the code. And I've explicitly said on the site that I'm focusing on simplicity and readability and expressive code. But again, those are objective.
Starting point is 00:21:57 Those are not objective terms. They're very subjective. And so the discussion often surrounds around or becomes something of, well, I find this readable. But more interestingly, for example, about naming block variables when you're looping, for example, this idea that, well, the collection should probably be named in the plural, and the block variable should be the singular of that plural, rather than saying I have a monkey list, and each thing is a monkey. It would be monkeys looping through a list of monkeys, and then each block variable would be the monkey. But even beyond that, we have some really interesting discussions about the level of abstraction of the name that you might
Starting point is 00:22:46 choose. So if you have a block variable in an aggregate function, some people will call the block variable hash, like naming it for the underlying data structure. Other people will call it result or memo or accumulator, sort of labeling it based on its role in the calculation. And then other people will name it frequencies or histogram, naming it for the meaning, the thing that it represents in terms of the problem, not in terms of the calculation or the computation. And so these patterns emerge and these discussions kind of, by asking why did you name it this way, what are the tradeoffs that you're considering, you get a lot of very interesting perspectives
Starting point is 00:23:38 on what expressive code means or what readable actually means. So all of the feedback on the code review is by other users of Exorcism, right? That's correct. It's not you there giving everybody feedback. No, you don't have two geniuses giving feedback. It's everybody writes code, and then once you have completed an exercise, and you actually decide on your own when you feel like you've completed it, you've had enough feedback and you're done. You move on. At that point, you gain access to everyone else who is currently doing that same exercise that you just completed.
Starting point is 00:24:15 So you're going to see all their code? Yep. And then also the nitpicks on their code? Yes. Yeah. So the discussion becomes this global thing, uh, on a per, per submission basis. Yep. So if I understand you're right, so you, well, we jumped a couple of steps. You got to get the CLI in place and all that stuff. Oh, right. Oh goodness. Yeah. There's, it's actually really confusing. Make no mistake. It's right now that UX is absolutely terrible. Uh've hired a designer, or I'm talking to a design UX company to help me sort that out. So yeah, the first thing you have to do is you have to install a command line client, which is written in Go.
Starting point is 00:24:58 And so this communicates with an API in the web app. And that is to fetch down exercises or submit up exercises. And then once you've submitted it, all the feedback happens on the site itself. And that's about it, actually. It's not very complicated once everything is in place. I think it's that first kind of uh original kind of ceremony of like getting and now i was you know messing with it last night and we'd actually
Starting point is 00:25:31 so for those of you listening that are subscribed to the newsletter too we've we've plugged the in the i think issue eight but uh and i've been meaning to get back to it since then because beverly nelson who does a lot of work with with Ruby Friends and just really is thriving in the area of kind of helping people get plugged into the right kind of resources to learn. I'm always kind of on the lookout for neat tools to kind of suggest to her to check out. So I was just like waiting for a chance to play with it. But I kind of gotten involved and even me as I me, I wouldn't say I'm seasoned. I'm certainly not brand new. But even I had a couple stomach blocks.
Starting point is 00:26:10 So I would like to see how that pans out for the future. But it was easy to get in place. So once you get your exercise, let's say you wrap it up and you got no failing tests and you feel good about it. And then you do exorcorcism i think is uh exorcism what's the ship version of that submit submit okay so once you submit it and you get some feedback and then once you finally get to a point where you want to complete that is that when you get access to nitpicking yes so only you can only nitpick the ones you've done though right right okay that's correct okay That's what I want to clarify.
Starting point is 00:26:45 Yeah. So I actually – I mean this might change. Currently I like that. I'd like to provide more guidance on what good nitpicking might look like, which key areas it is more useful to focus on, or what type of feedback is more helpful. Like I've seen feedback that says great job and I'm like great job how like what do you like about it? There once when someone said great job I was like well here let me show you how it's done and I was like I really like these names because this that and the other. I love how the separation, you know, how the tasks are separated into separate methods that really make sense. So I managed to get like a list of eight things that I liked about that code.
Starting point is 00:27:35 Because if you know what someone likes about it, you can go and do it again. But if you just say great job, it's like, well, I don't know what was great about it. Was all of it great? So is this – since you're talking about how to nitpick, is the how to nitpick documentation, is that a living document then? It's a living document, and right now it's nowhere near done. I keep seeing new things that I want to address, and right now the documentation doesn't seem to be the best place to do that. So I'm going to work with the UX people to figure out how to present that information in a way that's useful and timely,
Starting point is 00:28:17 like getting that information when you actually are trying to nitpick rather than when you decide to go read some documentation. So you're a Ruby developer. You have a command line client written in Go. Yes. I think we can talk about that a little bit. But first, which languages have exercises? So is it just Ruby or are there other languages supported?
Starting point is 00:28:40 So it started off as just Ruby because I was writing it mainly just to give it to my students here in Denver. And then one of my colleagues started porting the exercises to JavaScript. And then once I had launched it, someone probably in the second week was like, we need Elixir and Clojure. So they ported it to Elixir and Clojure. Nice. And then someone else said, well, why don't we have Python? And it was like, because I don't know how to write Python, but you're totally welcome to. And so I think now we have Clojure, Elixir, Ruby, JavaScript, Python, and Haskell. And somebody
Starting point is 00:29:18 is porting it to Rust. And I'm working on the Go exercises. And somebody is working on CoffeeScript. A couple days ago, someone said they'd start working on the Scala. And then I heard someone say Objective-C, but that's going to take a little bit more. There's a little bit more ceremony involved in getting that running. So you're going to start writing the Go version and your command lines in Go. Is this a newfound love for you, a new language? Absolutely. Yeah, I really like it. I'm also going to write part of the API is going to get ported over to Go instead of Ruby. I was at a conference half a year ago, maybe. Actually, almost a year ago
Starting point is 00:30:05 is the first time I saw a talk on Go. And it was at Oradev in Sweden. And the talk was by Andrew Durand, one of the developers who works at Google working on the language Go. And I immediately liked it, but didn't do anything about it. A month later, I was busy trying to move to Denver,
Starting point is 00:30:26 and then I had a new job and all of that. So I never really got into it. And then I was at a conference in Poland. And Andrew gave another talk on go at that conference. And I was like, okay, now I really have to do it. So I sat down and I went through their tour and I started playing around with things. And I'm still not anywhere near competent, but I can get a little bit of stuff done and I can, I know enough to pester people to help me out. So I'm more able to ask questions. So eventually I'll probably, I hope to be fluent by the time the first Go conference here in the States happens. So you don't have to go into great detail, but just at a high level, what is it about Go that turned you on? What is it that got you?
Starting point is 00:31:14 It's a small language, and it's very consistent, and it feels very zen, minimalistic and zen to me. So the way Ruby is more Baroque and Shakespearean and expressive and that you can say things in a thousand different ways and they all smell just as nice, with Go, it's more like a very tiny poem, zen poem. Very concise. And there's kind of just one way to do it, right? There's just one way to do it. And that's kind of a relief after, you know, when I do so much Ruby, it's really a relief to be on the other end of that scale. I'm very excited about the concurrency model in Go. I'm also very excited about the fact that there's no inheritance. It's object-oriented, but it's all through composition. So it has this incredible focus on the interface. And so the API of your object is very important. And I really like that. I can kind of relate on the, there's only one way to do it, being attractive.
Starting point is 00:32:26 I'm also a Ruby developer, and I love the freedom that Ruby gives us to express ourselves. And then over time, I see actually my tastes in Ruby changing to where something that I used to think was a good way of writing Ruby, now I look at that and it's, it's unattractive or it's, it's silly or whatever, whatever reason. And then I start like porting my Ruby over to my new, my new Ruby style. And I look at my old style, like, I can't believe I used to write like that. And I'm not talking about, uh, like readability and stuff. I'm just talking about pure style. Yeah. And, uh, that's after a while that kind of just wears on you. It's like, I wish they would just tell me how to write it and like, let me think about wears on you. It's like, I wish they would just tell me how to write it and let me think about the problem solving. And I know there's use cases for both scenarios, but that is an attractive thought, although I haven't actually got into the triangle yet. This really varied and expressive craziness that we're allowed in Ruby and the concise, expressive, minimalistic approach that we're encouraged to use in Go. I really like both, and I think that they can both inform the other. I think when Rob and Andrew that you mentioned that turned you on to go,
Starting point is 00:33:48 I think it was either in somewhere out there on the ether that I've seen this or when they were actually on the show. So episode 100 we had, there was a fun episode too, because it was episode 100 of the show, which was great, but had them on the show. And I believe it was Rob who said – because he was one of the founding people to create the language – was that he wanted it to fit in his head, in memory. Sometimes when you're – I think, Jared, you and I have had some side conversations about the state of flow even, like going back to some things you said earlier, Katrina, like where, when you're working on something, if you can, you've got a lot going on in your brain, if you get like a text message or a tweet or something that kind of breaks that state of flow, you kind of lose that mental memory. And I think that's kind of what Rob was fighting against when creating the language was to kind of keep it like that as well, to keep it where you can kind of keep what you're doing in your brain a little longer. Yeah. This morning I was pairing with someone and they introduced me to an innumerable method
Starting point is 00:34:48 that I had never seen before in Ruby. And it's awesome. It was exactly what I needed, but I had totally never seen it. Even though I've read through, I thought, all the innumerable methods, I just had totally missed it. I've been doing this for, what, three years? I mean, come on. You should have gotten it by now.
Starting point is 00:35:05 Right? That's funny. But yeah, I mean, that is the fun thing. I think that's kind of the adventurous part of Ruby is that there's so many different ways that you could do things, but I can limit what you're saying, Jer, where you're like, just tell me how to do it the one way so I can think about the real problem versus the style that i have to execute this and i can do it 15 ways but which way is really the right way to do it and just give me those training wheels i'll go so um yeah i guess we talked about go a bit here but so originally the cli was written in in ruby right so was it something with Ruby that made you change, or was it simply to want to play with Go to do it in that?
Starting point is 00:35:50 No, okay, so yes. The original command line in a client was written in, it was a Ruby gem, so it was gem install. Exorcism. That worked really well when the only problems were in Ruby. But now you have people only on exorcism for the closure. And it's really a pain to set up. All the Ruby, like setting up Ruby on your machine is actually quite an ordeal, especially
Starting point is 00:36:18 if you don't know Ruby. So with the Go, it's possible to cross compile for all the different, um, operating systems and architectures and people just have to download and install this one binary and that's it. No dependencies. don't worry about telling us your GitHub just do it now I guess version. Will that eventually go away or is that still kind of like or is it dead and you just haven't removed it yet? Oh, the one that says Ruby? Yeah, it says it's on your homepage and it says try it and the instructions say gem install exorcism
Starting point is 00:36:58 you go to attempt directory and That's totally a mistake it should be I'm going to fix that after the show. We didn't say that. We'll edit that out. Pay no attention to that. The Go client allows you to do that now.
Starting point is 00:37:13 Okay. So I will totally fix that. Thank you. Hey, we're here for peer reviews, right? Absolutely. So exorcism seems like it has a really great foundation, and I'm halfway through the Bob exercise and having fun. It seems like this is the kind of project where you have bigger, long-term goals. What are some of your thoughts on the future of exorcism?
Starting point is 00:37:40 What would you like to see? More languages, more exercises, more community, or are there changes coming down the road? All of the above. I'd like better exercises. Right now, all the exercises that are there were just kind of made up by me while traveling, hoping to keep my students busy for half an hour. And so some of those exercises are absolutely excellent and have really interesting problems that they expose and really interesting discussions come out of them. Others have terrible design, terrible APIs, really boring discussions. And I'm kind of working on figuring out which exercises are good and which are less interesting so that I can par that down.
Starting point is 00:38:20 But I'd also like new exercises that expose that, um, expose different types of problems, perhaps in the different languages, like not all the languages need the same exercises because they have very different, um, design constraints and, uh, different features that, that you should be able to explore in exercises. Um, I'd like more languages. I'd like all the languages, really. It seems like there are two or three different reasons to use exercise that people have told me about. Some people say, I'm learning how to program, and this is the first time that I'm actually getting feedback on the code that I write, and so I'm learning a lot faster. So it becomes a type of mentorship. And then other people are like, well, I'm fluent in Java. I just want faster. So it becomes a type of mentorship. And then other people are like, well, I'm fluent in Java. I just want to figure out how to write Clojure.
Starting point is 00:39:09 And so they're using it to try out a new language kind of just for fun and figure out what the idioms are in that language as opposed to the language that they're fluent in. And some people are doing exercises in the language that they use primarily and using it to have really deep discussions about style and trade-offs with other people who use that language on a regular basis. And I'm logging into the, to my homepage now on, on exorcism and it looks like I got a zero in the upper right-hand corner. Are there some gaming convention or gaming aspects that you've either started or is it, what is that zero ah no notifications sorry yeah again i'm gonna be talking to uh ux people to help me clarify all of that i don't actually want gaming uh aspects to this i don't it's really hard to do
Starting point is 00:40:01 to to game things well and encourage the right behavior and it's so easy to get it wrong and encourage the really arbitrary, wrong, uninteresting behavior and unhelpful types of competition. So I'm trying to avoid that. I fully agree with that. that a bit ago i just happen to be studying the characteristics of a social network and like my day job i work um at pure charity which i guess is kind of one part social network one part crowdsource funding i was just thinking about like different things we've talked about and for whatever reason gaming was on my you know the these gaming things that have been all the rage that and then have kind of trickled off since then. Every time I kind of go into something that kind of gives me points, I'm just like, stop that.
Starting point is 00:40:51 It's annoying. Don't do that. I just want to do it. I don't like that stuff. It drives me crazy. A lot of the research around motivation has – someone did some research with kindergartners where they gave the kindergartners where they said they gave the kindergartners uh markers so that they could draw and that they would draw things and then they started rewarding them for their drawings giving them gold stars or or points or whatever and
Starting point is 00:41:17 those kindergartners stopped drawing unless they were given the rewards. Like they started drawing only if they were going to be rewarded for it. And so it took away that internal drive to do something for the pleasure of just doing it. That's why I hate money. Right? That's why I hate money because, I mean, when you start working only because you want to make the Benzies or whatever, you know, it's not cool. Change of perspective. It's even worse on the internet where you're,
Starting point is 00:41:46 you're basically modifying your own behavior in order to affect like the number in somebody's database on some server somewhere across the, across the world. You know, right now it's a 12. I really want that number to be a 13. It's so arbitrary and really valueless that I i get that at the same time uh sometimes it can be effective it just you know it is kind of uh putting it to good use and i think you're right that there's there's a lot of ways that that's uh that that can be used and end up having you know negative effects on your community yeah let's maybe tail end one piece here.
Starting point is 00:42:27 I got a question on, I like the learning aspect when it comes to something like this. So not just learning with exorcism, but your specific learning, Katrina. So you'd mentioned before we actually started recording yesterday when we were doing sound check, you'd mentioned that we're generally pretty bad at giving feedback and you kind of wanted to learn. So that was also one of the parts that kind of propelled you to do this. So what have you, what have you learned about feedback and people giving feedback? So I mentioned a little bit of it earlier. I realized that this, this sort of generic, Hey, great thumbs up type of feedback isn't helpful because it's not actionable. It's not specific. It doesn't give you something that you can use to either repeat it or improve it.
Starting point is 00:43:15 So the feedback that I really have liked on exorcism so far has been feedback that is very specific about the code that is there right now. I'm looking at this code, and I'm seeing that this is repeating over and over. Is there a way to remove this duplication? Or I'm seeing that the same parameter is passed to all of these methods. Perhaps there's a second object where these methods would belong in. So it's looking at the existing code and being very specific and actionable about the things that you see there, rather than either just being sort of generically positive, hey, that's great, or pushing it in directions based on some future speculative, well, maybe new requirements are coming down
Starting point is 00:44:05 the line. Like, we don't know anything about requirements. Let's just look at the code that we have and look at the code smells or whatever that we can identify here and address those. And I was just looking at my notes, too. I also want to glaze over this. I was thinking about your counterpart in writing the GoCLIU. I'm not sure you say his last name so i don't want to butcher it but i know his first name is mike mike gay art yeah he's a developer at pivotal labs and uh so we've been
Starting point is 00:44:37 ever since he's he's based out of boulder which isn't too far from denver so he comes down to the office that i work at every once in a while, and we've talked about design and refactoring and pairing and teaching and a bunch of those things, and he's been working on the Cloud Foundry command line client in Go for the past few months. So he helped me get started with that, wrote all of the basic things, and then I basically ask him for for
Starting point is 00:45:06 feedback when i start mucking about with things that's yeah and i was just thinking about that because i i knew you had a counterpart so when we talk about exorcism is it just you like was were you the the founder of it the idea maker and do you have any counterparts so is mike like a longtime partner of this or will you play a larger role later on it was no it's just me um a lot of people have contributed so i think over a hundred people have contributed commits on github to the actual web uh website and several people have um committed to the both the go client and the Ruby gem, which is now deprecated. And I think it's just people get kind of excited about the idea and spend a few hours doing something.
Starting point is 00:45:53 Doing something. That's cool. So we're probably at the point where we ask these common questions. And I'm going to ask an uncommon question today because I like to throw curveballs here and there. But I think we kind of answered it a little bit and i'm not going to answer for you i think you may have already answered though but if you weren't uh writing ruby what would you be writing i would be writing go and if you weren't writing go what would you be writing good one i don't know uh Erlang? Maybe.
Starting point is 00:46:27 A throwback to the days of Wynn. When Wynn was on the show, he used to always ask this, and I missed this question, which was, I guess not language-specific, but project-specific maybe. So what is out there in open source? What project is out there that you wouldn't mind spending a weekend forking and twe hacking with, you know, not like a language, but just a project itself. There, there are actually quite a few. I would love to just go to, uh, there's, there's a website that has a list of projects that
Starting point is 00:47:00 need help. Oh, really? Yeah. I should look that up. I cannot remember what it's called. Code Triage, I think. Code Triage. Does that sound...
Starting point is 00:47:11 It doesn't sound the bell, but if we don't get it in the show, it's okay. We'll put it in the show notes so if you're listening, you're like, oh, man. Okay, I'll find it. CodeTriage.com.
Starting point is 00:47:21 I'm hanging out there. It hasn't rendered yet to the browser, but we'll see. Yeah, I'm trying to load it too. Oh, yeah, help your favorite open source projects. I think you rung a bell. Yeah, so I would just go there and find something that I actually use and go spend a weekend working on it.
Starting point is 00:47:39 Anything in particular that you may have already earmarked? I like Sinatra. I use Sinatra a lot. And so I would totally love to spend a weekend just messing with Sinatra. I've got to imagine, yeah, as an instructor trying to get started quickly, it's probably the easiest to get started with. It's just one file, right? Yes.
Starting point is 00:47:59 And it's also very easy to explain. Like you explain the web and then you say, yeah, we have get verbs and we have post verbs. And you have a method named get and a method named post. And there you are. Cool. Well, I'm anxious to hear your answer to this next one, which is who is your programming hero? Sandy Metz. Sandy Metz.
Starting point is 00:48:18 Sandy Metz has been programming since 1978. She's been one of those people who just basically stayed in her cave and programmed always until, I don't know, maybe three, four years ago, where she went to a conference and was caught in a hallway rant about design. So this publisher from Addison Wesley overheard her ranting in the hallway at some Ruby conference and spent two or three years convincing her to write a book. Yeah. Which she did. And so that book, it took her two years to write. It just got published in September, I think, of last year. And it's a book that really changed how i think about code
Starting point is 00:49:06 the book she's talking about is uh practical practical yeah practical object oriented design in ruby big fan of that book haven't read it all but big fan of it i'm actually graduating up to it i'm still uh working through Eloquent Ruby, personally. And then also, front of the show, Abdi Grim, he's got a new book out, Confident Ruby, which is just phenomenal. So Confident is the one from before. No, Confident Ruby is his latest. Confident's the new one, yeah. What was the other one?
Starting point is 00:49:41 Because I keep getting them mixed up. Objects on... There was Exceptional Ruby. Exceptional, okay, up. Objects on – there was Exceptional. Exceptional. Okay, sorry. Exceptional. I love his approach to that too, so that's pretty neat. Another thing I'll recommend quickly if you don't have the time or not into reading these books is to let the Ruby Rogues read the books, as Katrina has won on the Ruby Rogues podcast, and then listen to them talk about it for about two hours.
Starting point is 00:50:05 And you feel like you've read the book by proxy. Is that right? Yeah, it's outstanding. We did an episode with Sandy Metz, and we couldn't all be on there at the same time because six is just too many when we also have a guest. So I set out that one because they were all such fanboys and totally wanted to be on the show and fought to stay on.
Starting point is 00:50:26 Well, I was pretty gracious of you considering she's your programming hero and you set out. Well, I've stalked her in real life, so I've actually met her. Avdi's Confident Ruby is going to be our book club book tomorrow when we record. Nice. So that's also coming out soon. Yeah. And if you're on that same note, we're working on partnering with Avdi
Starting point is 00:50:52 to provide that to our members. So the changelog is part sponsored, part member-based, or part member-supported, but we have this section which is called Members Benefits, which when we partner with people like DigitalOcean and Avdi and a bunch of other learning and developer resources, we just work to get you a little bit of a discount to it. And so keep an eye out for that. We're working with Avdi on that.
Starting point is 00:51:18 So I'm a fan of the book, but I think it's kind of neat just to kind of tie off on Sandy just what she says there. She says, if your code is killing you and the joy is gone, Potter has the gear. And I'm pretty sure that's how you say it, right, Potter? Pooter. Pooter, okay. Of course I'd get it wrong. Quite the name.
Starting point is 00:51:38 Yeah, right? On pooter.info, I think if you – I'm not even sure. Pooter.info is the website, though. Pooter.com. Pooter.com. Yeah. That's right. Thank you.
Starting point is 00:51:52 No worries. No worries at all. But, yeah, I mean, Katrina, it was great having you on the show. I mean, I think that it was just kind of hearing your enthusiasm for refactoring and flow kind of just made me smile quite a bit during the show, for sure. I don't know about you, Jared, but I always smile quite a bit during the show. It's a shame we don't actually do these with our faces showing to the world, like YouTube Live or whatever that thing is called, because this is a fun show. Thank you so much for taking the time to come on the show. Is there anything else you want to riff on real quick before we close out? No, I think I'm good. Thank you so much for taking the time to to come on the show is there anything else you want to riff on real quick before we close out no i think i'm good thank you so much for inviting me yeah
Starting point is 00:52:28 it's it's been an honor to have you on the show i know that uh jerry was a fan of yours with that talk that we'd mentioned during the show and and i'm uh becoming more and more of a fan slash stalker whatever you want to call it but uh um yeah that's for sure but definitely thank you for what you're doing with exorcism. Keep in touch, too. Whatever's changing, whatever's happening, get back with us as you have time. I know you're really busy, but we'd love to help you keep this in front of the people who are wanting to do a lot of this. So whatever updates we can help you mention, we definitely want to do that for sure. And I also want to thank our sponsor for
Starting point is 00:53:06 the show digital ocean as i mentioned we i've been working with digital ocean for quite a while we're working with them over the next few months to to kind of help um and just help them spread the news to the developer community about some of the awesome um things that they're working on whether ways they're supporting the community and one one really unique thing, if you're really any developer out there, whether you have an open source project or something that is specific to a server or whatnot, they are paying $50 to write tutorials, basically. I'll put a link in the show notes, but some examples can actually be used on DigitalOcean or just how to use your open source software.
Starting point is 00:53:43 So one example was how to install WordPress on a LampStack on Ubuntu, which I have no idea how to by verbatim. So I kind of go back to a guide every time. And somebody got paid to write that article and make it really great. Everything from, we mentioned Ghost and their support of Ghost. So there's a how-to article on Ghost and the one-click install app they have for DigitalOcean. And we've talked about Docker quite a bit. We had Sullivan Hikes on the show quite a few back.
Starting point is 00:54:13 But if you're a fan of Docker and you still want to play with it, even though it's not completely stable yet, they have a Docker application you can play with. It just makes it really, really easy. And as I understand it too, Katrina, they do some pretty neat support with you guys for um jumpstart lab they gave us a hundred instances that we can use as we wish any size they're very generous with us very generous and i think that's one part of why they've made some inroads into the community so one thing i've heard and this is kind of
Starting point is 00:54:40 elongated just because i really absolutely love digital ocean but um as i've just heard people say, well, they're not that expensive, so how can they be good? Well, don't let the price fool you. They just really want your business because they want to show you how awesome they are. If you're the kind of person, too, that likes to decorate your laptop, you can send an email to Barry at DigitalOcean.com. He's going to just tell him your shipping address. He's going to ship you some DigitalOcean stickers. But I've got a couple links in the show notes I'll put there for you. And I also want to plug the coupon code, the promo code we have, which is the changelog October.
Starting point is 00:55:15 And if you use that when you sign up, you'll save $10. But that's it for this show. Check out DigitalOcean at DigitalOcean.com. Katrina, what's your website? It's Katrina.com, K-Y-T-R-I-cean at DigitalOcean.com. Katrina, what's your website? It's Katrina.com. K-Y-T-R-I-N-Y-X.com. Wow. Awesome. And we want to thank you once again for coming on the show, and thank
Starting point is 00:55:34 you for listening. And Jared, thank you for being awesome on the show as well. So let's all say goodbye. See ya. Bye-bye.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.