People are very interested in Mendicant University, but there is very limited public information out there about it, even now that we've been working on the experiment for nine months aleady. From March 26th to April 8th, I'll be posting short stories daily that might give a better picture of what's inside my head, as well as what's going in the ivory tower that is our Ruby Progamming school.
In yesterday's post, I detailed my own personal story of how I got to the point where I could collaborate with and teach others. I also revealed the fact that since I was given so many great opportunities in life, I find it an absolute duty to find ways for others to benefit from the same good fortune I stumbled into by sheer luck. This to me is a key difference between a training relationship and a mentorship relationship.
A good trainer can give you incredibly useful skills, and to do that they need to understand enough about you to pick the techniques that will be effective with you. But a mentor must go beyond finding the most effective way for you to learn skills A,B,C and needs to touch on what you really want to do in life, and who you really are. Because mentoring relationships are inherently personalized, there's no way to put a dollar value on what they're worth. So for me, I feel it'd be impossible to settle up with JEG2 and feel like I had paid him back for the effort he put into me. That left me with no choice but to try to find some way to pay it forward through community service.
Back before I was even out of the baby pool as far as coding was concerned, I tried to help others by emulating what JEG2 had done for me. I tried to help beginning programmers learn how to code, with mostly disasterous results. At the time, I did not realize that it isn't simply a matter of presenting the information that the person needs to hear, but also reaching them in the way they needed to be reached. There are at least a few of my friends that I fear I've probably scared away from programming for life, or at least set them back by years by emphasizing on all the wrong things. I learned the hard way that without firm guidance from someone much more experienced, an advanced beginner teaching a novice is a bit like the blind leading the blind. Of course, at the time I assumed that because I had a great teacher, I myself would be a great teacher by default, and so assumed that every student I had was stupid until I started noticing all the evidence to the contrary. Thinking that the act of teaching was merely the act of providing access to raw information and explaining it was killing my ability to be useful.
My lack of success as a mentor early on forced me to find some other way to help. I was arrogant enough to blame my students, but not ignorant enough to see when my efforts weren't bearing fruits. Two things ended up working out much better for me: Writing a lot of technical articles, and hacking on open source projects. I was selected early on to be one of the initial bloggers for O'Reilly Ruby, which is now defunct, but at the time was a huge opportunity to get myself exposure. Similarly, through prodding from JEG2 I had been accepted into Google Summer of Code 2006, which gained me lots of attention from the community who I had accidentally tricked through my hubris into thinking I knew what I was doing. Between these two opportunities, I was able to finally feel like I was helping people. Many folks enjoyed my writing and my code, but many others taught me lots through their feedback about just what I didn't know. I even wrote a self-published book about Ruport with Mike Milner to combine these two passions of mine. Through years of repeating this process, I humbled myself a bit. Lesson learned here: Fuck up in private and you may never realize it, fuck up in public and you WILL learn something, whether you want to or not.
I decided that I wanted to stick with a lifestyle that let me hack on open source as much as possible, and write as much as possible. Thankfully, my early work with BTree Technology and later with Madriska Media Group made this very much possible by letting me choose my own hours, commit to only what I felt I had time for, and generally just make my own plan. I have always enjoyed my consulting work because I really like seeing the direct impact of my work on businesses, and over the year, that has become a real passion of mine. But sooner or later, I felt like I needed a break from that and wanted to go purely into open source coding for a while. Hence, the original Ruby Mendicant project was born. Of course, being one who tends to overcommit, I decided that with all my newfound free time, I'd also want to write a proper Ruby book that shared in a more humble way the lessons I had learned over the years, and so Ruby Best Practices was born around the same time.
Both RBP and the Ruby Mendicant project that brought us Prawn were tremendous successes in the sense that they filled big gaps that needed filling. But somehow, they left me feeling unsatisfied. In a case of the grass being always greener on the other side, soon after I completed these projects, I turned back to consulting with a renewed sense of energy, and in the course of a year with Brad's help made huge positive changes to the way we do things at Madriska, and built up a set of processes and a team that totally kicks ass. I think the draw of consulting to me was once again being able to see the fruits of my own labor, something you tend to miss when you do open source. In open source projects, while you may get some really awesome contributions from people from time to time, they come in fits and spurts and the vast majority of your interactions end up being with users, who often don't quite understand how free software projects operate. It's also very rare for people to show what they've used your software to build, even in a healthy community. Thus, the impact is more visible in consulting than in open source, on an average day. Writing is a little bit better in that the reactions tend to be helpful or positive, but generating buzz is a job in itself and isn't quite fun.
Over time, I got a bit fed up with an internet that you can pour so much into, know that people are using and appreciating your work, but get so little back in the way of feedback. I still struggle with this and feel like it's quite unfair until I realize that my own patterns of behavior reflect the same thing I'd want to criticize. How many authors of open source projects that I've used do I thank for their efforts. Not nearly as many as I should. How many projects do I patch or report bugs against? Even fewer than those I send thanks to? How many inspiring things do I read each day that I either don't share at all or only go as far as posting a RT on twitter? God, it'd be embarrassing to mention that number. I don't think that we're all bad people for not doing these things, it's just the nature of the beast. The internet is a huge consumption machine, and producers rarely get proper acknowledgement for their work. My heart feels lighter when I go to users group meetings or conferences because the most common word I hear on the hallway track is "Thank you", either for work I've done, or coming out of my own mouth to someone else I've appreciated. That tells me we do give a shit, but that the internet is vast, and we're just too busy to say thank you all the time.
I still wrestle with those feelings, and have worked to figure out how to solve them. Then it dawned on me: the real joy and growth that comes from this feeled is through interactions, not mere production and consumption! This is the difference between giving a talk and a giving a training, which I learned by first doing some trainings at Lone Star Ruby Conf, and then later working on Compleat Rubyist with David A. Black and Jeremy McAnally. In a training, you're giving people some useful information, but then working with them to make sure they understand it and getting to see a glimpse of how they use it. This is profoundly different than talking at a group of people who have their heads down in their laptops for 30-45 minutes, or writing a long winded post on an open source project so full of assumed knowledge that the reader must have their mind reading device engaged to make heads or tails of what you've just said. Trainings not only help people, you get to see that you've helped them! This closed the loop for me, and made it so that I felt my efforts were being matched with a sense of personal satisfaction that helped keep me emotionally stable as I put great effort into these things.
By the time I started really digging into training people, I had learned a whole lot more about the field and was finally ready to admit how full of fail my earlier attempts were back when I was still in the kiddie pool. But as I said at the very beginning of this post, the thing that separates training from mentoring is that the former is a fixed, fairly well defined commitment, that you can at least begin to guess at the value of. Mentoring is about the long game, and is about personal connections. But this is something I truly didn't realize until *after* starting RMU, so we'd be jumping ahead to discuss it now. More about that in a future story!