How I Learn
Couple of people asked me how I keep up to date and learn so here is a brief description.
Challenging Job I have (and had) a job where I can work on quite different projects and do lot of different stuff. I like learning new things and being challenged by them so it’s important to have a job that provides these challenges. Most of things that I learn are directly or indirectly related to my daily work. (Though I usually go an extra mile or two thnecessary to just do the task when learning them.)
Reading [OUTDATED] I read a lot. I guestimate that I spend 30-60 hours a month learning, most of that reading, mainly articles and blog posts (the top few of them get to my monthly top list). Most of that comes to me via my Twitter feed, predominantly from DZone that does a good job of supplying popular and often relevant articles, and partly from specialized sources such as Planet Clojure and then from renown experts including Martin Fowler, Kent Beck, Adam Bien, Gojko Adzic. I also read books, preferably general ones such as Implementing Lean…, Clean Code, and even Joy of Clojure (though language-specific, it introduces the reader into functional thinking and the design and philosophy behind the language rather than just the syntax and tricks)
Doing Different Stuff I prefer to do very different stuff because that is how you learn most. That’s why I’ve decided f.ex. to learn Clojure as opposed to Ruby or Scala: it’s much more functional (yet practical, living on the JVM), it’s mind bending (slide 8), and it’s a Lisp, i.e. the-most-powerful-language-ever.
Programming Finally I have some hobby projects that I use to do different stuffTM than in my daily job such as experimenting with Groovy unit tests or to practice pair-programming with friends.
Conferences & Similar Good conferences provide inspiration and knowledge though not all are so good. Meetup groups such as Oslo Socially Functional, Coding Dojo, XP, Lean are good sources of both inspiration and fun.
Yes, that’s a problem, especially given that I need time for my family and yoga. Sorry, I’ve no magic answer here.
Please use comments to share your tips for learning and keeping up-to-date with our rapidly moving profession!
Programmer Competency Matrix – a nice overview of a programmer needs to know in different areas (computer science: data structures etc., SW engineering: SCM etc., programming: defensive coding, IDE etc.) + what experience and knowledge they need, split into 4 levels. Where are you?
Dreyfus model of skill acquisition - where are you in each of the key skills and what do you thus need to do to grow? (novice - quick wins, advanced beginner - breakable toys, i.e. safe environment to explore the limits of the rules by breaking them and learning from failure, practitioner (competence) - follows rules, needs goal-based tasks instead of micromanagement, proficient - develops intuition but checks it against the rules, learns from case studies and anecdotical knowledge, expert - transcends the rules, acts based on intuition, unable to truly explain her decisions (but well capable of rationalizing them)). You will typically be on different levels in your different skills - development, team member, communicator, solution engineering, methodology - and it pays of to know where you are and thus what are your limits, needs, abilities.