Category Archives: Week-14

“Retreat into Competence” Apprenticeship Pattern

I am writing this blog post about the “Retreat into Competence” apprenticeship pattern from the Apprenticeship Patterns book. To summarize the idea of this pattern, it is about handling being overwhelmed by new challenges. This is something I experience frequently, particularly because I actively search for new challenges and often find ones that are beyond my current ability. The recommended response is to go do something else that is more familiar instead. Succeeding at something familiar and reflecting on past success is comforting in the face of overwhelming ignorance. There are two definitions of the word “overwhelming” that I can imagine here, and the one that this chapter seems to be using is in an emotional sense. Recognizing one’s own incompetence is uncomfortable, so taking a moment to go back and successfully complete a familiar task feels better than struggling with an unfamiliar one. The other definition would be being overwhelmed in the sense of lacking the capacity to complete the given challenge. Retreating into competence is done for the sake of regaining confidence, and it is important to be able to handle being emotionally overwhelmed before trying to handle being academically overwhelmed. I have confidence in myself and my abilities, but when I am challenged by something new, I remain confident in what I know and recognize that it is a challenge because of what I do not know. I was doing a problem recently that required a certain background knowledge of combinatorial game theory that I did not have. Despite my aptitude for problem solving, my lack of education on the matter made the problem challenging (or overwhelming) to the extent that talent would not make up for inexperience. I saw it as a learning opportunity and started researching the information that I was not familiar with, and also did some easier problems instead that did not require a level of education I was lacking. Remaining in one’s own comfort zone is a good thing, but only briefly, as the chapter notes. It is taking a step backwards in order to prepare to continue moving forward and learning.

From the blog cs-wsu – klapointe blog by klapointe2 and used with permission of the author. All other rights reserved by the author.

Learn How You Fail

One of the many proverbs which I was raised on that I think about to this day when I am trying (and often struggling) to learn something new and master it, is “practice doesn’t make perfect; perfect practice makes perfect”. And while perfection is an impossible goal to set for oneself, the idea that it is important to analyze how you are practicing is instrumental in developing your skills.

This apprenticeship pattern “Learn How You Fail” speaks volumes to this idea. The main idea the authors are trying to impart is to not only accept that perfection is an impractical goal to strive towards, but to analyze and remember the qualities or areas that make you fail. By applying the practice of becoming aware of what you don’t know that you don’t know, my perspective and ultimate success will be much better for it.

Specifically, the authors make it a point to demonstrate this practice by suggesting to create an implementation of a common problem, in this case binary search, in a simple text editor. Once the problem is implemented we are to design tests and iterate the code until we believe it is perfect and only then can we compile and run the tests. The focus of this exercise is to illustrate that even when we think something is complete or as perfect as possible, there will be gaps in our knowledge that we are not aware of, and applying this practice will make you more familiar with the holes in our understanding, allowing us to get a better view of ourselves and our limitations, with the goal of overcoming them.

This apprenticeship pattern definitely spoke to me, because I am very interested with not only the concrete skills in software development, but also the process of learning and finding new ways to learn more efficiently. One quote from this section of the book which stuck with me because of its blunt honesty was “someone who has never failed at anything has either avoided pushing the boundaries of their abilities or has learned to overlook their own mistakes”. I will definitely be taking this lesson to heart and do my best to get as accurate of a self-assessment as possible, so I can practice honing my skills as perfectly as possible.

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

Apprenticeship Pattern – Nurture Your Passion

The apprenticeship pattern Nurture Your Passion refers to the problem in which you feel the environment in which you work in is stifling your passion for the craft. Depending on which aspect of work you feel is doing this there may be different solutions for everyone. For example, if you’re in a situation of constant project death marches that are sapping your time and energy, then you need to set clear boundaries and protect your passion. Whether that means to decline working “culturally pressured” overtime to avoid burning out or not would likely depend on how much you feel these death marches are affecting you.

As someone who hasn’t had much if any experience in the industry, this pattern definitely worries me a little. I’ve heard similar horror stories about project death marches from game developers working in the games industry. People who were filled with passion for their craft entering an industry that commonly abuses that passion with forced overtime until they burn out. Then, once you finish the project you’re working on, you’re laid off in an effort to cut costs by reducing headcount because you’re no longer needed, not because you’ve done anything wrong.

Obviously this isn’t the case with every company and the software development industry likely has many differences when compared to the games industry, but they do bear many similarities as well. This problem can be avoided by finding the right company that offers what you’re looking for, whether that be working overtime on something you believe in and enjoy, or somewhere that offers you good work-life balance. I’m always a little bit worried getting stuck in a situation with poor work-life balance because I’m not sure I would be confident enough to put my foot down, so I’ll have to remember in the future that I should focus on what’s best for me because I’m sure most companies wouldn’t think twice to cut costs whenever they can.

Overall, I agree with what the pattern’s saying and hopefully I’ll remember to nurture my passion even if it means getting passed over for promotions or having to find somewhere else to work.

From the blog CS@Worcester – Andy Pham by apham1 and used with permission of the author. All other rights reserved by the author.

Needing a reading list

So for this week, I have decided to read “Reading List”  pattern from the Apprentice Patterns by Adevele Oshineye and Dave Hoover. I chose this one because I believe there is something that should be done on a daily basis. Since that reading is exactly that, it should be wise to read this pattern at least once.

This pattern starts off with the context of having so much information that is needed to learn after developing the language. The problem is that the number of books to read is increasing than that of actual reading them ourselves. There is also the issue of figuring out where to start from the number of books. To solve this issue, one must maintain a reading list that not only helps in remembering the books read but also track the books that are planned to be read. Creating a text file is an option to write the list down as it is under source control and simplest implication of the pattern. For what it is worth, there is a need for a clear understanding of which books to prioritize in reading and in order by the subject.

From this pattern, what I found useful is identifying the books that would be worth reading based on a list given by any book. This will help in finding hidden connections related to the topic or language to an extent.  Mentors may recommend must-read books that even peers can discuss with one other and advise with the aspects. With data gathering over the years, patterns, gaps, and trends is starting to be seen. This pattern has changed my mind in giving suggestions to other people in what to read. I don’t disagree with anything since it does give clarification in what to do with the knowledge gained thus far and all the books needed to be read in due time.

Based on the content of this pattern, I would say this is a great and simple read as a way in reflecting on a reading habit. This pattern has helped me understand in which to read first for what topic I could have next. For future practice, I will try to write a reading list in different ways beside a text file in case anything happens to that specific device.

Link to the blog: https://www.oreilly.com/library/view/apprenticeship-patterns/9780596806842/ch06.html#reading_list

From the blog CS@Worcester – Onwards to becoming an expert developer by dtran365 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Use the Source

This week, I’m reflecting on the Use the Source pattern from Chapter 5: Perpetual Learning. We all know the best way to gain expertise in programming is to actually program. However, it’s tough to know what tools are the best ones to learn from. This pattern suggests learning concepts by viewing the works of others — you’ll pick up on tips and tricks and can directly understand how to solve difficult problems if you learn from material from those who are great at solving problems. Even if the work you read isn’t from master software craftsman — just reading code vastly improves your ability to utilize code in your future.

I like this pattern a lot for a few reasons. I have always been timid about contributing to open source projects due to a lack of feeling comfort with handling others’ code. However, recently I started looking at a few open source projects and felt as though I could really contribute to the projects if I wanted to. I get the sense that this comfort has come from me handling and reading code more regularly on a daily basis. Another reason I enjoyed this pattern was reassurance. I’m starting in a Software Engineering position at Stratus Technologies in a month and a half’s time. I’m feeling extremely fortunate that I got hired, and I also know that I have a tremendous amount to learn — both when start the job (about the code they have in place) and beforehand. Their codebase is vast and complex, and in order to be an effective team member, I’m going to need to get used to dealing with large, multilayered, and complex systems.

In the arts, there’s a learning concept where the artist does “Master Studies”. Essentially, the idea is to choose a piece of art from a great artist and try to recreate it from scratch, by using the work as reference. This puts the artist’s skills to the test, but it gives them a framework to work within. I see this pattern and the concept of “Master Studies” as related, in a way. By examining the work of those who have made a name for themselves in the field, we get insight into how their mind works. There are many brilliant “Master” engineers out there, and they’ve written a tremendous amount of code that I can conduct my own “master studies” of. It’s like reading great literature — it will impact your work for the rest of your career.

From the blog CS@Worcester – James Blash by jwblash and used with permission of the author. All other rights reserved by the author.

Apprenticeship Pattern “Sweep the Floor”

I skimmed through a few apprenticeship patterns before I found on the one that hit home with me, “Sweep the Floor.” The “problem” it presented was something that I am faced with starting every new venture at this stage on my journey. It stated, “You are a new apprentice on a project.” No matter where I go, this will describe me.

I have talked in my last apprenticeship pattern blog that I am starting as an intern at a friend’s start up, and I will be taking the advice presented here and applying it to this and the next venture I go to afterwards.

The solution advocates for doing the “simple, unglamorous, yet necessary, tasks.” It is tempting to do the opposite and try to do the “fun,” “exciting” things, but it stresses to not to, and prove yourself through the small tasks.

I have had the thought that in most fields that you don’t need a degree for, one would start at an entry level job. From there, they would work their way up. The stories friends have told me about their grueling interview processes scare me. I would prefer to start at an “entry level” position over starting off with a position that I feel way over my head.

I know I have talked here in the past about apprenticeship patterns that advocate for taking on big assignments even if you don’t feel ready — the pattern “diving deep” in particular. However, I think that diving deep comes after you have laid out the foundation with this pattern. I’m going to try to not let the bigger tasks intimidate me, but i won’t think that the small tasks are beneath me.

On the contrary, the small tasks are incredibly important — not just for the use of the company, but for learning new skills. The pattern did make a point to say that many who have spent a lot of time and money getting their degree might consider this beneath them, but I don’t feel that way. A little over a year ago I was working fast food, taking out the trash, and literally sweeping the floor. I was happy to literally do it then, and I will be happy to figuratively do it for any company that accepts me as part of the team. I want to be a team player, and I will be glad to do small tasks that are important to the team. Moreover, I will volunteer for them.

From the blog Sam Bryan by and used with permission of the author. All other rights reserved by the author.

Pattern 10 – Draw Your Own Map

For my last pattern for this blog, I wanted to do one that I’ve been waiting to do until the end. This being potentially the last formal software engineering class I will take, I wanted to read “Draw Your Own Map”. This pattern talks about the importance of working in an environment that will help you reach your personal goals. It also makes it very clear that the person who has sole responsibility for taking the first step in each of the small goals that lead to the high level goals that make up every “goals” list, is the reader. We need to take responsibility and not blame any company, or position that could potentially be holding up back from reaching our goals.

I’ve always been a goal oriented person, whether it be in terms of finances, academics, career, or personal. So far I’ve done a relatively good job at achieving my goals and hope to continue this trend throughout my life. In relation to career goals, since I started my college career I knew that I wanted to be involved in software development in one way or another. Through my internships, I’ve learned what I look for in a company and the position that I will be starting upon graduation. I consider it drastically important when interviewing with companies to ask the employees what their goals are. If they’ve been with the company for years and their goals are similar to yours, it should mean that the company is a good fit. For me, I looked for companies that value mentorship, are current with today’s team-based practices, and allow for good work-life balance. On top of all of these, the ability to “be water” and move around within the company if my goals change is also important to me.

Everyone’s map is going to be different but it is important to stay fluid in your mindset of what is important. Do not allow yourself to be pigeonholed to a position that you may one day hate and also makes it difficult for you to find work if you decide to move on. Find a position where the company values your work ethic and desire to learn over the specific skills you have coming into the position, while they are important, they aren’t what will make your relationship with the company last for the long term.

From the blog CS@Worcester – The Road to Software Engineering by Stephen Burke and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns – Dig Deeper

This apprenticeship pattern discusses the importance of digging deep into the tools, technologies, and techniques that you use. If your knowledge is superficial, you will have trouble fixing subtle problems and won’t even be aware of how little you know. You must have the depth of knowledge to understand why things are the way they are. This will allow you to actually be able to explain the details of what is going under the surface of the systems you work on.

This pattern discusses several things you must do to acquire a deeper knowledge of whatever you’re working on. You must have a shift in perspective that involves wanting to follow a problem through the layers of a system to understand the root of what is actually going on. You should be familiar with various kinds of debuggers and must also be able to read specifications. It is also important to get your information from primary sources. For example, instead of learning about something from a blog post you found online, you should read the thesis paper that defined the concept that the blog post is discussing. By applying this pattern, you will be able to truly understand how the tools and systems that you use actually work.

I agree with the idea of this pattern. You should try to dig as deep as you can whenever possible in order to understand how things work. However, I question how realistic it is for a working software developer to actually follow this pattern. If you are asked to implement something for work that has a deadline, you won’t have hours to spend reading academic papers when a quick Google search will get the job done most of the time. This pattern warns that you should take care to not accidentally become a narrow specialist, but if you are truly diving deep into everything you learn it would be hard not to. There just isn’t enough time in the day to learn the fundamental concepts behind every tool or technique that you use. While I agree with the idea behind this pattern, I don’t think it is a very realistic goal for the majority of people.

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

Sweep the Floor

h

 

 

 

 

 

 

 

 

 

 

Link to the blog: https://www.oreilly.com/library/view/apprenticeship-patterns/9780596806842/ch04s05.html

From the blog CS@Worcester – Onwards to becoming an expert developer by dtran365 and used with permission of the author. All other rights reserved by the author.

Reflecting on “Apprenticeship Patterns” – Kindred Spirits

One of the most important lessons that I have learned from being in a computer science program is to surround myself with people who value computing as much as I do and push me to challenge myself and learn more about the field. When I first started working on my computer science degree, I tended to isolate myself from other people in the major and work on projects or assignments alone. However, over time, I did eventually start to find “my people,” or the people who were also pushing themselves through the program, focusing on improving their skills as well. This week’s apprenticeship pattern, “Kindred Spirits,” emphasizes how essential it really is to have people who not only support your growth in computer science, but also understand what it’s like to go through what you’re going through.

The problem that Kindred Spirits seeks to address is the situation where the apprentice feels like they are “stranded” without help or guidance from mentors or other supporters in the community of computing. They may feel like they are walking the CS path alone, which, in such a huge, rapidly-changing field, can be detrimental towards the apprentice’s success.

The solution is, in short, to get in contact with people who are involved in the same road of knowledge, as well as joining communities that encourage that growth. For some, this form of reaching out may be easy, but for others, it may take more effort to put themselves out there. For me, I tend to have difficulties with joining new groups, especially if I don’t know anyone from the group. But, as I’ve been progressing through the computer science major, I have acquired some great friends along the way who know how difficult this journey can be. For example, one of my pals, James (here’s his blog), and I have consistently collaborated on assignments and projects for a lot of our classes, and getting through those courses definitely would have been more difficult without the support from someone who is also working hard to learn more about CS. I’m also looking forward to meeting and working with my new co-workers, who I’m certain also possess that passion and determination to learn more about computing and want to share that passion with others.

Thanks for reading!

From the blog CS@Worcester – Hi, I'm Kat. by Kat Law and used with permission of the author. All other rights reserved by the author.