Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave H Hoover, Adewale Oshineye
Hey everyone, this is Og Maciel with another book recommendation. This week, I have something completely different from everything I've recommended so far.
Let me start by telling a little story. Back in 2019, I published my very first book titled "Software Quality Engineering: Tales from the Trenches". At that time, I was still working as a Software Quality Engineer for my current employer. I wanted to write a book that captured my journey of how I transitioned from being a Software Engineer to becoming a Software Quality Engineer after spending so many years as a Developer.
The book talks about my journey, starting from when I was still living in New Jersey as a Software Engineer for a company there. Then I moved down to North Carolina to join a startup. Eventually, I found myself in a situation where I felt like I was spending too much time trying to adapt my previous experience to a completely new environment.
When I joined the company in North Carolina, I had to adjust my software engineering skills to fit a startup that was heavily focused on Linux, the open-source operating system. While I had personal experience using Linux, I had never worked with it professionally, and I had mostly used proprietary software and Microsoft technologies up until that point. It was a steep learning curve.
That was probably the first time I started working professionally with Python, and I realized quickly that my prior experience wasn’t helping me as much as I thought it would. I was used to being a one-man band, the only software engineer responsible for a key piece of the application that everyone relied on. My ego was huge—I thought I was God's gift to software engineering. But reality hit hard, and I struggled. The more I struggled, the more defensive I became, refusing to accept that I wasn’t as good as I thought I was.
Eventually, I had an epiphany. I realized I was spending all my time complaining and doing nothing to fix the situation. It was like an out-of-body experience—once I saw that, I started doing something positive about it. The first step was admitting I wasn’t as great as I thought I was. As soon as I accepted that, it felt like a huge weight had been lifted off my shoulders. I didn’t need to know everything or impress people. I became comfortable with not knowing things, and that shift in mindset opened up new opportunities.
From then on, I said yes to everything. I volunteered for tasks I had no clue how to do, but I embraced the challenge. For example, there was a need for someone to handle release engineering tasks for a new product version. I had never done anything like that before, but I raised my hand and said yes. I asked questions, took feedback, and stopped pretending I had all the answers. That change in attitude allowed me to grow.
In 2019, I decided to capture that entire experience in my book. The journey from thinking I was the greatest software engineer to being humbled, learning to accept my limitations, and eventually improving myself was a pivotal moment in my career. Over the years, I went from being an individual contributor to becoming a director responsible for multiple projects and teams.
But this week’s episode isn’t about my book. Instead, I want to recommend a book I stumbled upon around 2010: "Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman" by David H. Hoover1 and Adewale Oshineye2. The book is about learning how to learn—an apprenticeship. It emphasizes the importance of approaching learning with humility, much like the Zen parable of the empty cup:
A well-educated, scholarly man approached a Zen Master, seeking the secrets of enlightenment. The man boasted about his extensive knowledge of the scriptures and the many practices he had mastered over the years.
Eager to share his wisdom, the Zen Master offered to serve tea. The Master began pouring tea into the man’s cup, but even after the cup was full, he continued to pour. The tea overflowed, spilling onto the tray, the table, and the floor.
The scholar exclaimed, “Master! The cup is full! No more will go in!”
The Zen Master replied, “Like this cup, you are full of your own opinions and speculations. How can I show you Zen unless you first empty your cup?” 3
The book builds on that premise—before you can learn, you need to be open to learning. It teaches you how to confront and embrace your ignorance, how to unleash your enthusiasm, and how to be comfortable with being a beginner. One of my favorite patterns from the book is called "Sweep the Floor." It encourages you to be humble enough to do the mundane tasks that others might shy away from. By doing the simple, unglamorous tasks, you empower your team to focus on other things, contributing to their success.
"Apprenticeship Patterns" is filled with useful patterns that not only help you improve as a software engineer but also as a person. It emphasizes lifelong learning, continuous improvement, and how to build a strong support network. It also encourages sharing what you’ve learned with others, ensuring the journey of learning never ends.
I only wish this book had been available when I needed it most, but maybe I wouldn’t have been ready for it then. Sometimes, you need to hit your lowest point before you’re truly open to learning.
Although this book is focused on software engineering, I believe its lessons are applicable to all aspects of life. It’s about developing a growth mindset, learning how to collaborate with others, and understanding that learning is a never-ending journey. It’s an important skill set for both work and personal life.
So, this week’s recommendation is "Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman" by David H. Hoover1 and Adewale Oshineye2. It’s a fantastic book, and I highly recommend it. I hope you find it as useful as I did. Until next week, keep reading!