Category Archives: CS-448

Discovering the Core: “Your First Language” Week-1

A Dive into Mastery:

“Your First Language,” a pattern from “Apprenticeship Patterns” by Dave Hoover and Adewale Oshineye, champions the concept of mastering one programming language thoroughly at the start of a software development career. This pattern isn’t just about learning to code; it’s about immersing oneself deeply in the language’s syntax, idioms, and, importantly, its community and culture. Mastery of one language is posited as a stepping stone to understanding broader programming concepts, making it easier to adapt to other languages in the future.

Personal Resonance:

When I first encountered this pattern, it felt like a lightbulb moment. The tech world often feels like a race to learn as many languages as possible. “Your First Language” counters this, advocating depth over breadth. This approach aligns with my belief in building a strong foundation before branching out. It’s like learning to play one musical instrument well before learning another; the skills and disciplines you acquire often translate seamlessly.

The Intriguing Depth:

What captivated me most was the pattern’s emphasis on engaging with the language’s community. Programming is often seen as a solitary activity, but this pattern reminds us of the collaborative and communal aspects of coding. Participating in forums, contributing to open-source projects, or attending language-specific meetups can offer insights that go beyond syntax and function.

Redefining My Professional Approach:

This pattern has subtly shifted how I view my career development. Instead of being a jack-of-all-trades, I now aspire to be a master of one (at least initially). This doesn’t mean I’ll shun other languages, but it does mean I’ll commit myself fully to one language before moving to the next. This depth-first approach, I believe, will make me a more competent and confident developer in the long run.

A Balanced Perspective:

While I align with the core message of the pattern, I also recognize the importance of having a basic understanding of multiple languages, especially in a field as diverse as software development. Thus, while I advocate for depth, I also see the value in breadth. Being well-versed in one language shouldn’t mean being oblivious to others.

In conclusion, “Your First Language” is more than just a learning strategy; it’s a philosophy of growth and mastery. By embedding myself deeply in one language, I’m not just learning to code; I’m learning to think and solve problems like a seasoned developer. This pattern, I believe, is essential for anyone beginning their journey in software development.

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.

Apprenticeship Patterns Introductions

I enjoyed how the reading introduced the values of software craftsmanship. The bullet point that caught my interest was from Atul Gawande. It mentioned how you always need to adapt and change based on the feedback you get. I thought that the fact that Gawande refers to this as a willingness to “recognize the inadequacies in what you do and to seek out solutions” (Better, p. 257) was interesting. I think I tend to get caught up in my inadequacies and don’t think about finding solutions right away. I think that quote encapsulates what it means to be an apprentice, as described in the text. I think having bullet points like these in the beginning was very useful in aiding in understanding.

One of the chapters that I found to be more relevant is the second chapter. It not only discussed the beginning of your journey and why you should start out learning one language very well but it also touched on patterns that happen later in your journey. I enjoyed reading the section that mentioned why you should find a master in your target language to help you learn because the nuances of different languages are best taught through oral tradition. I also found the part about why you should find an opportunity to unlearn something. The example of taking a program you have written in one programming paradigm and then implementing it in a different language that uses a different one was great. However, I don’t agree with phrasing it as “unlearning” what you know. It just seems like learning another language to me.  While learning Java and C I had to do research to find solutions to problems at times. I ended up finding solutions to the problems in languages I didn’t know and worked to translate them. It gave me exposure to a new language and opened my eyes to how the same issue could be solved in a different way. 

Another chapter that I found to be relevant is the fourth chapter. I think you have to constantly be honest with yourself about your own capabilities and surround yourself with people who you can learn from in order to progress toward your goal. There is always room to grow especially when you’re in an industry that is changing frequently. Chapter four touches on striving to surround yourself with people whom you can learn from and touches on what to do if you can’t find a mentor. These are very real issues that many software engineers will face. I never thought about trying to be the weakest person on my team to help myself learn but after reading this chapter I would like to put it into practice when I can.

From the blog CS@Worcester – Live Laugh Code by Shamarah Ramirez and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

Reading these few chapters was very interesting. It brought some useful topics and contexts to different problems that you might face with some solutions like in chapter two there was a part that was talked about concrete skills and how it gave examples about the problems you can face like if a team has no incentive to risk hiring someone. I liked how they showed and described a problem and a solution. I feel like that was interesting to understand different concepts that they brought up, it almost painted a clear picture. One thing I liked doing while reading these chapters was reading the problem and then without reading the solution just thing about what could be that and then compare that with my answer. Another thing I really thought was interesting was all the real-world examples. The chapters that where most relevant to me or that most I took interest was chapter 3 especially when it was talked about sustainable motivations, this was most relevant to me since I feel like it is something that I always need to work is keeping my motivations up. So, that section was nice to read to learn different illustrations on how to bring the motivation back. The mentor section was another really good one for me just as a reminder to ask for help and find some one that is a “master Craftsman” and not only a master craftsman but a person that will accept you as an a apprentice. I did not disagree with anything in this reading, if anything I found that all the chapters and context was really helpful even if there was things that I already knew, it was good to just refresh and remember different tools and solutions to different concepts. In general, I really thought this reading was very beneficial especially since ill be entering the computer science work force soon defiantly freshened up some context of things I had not heard in a while and it even brought me to thought process of things I never really thought of like when it was states that take advantage of being the weakest in a group to grow stronger that was definitely very motivational for times that you might feel insecure in being a new engineer.

From the blog CS@Worcester – CS- Raquel Penha by raqpenha and used with permission of the author. All other rights reserved by the author.

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.