Learning is a crucial part of being a software developer. Increases in knowledge and skill can make a significant impact in our work. But in an age where everyone seems to be in a time crunch, we want our learning to be as effective as possible. We want to get as much learning out of our books, courses, and videos as we can. Counterintuitively, I believe one of the best ways to maximize knowledge gain is by reading books that do not apply easily to technologies or concepts we already understand.
(Prefer to listen? Subscribe to my podcast for a narrated version.)
Over the last year, I've read two books that aren't written in Python (the primary language I use at work): Working Effectively with Legacy Code, by Michael Feathers, and Practical Object-Oriented Design in Ruby by Sandi Metz. Initially, I was skeptical as to whether I would gain much from them, as specific tactics seemed like they wouldn't be applicable outside the language the author chose to use for each book. To my surprise, I learned more from these books precisely because they were not written in the primary language I use.
I find three reasons for this. The first is that reading unfamiliar languages causes my brain to comprehend the material better. Because I don't know Ruby at all, I have to put in more work to understand the text. When I read a snippet of Python code in a book, I'm more likely to skim. But when I come across a bit of C++, my brain has to focus to really understand how the code works.
The second reason I think these books had an outsized contribution to my development skills is that they caused me to think through the way to apply the ideas in a new context. While reading about how to make a well-designed Ruby class that was amenable to testing, I was thinking about how to apply those lessons in Python. To be clear, I had to choose to do this. And if you want to maximize your learning, you'll have to do the same. By forcing my brain not merely to understand the information, but to also apply it in a new context, I learned the material more thoroughly.
The final reason I think these books were so helpful is that they are great books. Kind of obvious, right? A well-written book is more helpful than a poorly-written book. When we limit ourselves to just the materials relevant to our day-to-day work, we miss out on gems written in other languages. Plenty of excellent books that can help us become better software engineers exist; we shouldn't exclude some simply because of the language their author chose to use for them.
Putting ourselves in unfamiliar situations is hard. Because of that difficulty, it also has a huge potential to bring about learning and growth. Pick up a book in a language you don't know and thoroughly study it–you may be surprised by how much you learn.