Lately I've been reviewing my skills and interests, and sketching out what I'm interested in learning and accomplishing.
It's been a little bit since that episode aired, and I realized that I've actually put in my 10,000 hours on a couple of topics now.
It's been more than ten years since I became obsessed with software testing. But I ought to say that with different terms.. this version of "testing" is better-called "reviewing". Throughout those ten years I've kept progressively clearer and lengthier notes, and these days I'm very tempted to dive into very in-depth reviews.
I've had a sort of intuitive expertise. But it's not a functional competency, like an trade skill that's learned on site, it's more like a guitarist who "just figured it out". That kind of guitarist may be outstanding in many ways, but they often can't even read sheet music and have no working knowledge of the fundamentals.
With this "10,000 hours" in mind, when I think about wanting something, my perspective completely changes. Instead of "it could have been done better" or "it'll be so hard for me to do that myself", with a kind of distant daydreaming mindset, I find myself thinking more along the lines of "I've put in the hours, I know what I'm doing, I could get this done myself".
But I do know that I'm at best "a natural" and that while I've put in the hours to develop portable "soft skills" and a sort of intuition, I'm lacking those fundamentals. So while I have talent for usability and documentation, and I'm learning to program, I lack the underlying organizational and other true "development" skills: Specs, planning, prioritizing, testing, etc.
I know how to get those missing fundamentals. I've already started some of the research on the core topics I'll need to absorb, and I'm seriously thinking of getting some paired programming going. I took a serious look through The RubyMentor Project, and I was appalled that there's been no improvement in all this time. They're still using that piece of shit wiki. Nobody has spearheaded the project, and it shows.
2014-08-04 - RubyMentor is long gone. See the the archive.org archive.
At the moment, I have several significant projects all on the go at the same time. It's not just Unity Linux that's high on my list.. there are a number of programming and personal projects which are just as important to me. Some of those projects have been patiently waiting for me for years now. I really need to get them all done.
But creating a "doing it right" project is something that I am compelled to do. I learn by documenting. I only learn by documenting. This naturally leads to tutorials, but now I'm going to expand it and have it lead to behaviours, tools, methods, styles and anything else I can think of. It's a reasonable leap to go from that to a full online course, including some sort of real-world Meetup.com or virtual paired-programming.
I don't understand how an online mentor is useful. There is a huge community out there, and it's responsive and helpful. One of the first and most important skills one can learn for programming is to define one's questions well, and know where and how to look for answers. Once that skill is even mediocre, asking for random help from a mentor is just being lazy.
The value in having another person available isn't with getting answers. It's getting wisdom.
First, I've had the pleasure of sitting down and chatting with a number of very capable programmers. They've shared all kinds of stories and tools and techniques. This kind of knowledge isn't gained in asking them questions, it's gained through general discussion. One doesn't need a mentor to have that discussion, one just needs a friend.
Second is paired programming. At first it seems like a waste of both people's time.. sitting down working on the same thing, tripping on eachother's code, questioning and countermanding eachother''s work.. getting derailed by conversation. But it's that same conversation which is so valuable. One person is always teaching the other. One person is always learning from the other. One codes, the other searches for answers. It's probably the best time I could ever imagine spending on my code. For this too, one doesn't need a mentor.
So while I can't imagine a value in a mentor, I can imagine great value in a similarly-skilled partner for paired programming. A mentor is someone who is head and shoulders above the mentee, but that's often a Bad thing. It's Bad because too often the mentee is merely absorbing the skills of the mentee. When two equally-skilled people are put together, they are each able to explore without being bogged down by the perceived expertise of the others. The pair can learn and argue and teach oneanother. A pair has a flow of knowledge going both ways, where a mentor-mentee relationship too often flows one way.
While it's very likely that a mentor will relay their best skills, they will often have favourite tools, methods, etc. With a pair working together, they will each develop their own favourites, and they will each help the other understand their reasoning. Between the two people, the tools, methods etc. will be better than the benevolent bias of a mentor. I argue this because the tools, methods etc. are changing over time, and the mentor is always a little out of date.
But all the wisdom the mentor has cannot be omitted from the pair's learning experience. This is where a good "best practices" site comes in.
2014-08-04 - It's gone, see the archive.org archive.
Gregory is on the right track. I hope that works out, because it's a resource that will be essential for people like me.. permanently learning and never quite sure we're learning the right stuff.
I think that there's a place for making more "newbie friendly" information available. As I said earlier, it'll be an inevitability for me to write down my thoughts and experiences and create a concise tutorial which others can follow. It's not for right now, but it'll happen so long as I'm interested in programming.