Category Archives: CS-448

CS-448: Intro to Apprenticeship Patterns

Intro to Apprenticeship Patterns

Apprenticeship Patterns is for software apprentices who are beginning their career in software development because it provides strategies to guide apprentices how to progress their career.

One of the most useful themes in the text was that a career in software development is a long road and it takes time to reach the end destination of being a “master craftsman.” I found this to be most interesting because it shows that becoming a master craftsman takes time and deliberate practice.

The history of the model in which the text draws inspiration from is what I found to be interesting. This model was prevalent in medieval Europe up until the Industrial Revolution. I enjoyed learning where the name journeyman comes from. This is because they were nomadic and had to travel city to city in order to learn new skills, further enforcing the long road analogy.

One of the most relevant chapters to me is chapter 2: Emptying the Cup. Chapter 2 gives the analogy, “if you already have a cup that’s full, how do you expect someone to fill it?” This analogy refers to going to learn from someone, but assuming you already understand what they are trying to teach. I found this to be relevant because when going to someone for mentorship; recognizing that they are more experienced, so going to them with an open mind is important.

Briefly looking at the apprenticeship patterns in chapter 2, one of the most relevant patterns is Concrete Skills. This pattern provides a strategy on how to know which concrete skills to learn. It states that an apprentice can collect CVs of people whose skills they respect. The apprentice can then use these as a list of skills that are useful to have. Another pattern that I found to be useful is Confront Your Ignorance. The context of this pattern is that there are gaps in your skillset, but are not sure how to begin to fill in those gaps. The text suggests the strategy of writing down a list of skills that may be gaps in a skillset. Then being deliberate about learning about those skills individually. Doing this may also lead to additional gaps in a skillset. This pattern is relevant to me because it gives a strategy of how to identify gaps in your skillset, by breaking down the gaps into small manageable tasks.

From the blog CS@Worcester – Zack's CS Blog by ztram1 and used with permission of the author. All other rights reserved by the author.

apprenticeship patterns intro

My initial gut feeling about this was honestly that I can’t really see myself being so entrenched with something that equates to labor that I need to perform in order to get money to survive. I certainly want to be good at what I do, but the reading came off as though you are supposed to absolutely hone in on software development in order to be a craftsman, in a sense. I’m sure that wasn’t necessarily the intention, but honestly there are things that I overall value more in terms of learning than the things that I have to learn for my work. That being said, I do understand that learning to learn is an important part of learning to be a software engineer, and that this book does seem to want to establish good practices so we can better our skills, even if we don’t commit ourselves completely to being defined as software developers through and through. This is touched upon in chapter 5.

With regards to chapter 4, I do find that many people in virtually any occupation find themselves, at some point, in a place of stagnation and unwilingness to adapt to advancements in the field or technology over time. As much as I don’t want to be defined by my labor, I don’t ever want to find myself in a position where I am actively choosing not to learn, as this is not only disrespectful to myself but also disrespectful to those I am working with.

I found chapter 3 the most relevant to me personally, as I tend to experience a sort of imposter syndrome a lot when looking at others’ capabilities compared to mine, mostly in terms of intuition. There are things that, at my current understanding of a given skill, I cannot inuit as quickly as those who are more practiced in that skill or have more of a natural inclination to that skill, maybe because they have had early experiences with the skill or because they’ve spent more time with it. Either way, I do think it’s something you have to kind of overcome. I’ve been informed of a statistic that over 70% of tech professionals have reported experiencing imposter syndrome in their careers, and it’s no joke. It truly is something you have to sort of overcome and learn to focus on yourself and your growth.

From the blog CS@Worcester – V's CompSCi Blog by V and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Intro

Dave’s Story

The narrative of Dave’s journey serves as an illustrative example of how apprenticeship patterns can contribute to personal growth in software development. It emphasizes the importance of mentors, the willingness to expose ignorance, and the value of continuous learning and experimentation. Dave’s story underlines the idea that apprenticeship is a dynamic and evolving process, shaped by experiences, challenges, and the pursuit of improvement.

What Is Software Craftsmanship?

It critiques existing definitions of software craftsmanship, drawing inspiration from medieval craft models. While it rejects a rigid hierarchical structure but advocates for a modern craft studio where practitioners are free to innovate. The author also emphasizes the need for a community united by shared values, such as a growth mindset, adaptability, pragmatism, openness to sharing knowledge, and dedication to self-improvement.

Roles in Software Craftsmanship

The passage outlines three key roles in software craftsmanship: apprentice, journeyman, and master. Apprentices focus on personal growth, learning, and building foundational skills. Journeymen expand their responsibilities to include communication, mentoring, and portfolio building. Masters not only excel in their craft but also contribute to the industry’s advancement, mentoring others and creating tools or techniques that elevate the entire community.

What Is Apprenticeship?

The concept of apprenticeship is explored as a way for individuals to learn about professional software development. It is portrayed as a mindset, acknowledging that not everyone has the luxury of a formal apprenticeship and that many must create their own learning opportunities in less-than-ideal situations. The text encourages individuals to recognize their position at the beginning of their career and actively seek opportunities for learning and growth.

What Is an Apprenticeship Pattern?

The authors introduce apprenticeship patterns as guidance for career progression in software development. These patterns, extracted from personal experiences and practitioner interviews, offer flexible solutions to common challenges. The book is structured as a pattern language, allowing readers to choose, combine, and adapt patterns based on their unique circumstances.

Reflection

Through the reading felt very connected to Chapater 6 which focused on the
Idea that there is so much to learn but only one of you. I often find myself overwhelmed trying to learn as much as possible just to be versatile. Whether that be multiple languages, IDEs, frameworks, or anything in between. I finally was able to take some time to create a roadmap that I could follow that would better help me achieve my end goal of becoming a full-stack developer. This map focuses more on understanding over forcing content down someone’s throat and allowing the user time to properly learn and experience the tools needed to reach my goal.

From the blog CS@Worcester – CS: Start to Finish by mrjfatal and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Hi, my name is Abdullah Farouk and this will be my first blog of the semester and it is based on the readings from chapter 1 and the introductions of chapters two through six.

I did not know what apprenticeship actually means until after reading these chapters. From what I understand, It is basically learning from more “experienced” coders on how to be a better developer. Dave’s story was pretty cool and awesome to read as it gives me more motivation and I can see how good it is to get some help sometimes. From the three stages he provided for us in a developer’s career, I think most people are stuck between an apprentice and a journeyman with very few people in the masters category. An apprentice is someone who still has a lot to learn and wants to improve their way of doing things. I believe I am at this level right now because I still have some areas in my field that I need to upgrade or work on with my team or the professor. This gave me extra motivation because I want to be in the journeyman stage, at the very least by the end of this semester. Our professor would be in the “masters” category because he is very advanced in his area, performs the roles of a journeyman and is focused on moving the industry forward by teaching us and advancing the Worcester state pantry website. I do agree with these roles but I do think that there should be another category because there is a lot of difference between a journeyman and a master and that gap should be filled and made its own category. I like the idea of always wanting to improve and adapting based on the feedback people give you. The author talked about “a belief that it is better to share what we know than to create scarcity by hoarding it.” I found this quote very interesting and I 100% agree with him but I feel like this only is true in the computer world since people go off each other’s ideas and make changes to improve it. After reading the introduction for chapters two through six, I think I have found what my next blog is going to be about so it is giving me something to look toward and forward too. I will see you on the next blog, hopefully. 

Website: https://www.oreilly.com/library/view/apprenticeship-patterns/9780596806842/ch01.html?_gl=1*2xjvhe*_ga*MjYwNDQ1ODc5LjE3MDY1NTY4MTg.*_ga_092EL089CH*MTcwNjU1NjgxNy4xLjAuMTcwNjU1NjgyMy41NC4wLjA.#introduction

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

Apprenticeship Patters Chapter Introductions

In this week’s blog post, I will be discussing my opinions and what I learned from the introduction to chapter 2 of “Apprenticeship Patterns” by Dave Hoover and Adewale Oshineye. The introduction to chapter two was the most impactful of the reading.

The introduction to chapter 2 starts with a Zen master who is being visited by a young philosopher who has traveled a long way to learn from the master. Once they met, they soon began to discuss what the young philosopher could learn from the old master, but each time the old master tried to teach the young philosopher something new, he would be cut off by the young philosopher’s eagerness to learn. Each time, he mentioned how he had learned to do the same thing differently from someone else. After having this happen several times, each with the master patiently waiting with a warm smile, the master mentioned how it is important to see the humor in every situation. Of course, he was once again cut off by the young philosopher, who was eager to mention some of his favorite jokes. The irony of the situation was wholly lost upon the young philosopher.

Not long after, the master invited the young philosopher to a tea ceremony, which the young philosopher eagerly accepted, having heard of the master’s unique style regarding tea ceremonies. Once the master got to the part of the ceremony where he was filling the teacup, he overpoured the tea. This led the young philosopher to exclaim, “Stop pouring! Can’t you see the cup is already full and overflowing?” to which the master replied, “If you come to me with a cup that is already full, how can you expect me to give you something to drink?” The master was saying, if you come to me with all of the answers, what can you expect me to teach you? Meaning that in order to learn more, you must understand that you don’t know what you are learning and accept that you are ignorant of some things.

The lesson that the master taught the young philosopher is one that I often find difficult. When learning new things, I tend to rush into them mindlessly, thinking that I know enough to skip the beginning, much like the young philosopher, only to find later myself having to go back to the beginning to understand what I am doing and what I did wrong.

While this lesson benefited me, it is also helpful to most people, especially those who work in computer science. Being able and willing to start from the beginning to learn something new is not easy and can make learning seem very difficult. What I find to help make this easier is to think of it as a change in perspective rather than a change in ability or knowledge.

From the blog CS@Worcester – P. McManus Worcester State CS Blog by patrickmcmanus1 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapters 2-6 Introductions

After reading the introductions to Chapter 1 and Chapters 2-6 of Apprenticeship Patterns, my desire to be in the software development field drastically increased. It is more than a field of just constant repetition. Instead it is an ever changing field where there is always something new to learn, questions to ask, individuals to interact with, and skills to eventually master. The introduction of chapter one instills the fact that when first starting in the field, we may be nervous or not really know what we should do and question software development as a career. It encourages us to reflect on our career journey, what we have accomplished, what we still need to learn, and how we can overcome different challenges we may face to eventually reach a mastery level.

What interested me most was learning about the differences between an apprentice, a journeyman, and a master. An apprentice is typically an individual who is trying to find a way to complete tasks in a more efficient, faster, smarter way, and in a role with few responsibilities and continuous learning. The journeyman retains the attributes learned as an apprentice to continue to grow in the field. In this case, the journeyman’s next focus is to create connections between practitioners, different communication channels, and masters. After adding this, the journeyman begins building a portfolio to demonstrate their understanding in the field. Lastly, the master encompasses all the roles of both the apprentice and the journeyman as well as focuses on moving the industry forward. I found this interesting because no matter what we all start as an apprentice. Some skills may be easier to learn and understand than others, but overtime with constant training and learning, we can become masters in any aspect of the growing field.

In regards to Chapters 2-6, the book covers topics revolving around being committed to your work, continuous learning, mentoring, and constant practice. I am personally interested in reading Chapter 3, Walking The Long Road. The introduction of this chapter refers to viewing software development as more of a journey rather than just a field or destination and that there is always something new to learn, challenges to face, and things to master. Additionally, this chapter drives into setting meaningful goals and how to overcome challenges in your learning journey.

From the blog CS@Worcester – Conner Moniz Blog by connermoniz1 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns by David H. Hoover and Adewale Oshineye: Ch. 1 and Introductions for Chs. 2-6

I’d like to talk about my thoughts after reading the portions of Apprenticeship Patterns by David H. Hoover and Adewale Oshineye assigned to our Software Development Capstone class. My first impression on reading the title was that this textbook would present different outlines of careers in software and information technology. After reading the introduction, however, I realized that the purpose of this book was to share different patterns and habits that would lend themselves to a successful apprenticeship in software craftsmanship.

The promotion of a growth mindset is one of the first themes established in the book. The authors talk about the growth mindset’s emergence from the research of Carol Dweck, the author of “Mindset: The New Psychology for Success”. The core belief of a healthy growth mindset is that a person’s intelligence is not fixed, and that a person can always grow their knowledge and ability through effort and learning. Through the growth mindset, people are encouraged to perceive failure as an opportunity for learning and reflection instead of as an indicator of inadequacy.

Maintaining an optimistic growth mindset is especially important for people working in software development and computer science. The volume of knowledge it seems to require to contribute anything of substance seems so overwhelming, it can be easy to tell yourself that you’re incapable of learning it all, or that you don’t even know anything as you are now. This emotional state of feeling incompetent or like a fraud despite your accumulated experience and talent is popularly referred to as imposter syndrome, and a survey conducted by Blind in 2018 found that more than half of tech workers report feeling like an imposter in their place of work. These responses came from people working with tech industry leaders like Google and Amazon, which shows that these feelings of self-doubt can exist in anyone, no matter how hard-working, efficient, or naturally talented. In a profession like software development, where the majority of a developer’s work is built on top of the sum of the work of many other people over many years, it’s essential to adopt a growth mindset to bolster your mental and emotional health despite the temptation to doubt yourself and invalidate your own accomplishments.  

In addition to the maintenance of a growth mindset, the authors propose other uniting values of a software craftsmanship community. Among them are constant adaptation, a desire for pragmatism over dogmatism, and the open sharing of knowledge. This software craftsmanship community would also value individual responsibility for one’s apprenticeship journey, and a willingness to experiment and be proven wrong.

The concept that interested me the most from the introductions of later chapters was The Long Road. I understood The Long Road as a metaphor for the lifelong journey of learning, and I recognized the necessity of the growth mindset the authors described earlier as a way to steadily propel yourself along that road. Without that mindset, the discouragement and confusion that naturally accompany learning can be too difficult to overcome.

From the blog CS@Worcester – Michael's Programming Blog by mikesprogrammingblog and used with permission of the author. All other rights reserved by the author.

Reflecting on the Initial Chapters of “Apprenticeship Patterns”

As I delved into the first two chapters of “Apprenticeship Patterns” by Dave Hoover and Adewale Oshineye, I found myself engaged not just with a book, but with a conversation about the journey of a software developer. This isn’t a typical textbook; it’s a guide for navigating the intricate path of professional growth in software development.

Chapter 1: A Revelation in Learning

The initial chapter immediately struck a chord with me. The concept of ‘breaking the mold’ resonated deeply, challenging the conventional approach to learning. It advocates for a mindset of continuous improvement and learning from every experience, a philosophy I find both daunting and exhilarating. I was particularly intrigued by the idea of being a ‘perpetual apprentice,’ which suggests that there is always more to learn, and every encounter is an opportunity to grow.

Provocations and Insights from Chapters 2-6

As I browsed through the introductions of chapters 2 to 6, I found myself rethinking my approach to my career. The book doesn’t just offer advice; it provokes thought. It made me question: Am I too comfortable in my current knowledge? Am I challenging myself enough? The concept of ‘constructive discomfort’ as a growth mechanism is something I plan to embrace more actively.

A Grain of Disagreement

While I found most of the book enlightening, I did have my reservations. The emphasis on self-reliance, for instance, seems to downplay the importance of structured learning environments. In my experience, a blend of self-driven learning and formal education often yields the best results.

Personal Relevance and Perspective Shift

As a junior developer, the chapters discussing ‘concrete skills’ and ‘nurturing your passion’ seemed particularly relevant. They made me reflect on my current skill set and my long-term career aspirations. This reading has subtly shifted my perspective, making me more open to exploring unfamiliar territories in technology and more conscious of my learning journey.

Conclusion: A Journey, Not a Destination

In summary, “Apprenticeship Patterns” is more than just a read; it’s a reflection on the continuous journey of learning and growing as a software developer. I’m excited to apply some of these patterns in my career, embracing the role of a perpetual apprentice, ever-curious and ever-evolving.

From the blog CS@Worcester – Kadriu's Blog by Arber Kadriu and used with permission of the author. All other rights reserved by the author.

Chapter 1

Reading the assigned sections in “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” by Dave Hoover and Adewale Oshineye has been an enlightening experience, reshaping my perspective on the path to mastering software development. Chapter 1, coupled with the introductory sections of Chapters 2-6, lays a foundational understanding of the craftsmanship model in software development, emphasizing continuous learning, growth, and the pursuit of excellence.

The Craftsmanship Model: A New Paradigm

The concept of viewing software development through the lens of craftsmanship resonated deeply with me. It suggests that being a software developer is more than just a job; it’s a lifelong journey of improvement and mastery. The idea that one should always strive to better their skills and contribute to the growth of others in the community is both inspiring and daunting.

The Three Stages of Becoming a Software Craftsman

The delineation of the three stages of becoming a software craftsman—apprenticeship, journeyman, and master—provided a clear roadmap for personal and professional development. This progression from learning the basics, through solving broader problems, to finally leading and mentoring others, underscores the depth and breadth of growth required in this field.

Reflections on the Introductions to Chapters 2-6

The introductions to the subsequent chapters offer a glimpse into the varied aspects of this journey, from the importance of finding and learning from mentors (Chapter 2) to understanding the value of reflective practice and incorporating feedback (Chapter 6). This holistic approach to development, both technical and personal, is particularly appealing.

Personal Relevance and Application

The chapters on reflective practice and creating feedback loops seem most relevant to my current stage. They underscore the importance of not just doing but learning from doing, which is crucial for anyone in a rapidly evolving field like software development.

Disagreements and Critiques

While the book provides a compelling model, I found myself questioning the feasibility of its idealistic portrayal in the modern, fast-paced tech environment. The path seems clear in theory but navigating it amidst the pressures and constraints of real-world projects and deadlines presents a significant challenge.

Conclusion

“Apprenticeship Patterns” offers a refreshing perspective on the software development profession, advocating for a deliberate, continuous journey toward mastery. It challenges the reader to not only aspire to be a better developer but to embrace the journey with all its ups and downs, fostering a community of learning and sharing in the process. This reading has not only broadened my understanding but also deepened my commitment to this path of craftsmanship in software development.

From the blog CS@Worcester – Abe's Programming Blog by Abraham Passmore and used with permission of the author. All other rights reserved by the author.

Apprenticeship in Software Development

If you’re like me, you probably dislike doing reading for school and find it to be pretty tedious, usually resulting in a drab writing exercise afterwards. So, reading through the first chapter and then the introductions to the following chapters in our textbook Apprenticeship Patterns – Guidance for the Aspiring Software Craftsman seemed like it would be similarly boring/tedious, but I found the writing to be engaging and discuss relevant topics with relatable analogies. 

The first chapter was primarily an introduction, and I found its discussion of what Apprenticeship is and means in modern society versus how it was implemented in Medieval times where the term originates. One point brought up is that modern “apprenticeships”, or positions with a similar title are more similar to what I think of as an internship, and may involve a lot of training but it mostly involves learning how to use a system/software rather than learning how it actually works behind the scenes or even how to improve it. 

By the same token, the author’s discussion of Medieval apprenticeship and how it correlates to modern situations resonated with me – particularly the division into the three main classes of Apprentice, Journeyman, and Master. Looking back, at the beginning of my Computer Science degree I was certainly a green apprentice and came in with an open mind and I was very fortunate to have family members who are undoubtedly masters to help teach me as their apprentice. Thinking about these individuals, they ARE in fact always learning more and new things and in their own way delving into their own areas of interest to try things which may have never been done before. But, as I approach graduation I feel myself starting to have more tendencies and qualities of a Journeyman as described. With early-career C.S. trends commonly involving a few different companies or departments, it’s easy to see more correlation there to the Journeyman, who travels sharing knowledge with others while also learning from them and improving their repertoire.

In reading the introductions to chapters 2-6, I found them to be quick, engaging and informative – exactly my type of reading. The chapter 3 introduction about Taking the Long Road resonated with me the most and left me with a lot to think about. Many times I’ve found myself feeling like the individual in the example, both inspired/excited by the sheer power and intellect of some other around me and discouraged/terrified of how far ahead of me they clearly appear to be. However, as the text discusses we are all traveling on the same general road as developers and Computer Science professionals, some have just been traveling on it longer, faster, and/or in different directions than us. It’s largely about the journey that gets you to your destination, which we will inevitably achieve as long as we refuse to give up.

From the blog CS@Worcester – Tech. Worth Talking About by jelbirt and used with permission of the author. All other rights reserved by the author.