Today, I read through Chapter 1 and the introductions to Chapters 2 – 6 of Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman for CS-448. The authors, Dave Hoover and Adewale Oshineye, wrote the book as a guide for “software apprentices” – people who have had some experience developing software and want to further their skills. I think this definition fits me pretty well, and this book seems to contain many useful tips that might help me improve my ability to create software.
The first chapter is the introduction, and it explains the authors’ perspective on software development as a craft. Hover and Oshineye’s idea of “software craftsmanship” is inspired by the typical craftsmanship structure from medieval times, in which craftsmen would fit into a hierarchy made up of apprentices, journeymen, and masters. However, they admit that this system is impractical in the modern world, and they propose a new set of values to improve upon it. This results in a system that encourages developers to work as a community to continuously improve the skills of themselves and others. I think this is an interesting perspective on software development. It takes the familiar structure of medieval craftsmanship and replaces the goal of becoming an expert in the field with a new set of values that encourages continuous learning. One of the values that stands out to me is for developers to have a willingness to experiement and be proven wrong. I personally have become discouraged in myself in the past whenever I have done something wrong while writing a program. I think that using a system that encourages developers to be wrong and be open to trying new things will help relieve some of the pressure I place on myself to do everything correctly.
Of the remaining five chapters, which I have only read the introductions to so far, I think Chapter 5 seems the most relevant to me. Chapter 5, titled Perpetual Learning, is focused on the process of learning how to learn. Because software developers must continuously learn new skills, even after reaching the journeyman and master stages, it is important that we have techniques to help us learn effectively and understand our weaknesses so that we always know what to learn next. As I mentioned, I have put a lot of pressure on myself to always know the correct way to do things while writing a program, and I often become discouraged when I do not know something. This chapter’s introduction has indicated to me that even a master developer must learn new skills constantly, and that it is more important to be able to learn well than to know everything. This introduction has already given me a new perspective on the process of becoming a great developer, and I think the learning techniques it introduces will help me improve my skills more effectively.