Category Archives: CS-448

Reflections on Apprenticeship Patterns

While reading parts of the book “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” by Dave Hoover and Adewale Oshineye, there were a couple points that stood out to me when reading and comparing to my own experiences and knowledge.

An important point brought up by the book in the first chapter is how understanding the logic behind why things are done allows people to adapt to unfamiliar problems. Knowing the “spirit of the rule” allows for people to create new rules as needed. This is a point I personally feel strongly about. Knowing what to do is, really, only an issue of understanding instructions. Having a knowledge of the reasoning behind different practices allows you to apply that understanding to other problems.

Programming is a great example of this. It’s easy enough to follow a guide on writing code to follow some specific function, however, good developers will put effort into understanding how the code works, and will be able to replicate what they know later, or apply it to different situations. Someone who only knows the specific steps to writing the code doesn’t understand how it works, and most likely won’t be able to apply their experience outside of that specific use-case.

Another interesting point that I personally hadn’t considered was that apprenticeship in software development is much better approached as a mindset, rather than a formal form of schooling. The book describes that newcomers will have to “create their own opportunities for learning” in the working environments they find themselves in. I’ve understood that it’s important to have a desire to learn more than what may be expected, but the perspective of creating your own learning experiences, outside of more standardized curriculums but within the same environment was interesting.

This point also carries over into the beginning of chapter 3, where one of the authors describes how after connecting with other Perl developers, he was impressed not just by their knowledge, but by the speed at which they were still learning. Symbolically, the stacks of certificates and qualifications would become buried under book printouts and notes; the desire to learn more taking precedence over hard skills and qualifications that one can accumulate.

Both points culminate in the idea that being a great developer doesn’t mean having countless certifications or even being able to write code well. This is a good foundation, and great software developers usually fall into this category, but what makes them great is the understanding that there is more to learn and the desire to expand their knowledge and experience that sets them apart from the pack.

References:

Hoover, Dave H., and Adewale Oshineye. Apprenticeship Patterns Guidance for the Aspiring Software Craftsman Dave H. Hoover Aut; Adewale Oshineye Aut. O’Reilly, 2014.

From the blog Griffin Butler Computer Science Blog by Griffin Butler and used with permission of the author. All other rights reserved by the author.

Software Apprenticeship Patterns

Although my capstone course CS-448 focuses on mimicking a live agile setup to understand how software engineers work, there is still a focus on understanding how to become industry professionals outside of hands-on experience. Part of this extraneous understanding is reading the book on Software Apprenticeship Patters, most notably the first chapter on understanding the stages of craftsmanship.

I was hooked immediately into this chapter, as what I found my knowledge lacked in the most; was that I had very little understanding of some soft-skills Software Engineers should have. What was first apparent to me was that I am firmly in the apprentice stage of craftsmanship. I am focused on trying to become better at not only completing my tasks assigned and problems to solve, but understanding how to do them faster. Being an apprentice means to share this focus, and often I find myself forgetting (along with many others) that we will continue to learn after our graduation.

The understanding I’ve gained on patterns to work with my apprenticeship has driven me to change my mind on how to approach work in computer science. I have always had a drive to learn, but learning even as I work will be important for my growth. The reading has helped me to understand I should want to experiment and be proven wrong especially, rather than getting something wrong being treated as a failure.

I disagree with the software pattern about walking the long road. While I greatly enjoy coding and computer science, the idea of consistently dedicating myself to learning every day seems daunting. I value competence and pride in my skillset, and of course learning is required for that; however I worry that such dedication removes my ability to balance other hobbies along with my work.

Overall what seems most relevant to me is the first chapter. It is the most robust of those I read, and it contains the most information to introduce software apprenticeship. It covers what apprenticeship is, as well as the levels of software craftsmanship. With understanding these, it also introduces the idea of Software Apprenticeship Patterns, which is the focal point of the book.

From the blog CS@Worcester – WSU CS Blog: Ben Gelineau by Ben Gelineau and used with permission of the author. All other rights reserved by the author.

Finding A Way

Comparing software development to an apprenticeship like blacksmithing makes a lot of sense. The analogy can work for other professions but I think it works especially well with software development. The reason being that software development compared to other fields offers a lot of freedom and different ways of doing things. In other fields, you often only have a few ways of doing things. For programming there are often many ways to solve problems. Not every solution is good, but it can be used. I think it is a lot black smithing in that way. Many techniques are capable of getting the job done. You can go your whole life without knowing about them, but still be component enough to do good work. In the beginning, you are capable of doing very little or bare bones work. But as you increase your knowledge and experience you become more capable of doing much more. And maybe most importantly create work that can last in the most efficient way. Smithing a sword and building good software are not so different.

One of the most profound patterns to me was the “Exposing Your Ignorance”. Accepting that you are not perfect and there is no way to know everything. Especially, as a beginner it feels like a need to master so many things in such a small time. I feel like I never know enough. I often feel like “how can I get a job like this, I know so little”. Everyone seems to know more than me so it can get discouraging. But I like what this pattern is trying to instill. Accept that you are a beginner and that you will need help. This also goes into the finding mentors pattern. Having someone who can guide or help out of a tight spot. 

I think I like all the patterns about finding your own way. Like the long road pattern. Accepting that maybe you learn in a different way or approach something in a way that best suits you. No one person floors the same path. The software field is so diverse with some many different areas of specialization. There’s no one path that suits the goals you have in mind. Overall the biggest lesson I took away was not criticizing myself for not being a master. Accept that proficiency comes with time and no road is without bumps.

From the blog CS@Worcester – Code Craft by Kyle Tucker and used with permission of the author. All other rights reserved by the author.

On Being a Software Apprentice

 In this post, I’ll be discussing my thoughts primarily on Chapter 1 of Apprenticeship Patterns. I really like the idea of being a “Software Apprentice,” as I think it is a good representation of the attitude I have adopted over the years. I’ve always viewed myself as someone who is constantly learning and evolving in this field, and the apprenticeship model seems to align perfectly with that. It’s not about arriving at some endpoint but about growing, making mistakes, and improving.

What stood out to me the most was the idea of viewing the development process as a journey, not a destination. Chapter 1 introduces the concept of “Software Craftsmanship” as more than just technical skill, but also as a mindset of continuous learning. This was particularly thought-provoking because I think there’s a tendency, especially early in our careers, to think of coding as a task to be completed or a skill to be mastered and then moved beyond while in pursuit of some computer science career. However, the idea that becoming a Software Craftsman is an ongoing process—a commitment to constant improvement and a mindset that thrives on learning—is something that I think is a better description. It shifted my perspective on what it means to be good at coding- it’s not enough to know how to do something today, it’s about always finding a way to improve your code in the future.

In the past, specifically in my career, I’ve often gotten caught up in the day-to-day rush of just getting whatever piece of code done. I’ve rushed to get things coded, with the focus being on completing projects rather than developing deeper expertise or refining my approach to coding. After reading this chapter, I think I’m more likely to focus on the long-term value of writing quality code and the importance of standards. It’s not just about writing code that works; it’s about writing code that lasts, is readable, and contributes to a more sustainable project. I’m going to start to approach my coding tasks with a deeper goal, rather than rushing through them for the sake of completion.

As for the chapters that seem most relevant to me, I’d say Chapter 2 and Chapter 3 are particularly interesting. Chapter 2 addresses the Apprentice phase, which is where I find myself right now. It talks about how to build your foundational skills, seek out learning opportunities, and adopt the mindset of a lifelong learner – things I’m actively working on. Chapter 3, which discusses the Journeyman phase, is also relevant to me because it’s about expanding your skill set and finding ways to deepen your experience. I’m interested in how this phase encourages finding ways to take on more responsibility and become a more well-rounded developer, which is exactly where I want to focus next in my development journey.

From the blog Mr. Lancer 987's Blog by Mr. Lancer 987 and used with permission of the author. All other rights reserved by the author.

On Being a Software Apprentice

 In this post, I’ll be discussing my thoughts primarily on Chapter 1 of Apprenticeship Patterns. I really like the idea of being a “Software Apprentice,” as I think it is a good representation of the attitude I have adopted over the years. I’ve always viewed myself as someone who is constantly learning and evolving in this field, and the apprenticeship model seems to align perfectly with that. It’s not about arriving at some endpoint but about growing, making mistakes, and improving.

What stood out to me the most was the idea of viewing the development process as a journey, not a destination. Chapter 1 introduces the concept of “Software Craftsmanship” as more than just technical skill, but also as a mindset of continuous learning. This was particularly thought-provoking because I think there’s a tendency, especially early in our careers, to think of coding as a task to be completed or a skill to be mastered and then moved beyond while in pursuit of some computer science career. However, the idea that becoming a Software Craftsman is an ongoing process—a commitment to constant improvement and a mindset that thrives on learning—is something that I think is a better description. It shifted my perspective on what it means to be good at coding- it’s not enough to know how to do something today, it’s about always finding a way to improve your code in the future.

In the past, specifically in my career, I’ve often gotten caught up in the day-to-day rush of just getting whatever piece of code done. I’ve rushed to get things coded, with the focus being on completing projects rather than developing deeper expertise or refining my approach to coding. After reading this chapter, I think I’m more likely to focus on the long-term value of writing quality code and the importance of standards. It’s not just about writing code that works; it’s about writing code that lasts, is readable, and contributes to a more sustainable project. I’m going to start to approach my coding tasks with a deeper goal, rather than rushing through them for the sake of completion.

As for the chapters that seem most relevant to me, I’d say Chapter 2 and Chapter 3 are particularly interesting. Chapter 2 addresses the Apprentice phase, which is where I find myself right now. It talks about how to build your foundational skills, seek out learning opportunities, and adopt the mindset of a lifelong learner – things I’m actively working on. Chapter 3, which discusses the Journeyman phase, is also relevant to me because it’s about expanding your skill set and finding ways to deepen your experience. I’m interested in how this phase encourages finding ways to take on more responsibility and become a more well-rounded developer, which is exactly where I want to focus next in my development journey.

From the blog Mr. Lancer 987's Blog by Mr. Lancer 987 and used with permission of the author. All other rights reserved by the author.

On Being a Software Apprentice

 In this post, I’ll be discussing my thoughts primarily on Chapter 1 of Apprenticeship Patterns. I really like the idea of being a “Software Apprentice,” as I think it is a good representation of the attitude I have adopted over the years. I’ve always viewed myself as someone who is constantly learning and evolving in this field, and the apprenticeship model seems to align perfectly with that. It’s not about arriving at some endpoint but about growing, making mistakes, and improving.

What stood out to me the most was the idea of viewing the development process as a journey, not a destination. Chapter 1 introduces the concept of “Software Craftsmanship” as more than just technical skill, but also as a mindset of continuous learning. This was particularly thought-provoking because I think there’s a tendency, especially early in our careers, to think of coding as a task to be completed or a skill to be mastered and then moved beyond while in pursuit of some computer science career. However, the idea that becoming a Software Craftsman is an ongoing process—a commitment to constant improvement and a mindset that thrives on learning—is something that I think is a better description. It shifted my perspective on what it means to be good at coding- it’s not enough to know how to do something today, it’s about always finding a way to improve your code in the future.

In the past, specifically in my career, I’ve often gotten caught up in the day-to-day rush of just getting whatever piece of code done. I’ve rushed to get things coded, with the focus being on completing projects rather than developing deeper expertise or refining my approach to coding. After reading this chapter, I think I’m more likely to focus on the long-term value of writing quality code and the importance of standards. It’s not just about writing code that works; it’s about writing code that lasts, is readable, and contributes to a more sustainable project. I’m going to start to approach my coding tasks with a deeper goal, rather than rushing through them for the sake of completion.

As for the chapters that seem most relevant to me, I’d say Chapter 2 and Chapter 3 are particularly interesting. Chapter 2 addresses the Apprentice phase, which is where I find myself right now. It talks about how to build your foundational skills, seek out learning opportunities, and adopt the mindset of a lifelong learner – things I’m actively working on. Chapter 3, which discusses the Journeyman phase, is also relevant to me because it’s about expanding your skill set and finding ways to deepen your experience. I’m interested in how this phase encourages finding ways to take on more responsibility and become a more well-rounded developer, which is exactly where I want to focus next in my development journey.

From the blog Mr. Lancer 987's Blog by Mr. Lancer 987 and used with permission of the author. All other rights reserved by the author.

On Being a Software Apprentice

 In this post, I’ll be discussing my thoughts primarily on Chapter 1 of Apprenticeship Patterns. I really like the idea of being a “Software Apprentice,” as I think it is a good representation of the attitude I have adopted over the years. I’ve always viewed myself as someone who is constantly learning and evolving in this field, and the apprenticeship model seems to align perfectly with that. It’s not about arriving at some endpoint but about growing, making mistakes, and improving.

What stood out to me the most was the idea of viewing the development process as a journey, not a destination. Chapter 1 introduces the concept of “Software Craftsmanship” as more than just technical skill, but also as a mindset of continuous learning. This was particularly thought-provoking because I think there’s a tendency, especially early in our careers, to think of coding as a task to be completed or a skill to be mastered and then moved beyond while in pursuit of some computer science career. However, the idea that becoming a Software Craftsman is an ongoing process—a commitment to constant improvement and a mindset that thrives on learning—is something that I think is a better description. It shifted my perspective on what it means to be good at coding- it’s not enough to know how to do something today, it’s about always finding a way to improve your code in the future.

In the past, specifically in my career, I’ve often gotten caught up in the day-to-day rush of just getting whatever piece of code done. I’ve rushed to get things coded, with the focus being on completing projects rather than developing deeper expertise or refining my approach to coding. After reading this chapter, I think I’m more likely to focus on the long-term value of writing quality code and the importance of standards. It’s not just about writing code that works; it’s about writing code that lasts, is readable, and contributes to a more sustainable project. I’m going to start to approach my coding tasks with a deeper goal, rather than rushing through them for the sake of completion.

As for the chapters that seem most relevant to me, I’d say Chapter 2 and Chapter 3 are particularly interesting. Chapter 2 addresses the Apprentice phase, which is where I find myself right now. It talks about how to build your foundational skills, seek out learning opportunities, and adopt the mindset of a lifelong learner – things I’m actively working on. Chapter 3, which discusses the Journeyman phase, is also relevant to me because it’s about expanding your skill set and finding ways to deepen your experience. I’m interested in how this phase encourages finding ways to take on more responsibility and become a more well-rounded developer, which is exactly where I want to focus next in my development journey.

From the blog Mr. Lancer 987's Blog by Mr. Lancer 987 and used with permission of the author. All other rights reserved by the author.

On Being a Software Apprentice

 In this post, I’ll be discussing my thoughts primarily on Chapter 1 of Apprenticeship Patterns. I really like the idea of being a “Software Apprentice,” as I think it is a good representation of the attitude I have adopted over the years. I’ve always viewed myself as someone who is constantly learning and evolving in this field, and the apprenticeship model seems to align perfectly with that. It’s not about arriving at some endpoint but about growing, making mistakes, and improving.

What stood out to me the most was the idea of viewing the development process as a journey, not a destination. Chapter 1 introduces the concept of “Software Craftsmanship” as more than just technical skill, but also as a mindset of continuous learning. This was particularly thought-provoking because I think there’s a tendency, especially early in our careers, to think of coding as a task to be completed or a skill to be mastered and then moved beyond while in pursuit of some computer science career. However, the idea that becoming a Software Craftsman is an ongoing process—a commitment to constant improvement and a mindset that thrives on learning—is something that I think is a better description. It shifted my perspective on what it means to be good at coding- it’s not enough to know how to do something today, it’s about always finding a way to improve your code in the future.

In the past, specifically in my career, I’ve often gotten caught up in the day-to-day rush of just getting whatever piece of code done. I’ve rushed to get things coded, with the focus being on completing projects rather than developing deeper expertise or refining my approach to coding. After reading this chapter, I think I’m more likely to focus on the long-term value of writing quality code and the importance of standards. It’s not just about writing code that works; it’s about writing code that lasts, is readable, and contributes to a more sustainable project. I’m going to start to approach my coding tasks with a deeper goal, rather than rushing through them for the sake of completion.

As for the chapters that seem most relevant to me, I’d say Chapter 2 and Chapter 3 are particularly interesting. Chapter 2 addresses the Apprentice phase, which is where I find myself right now. It talks about how to build your foundational skills, seek out learning opportunities, and adopt the mindset of a lifelong learner – things I’m actively working on. Chapter 3, which discusses the Journeyman phase, is also relevant to me because it’s about expanding your skill set and finding ways to deepen your experience. I’m interested in how this phase encourages finding ways to take on more responsibility and become a more well-rounded developer, which is exactly where I want to focus next in my development journey.

From the blog Mr. Lancer 987's Blog by Mr. Lancer 987 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

In the Apprenticeship Patterns readings, the first thing that caught my attention was the passage about how people perceive apprenticeships and that being contrasted with what this book posits apprenticeships should be. Usually when I personally think about working under and expert to further a skill, I usually equate that to a physical trade that would be difficult to learn without hands on experience but just like those other typical apprentice jobs, but it would make sense that the same experience with working under an expert and learning any other skill would also help a lot more. The growth mindset is something that I hear a lot with math, and I think that it’s a good to have in all respects when trying to learn something new. This also pairs well with what the book states on always having more to learn and that those topics can’t always be learned in a traditional classroom setting or is lost in online tutorials. The author puts in a few personal stories where the times he was able to really learn something new and furthered his mastery over the subject was when he wasn’t afraid to be behind others and develop by observing and listening to everything that they had already found through experience and invested time into the field. This is vital when you are working in computer science, because it is a rapidly advancing field with new techniques and practices and discoveries. It may be daunting to try and keep up but that can serve as motivation to continue growing and not growing satisfied with just enough. Personally, in my experience with computer science through college, the academic learning part is straightforward, and everything is laid out for you to memorize and complete but in situations where you are given an abstract or very broad problem to solve, it can be challenging to figure out where to start or what to do because of my own inexperience with coding that would be analogous to a real world project. I think that recently with more frequent research done on my own time for blogs such as these and different classes, I have started to strengthen my understanding of computer science by knowing that there is so much more to learn than what can be taught in four years.

From the blog CS@Worcester – Computer Science Blog by dzona1 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

As the end of my education comes closer and closer, friends and family always ask about any jobs in the field and the future overall. This worries me because I have nothing planned whatsoever, I have no idea what is going to happen, and that scares me. I would love to have a job in software development, but at the same time, I fear I do not know enough to compete, and even if I do get one, I will not know enough to keep up. However, after reading a small part of Apprenticeship Patterns, I felt a little better about the future, to know that many others have felt this way. It also was nice to read that learning still continues once I get in somewhere, which sounds silly, but in my mind, and I am sure others would think the same way, in order to get a job, you need to know everything. So to see that people who think they know everything can still continue to learn something new is promising and also scary. Although I have spent my entire university education learning computer science and software development, I still feel like I know nothing. After reading this, it does not change the fact that I feel that way, but it makes me more optimistic about my time after university. Something that really stuck to me was the part about the guy who had a stack of certificates saying he knows all this stuff, and then he runs into some hackers that are doing stuff that he did not even know could happen, and the hackers were also still learning too. I think that stuck to me mainly because it feels like that’s me in this situation. Like I’m going to have a degree saying I can do this stuff, and yet I look around and there are others who know stuff that I didn’t even know where they got it from. But I can always learn that stuff too, either on my own, or at a job, or in class, if I watch them really closely.

Will I continue to read Apprenticeship Patterns? Maybe. As the fear of reality slowly continues to seep in, I will probably scramble and look for something to help and it might just be that. But who knows, the future does not look as bad anymore, kinda.

From the blog CS@Worcester – Cao's Thoughts by antcao and used with permission of the author. All other rights reserved by the author.