Category Archives: CS-448

Apprenticeship Patterns Introduction

One aspect of the Apprenticeship Patterns reading that stuck with me was the requirements a person needs in order to be a successful software developer. A “growth mindset” as its referred to in the text is the idea that no one is born with inherent talent in a skill, its through dedication and failure that one reaches success. The growth mindset is a mindset that welcomes failure, because it teaches you to tackle the problem from a different angle. It’s the belief that something can be improved if you’re willing to put in the work despite failing. From failing, there is a lesson to be learned, from success you don’t learn anything. In a field that is constantly changing and improving, it’s crucial for a developer to have the ability to adapt to new features and languages. As a developer, you’re continuously learning how to do things more effectively than the last time, whether it be utilizing data structures or pushing out a feature. This aspect goes hand-in-hand with encouraging experimenting. Through experimenting for better solutions and failing, you get to learn why something doesn’t work or why a solution is preferable over others. On the other hand, though experimenting you might find solutions that actually improve efficiency, resulting in solutions that you can reference when solving similar problems.

Another essential aspect is pragmatic over dogmatic. It’s easier to first make a practical solution and polishing it later than trying to create a perfect solution the first time. It trains developers to think adapt when faced with changing conditions and favors optimizing for efficiency. Additionally, I think this tackles the common problem of procrastination because it allows developers to initially focus on solving the problem and disregarding how your code looks. It doesn’t matter how efficient your solution is if it doesn’t solve the initial problem in the first place.

Both of these aspects improve a developers efficiency and promotes a continuous learning routine. It allows us as developers to improve our skills and better prepares us the problems we face in the future. The rapid invention of technology today doesn’t guarantee a developers future in software, which is why we as developers must keep up with the pace and polish our skills.

From the blog CS@Worcester – Computer Science Through a Senior by Winston Luu and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

Reading Apprenticeship Patterns made me take a step back and think about what it really means to grow as a software developer. It’s easy to get caught up in learning new technologies, chasing certifications, and trying to keep up with the latest trends, but this book focuses on something deeper, the mindset and habits that shape a longterm career in software. One of the biggest takeaways for me was the idea that becoming a great developer isn’t about how much you already know, but about how you approach learning. The whole concept of being an apprentice, journeyman, and eventually a master makes sense, but what stood out to me the most is that there’s never really a finish line. No matter how much experience someone has, there’s always more to learn. That’s both motivating and humbling. The book also talks a lot about mentorship, self-awareness, and staying open to new ideas. It made me realize that improving as a developer isn’t just about writing more code, it’s about actively seeking feedback, being willing to unlearn bad habits, and knowing when to ask for help. I’ve always leaned towards figuring things out on my own, but after reading this, I see how valuable it is to learn from others who have been through the process. Another thing that stood out is how easy it is to fall into the trap of either imposter syndrome or overconfidence. The book emphasizes the importance of being honest with yourself, knowing what you’re good at and where you need to improve. It’s easy to feel like you’re behind when you see others moving faster, but at the same time, it’s important to not get too comfortable and stop pushing yourself. Finding that balance is key. Overall, this book challenges the way you think about growth and career development. It emphasizes the idea that learning should be intentional, that mentorship and community matter, and that real progress comes from consistent effort over time. It’s made me reflect on how I approach my own learning journey, and I’m looking forward to applying some of these ideas as I move forward in not only my career, but in life as well.

From the blog The Bits & Bytes Universe by skarkonan and used with permission of the author. All other rights reserved by the author.

Reflections on Apprenticeship Patterns: Chapter 1 & Introductions to Chapters 2-6

In reading Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye, I found myself both inspired and challenged by the ideas presented. The book frames software development as a lifelong journey of learning and growth, rather than just a career or a set of skills. Chapter 1, in particular, resonated with me because it introduced the concept of a Software Craftsman someone who continuously hones their craft, learns from others, and embraces the challenges that come with mastery.

One of the most thought provoking aspects of Chapter 1 was the discussion on the three stages of becoming a Software Craftsman Apprentice, Journeyman, and Master. The idea that even experienced developers must remain in a constant state of learning was both humbling and motivating. I found the emphasis on deliberate practice and continuous improvement particularly useful. It reinforced the idea that success in software development is not just about accumulating knowledge but about applying it effectively, seeking mentorship, and refining skills through real-world experience.

The introductions to Chapters 2-6 provided an interesting look at the different aspects of professional growth. Chapter 2 focuses on staying humble and maintaining a beginner’s mindset, which reminded me that overconfidence can block learning. Chapter 3 emphasizes the long journey of mastery, reinforcing the idea that there is no shortcut to expertise. Chapter 4 discusses self-assessment, which I found useful because identifying weaknesses is key to improvement. Chapter 5 highlights lifelong learning, and Chapter 6 encourages taking control of one’s own apprenticeship through mentorship and self-driven education.

While I agree with most of the book’s concepts, one idea I somewhat disagree with is the notion that formal education is only a small part of a developer’s journey. While it is true that hands on experience and mentorship play a critical role, I believe that structured education still provides essential foundational knowledge. Some developers thrive with self learning, but others benefit from the structured approach that degrees and certifications offer.

The chapters that seem most relevant to me right now are Chapter 4 and Chapter 5 because I am currently focused on understanding where I stand as a developer and identifying areas for improvement. The idea that self awareness and continuous learning are key to long-term success resonated deeply with me.

Overall, I found this reading engaging, thought provoking, and practical. The emphasis on self improvement, mentorship, and hands on learning has changed the way I approach my development as a software engineer. While I believe formal education still has its place, I recognize that the real learning happens when knowledge is applied in practice. This book has given me valuable insights into what it truly means to be a Software Craftsman, and I am excited to dive deeper into the patterns in the upcoming chapters.

From the blog CS@Worcester – Software Dev Capstone by Jaylon Brodie and used with permission of the author. All other rights reserved by the author.

Apprenticeship Pattern Reflection

After reading Apprenticeship Patterns, I was left perplexed over some of the topics this book covered. To preface, I think that the authors, Dave Hoover and Adewale Oshineye, did a great job addressing how Software Development demands that individuals retain a ‘growth mindset’ throughout their studies and practice. My largest gripe is with how they frame individual progression. Hoover and Oshineye use an apprenticeship model to describe one’s progression. For starters, I believe that mastery does not exist and conflicts with the content covered in Chapter 2. The authors define mastery as “performing all the roles of an apprentice or a journeyman as well as focusing on moving the industry forward.”. Fundamentally this would be a fitting definition, as apprentices focus on learning, and journeymen focus on applying their knowledge. In practice, it can be difficult to find a balance between these two roles. Furthermore, masters are ‘pillars of knowledge’ as apprentices and journeymen refer to them for their experience. In this scenario, if the master has not found a balance between learning and practicing, then they may give ineffective or incorrect information. My solution to this dilemma is the erasure of mastery. In a field such as Software Development that is ever-changing mastery is nigh impossible to achieve. Hence, we must all dedicate ourselves to improving and finding balance between apprentice and journeyman responsibilities.

Despite having personal issues with their framework, as the content they covered in later chapters resonated with me. Chapters 3 and 4, Walking the Long Road and Accurate Self-Assessment respectively, shared ideas I agreed with the most. Chapter 3’s driving point is that we are all on the same path and that skills you see in others can be eventually learned by you. A year ago I found myself in a group of students learning Software Development. We were learning how to write tests in Java, which I had experience with from another course. In this group, we all knew the fundamentals of testing, but each of us had different skills outside of testing that we indirectly taught each other over the semester. Naturally, I was intimidated by the amount of knowledge my group members had that at the time I lacked. As the semester came to a close, that knowledge gap slowly closed as I found myself learning from seeing how they approached these problems. Chapter 4’s driving point is to not settle with your inadequacies, but to grow because of it. In this chapter, the authors suggest surrounding yourself with people who understand the material you’re trying to learn. Linux commands and Docker are some of my least knowledgeable subjects, but I chose them as my focus for this project to further develop my knowledge. Fortunately, I have been placed in a team where we all have varying degrees of skill with these subjects. I have been taking tasks involving team organization and documentation, as through writing these instructions and understanding our workflow have slowly begun to fill gaps in my knowledge.

-AG

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

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Beginning the reading of Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye, I can say that I was expecting this book to be a lot more technical. However, the entirety of this reading was very thought-provoking. The idea of apprenticeship has always been interesting to me, and applying those principles in the modern era workforce of software development makes complete sense. Striving to continuously learn, receive guidance from your seniors, and actively indulge yourself in new technologies, will allow someone just starting their career to surely become the biggest fish in their pond, and ultimately cycle through the process of starting as the smallest fish and yet again becoming the biggest. This metaphor from the reading offers a vivid illustration of the importance of not becoming too complacent with your work and learning. Being the biggest fish in a small pond will not grant you any opportunity or growth, you have to surround yourself with individuals who are able to teach you something. Many people, including myself, have been led to believe that you should accept the highest paying job and quickly pursue roles in management. In reality the most meaningful aspect of the job is what you can learn from it, prioritizing this will pay off far greater than the short-term satisfaction of the high-paying job. The reading shifted my perspective from this cash grab mindset to a “knowledge grab” mindset. In regards to workflow on the job, the reading showcases the importance of utilizing your team to achieve a greater sense of productivity and insight into how methodologies and systems really work. Software development is a field of collaboration where everyone should be contributing to the pursuit of knowledge. There’s nothing in the reading that can really be disagreed with unless you are not truly meant for, or passionate, about the field of software development. The idea of creating your own curriculum might frustrate some people as it alludes to bringing your work home with you, however, in an ever-changing field such as this, self study is completely necessary. This is probably the most important chapter because it points to the idea that if you do not possess the inner motivation to study new material on your own terms, you may not be cut out for the job.

From the blog CS@Worcester – Shawn In Tech by Shawn Budzinski and used with permission of the author. All other rights reserved by the author.

The beginning of a Journey of a Software Craftsman: Reflections on Chapter 1 of Apprenticeship Patterns

The path to becoming a skilled software developer is not just about learning programming languages or mastering frameworks—it’s about embracing a mindset of continuous learning, humility, and craftsmanship. Chapter 1 of Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye sets the foundation for this philosophy, introducing readers to the idea of software development as a lifelong journey of growth.

One of the most compelling aspects of this chapter is its focus on the concept of apprenticeship in software development. Unlike traditional education or even structured corporate training, an apprenticeship mindset encourages developers to seek knowledge actively, engage with mentors, and build real-world experience through deliberate practice. The book compares software craftsmanship to traditional guilds, where newcomers learn by doing, gradually refining their skills under the guidance of experienced practitioners.

The emphasis on deliberate practice particularly resonated with me. It’s easy to fall into the trap of writing code every day and assuming that practice alone leads to mastery. However, the book suggests that true improvement comes from purposeful and reflective practice—analyzing mistakes, challenging oneself, and continuously pushing the boundaries of one’s abilities. This idea shifted my perspective on how I approach learning new technologies and refining my existing skills.

Before reading this chapter, I viewed my professional growth in software development as something that happens naturally over time—an accumulation of experience gained from projects and exposure to different technologies. However, Apprenticeship Patterns made me realize that growth must be intentional. It’s not enough to just work on projects; I need to actively seek out challenges, solicit feedback, and set concrete learning goals to accelerate my progress.

Another takeaway that impacted my mindset is the importance of humility. The book stresses that being a software craftsman requires accepting that there will always be more to learn. I found this particularly valuable because it aligns with the idea of the beginner’s mind—approaching every problem, regardless of experience, with curiosity and openness rather than arrogance.

P

While I found the chapter insightful, one point that I questioned was the romanticization of apprenticeship as a primary learning model. While mentorship and hands-on learning are invaluable, not everyone has access to experienced developers willing to guide them. In today’s fast-paced software industry, many developers are self-taught through online courses, coding boot camps, and open-source contributions. While the book acknowledges that different learning paths exist, I think it could have placed more emphasis on alternative ways to develop craftsmanship outside of the traditional mentor-apprentice model.

Which Chapters Seem Most Relevant?

From a quick glance at the table of contents, the chapters that seem most relevan that caught me:

  • This seems crucial for maintaining motivation and engagement in the field. Passion is what drives deep learning.
  • I’m interested in how the book suggests balancing learning new, complex topics while also reinforcing foundational skills.
  • This chapter likely discusses the tension between personal growth as a developer versus career advancement, a topic that resonates deeply with me as I navigate my own path.

Chapter 1 of Apprenticeship Patterns offers an inspiring and thought-provoking perspective on how to approach software development as a lifelong craft. It reinforced my belief that learning should be intentional and reflective, and it pushed me to think about how I can structure my growth more effectively. While I don’t entirely agree with every aspect of the apprenticeship model, I appreciate the book’s emphasis on continuous improvement, humility, and the importance of deliberate practice.

For aspiring and experienced developers alike, this book serves as a guide to not just writing better code, but becoming a better craftsman in the art of software development.

From the blog Discoveries in CS world by mgl1990 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

I am honestly not the biggest reader; it is something that I have not tried to develop as a hobby. Although there were a couple of books throughout my life that caught my attention deeply, I never developed reading as a hobby. Chapter One of Apprenticeship Patterns lit a spark of curiosity in me. And I believe the reason this event happened was the following statement:

“A willingness to experiment and be proven wrong. This means we try stuff. We fail. Then we use the lessons from that failure in the next experiment.”

The statement that I mentioned reflects and describes deeply how I feel about software development in general. This section has brought me back to what made me fall in love with coding in the first place.

Most of the time, we see people choosing the path of Computer Science as a way to make money. And there is definitely nothing wrong with it, although for me, it is not about that. I truly feel like an apprentice, with an aspiration to be a journeyman. Learning new skills and techniques each and every day intrigues me. It is, in my opinion, the broadest subject there is. The text has enlightened me towards a greater understanding of how my journey could be. I understand that this journey is not short by any means, but it will be a long one. And honestly, I would go even further—I believe it may never end. We are always learning, improving, becoming better. Better than our colleagues? No, better than ourselves. This should be our goal: to become a better software developer than we were yesterday.

There was only one chapter that changed my opinion on a topic. Chapter 6, Construct Your Curriculum, showed and answered a question that I have had for a long time. Being part of a new generation that has access to basically any information, I have sometimes struggled to grasp the deep reasoning behind why certain things in Software Development were done in such a way.

Books, books, books—these are the key to understanding the deep meanings behind how everything was built.

My reading of the introduction portions of the book became a journey itself. I started my reading with an idea and ended it with a completely different one. Not being the biggest reader and having never developed the habit in my life, I now find myself more willing to read. To understand and be willing to start a new routine of reading more books.

From the blog CS@Worcester – CS Today by Guilherme Salazar Almeida Nazareth and used with permission of the author. All other rights reserved by the author.

Thea’s Food Pantry

In my final semester of university, I am taking the Software Development capstone course, where we will work directly with Thea’s food pantry, creating and deploying a system that allows the pantry to keep track of how much food there is, who is getting it, etc. I thought that would be it. However, after looking at LibreFoodPantry, I was surprised by how much they actually worked with not just food security, but with software and technology as well. I thought we were just helping because we can, but this is actually something that has a focus in software and software development, which allows for some real world experience. 

After going through the gitlab of Thea’s Pantry, it looks very similar to what I worked with last semester in my software architecture course, but with some added repos and documentation. The thing I liked about this was the amount of documentation there was. I like this because it allows me to refer back to something while I am working to make sure I am doing exactly what needs to be done and how it should be done. Other than that, it was very similar to what I did in class last semester. Hopefully, with the documentation and teams, we will be able to get things done.

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

The Food Pantry Semester

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

Discovering LFP and Thea’s Pantry

The LibreFoodPantry (LFP) website and Thea’s Pantry GitLab Group are full of knowledge about the open-source project itself and related information to support the users and developers. After reading through these resources, I felt I gained a more thorough understanding of the purpose of this software and it’s potential trajectory. Specifically relating to the LFP website – I found the Values section extremely useful, as it provides clear expectations for all community members with links to further understand the Code of Conduct and to learn more about Agile values and FOSSisms. Regarding the information about Thea’s Pantry in GitLab, there are many useful subsections within this group, but I was particularly impressed by the Architecture section as it presents the microservices architecture clearly through diagrams with clear systems, features, and components. An additional useful link relating to Thea’s Pantry GitLab Group is User Stories. After reading through the different situations expressing the intended use of the software, I had a better understanding of the role that this project plays throughout every step of this process on both, the staff side and the guest side. I was surprised reading the User Story titled “A Pantry Administrator Requests a Monthly Report for the Worcester County Food Bank” as I was unaware of the link between the two systems. Overall, these webpages provide a simple and clear interface to learn about the project’s values and community expectations, as well as, technical details.

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