This is a guest post by Jim Holmes.
Focusing on learning and self-improvement can be a hard, hard thing. Once you get past the inevitable procrastination, where do you even start? How do you find things that help you learn, but perhaps even more importantly help you learn HOW TO LEARN.
I’m always been interested in what others have found useful for their own learning journeys, so I thought I’d share a few things I’ve found helpful over the years.
I’ve been a prolific reader since I first learned how to read the second time I did fifth grade. You may need to re-read that sentence for it to make sense.
I’ve read hundreds of books on software development and delivery over the last couple of decades. I spent a number of years doing side jobs as a technical and content reviewer. I literally filled up a couple bookshelves at my workplace with free books I’d read.
While I’ve had an incredible number of great books on various aspects of software delivery (Kent Beck’s Implementation Patterns, Robert Martin’s Clean Code, etc.), two books have been incredible aids for me in how I learn.
Chad Fowler’s The Passionate Programmer is an extraordinary book that’s had a huge impact on many in the developer community. He frames the book explicitly on the line of “finding fulfillment and happiness in your career” and makes sure you understand those conditions don’t happen by accident — they take hard work and focus.
Fowler’s book is structured around specific, practical tips on creating a strategy for your career. Tips range from “Being the Worst” (work with people who are more experienced than you so you can learn from them) to “Avoid Waterfall Career Planning” (be Agile in how you plan and adapt your career). Most of the tips have an Act on It! section which serve as exercises to help you apply that tip to your life.
Andy Hunt’s Pragmatic Thinking and Learning: Refactor Your Wetware centers on research-based ways of optimizing how you learn. Hunt’s book is a guide to helping you focus on how you learn in order to be better at your work.
Hunt spends a lot of time talking about the science side of how we humans learn, and he makes it good reading. In the book, you’ll learn about the Dreyfus model, understanding right-brain/left-brain flow, the importance of play in learning. Really. One of the most important sections of the book is on the importance of deliberate learning — learning doesn’t come by accident. You have to work hard at it.
Learning can’t just come from reading, though. As both Hunt and Fowler are specific about, you have to be dedicated spending time doing work to learn.
I use a number of different tools and content platforms for learning (Shout-outs both to Pluralsight and the Ministry of Testing for their great online technical learning platforms!) That said, hands-on coding and work is critical, and two similar-but-different things jump out to me.
I’ve written here previously about how Code Katas are tremendously helpful in learning how to write better code. Similarly, Koans are practical lessons for learning how to use a specific programming language, framework, or tool.
The first Koan was created years ago by Jim Weirich, an amazing person who wrote Ruby’s Rake compiler among other things. Jim loved the notion of Zen Buddhist Koans to guide learning, so he wrote the first Ruby Koans as a way to spread his love of the Ruby language. You can find the Ruby Koans at http://rubykoans.com. These days Koans exist for nearly every programming language. You can also find Koans around tools like Moq, a mocking framework for .NET.
(Sadly we lost Jim some years ago to a heart attack. There is a touching video memorial honoring his extraordinary contributions to the software community.)
Spend a bit of time in your favorite search engine researching “programming koans” and you’ll find a huge list to explore.
Along the same lines, Git Immersion is a step-based learning tool for building proficiency with the Git source control system. Git’s popularity has exploded in recent years, and familiarity with it is a crucial part of being a good team member in many organizations.
The exercises at http://gitimmersion.com walk you through a basic introduction to the tool, then help you understand much more complex concepts like branches, merges, handling multiple repositories, and all the hard, messy things one needs to understand in the real world.
Note that Git Immersion focuses on Git, the source control system, not GitHub, the service that hosts Git. A small but important difference!
All Work and No Play
All of the technical, IT-focused discussion above is fine, critical, even. However, the human brain also learns best when it has time to relax and process things in the subconscious. Hunt talks about this in Pragmatic Thinking and Learning, and backs it up with science!
Some years ago during a very stressful, busy time in my life, I decided to take up studying classical guitar. I’d played guitar decades ago as a teenager but never focused on learning anything more than a few basic chords.
I took up the guitar because I wanted to reconnect with music, and I decided to take lessons as a way of forcing myself to commit to the process. First off, lessons were a weekly meeting that I had to be prepared for. Secondly, having an instructor to guide me meant I wouldn’t be completely unfocused. Third, I’d shelled out money and I’m a frugal person who hates wasting money — which helped reinforce my commitment.
Classical guitar is very technical in nature. One of the primary reasons I took it was to dive into fundamentals on finger movement, for example. Taking music instruction was a fascinating journey. Very quickly I found myself re-learning critical things about the process of learning. My guitar instructor was calling me out on things I regularly discussed with my own students and subordinates at work!
As an example, too often I’d get lost in working a long passage full of complex (to me) fingerings and chords. My instructor would gently but forcefully remind me “Break it down. You can’t learn a big piece all at once. Focus on one or two measures, then piece them together.”
How often do we run into this same exact situation of working on too big a problem in our software work? All. The. Time.
Likewise, my instructor knew when I came to a lesson and hadn’t done the practice that week. “Do the reps.” You can’t improve in anything unless you dedicate time to doing the repetitions — doing the work.
I took these learnings from my guitar lessons and found myself re-energized in how I was approaching my work in software testing and delivery. It was a fascinating benefit to me that helped me refocus on how I was doing my “day job.”
Learn How to Learn
All too often we lose sight of how important it is to make improvement and learning a priority. Life is hard and busy, but there are a wealth of tools, tricks, and resources to help you learn. Sometimes they’re even fun!
Jim is an Executive Consultant at Pillar Technology where he works with organizations trying to improve their software delivery process. He’s also the owner/principal of Guidepost Systems which lets him engage directly with struggling organizations. He has been in various corners of the IT world since joining the US Air Force in 1982. He’s spent time in LAN/WAN and server management roles in addition to many years helping teams and customers deliver great systems. Jim has worked with organizations ranging from start-ups to Fortune 10 companies to improve their delivery processes and ship better value to their customers. When not at work you might find Jim in the kitchen with a glass of wine, playing Xbox, hiking with his family, or banished to the garage while trying to practice his guitar…..