The Changelog: Software Development, Open Source - Exercism.io and Crowd-Sourced Code Reviews (Interview)
Episode Date: October 16, 2013Adam 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)
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
at the changelog.com
slash weekly.
This show is hosted
by myself,
Adam Stachowiak,
as well as our
managing editor today,
Jared Santo.
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.
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.
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
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
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.
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
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.
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,
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?
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?
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.
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.
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
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
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?
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.
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.
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
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?
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.
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.
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
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.
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
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.
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.
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.
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.
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.
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
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?
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,
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.
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
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.
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.
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
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
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.
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.
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
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.
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.
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.
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,
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?
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
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
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,
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?
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.
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,
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
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.
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?
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
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
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.
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?
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.
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.
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
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.
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
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,
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.
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.
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
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
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
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.
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.
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
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...
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.
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.
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.
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.
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
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?
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.
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.
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
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.
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.
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.
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
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
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.
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.
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
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.
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
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.