If you're looking to pick up a new framework or language, you probably aren't asking yourself, "Hmm, should I take a class from Big Nerd Ranch, or from Little Jock Hut?" You are probably wondering: "Why take a class at all?"
And that's a fair question. If you're learning to program Android or iOS, Python, Ruby, you name it, taking a class is not required to get that knowledge into your brain. In fact, if you're a professional programmer, odds are pretty good that you did not take a class to learn the last language, framework, or library you picked up.
Autodidacticism is a fact of life in the programming world. That doesn't mean that it's the best way to learn, though. Here are a few reasons I've found that taking a class can be a good idea.
Learning a Modern API Is Hard
When I was in college, we labored under the idea that you didn't need to be taught little things like programming languages, APIs, or tools. That stuff would be out of date soon, anyway, so why waste time teaching it? Even in alien environments like Smalltalk, Lisp, and ML, we were expected to make our own way. Hack it together as best you can - as long as you get the core concepts addressed in the class, you're golden.
That idea still makes sense - when you're talking about college. In real world programming, core concepts are usually less important than getting the details right. Details like, "How do I draw something to the screen with this thing?" or "What's the best way to create a new screen and hook it up to the rest of my application?" or "Dammit, how do I write this out to a file? This doesn't work like Python at all."
Any modern framework or API has an enormous number of these details - unspoken stylistic assumptions, best practices, debugging techniques, documentation, workarounds, and idioms. People looking from the inside of that knowledge out may not even notice them. When you're on the outside looking in, though, they're an enormous barrier to entry.
Which is why...
It Helps To Have A Guide
When you're making the transition from outside to inside the looking glass, it's hard to know what you're getting into. Java developers tend to leap into Android development. "I know Java," they think. "I'll just learn these Android libraries, and boom - Android expert. Accio Benjamins." Eventually either their heads break, or their apps do.
The same thing happens in iOS. Objective-C interfaces easily with C, and brackets are scary to newbies. The GUI interface building tools are a mystery to the uninitiated, too. These are the most powerful parts of Cocoa, though. If you avoid learning them, you end up crippling yourself.
When you're new to a platform, it's like you're visiting a foreign city. Some things are invaluable, some are dangerous. Some are common, some are rare. But to you, they're all the same. A good guide can show you which is which, can lead you through points of interest, can show you places you may not have found yourself. You can point your finger at something off the path and ask, "What's that?" and get a knowledgeable answer. And while everyone eventually has to figure out how to argue with the cabbies, your guide can demonstrate exactly how it's done.
We programmers take pride in never asking for help. We bang our heads against problems until they give way. That's not always a virtue. Sometimes it only takes longer and hurts more. Having an insider at your disposal to pester and imitate can be a quicker and more satisfying way of getting to the same place.
Of course, it also helps to...
You would be surprised at how many people come to our classes simply as an excuse to sit out in the woods without distractions. Even if you have a great book, even if the online docs are fantastic, it can be hard to get through them without focused time to work.
Focus is mostly about taking things away. So we teach our classes at a retreat - no commute, no figuring out where, when, and what to eat every day. You're stuck out there with like minded people, and the pace of the course is set by your instructor. For the duration, we ensure that the only thing you have to worry about is your own code.
Having a group helps with focus, too. There's a shared sense of purpose you get in a classroom with your peers. It's easier to work through a set of exercises when you're with other people who are doing the same thing.
I think that does it for my list of reasons why classes are great. Let's finish this thing up with a grandiose conclusion.
Learning Is Too Important To Do Alone
We do not learn in a vacuum. The pursuit of knowledge is not an endless, aimless walk through the pages of Wikipedia. Some knowledge is hard to learn. Picking it up takes real work. That work is easier to do with a guide. A guide live and in person, to encourage, to respond, to leave you alone when necessary, to help you over the rough spots when you need it. A guide who has been there before, who can take you as far as you can reasonably go.
We have to have guides, we have to have teachers. Even with the best video, audio, and written materials, without a guide, you're teaching yourself. If you're dedicated and pure of heart, you will learn it. With a good teacher and a good environment, though, even mere mortals can learn the hard stuff quickly and painlessly.
Want to learn at the feet of a master instructor? Check out our Android Bootcamp, taught by Bill and fellow rancher Brian Hardy.