Well, up here in the northern hemisphere,we’re stuck in the doldrums of summer. The temperature is hot and humid down in Tennessee, the novelty of long summer days is starting to wear off, my family is back from summer vacation, and it feels like I’m just sort of waiting for cooler fall weather to roll around. When I was a kid, August always loomed as a reminder that summer was going to end and in a few short weeks I would be back in school. Now, however, those few weeks between here and September feel like an eternity.
One of the things that I’ve been struggling with during this time is what, exactly, to do with myself during the few pockets of time when I’m not working, playing with my family, or riding my bike. In the first months of this year, I had some big things to drive me–getting AWS Cloud certification, building this blog project. But what now? Do I work on blog improvements? Venture into embedded development? Pursue further AWS certification? I am currently interested in a few different things, and it’s not always easy to choose what I should invest my limited time in.
At the heart of this dilemma is something that has always challenged me throughout my career in software–when to spend my time learning skills and concepts passively, and when to spend my time actively working on projects. Coming from a learning path that was largely self-directed, it’s not always easy to know what is a better use of my time. I have sought in my career to find a nice balance between passive and active growth, and it’s something I’m always working on.
I think most people will tell you that the best way to learn software is to actively work on projects, and on the whole, I agree. I find that the skills and experience I gain when I have to design and develop apps stick far more than skills I learn through books, online courses, youtube videos, or certificate exam prep. You could spend all day taking tech-related courses on online platforms, and none of it will really matter much if you don’t have anything to show for it.
At the same time, I think there’s a danger to focusing too much on developing projects while neglecting the fundamental skills and theories that underpin the work you’re doing. I find that when working on projects, it is easy to fall into rabbit holes where you’re so concerned with solving the problem at hand that you miss the forest for the trees. Working with a narrow focus puts blinders on everything else, and runs the risk of programming by coincidence instead of working with understanding.
This perceived opposition between thinking and doing is nothing new. Ancient and modern philosophers alike have dealt with the ideas of the active life and the contemplative life. Dating back to Aristotle, these concepts describe the different types of activities members of a society engage in–things like labor, invention, and business on the active side, and reading, poetry, studying, and philosophizing on the contemplative. These two apparently opposing ways of life serve as a window to broader social questions. What balance of activity and contemplation should an ideal ruler have? What roles do action and contemplation have in a modern industrialized society? How can we resist the constant pressure to do and reclaim some contemplation in our current age?
I find the struggle to balance the active and contemplative lives constantly present throughout my own professional life. Obviously given my scholarly background, I'm partial to the contemplative life. I genuinely love to learn, and I don't always need an excuse to learn something–I love to learn for learning's sake. I often feel that I would be happy if “because it's cool” was an acceptable justification for researching a given topic. But I also want to have things to show for my discoveries. Indeed, having a goal to shoot for tends to help motivate learning new skills. The challenge is balancing the drive to produce, produce, produce, with the drive to bury oneself in books, documents, and tutorials.
I think what has helped me the most has been to have projects that allow me to pursue active and contemplative growth. Work is most stimulating for me when I have both a specific goal to work towards and I am forced to learn skills and concepts to achieve the goal. Sometimes this means finding something I want to build, and figuring out what skills I need to learn for it. Other times, it means looking at a technology or framework I want to learn, and then figuring out a good project to get me into those areas of knowledge. Building this blog was a little bit of both–I wanted to build a fullstack Dart project with AWS services, but I also have wanted to build a new blog site for a while, so it provided a great opportunity.
I’m curious how others strike this balance between doing and learning in their lives. Ultimately, I think finding an approach that works to get you where you need is the most important thing. Do you focus on getting your hands dirty on projects, and let the projects dictate what knowledge you need to pursue? Or do you prefer to get a broader theoretical understanding of a topic, and then apply that knowledge to things you work on?