Structured learning is important. Hacking and slashing through being a n00b is useful in many situations, but being able to find a person, book, or other piece of documentation that will structure the learning for you makes for faster and more thorough learning in many cases.
I liked college, I got to take lots of challenging classes that involved quite a large amount of structured learning. Within the structured learning of class time was often lab time which was much less structured except for the requirements and expected result (if provided). But the labs were based on the structured part of the course and so I could leverage that learning in the lab environment in order to put together disparate bits of information to accomplish the lab goal.
I feel I learn very quickly and thoroughly in this way. Structured learning interspersed with labs.
But in the real world, once you have a job, there’s a lot less structured learning and a lot more hacking and slashing as a n00b. There’s an impression that there isn’t time to create proper structured learning activities or documentation since there’s products to build or money to make. But I think this may be a shortsighted view.
Granted, for-profit companies can’t be expected to prioritize structured learning over profits, the shareholders wouldn’t allow that. But they should provide some time and resources where structured learning can take place, either by having experienced people lead a course or by providing time and resources for individuals to engage in their own version. Some companies do a great job of this, others don’t.
When I first started at Xerox, I got the impression that they did a decent job of providing structured learning opportunities. There was a graduate studies program where you could attend RIT or the U of R, I went to company provided training on things like Lean Six Sigma, and about once per year there was some kind of “class” being offered (I remember taking a “class” on digital control systems around 2006). It wasn’t the best environment for structured learning, but Xerox didn’t hold people back from participating. Lately it seems like Xerox isn’t as good as it used to be at providing these opportunities, but then again, I left in November 2011 so I’m not the best judge.
But what if your company doesn’t provide these types of opportunities? What if you’re unemployed? What if you’re at a school taking classes that don’t challenge you?
Well, then you should make your own structured learning opportunities.
There’s a really cool market developing online where people can take college type courses for rather low costs. MIT has had this for a while, but it was a bit hit or miss for each course. But now there’s things like Udacity, Stanford’s online experiements, and Udemy. You can take college type courses for free or rather low cost ($100 per type “rather-low”). This brings education to a whole new group of people, which is awesome!
But what if you don’t have the ability to follow a time structured course like these? I’m somewhat in that camp, as demands in my life and work probably won’t let me commit to a multi-week (or multi-month) course schedule. I failed at taking the Stanford database online course in 2011, I just couldn’t commit to spending enough time each week due to a fluctuating schedule, so I just stopped.
I’ve found that getting a book with exercises can provide a similar experience and I can set my own schedule. I’m currently working through the exercises in K & R. I’ve programmed in C for close to a decade, but never done all of the exercises in K & R, so, now this is my structured learning. In the mornings, when I’m able, I read a few pages, then do a few exercises. I figure I can always come back after a week off and no one is holding me to a schedule.
The schedule part will be my biggest challenge. If no one is holding me to a schedule, how will I prevent myself from lapsing and stopping because I’m able to come up with excuses? I don’t know, yet. I’m going to try this and see how it goes. My goal is to do all of the exercises in K & R, to gain a better understanding of C. If this goes well and I’m able to keep up with it on a regular basis, then I’ll use the amount of time I was able to spend (rather easy to calculate based on git commit timestamps) to see if I can commit to taking an online course with a more fixed schedule.