I've been a mediocre programmer for a long time. I've never had to program for a living although I have occasionally written a script or two in the line of duty. The thing is that I feel really guilty for not being a good programmer. Not for any reason other than it comes fairly naturally to me and I'm outright wasting one of my best talents. I don't think that I would be the best coder ever or become famous for my ability to trivialize the most difficult of computing problems, but I do know that I could be pretty decent if I hadn't been too lazy to improve my gift. Peculiarly, I really enjoy knocking out a decent piece of code so why I've never pursued this with more regularity is a mystery to me.
With this in mind the last couple of months, I started looking around for a suitable method of refreshing my basic skills and then having an avenue for continual progression. The progression part always stumped me. I would enthusiastically engage in coding exercises and work my way through a language only to finish the material at hand and feel suddenly lost. The material I could find would either seem a repeat of what I had just done or far too complex for my current level. Traditional school wasn't an option (due to costs and time constraints) and I never came across anything online that fit my learning style. So I stayed in my rut and never allowed myself to improve.
Enter
MIT's OpenCourseWare. OCW has been around for a while. Most people have heard of it, but like myself, many have disregarded it as a novelty or something outside their scope. On the contrary, it has turned out to be exactly what I've been looking for this whole time. I am very much a fan of structured learning. It has always led to my best successes. Unfortunately, I'm not a person that deals well with schedules and timetables. OCW is the answer in that I can use recorded lectures to get an introduction to a subject, then go and read up on it more in depth, write some code, and then continue on to the next lecture without being accountable to anybody else's schedule.
And they have virtually their whole catalog available in some form or another. I am working through the 6.00 Introduction to Computer Science and Programming class right now and am having a blast. The lectures are well taught, the material is presented in an excellent order, and the coding assignments are chosen and structured to be the perfect difficulty. It is also an excellent class for me since I am being introduced to OO concepts. OO has puzzled me for a while since virtually all of my experience has been with procedural languages (I am also currently reading
The Object-Oriented Thought Process by Matt Weisfeld. I highly recommend it for a great introduction to OO concepts.)
A great thing about OCW is the one-stop shopping aspect of it. I am noticing that my math skills aren't quite up to par. After all, it has been almost a decade since I took Calculus and those types of skills degenerate quickly. No worries though. The solution is just a few clicks away with their 18.01 Single Variable Calculus course. I will have to purchase a textbook to work though, but the important part for me is the structure that is made available to guide you through the learning process. I am more than happy to invest the time required to learn skills that I enjoy practicing.
For anyone that is looking for a great way to independently study some subjects that aren't always easily accessible outside of universities, I highly recommend OCW. MIT has done a great job on them and is providing a fantastic service to the world through this program.