I've always spent a lot of time thinking about how I learn. Topics like how long it takes to fully grasp something, whether it's something I need to passively take in or actively work with to understand, structuring unstructured time for analysis, etc. Most of this developed during my years obsessively practicing the guitar and much of it still holds true. Maybe it's more superstition than science at this point but it seems to be working! For example, before diving into writing, research or coding (or before the coffee kicks in in the morning), I'm pretty particular about warming up my brain. I'll look over my calendar or to do list(s), then play a quick game of Sudoku and read a longer form newspaper article while the to do items simmer. If I need to learn a new topic, the progression and type of analysis is essential - usually starting with an encyclopedia, reading a few articles by different authors on the same sub-topic to gain perspective, browsing academic syllabi (what a great word!), beginning to sketch an outline while reading a more dense analysis and so on. On a much broader level, I've also found that after spending a week or two completely immersed and absorbing new information, I need a week or two doing something (even remotely) creative with the information. A lot of this seems obvious or happens subconsciously but ask yourself if you really know how to fine tune, prioritize or regulate your intake of information. If you're really paying attention, it's not easy.
At the beginning of 2012, I committed to learning an object-oriented programming language and framework. Based on expected and existing projects at Code for America it would be either Ruby (and Rails) or Python (and Django). Similar to my experience with PHP and Drupal, I thought I'd dabble in the framework first then back into the language. As someone not formally trained in CS and concerned more with output than perfection (while suppressing my inner perfectionist), this approach has been more comfortable. I appreciate Python's goal of having one right way of doing things and worked with the language a bit this year, though mostly out of necessity. By the end of February, Ruby's syntactic sugar felt more intuitive and away we went. Also, after working through Why's (Poignant) Guide to Ruby, what other choice did I have? It was a quirky and educational way to spend the little free time we had during the Code for America residency in Austin. The Bastards' Book of Ruby, despite its title, might be a bit more user-friendly than Why's Guide. For Rails, the canonical Hartl book and Railscasts were essential in getting moving. My inner academic disciplinarian also reached for the structure of the
excellent Software Engineering for SaaS MOOC (Massively Open Online
Course) last spring. And if you're in a city, go to Railsbridge or find a Meetup group. Finally, if you're lucky enough to be surrounded by extremely talented programmers, ask lots of questions!
While I've got a long way to go in my continued study and practice of Ruby, 2013 is knocking so it's time to line up some goals. "Resolution" carries too much baggage. This year I anticipate mostly project-based learning since that's the best way to really learn, helps others and gives you much more interesting stuff to talk about at dinner parties than theory. At the same time, one cannot underestimate the importance of theory, so one goal I've set is to improve my CS fundamentals this year. Since I've mostly had my head in the law for the past month, other than some minor bug fixes and maintenance of code, Stanford's upcoming Introduction to Databases MOOC seemed like a good way to ring in the New Year and get back into study mode. I hope to gain a better understanding of history and theory along with a more complete survey of the field. If you haven't MOOC'ed before, I'd encourage you to check one out. Coursera and the Khan Academy are two great places to look. Or ask a friend to explain something complicated to you. It's a new year, go learn something new!