Katrina Owen is the founder of exercism.io, where you can practice programming in Clojure, CoffeeScript, C++, C#, Elixir, Erlang, F#, Go, Haskell, Java, JavaScript, Common Lisp, Lua, Objective-C, OCaml, Perl 5, PHP, PL/SQL, Python, Ruby, Rust, Scala, Scheme, and Swift. That’s a lot of programing languages — and a lot of exercises, too. But exercism.io also facilitates conversations between learners about the code they submit.

To give you an idea for how it works, I’ve made a small separate screencast. I highly recommend exercism.io for anyone who wants to engage in deliberate programming practice, whether they’re a novice or an expert; it’s easy to skip through exercises, or to pick a new programming language you’d like to learn. Thousands of people are already using exercism.io, and a growing community is helping improve its open source codebase.

Katrina’s passion is to hack skills development itself — and exercism.io is just one example of that. She’s taught programming in many different contexts, and her talks at tech conferences have become legendary for making complex concepts and ideas understandable and fun. Really, if you’ve programmed even a little bit, go ahead and watch “Therapeutic Refactoring“, you will enjoy it and learn from it, I promise. 🙂

In our interview, Katrina shows a prototype for a new project she’s been working on: Skillflake (not yet public), which will help learners develop thinly sliced programming skills by looking at many small examples. She also talks about her upcoming book (with Sandi Metz), “99 Bottles of OOP” (note: you may have to disable HTTPSEverywhere for that page to load).

Katrina just rebooted her Patreon page for exercism.io — if you want to support her innovative work on skills development, please consider becoming a supporter. Another way to help is to contribute to exercism.io’s codebase, whether it’s documentation, exercises, UI improvements, core platform changes, or issue reports.

Transcript

Note: This transcript is edited for readability. A more literal transcription can be found in the subtitles.

Katrina, you’ve done a ton of interesting work and a lot of it is themed around passion and expertise. And you talk a lot about this in your talk about “Hacking Passion”, and one of the provocative statements you make in that talk is that “talent is bullshit.” Can you talk a little bit about why talent is bullshit?

I think it’s probably an exaggeration that talent is bullshit. I only kind of believe it. I think that great things, great accomplishments come from a lot of hard work. I think that there are some domains in life where there is some element of underlying talent that probably affects how well you do. And I’m pretty sure that in a lot of sports there are elements of what type of, I don’t know, muscle twitch fiber you have will affect how well you do in terms of sports. But I think that for the most part in most endeavors hard work and the right type of hard work is what creates great skill.

Is that true based also on your personal experience when you were learning, trying out different things? You’ve tried a lot of things personally, right? You’ve tried acrobatics and acting and lots of different endeavors. Some artistic, some scientific. You’ve studied molecular biology. When you apply that sort of principle of hard work, do you find this to be true for yourself as well, that the passion came with the work?

Oh, very much so, and the skill as well. I know a lot of people will say, “Oh you were so smart when you were a kid.” It wasn’t really true. Like, I didn’t work hard enough, I didn’t try hard enough to really get far at anything. I might have had some facility at, I don’t know, remembering details that was impressive to people, but it wasn’t really anything to do with being smart or being talented.

Because I thought that talent was real, up until I was about 25, I really thought that talent was the thing that would make you a great person or give you a great life. And so I was kind of desperately searching for my talent and didn’t find it. I was never really deeply skilled at anything until I started working hard.

So it’s really that discovery that came with practice, that really, “Hey, there is no magical thing here inside of me that I just have to uncover, that I have to sort of peel away.” It comes with practice. It comes with trying. But why then is it that this happened for you with programming and not with some of the other things you tried? Because you say in Hacking Passion too that you’ve worked hard at all of the things you did. What is it about programming that stuck with you?

With programming it came after I had learned how to learn math and science. And so that systematic approach to problem solving and studying, it worked really well for me. I don’t have the ability to synthetically pick up the big picture and then by osmosis discover the details. I worked very systematically to discover details and build up a bigger picture based on those details.

And the work that I did in my late 20s to learn towards my degree, taught me the skills that I needed in order to learn systematically, and I never applied those, even though I worked really hard, for example, at acrobatics, I didn’t know how to practice, I didn’t know how to approach it in a systematic way and so I was practicing really badly. I was practicing a lot, I was practicing hard and I was internalizing a ton of really bad habits. And so, even though I practiced a lot and practiced hard, I practiced the wrong things and I practiced them over and over again, so I got better and better at being pretty terrible.

One of the books that you suggested that I check out, the book Mastery by Robert Greene, is all about teaching the reader the ingredients of mastery including deliberate practice and other core skills. And at the same time you also recommended the work by Cal Newport, who wrote a book called So Good They Can’t Ignore You. And he talks a lot about how this notion of following your own passion is kind of BS, that really to your point it’s more about getting really really good at something and then discovering your passion within that.

But Robert Greene and his book really disagrees with that; he spends like an entire chapter talking about the inner force that compels us to go after something and that we should get in touch with our childhood and understand what was it when we were little kids that really excited us and how can we go after that again. How can we rediscover that and ignore all the people around us who tell us, “Don’t do this thing that you were excited about in your childhood”, and just go after that. You don’t believe that part of what Greene is saying, right, you are more on the Newport side of that debate.

I’m very much on the Newport side of that debate. And I kind of hate to admit it because I love Robert Greene’s writing and I find that he has so many incredibly deep insights about so many topics. And in particular in Mastery, he talks about deliberate practice, about mentorship, about the whole process of gradual systematic skill development in a way that I find very accessible and inspiring. And so I just kind of skipped over the part where he says, you know, follow your inner child’s dream.

So what is your passion that you’ve developed through this process of discovery and deep learning?

I’m really passionate about the process of skill development itself. People ask me, “So are you really passionate about teaching?” I couldn’t care less about teaching, I care about learning and I think that that’s a very different thing. And it’s not really learning in itself, it’s all of the processes around skill development. How does it work, what are the models, how do different people do it? What will let other people gain the skills that I wanted to gain and didn’t do correctly, what would let other people do it correctly, more quickly, earlier, without losing a decade of, you know, futzing around.

Have you thought about maybe doing this as the main thing you do professionally?

I thought about it. I think gradually that might happen. One of the things that Cal Newport talks about in his book is the idea of the adjacent possible. And I feel like all of the work that I’ve done since I started playing with programming, learning programming, working as a programmer, there have been elements of skill development and interest in ways of practicing little apps and things that will help people practice. And I think that out of this exploration, without quitting my day job and saying, whatever, I’m going to do this full time, I think that there’s a way of gradually developing all of my various interests into something that might be able to let me do it full time.

So exercism is already kind of a big deal, right? Wired wrote a big story about it, it’s got thousands of users, and lots and lots of people submitting their results to the different exercises. I was really kind of blown away when I saw how many programming languages are actually supported by it.

I think it’s 23 active languages right now.

How did it come about in the first place, how long did you have to work on it to get to that point?

Yeah, it was very accidental. Again, it grew out of some of the various threads of interest that I’d had for a while. One of them was nitpicking people’s code by email, a very small set of exercises that I would nitpick more or less on a daily basis. I did that for about six or seven years. And the other process was little warm up exercises for some students that I was helping mentor, one of the six, seven month development training programs. And the process that I went through with those students, exercism was in part a workflow optimization. I didn’t want to have to get up every single day at the same time to get them their exercises in the morning.

It was also a way of ensuring that they actually finished one exercise before moving on. Because a lot of people wouldn’t finish the exercise during the allotted half hour or whatever, and they wouldn’t go back and try it later and I thought that it was quite important for them to actually finish exercises. And then the discussion part grew out of the realization that they were doing all of these exercises, but we were never talking about what they had learned or where they got stuck with the choices that they made and those conversations were actually a crucial part of learning.

And so all of this kind of happened by accident over the course of a couple of weeks where I made the first iteration of the prototype and then just kind of released it into the wild. It didn’t occur to me that there would be more than, I don’t know, 12 or 13 people who would care deeply enough to actually use it if it wasn’t just part of their daily exercise regimen.

Within three weeks it hit Hacker News and I had a thousand people submitting code.

And within days people were using it from all over the world. I remember, the second day I looked at like some of the new users and they were from Brazil and Australia and Germany, [laughs] and it was like, what just happened? And I had not planned for it. I didn’t know how to manage it, within three weeks it hit Hacker News and I had, you know, a thousand people submitting code. I really didn’t know how to handle it.

And did you contribute multiple programming languages from the get go or how did that start to happen?

It started out just in Ruby which was what I was helping teach and then we added JavaScript because it was kind of a stretch goal for some of the students to do some JavaScript. But then as soon as it was in the wild, people were submitting Python, and CofeeScript happened, Haskell happened pretty quickly, Elixir. It was a lot of fun. People got really excited about it and they started making up their own exercises and porting existing exercises from other languages.

So one of the things that we chatted about a little bit is this notion of progression through the exercises. Right now it’s not clear to me quite as a learner of what the underlying theory is, like, why am I doing this now. What is the next thing and on what basis is it the thing that’s being suggested. Can you talk a little bit about what the current structure of the exercises is and how you could see that evolving down the road?

Yeah, at the moment again it’s very accidental. This has existed for two years now and people have contributed all of the exercises. Aside from the very first few that I contributed, all are community-contributed. People have added test suites and added new exercises and added new languages. The progression is very accidental.

We’ve tried to have it be kind of a gradual progression: at first you try out the language and you figure out primitive types or core types depending on the language and basic language features and then it builds into little bit more elaborate language features but still in terms of little programming challenges. And then towards the end, we’ll try to introduce more of the advanced language features, like for Go for example, there’s channels and concurrency and that sort of thing towards the end.

It seems to me based on everything you said about exercism, that it’s not just about learning to program. There is lots of places now where you’re being offered, learn to program in JavaScript by modifying these tiny little robots moving across the screen or whatever. But through these repeated exercises where you share your results with others and you look at what other people are doing, the idea really is to develop a true sense of mastery within each of the sections that you’re working in, right?

Yeah, I think the secret sauce of exercism is the conversations that happen. Practicing, you can do that anywhere and there are tons of sites that give great exercises and puzzles and all sorts of interesting challenges in all sorts of languages. And I highly recommend going and looking for the types of challenges that get you interested because that’s where you are going to spend more, I guess, more cognitive resources actually thinking about it and going deep, which I think is a valuable thing.

With exercism I think that the value in it is having the conversation. In looking at someone else’s code and thinking how would I do this differently? Why did they do it in this way? It becomes sort of a case study of trying to think out the reasoning for certain choices, was it deliberate? Was it accidental? Did they just not know about this other library or this other way of solving it.

People’s experiences are so different. Some people have experiences that are very much in banks, and security, and crypto and that sort of thing. Or hardware where there are very few resources and every single assignment counts. Other people are used to limitless resources and it doesn’t really matter because you’re never going to have more than 20 people using it, it’s some sort of internal reporting app and it doesn’t matter if it takes an extra minute or two.

And so the tradeoffs that people make when they’re programming often come out of all of these experiences that we’ve had, and so learning to see your own biases through someone else’s eyes can be very, very powerful.

I’ve gone through probably a dozen of the JavaScript exercises on exercism just for fun, and I got probably a total of two or three comments through them. And the times when I’ve got comments were mostly when I left other people comments. Once I knew that, I was like, oh, okay, so here’s how it works, I have to poke other people and then they will poke me back. That’s great.

Yeah, that’s interesting, I didn’t know that. It’s different in all of the languages I think.

But I found it the most interesting when I found the rare examples where people were having a real conversation about something. But part of the reason why I wasn’t going all over the place and commenting is that a lot of people just made the same mistakes over and over and over and over again, like just completing an exercise to make the test pass. It’s the most common mistake. “It does everything the tests say it should do. It’s perfect, right?”

No generalization whatsoever, the big case statement that does every literal example from the test suite, yeah.

So, how do you get to that point where you get people to the conversations, or to have more of them?

I wish I knew. The only way I’ve known to do it is to leave comments on everyone, and then when they start having a conversation back, keep my eye on that person and kind of follow them along. And right now there’s no way in the website to follow some person. We have an open issue about wanting to have an activity stream and sort of granular notifications and all of this. But at the moment that’s a problem that I don’t know how to solve, and it’s probably the most important problem on exercism right now.

Actually both of the biggest problems on exercism right now revolve around this conversation. How do you help people have the conversation that is interesting? How do we bring that conversation to a level that’s not just, “Oh, did you know that strings has a ‘whatever’ method?”, but really going deep.

And the other thing right now is that a lot of people don’t get feedback. There are bottlenecks in some of the languages where there are a ton of learners who are going in and doing an exercise or two or three or ten or twelve and then not getting any feedback because there are just too few people who are then turning around and sharing their observations with someone else. And I don’t know what the solution to that is. I’m working with a designer at Pivotal Labs in New York right now who is offering her time to open source which is a rare thing in design, I think.

That’s great.

And so we’ll see if we can find a way, a way of designing the experience in a way that fosters this conversation, and fosters the community that is necessary in order to have these conversations in a good, healthy, safe space.

Have you thought about picking canonical examples of, okay, this is the most performant solution to this problem, the shortest version, or the most well documented, or a clever use of the ‘map’ function or whatever, just the illustrative, curated examples? I saw a few discussions of curation, is that something you think would be worthwhile or does that sort of miss the point?

No, I think that would be worthwhile in many ways actually, I think it would be worthwhile to have a gallery, once you’ve solved something to go explore other solutions even if you’re not having a conversation, I think that can be truly an interesting thing. Right now it’s all a question of resources.

Again this is all open source, it’s all individuals who are spending their mornings or evenings or weekends helping out. I think it would take an individual or a small group of individuals who want to see it happen and who help figure out what is the technical solution to make it happen, how do we have to organize the work to actually discover these things and curate them, and how would you discover them, and, once they’re there, how would you in the site know that they exist and know to browse them.

What do people need to know to help improve the platform?

There’s actually a ton of work right now that needs to be done in order to surface all of the work that people could be contributing. I was talking to a developer here at Pivotal Labs this morning and we started talking about this idea of community. Every single language track really should have a core community, and there should be one or two or three community managers in some way, someone who is there consistently and who cares deeply about the language and about exercism, in particular about that track.

We could get sponsorship from companies to send these community managers to language specific conferences to help get other people involved in the community part of it. I think that there’s a ton of work that could be done around the community portion. There’s another huge amount of work that can be done technically of improving the platform itself.

Most of it is Ruby, right?

A lot of it is Ruby, right now, we’re talking about rewriting the backend API in Clojure. There’s a Clojure dev who’s really been contributing a lot of work to Scheme and Lisp and he does Clojure sort of regularly. There is some Go, the command line is written in Go, so that we can do the cross-platform compilation. But, yeah, there’s a lot of Ruby right now. There could be a lot more JavaScript, I think, but I don’t really do JavaScript, and so it’s kind of been left by the roadside.

One person came in and did a lot of work to start improving the JavaScript on the site, but it requires a real API and I’ve been completely swamped over the past month or two and I’ve not had time to do any work on the API.

There’s a very, very tiny donate link at the bottom of the site saying, you know, do you want to help.

[laughs] Yeah, I’ve put quite a lot of my own money into making exercism happen so far, and I’ve been unsure about it would actually work with donations. There is a Patreon link and there is a PayPal link, and I don’t even think I’ve set up Patreon correctly, but I don’t think I’ve actually –

No, I think it asks for how many ounces of blood of Katrina Owen do you want to support or something like that.

I have no idea how any of this works and actually if you want to help contribute to open source, if you can keep help me set up my Patreon, so that it actually works that would be a wonderful contribution.

(The Patreon campaign has since been fixed.)

But yeah, from having been in the free culture community for a long time I’m increasingly finding people who really support themselves entirely through that model, is that something that you see as a potential future for yourself in this work?

If exercism is to survive and thrive, it has to be driven by the community

I don’t know if it could work, I mean I suppose it could, I know that there are people who do it. With exercism, it’s so much bigger than just me. If exercism is to survive and thrive, it has to be driven by the community, it can’t just be me sort of trying to, I don’t know, herd cats or beg people for contributions, both technical and monetary. Because I don’t know 23 languages, I barely know three and that’s a lot in my life. There are people who have done like 10, 12, 13 languages on exercism, that’s kind of amazing.

Do you see exercism as the sort of be all or end all for your development in hacking skills and hacking skills development?

No, not at all, it’s just a tiny corner of – it’s just one way. First of all there are so many different learning styles, and I think that exercism matches some people’s learning style and not others. I think it might match several learning styles. There are people who would probably learn very much through mentorship, and through the conversation and they might not even do any exercises if they could get away with it, because this is boring, whatever. And other people who really like to do the same exercise and in many different ways. I have seen some amazing, hilarious solutions to things in ways that it never occurred to me to try, because there are people who are really willing to push the language that they’re using to the absolute edge.

So I think that exercism could match several learning styles, but it really is only two things, it’s the toy program, the little example of exercise that is trivial and you can learn a lot, you can go deep and you can discover a lot of things that are going to help you in whatever job you’re doing. But it’s not a real code, it’s not a real example and the things you need in order to scale servers and encryption and all of those things, it’s not something that you’re going to learn on exercism.

You’re going to learn maybe how to do code review a bit better, how to read somebody’s else’s code and understand their thought processes. You might learn some empathy, you might learn how to have a polite and respectful conversation about code, you might learn some tricks of a language, and how people tend to solve problems in one language or another.

But there are so many other things that you need to learn, and so many other amazing resources out there to help you learn them, whether it’s the sort of large scale very academic types of programs or it’s the little games, the browser games that will teach you just one little thing, but teach it to you really well, I think that there is a wealth of opportunities there.

You said to me that you had watched this talk by Kathy Sierra a while ago where she talks about both of this notion that our cognitive attention is incredibly limited and that what we use this for and how we use it is incredibly important, and she then goes into specifically the notion of perceptual learning, the idea of just looking at many examples of the same thing, to very quickly internalize, how does this thing work. And to develop this mastery that we’re going for much faster than it could be achieved by other means.

Yeah, she talks about two things, she talks about the perceptual learning which is the brain’s ability to look at a lot of details and start discovering over many, many, many variations the things that don’t vary. What are the invariants? What are the things that stay the same? What is the pattern that we can rely on to make a determination? And so in perceptual learning there’s an idea of being able to distinguish the details, the brain actually optimizes for filtering out irrelevant information, so you have experts who don’t even see the irrelevant information anymore because the brain is filtering it out at a pretty conscious level, and there is this idea of being able to distinguish the right details, and then there’s this idea of fluency of being able to do it so quickly in that automatic level, so you’re not burning cognitive resources in order to do it.

She talks a lot about that and it’s really fascinating, and she mentions some real world examples of it, and she also references some research that was done at UCLA by a Professor named Kellman and his team there, really interesting stuff. She also talks about the idea of taking a skill that is so small, that is so tiny that you can go from being a novice not knowing how to do it, right through being able to do it, but with very much conscious effort, over into being able to do it automatically without burning those cognitive resources, in a very short amount of time.

If you do these tiny slivers of skill, then you’re not going to be practicing it really hard the wrong way.

And she gave, you know, a rule of thumb of, if you can go through that whole process from novice to expertise in one to three sessions of 45 to 90 minutes each, then the skill is small enoug. I really find that interesting. I think that being able to slice off a tiny sliver of a skill, just a splinter of a skill and gaining that expertise means that you’re not going to be futzing around in that area where you’re just practicing it badly, like I did the first 25 years of my life. I practiced everything really hard and really badly and I made that permanent. I was permanently awful at a lot of things because I worked so hard at practicing it in the wrong way.

If you do these tiny slivers of skill, then you’re not going to be practicing it really hard the wrong way, you’re going to go right over and to doing it right. And I think that that opens up a whole vista of possibilities in terms of programming.

One of the things that Kathy talks about in her talk and in her book is that we’re burning cognitive resources, we’re leaking cognitive resources for everything that we do and we have too many things that we need to learn every single day, because they are piling up in this middle area of where we are burning cognitive resources to do them, but we’re not really moving them over into automatic. Unless sometimes we move them over into automatic, but we’re doing them badly. So we’re doing them badly and we’ve made it automatic at the half assed multiple of skill.

And so, the idea of taking a very, very tiny sliver of skill and developing expertise in that quickly is very interesting, and then the idea of using perceptual learning in this deliberately, using perceptual learning to perhaps perform that transfer, that skill development, I think both of those ideas are very powerful.

I mentioned to you, I had been playing around a little bit with NodeSchool.io, and they have these interactive exercises and they do the slicing pretty well. So you take something like JavaScript prototypes which a lot of people struggle with and continue to get wrong after they’ve sort of learned it incorrectly the first time, and they have a tiny what they call “workshopper” just to learn prototype chains and really get that sort of internalized right.

But what they don’t do is the perceptual learning piece which as I understand from Kathy Sierra, the idea really is to get into that mode where your brain kind of starts to go on autopilot and starts to do the pattern recognition for you and you don’t even have to understand yourself, how it achieves that, it just happens.

And that seems to be sort of a magical thing to want to shoot for, I totally get that. And you’ve started to play around with that a little bit, right?

I’ve started to work on a prototype that might use a fair amount of perceptual learning. In the most basic form, I think it is just this idea of a sliver of skill. It’s a very, very small skill. I’m starting with Ruby syntax partly because Ruby is something that I know quite well. I also know quite a few newbies who are learning Ruby and so it’s easy to find someone to try it out on which is kind of a useful thing.

One of the points that Kathy makes in her talk and in her book is that you want to be exposed to hundreds of examples of good code. And in the examples, in the little exercises that I’ve made, I have hundreds of examples of both good and bad syntax.

So in some ways, this might not actually meet the criteria that Kathy sets in that I am showing you examples of bad code as well. But the feedback is very, very quick. And so I think that it might actually work in terms of letting the brain detect is this syntactically correct or will it cause a syntax error.

We look at the Skillflake prototype together (relevant video segment).

You’ve already done a lot of these, right, there’s already quite a few of them there. What’s next for that project?

So, the first thing I want to do is figure out if this actually works. The initial experiments that I’ve done with some newbies suggest that it works, and works really, really well. I have gotten some very enthusiastic feedback from some newbies who have gone through it very quickly and by the end of it, they know if it’s syntactically correct or not and that’s very, very interesting. (…) Ruby is a very, very rich language syntactically, and so there is a ton of work that could be done just in recognizing Ruby syntax.

There’s also Ruby idioms and using the standard library; it has a huge standard library. And so being able to recognize if this is a correct usage of the standard library could be a useful thing. I think that there might be a more perceptual piece of saying, I’m going to show you 200 valid strings. These are all valid, just look through them before you even get to saying valid, invalid. It might need to be more gradual. Right now I’m mixing four or five different types of string syntax into the same very first module. It mighbe interesting to just do double-quoted strings, just do single-quoted strings, just do heredocs, so that the brain is pattern matching more quickly on a smaller set of rules.

There might even be a way of introducing categories of errors that are typical, so that people are more quick to pattern match on, “oh, this is an escaping error” or “this is a method call error” or something like that, I don’t know. So there’s a lot of experimentation I think that needs to be done. If it works, there are a lot of languages that this could expand to I think.

And a lot of types of tasks. Pattern recognition, I think we use it more than we know. I was reading some of the research about how they’re using perceptual learning in mathematics, in particular, in algebra, and you’d think that it’s not really a pattern matching type of problem, but it really is. Being able to recognize if you have a valid transformation lets you solve algebraic equations. And so I think we do a lot more pattern matching than we realize in programming.

And how do you want to get that sort of massive, large scale feedback on whether it works or doesn’t?

I’m starting out small. I want to figure out the really rough edges first with just a handful of people and then I think the next step after I have some of the basic feedback in, I’ll probably add some sort of tracking, not necessarily of who does what but within a session to know how many did you get correct and how long did it take in the first ten or the second ten or the third ten to see if there’s a useful progression. And it’s not real science at this point, like if I were going to do real science, I’d have to have control groups and I’d have to have all sorts of things.

Do you want to integrate it with exercism in any way?

No, it will be completely standalone.

That makes sense. You talked earlier also about some of the other ways of hacking skills development, in particular, the one thing that of course comes up a lot is various forms of tutoring and mentorship. Can you talk a little bit about your own experiences, what’s worked for you in mentorship and what you think people who design these systems need to pay attention to?

I did almost all of my learning in the first few years alone. I didn’t even realize that there was a community, that there was such a thing as a community. I learned from books and I learned from doing programming. After a few years, I had a job where I was very, very frustrated. I was frustrated with quality. I was frustrated with the thrashing that we did, with the pain of the slow progress of doing something that should have taken hours, but it took weeks. And I started reading everything I could come across about agile development, mostly about XP and refactoring in test-driven development.

And then being the most junior person on my team, I was like, I’m not going to be able to change this company but maybe someone could come in and change it for me. [laughs] So, I called all of the, ObjectMentor, anyone who had written a book and who was running a business about how to teach teams, how to do programming better, I called them up or sent them an email and asked what it would take to bring them into the company. Of course, it would take, you know, $20,000 and whatever, which I didn’t have. So, it didn’t happen but one person called me back. He was at an airport and he gave me a call and he said, I can empathize, you know, maybe we can’t actually fix the pain that you have in your teams, but let’s talk.

And so we talked for 45 minutes and then he sent me a link to an unconference, an open space conference that was just a day, it was very inexpensive and a bunch of interesting people showed up. And so I had my first taste of community, of people who cared about these things, who cared deeply about these things, and learning from actual interactions with people is an incredibly powerful thing.

After that, I decided to change languages because I wanted to be working in a language that had more of a community around it, which is how I ended up in Ruby kind of arbitrarily. It could’ve been Python, it could have been any language that has more community than what I was working in. And then I started being a part of that community. That changed things. I still didn’t at that point have any experience with mentorship, but I had interactions with humans and I think that was a very, very important thing.

A couple, maybe three years ago, I came across a video that blew my mind. It was a technical video. It was about object oriented programming. I watched it and I felt almost dizzy, because the ideas were so big. The person who was doing the talk had mentioned that they were also working on a book and so I got a hold of a beta of the book and I went through and I basically put a stream of consciousness throughout the margins of the entire book and I sent it to them.

I didn’t know them at the time, but I sent it to them, I was sort of like, “Here’s my perspective as someone who’s fairly raw at programming, I’ve only been doing it a few years. This might be helpful.” And that turned out to be incredibly helpful to them, and we spent two-and-a-half hours on a Hangout talking about the feedback, like digging into various aspects of that feedback, and so it was a very useful thing.

And then later, right around that time, I got accepted to do my first conference talk. And so this person was like, “Well, I’ve done several conference talks, you know, I can help you out.” And “I can help you out” turned out to be, I would go off and do a bunch of work. And every once in a while, I’d check in and this person would say “Hmm”, they’d ask a pointed question and I’d go off and do a ton of work again, I’d come back and they’d ask another question, I’d go, “Yeah, that’s very interesting, that’s very difficult, I have no idea”, go off, do a bunch of research, come back.

They didn’t sit down and feed me how to do conference talks, but they checked in just enough, they had their experience to lean on. And I think this is the first time that I felt really deeply that I had a mentorship relationship with someone. I was doing the work, but their experience was really a powerful thing and my talk was miles and miles better than it ever would have been without that feedback and guidance.

And I have to say for any viewers who haven’t watched any of Katrina’s talks, you absolutely should. The work that you put into them is really very, very visible. It’s very clear that, holy crap, there is somebody here who cares to give a great experience to the audience, so huge kudos to you for the quality of those presentations, they are truly excellent work.

Thank you.

And so when it comes to mentorship, one of the examples that you mentioned was the story of Michael Faraday which is something that Robert Greene writes about in Mastery. And what’s interesting to me when I heard you talking, I also saw the connection to some of the things that Faraday did, he also made a big point of processing what he was listening to from his mentor and turning it into a book of his own.

And Robert Greene talks a lot about how this is something that we should all do when we read materials, that when we listen we should engage with the material very actively that this is one of the best ways to sort of kick the brain into gear in a serious way, and to not just be in this passive consumer mode.

But one of the other points that he makes is that, Faraday really put a lot of effort into that relationship. He sought out his mentor, he built the relationship, he spent years in this apprenticeship relationship and then he actually ended the relationship when it was no longer serving his needs well.

Is that an important lesson for you there as well?

I think the most important lesson to me with Michael Faraday’s story is that he did all the work. Humphry Davy, his mentor, he might not even have known that he was his mentor. He was a celebrity chemist, he was doing his work touring Europe and doing experiments and Michael Faraday joined the lab as the lowly assistant, who had to prep chemicals and do the dishes and take the guy’s tailoring to, you know … He did all the crap work, and he did it so that he could be in the same room as this guy, observe how he thinks, observe how he works and get any sort of guidance, because after a very short amount of time, Humphry Davy relied on Michael Faraday, because he was so good at what he did, he was so conscientious, he was so smart and he knew what he was doing and he learned very, very quickly and systematically.

A mentorship relationship is not a cold call.

I think that this story to me illustrates how incredibly important it is to take charge of your own learning, that if you want to be in a mentorship relationship, first of all, it’s not a cold call. By the time, Michael Faraday became Humphry Davy’s assistant, he had been introduced several times, he had seen some of Davy’s lectures, he had taken notes during lectures, made them into a beautiful book, bound it and given it to him.

Humphry Davy knew who this person was. He had some idea of the quality of his work, it wasn’t just some rando came in and said, “Hey, can you be my mentor?” Which is I think what a lot of people might think mentoring is. I hear a lot, “How do I find a mentor?” And what it sounds like when I dig a little bit deeper is, it sounds like they are looking for someone who can shelter and protect them and give them everything they need and spoon feed them every detail so that they can learn.

And I totally get it. I understand. It’s so exhausting, it’s so terrifyingly difficult to learn and there are so many resources and it’s overwhelming, and I’ve had that feeling, that drowning feeling like I am never going to learn it all and I’m always going to be behind, I am going to be 25 years behind all the other people who started programming before they could walk, and it’s never going to be okay. It’s never going to be over. I don’t know where to begin. I don’t know how to take the first step.

And the thing is, I don’t think that it’s anybody else’s job to take that first step for you. However, I think that a mentorship relationship has to go both ways. I think that if you think about it in terms of what the other person needs: Humphry Davy needed an assistant. He needed someone who was meticulous and who understood the chemistry and could do all the prep work and that’s what he needed and he got that. And then Michael Faraday was able to in that relationship absorb all of the things that he wanted to, in terms of learning, in terms of science.

He travelled Europe with Humphry Davy on some of his tours and met other scientists. He got a ton of things out of that relationship. It wasn’t Humphry Davy just being kind and offering up his time for Michael Faraday, and I think that if someone wants to learn in programming or in open source I think it’s absolutely possible to go and do work in such a way that someone else is getting something from it.

And building out that trust relationship so that when you do have something you are working on and a question you want to ask, they will know who you are, they will be comfortable with knowing that you have put in your part of the work, that they are not just leaking their own time into your life to help you out, and that it’s never going to be something that you return.

There are enough people out there who are vultures, who will take all the time that they can get. And it’s really hard for someone who – especially someone who has some visibility, I think, for people who are maintainers of some of these frameworks that thousands of businesses use to earn money on top of. I think some of the people who have a lot of visibility, I bet you they have random people come in and ask them for favors, all day long, every day.

And I think it would be a very different thing if someone came in and just, I don’t know, triaged issues for them on their projects and discovered that, this question that gets asked repeatedly, I could go write some documentation for this, and submit a pull request, or just be there and help unstick people and then they would learn a lot about that project, they would start to get to know the project a little bit more, they would have opportunities to submit little pull requests and help debug things. And they would gain familiarity, their username on GitHub or wherever would start being a familiar face. So this person has a lot of visibility and at that point it’s a lot easier to ask someone for a pointer or for some help and actually get that.

That makes sense, proving your own value especially to the true masters in their field. What’s next for you, Katrina? One of the things that you mentioned is that you have been working on a book for a while now, can you talk a little bit about that?

Yeah. I am working on a book called 99 Bottles of Object-Oriented Programming. Sandi Metz and I have been working on this content for a couple of years now. It came out of some of the early exercism things. The 99 Bottles of Beer song is just one of those exercises that is kind of fun. And I was seeing so many terrible examples of code to solve it and for a while I was thinking there might not be a good solution to this problem. It might just all be horrible and the interesting problem is what rug do people sweep their code under in this problem.

And Sandi took that as a challenge and she was like, no, there has to be a good solution. And we went back and forth and we’d spend weekends where we were both just solving the problem over and over again, and we’d get in a Hangout and we’d say, “Oh I love that”, “Oh I hate that”, “Why did you do that”, back and forth, and we just explored this problem very, very deeply and discovered that there are deep, simple, very powerful lessons about object-oriented programming in the 99 Bottles of Beer song.

That turned into a course, people were begging Sandi Metz to come into their businesses and teach their developers. And so we put together a curriculum centered a lot around the 99 Bottles song, but also other nursery rhymes and songs. And we taught that several times, she started with other people as well, she started alone, and through teaching, we’ve sort of figured out, what are the lessons in this song and we’re turning that into a book.

And I suspect any book with the title 99 Bottles of Beer will sell among programmers.

There is a good chance.

And when did you say it’s coming?

Huh. I didn’t. [both laugh] We’re hoping to get it into Beta soonish. So in the next couple of months, we’ve got a lot of work done, there’s a lot more to do. But I think that we can start showing people and selling our early version in a couple of months.

That sounds great. Well, thank you for talking with us about exercism, about hacking skills. I’m really excited about what’s next, things like the experiment which also has a name, right, Skillflake.

Skillflake, little flakes of skill, yeah.

Skillflake coming soon, try it out when it’s released, and please for those of you who do know how to code, and can contribute or also can help with documentation or exercises, please take a look at the exercism code base, always looking for help and support. Check out Katrina’s talk and check out exercism. Thank you again Katrina for sharing your passion with us today.

Thank you so much for having me.

Additional links and notes

Other tech learning resources

It can be hard to keep track of the tutorials, lessons and courses that are freely available to practice different aspects of programming. I’ve started a small subreddit, “learnyouit“, which I use to track newly published (!) learning resources — please join me if you find this effort useful.

Production notes

As usual, the interview was done via Google Hangouts and edited with Blender. The intro chiptune is Star Bars by the talented Andrey Avkhimovich, and licensed under CC-BY. The transcript and subtitles were provided by Ajay Kamal. Thanks to Sumana Harihareswara for giving me feedback and walking me through kdenlive, which I may try next time.

The interview content (except for the fair use excerpt from Kathy Sierra’s talk) is under CC-0.