Category Archives: Chapter-1

Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman

We’ve been assigned to read Chapter 1 of the textbook with the same name as this blog post, but I couldn’t stop there. I read the whole book during this past week or so, and I did this for two primary reasons. First, I thought the book was very interesting and couldn’t bring myself to stop at Chapter 1. I could not find myself disagreeing with anything the authors asserted within this chapter. Second, I’ll be writing blog posts reflecting on various “apprenticeship patterns” discussed in the textbook throughout the next several weeks. I thought it would be particularly useful to have a general idea of each pattern. This makes it easier for me to pick and choose which “currently relative” patterns would be most useful to practice and reflect upon in future blog entries. That being said, this blog entry in particular will focus solely on the first chapter.

So what is an apprenticeship pattern? Dave and Ade, the primary authors of this textbook, describe it as something that we as entry level software developers can use to further our careers. The aim these authors seem to have is not on how to develop software itself, but rather how, as apprentices, to approach software development as a whole. Rather than explicitly teach us how to write software, I feel that the authors’ ultimate goal is to teach newcomers in the field how to accumulate and apply knowledge as effectively as possible.

What I found most insightful regarding this chapter is the comparison of modern software craftsmanship with the traditional model of the idea. I feel that the authors of this textbook are suggesting that the modern software craftsman ought to embrace this traditional overview of craftsmanship. In medieval times, the primary responsibility of an apprentice was to further their knowledge in their craft. This cannot be done by mastering just one aspect of the field. It seems to me that an apprentice should strive for at least an abstract understanding of every aspect of their trade, no matter how remote it may seem.

Attributes such as cross training whenever possible can help improve production and advancement of the apprentice. I feel this also helps advance the field of Software Development as a whole. I find this particularly thought provoking because sometimes today’s expectations of society may pressure us to focus solely on whatever narrow tasks we are expected to perform in a given job position. If we follow that path, we may become experts in that particular area, but what happens if that position becomes obsolete?

The goals of this textbook’s authors seem to focus on preparing us for the inevitable constant change and advancement of Software Development and Computer Science as a whole. Since our field is constantly changing, we must remain flexible with the ability to consistently adapt to this inevitable advancement and change. I feel this can only be done by expanding the knowledge of our craft. We should accept that our primary job position today may be obsolete tomorrow, and focus on expanding our knowledge in computer science as a whole. It seems to me that this textbooks’ authors assert this should be our primary goal. I believe the apprenticeship patterns discussed in the upcoming chapters give us that insight on how to flexibly advance in such a technologically advanced career as Software Development. I look forward to blogging about many of these patterns in the near future!

From the blog CS@Worcester – Jason Knowles by Jason Knowles and used with permission of the author. All other rights reserved by the author.