Apprenticeship Patterns: Introduction

In my Software Development capstone class this semester, we’re reading Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Adewale Oshineye and Dave Hoover. I’ve read the first chapter and the introductions for chapters 2-6, and I’m hooked on this book so far.

In the introduction chapter alone, several ideas really jumped out at me. The authors encourage the reader to place emphasis on self development, preparing themselves to go out and confront the world as opposed to seek to change the world as a route for their success. They talk highly of personal responsibility and “lowering” oneself to the status of apprenticeship until those with greater achievements in the hierarchy of craftsmanship recognize the apprentice’s work. To revel in the fact that you are in the phase of your life where your primary goal is to learn and hone your skills. “This is a time for you to delay your ambitions of immediately maximizing your earning potential in order to maximize your learning opportunities.” Personally, I find genuine comfort in feeling that an apprentice doesn’t need to put on airs in order to look like they know more than they do. A willingness to grow will show for itself, and in practicing that mentality you will find yourself to be a capable and skilled craftsman in no time.

Each chapter in the book outlines a group of “patterns” that can be followed along one’s journey from apprentice to master. I think they’re all full of genuine wisdom so I figured I’d give an outline of each:

Chapter 2, “Emptying the Cup”, contains patterns regarding letting go of the knowledge you’ve gained as to allow yourself to learn as much as possible during your apprenticeships. Chapter 3, “Walking the Long Road”, is about saddling yourself up for the journey ahead. Understand that there are others who are further along the road than you are, and accept that. The only way that you reach that same spot is to keep walking the path that they have previously tread. Chapter 4, “Accurate Self-Assessment”, is similar to “Emptying the Cup”, except this time it is for the purpose of preventing yourself from getting too comfortable. Never become complacent in what you’ve learned — there’s always more to know. Chapter 5, “Perpetual Learning”, is a direct follow up to Chapter 4 because once you’ve assessed yourself, you know that there is more to learn. This chapter discusses techniques for continued learning and the extreme importance of it along the career of a software craftsman, in particular. Finally, Chapter 6, “Construct your Curriculum”, offers advice for the apprentice seeking further education. While resources on the internet are great, acquiring a library (of sorts) of books written by master craftsmen will always offer material that just cannot be found elsewhere. On top of this, it’s important to actually read the material that you acquire. Creating a curriculum, quite literally, to chip away at the vast material at your fingertips will help amplify your skills perhaps more than anything else.

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

Apprentice Patterns: Ch1 + 2-6 Overview

After reading the first chapter of Apprentice Patterns, as well as the introductions to chapters 2-6, I have a lot of comments. The first chapter does a great job of setting up the reader with the understanding that this book is for the “little guy” on the ladder of software development. The different pieces that give definitions and explanations for the different roles of apprentice, journeyman, and master, give readers a means to compare the roles in the specific context of software development.

I do have to note that I disagree with some of the points that the first chapter makes. The first chapter talks about the horror stories of first jobs, or early career positions in general for the software developer. I feel that these claims are simply outdated. Because there are so many positions that need to be filled for mid-level developers, companies are doing all that they can to fight for early career, or fresh-out-of-college employees. There are incentives like a guaranteed mentor and open-concept work environments where collaboration is not only encouraged, by a key part of what might be considered the mission statement of the software development department of the company. These open-concept environments lack traditional cubicles that the book refers to as “ small, rectangular stalls with a PC and a crippled Internet connection”. While many, and most likely most companies still have cubicles, the other points have all been existent in every company I interviewed with both for internships and for full time positions before making a decision. One of the reasons why I decided to accept the offer I did was because of the guarantee that I will have a mentor for my first year of employment, as well as the open concept, extremely team focused work environment. While I do think it is important to note that some people might not be so fortunate, it is also just as important to recognize that there are companies that strive for the mentorship situations the book seems to think don’t exist.

One of the chapters that appeals to me the most is chapter 2. The story of the philosopher and the Zen master. I feel that many people feel that they need to learn everything in school and have an overwhelming fear that they don’t know everything that they need to know for their first job out of college. I felt this way before my first internship. After two internships, I’ve learned that you simply cannot be completely prepared for everything that a job is going to throw at you. The best you can do is try to master what you’ve learned and be open to new techniques, technologies, business logic, and entirely different work patterns. Like the journeymen described, who travel from master to master, learning the optimal means of their craft, we will work with different “masters” throughout our careers, and to be successful, we have to be able to identify the “best” techniques and it is our duty to share our knowledge.
Another chapter that I feel furthers many of these points is chapter 4. This chapter talks about the idea of not becoming comfortable with your knowledge and accepting it as your limits. The idea is not to measure yourself on comparing yourself to other developers in an attempt to become better than average. Instead we are always trying to become a better version of ourselves compared to the day before.

I’m overall excited to read through this book, and to relate myself to the patterns in the book. 

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.

Honing Your First Language

When I picked up Apprenticeship Patterns, on Chapter 2, Emptying the Cup, the very first pattern caught my eye when the context and problem they presented seemed to apply to my situation closely. The pattern is “Your first language”, and the authors hit the nail on the head in my case when they explain the case of a budding programmer who only has limited knowledge of one or two programming languages, but the job opportunities demand a high level of technical proficiency.

Their advice is to stick with one language and become fluent in it. The logic is to hone your language skills by solving real world problems, developing code through test driven development, with the guide of experienced programmers.

The authors stress the importance of deciding which language to take on as your first. It makes sense, seen as how that language will be the primary tool we use to solve problems. In my case, it seems clear to me which is the right one. As many of us, my first and most familiar language is Java. Not only that, I am fortunate enough to have an internship opportunity which uses Java and JavaScript. So I have the real world opportunity to hone my knowledge, and access to mentors who are more knowledgeable than myself.

One final piece of advice the authors gave which I will take them up on is to find a community of people who are focusing on the same language and have similar experiences as you. For me right now that is my peers, and it is plain to me the mutual benefits of working with others who are in the same boat.

As much as I feel internal pressure to learn a variety of languages like C++, Python, etc., reading this pattern resonated with me and helped me make an informed decision to focus on what is pragmatic, as opposed to getting caught up in the ocean of possibilities. Since my first professional opportunity is using Java and JavaScript, I will focus on honing my skills in those areas as opposed to spending that time getting a surface level understanding of a different language that I might not immediately use.

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

Your First Language

This blog is about the first pattern in the Apprenticeship Patterns book by Adewale Oshineye and Dave Hoover called Your First Language.

This chapter was about picking your first language as a programmer. Picking your main language is difficult. There are so many languages out there that it is really hard to weigh the pros and cons of each of them. But you have to pick one since obtaining your first job will most likely depend on your proficiency in a specific programming language.

This chapter offers different solutions to this problem. One is to have an actual problem and solve it using the language that you chose. Instead of just following tutorials and examples in a book, solving an actual problem provide your first feedback loop. One other suggestion that they have is to write simple tests to check your understanding of the language. Since test-driven development techniques are so popular nowadays, it is impossible not to find a language that does not have a testing framework. It is a great way of learning how other people’s libraries work. One can always learn about a language and try to be proficient in that specific programming language, but it is still important to find a mentor.

I thought it was interesting how they kind of emphasize on having a mentor for your first programming language. Since we keep using different languages throughout the course, it was hard to find and settle on your first programming language. Not to mention, finding a mentor. Finding my first programming language is still a problem even now. I still cannot seem to settle on one language to master since each of them offers different specialties. This pattern has caused me to change the way I think. Since I always try to learn something new, I never really “specialized” on something. My mind is usually all over the place and I am always trying to learn new things. But, the problem is that I never mastered anything. I always seem to only learn the basics and then move on to different things. After reading this chapter, I want to try and settle on one language try to be better at it before moving on to other things.

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

“Unleash Your Enthusiasm”

As computer science student, I believe we all have this excitement at some point. We get into the new environment, new team and new technology that we excited about. You have an insatiable excitement and curiosity regarding the craft of software development, this is sign of “learner”. I, personally want this in my team, and want this as my enthusiasm in learning new things. This could pick up to the excitement and contributions of an apprentice to the team. For team who welcome this, this is great. But in teams are not hyper passionate or overly enthusiastic about technology. As most company they are most likely to focused on delivering the next project or improving on the aspects of the development life cycle. Show over enthusiasm, you could certainly make a poor impression on people who value more than learning ability, particularly when you expose your ignorance. This is where you need to adjust with the team. Although your excitement is great but over all team is more important.

I definite was in the shoes of these pattern though my school career. If the team is welcome me, it feel great. But there also time where our energy wasn’t matching, I would feel unwelcome or my mistakes are become more highlight than anyone else. This may let’s some of members down, I believe this pattern should be in one of the roles of being teammates. Is to should push each other, and motivation to be excitement. We should be excited to learn. Your ideas and passions will add intelligence and diversity to your team. We shouldn’t too over excitement, but we should be ourselves. Like the action in the book recommend, we could share our idea to the person we comfortable with, see their reaction. This way we could fix our flaw before representing to the team.

This pattern related to my school year, when I get into new group. I am excited get to know new people and their working method. I must keep the team overall as the most important, I have to adjust to the team. But most of the time, I am very welcome to the team and my constitutions are noted.

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

Apprenticeship Patterns

After reading Chapter 1 and the introductions for Chapters 2 through 6 of Dave Hoovers and Adewale Oshineye’s Apprenticeship Patterns, I feel that I was really fascinated about some of the topics and ideas that I saw.

Entering the industry following the ideas of being an apprentice (not necessarily in the literal sense or an actual apprenticeship program) is something that I think is really interesting as well as being a good mindset to have regardless of where you are in your career. As was stated in the reading, many of the patterns many not apply as much to you depending on your experience, but I think having the mentality to constantly seek to improve yourself is something that really applies to every part of life.

The story about the Zen master and the young philosopher in the introduction to Chapter 2 was really interesting because the idea of “emptying your cup” in order to open yourself up to different approaches is something that would be difficult to do without a strong self-awareness. I think that for many people, reading this could be the first step in reaching a point where you’re able to put down your pride and your past experiences/habits and just listen. If you were to act like the philosopher in the story, you’re not as likely to have more experienced colleagues want to continue to teach you. I imagine most people aren’t as patient as a Zen master.

The idea of perpetual learning brought up in the introduction to Chapter 5, while a good mindset to have throughout your entire career, is something that is really important for people who will soon enter the industry (or even before that). To someone about the start their career, if you begin your journey following this path, then you’re sure to be able improve and find yourself in a much better position that if you didn’t. If you don’t focus on improving yourself early on, you might end up stagnating and finding that after years in the industry that you’ve been standing still the whole time.

Overall, these readings have been immensely useful in improving my mindset. I can see why this was assigned at a critical point in the Computer Science curriculum. I can also see why people would end up reading the whole thing, because I’m sure that learning about many of the patterns found in this book will continue to help me in the future. Once someone finishes up their degree, there will no longer be any external force pushing them to continue learning, so being able to continue to seek out knowledge is something that you’ll have to do on your own. Finding topics to study that interest you and will help to improve yourself is something that shouldn’t be overlooked.

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

Apprenticeship Patterns Blog: Part 1

Hello and welcome to Benderson’s blog, this week I will be discussing my opinions on the Apprenticeship Patterns book that discusses important topics regarding computer science. Here is a link to the document:

https://www.oreilly.com/library/view/apprenticeship-patterns/9780596806842/#toc-start

The reading was really long but had some very interesting parts to it. Explaining each of the roles and what it means to them was a good way of doing it and showing the reader how the journey goes and how you’ll feel at each of the different checkpoints that you approach. The one that stood out to me the most was the journeyman because its the middle man between the apprentice and the master, its the position that seems to contain the most work and require you to be focused on your work and want to succeed later in your software career. The journeyman isn’t tied to one master and goes as he wants which is pretty interesting as well, the journeyman finishes one job for one master and moves on to other masters and finishes other jobs for them. Eventually through the craft, the journeyman will slowly become the master which really caught my intention as it reminds me of the hero’s journey that is in every movie known to man where the journeyman becomes the master.

The reading didn’t really change my opinion on the topic as I knew that finding a job and getting work experience would be a long and rigorous experience. I also have read many articles and other sources of computer science jobs that you start off with one language you know decently well, which for me is Java and I prefer to use that for any problem solving that I need to do. I know eventually I may need to dabble in other programming languages if its for a job or specific task but I know I don’t have to cross that bridge know and that I should focus on what I know best at the moment to get me a software job. Again most of the things stated in this blog didn’t change my opinion on how I see the topic but instead enhanced my beliefs in ideas and made me more sure about it.

I really didn’t disagree with anything in the article as it was pretty much all backed information and had very good stats and facts about the information that makes it more agreeable and more informative. There was one point in the article though where they discussed about how you should focus on being a solo guy and less about the team which I think is true but I think working in teams is important to the work life as working in teams makes getting the job done faster and easier.

The chapters that seem most relevant to me are chapters two and three mostly because for chapter two it discusses learning your first language and how you will grow from there. It also discusses picking a language to master as I discussed before which I think is the best method in becoming a master. For chapter three, it resonated with me because I want to be one of the best programmers, I want to make something that revolutionizes the way we think and use certain technologies. People will call you crazy until you act on what you say and that seems like where the chapter is going towards which makes me intrigued by it.

Thank you for reading benderson’s blog this week, come back next week for more information on this article and more computer science opinions.

 

 

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

Breakable Toys

For this week I have decided to do my blog on the Breakable Toys pattern. The problem presented when your environment does not allow for failure. As a college student I know what it feels like to be in an environment that does not allow for failure. If you fail classes then you cannot move on to the next semester, class, project, or graduate! Since I understand the feeling of this environment, I was naturally interested in what this pattern had to offer for me. The book says that the only way to learn is by failing so that you can learn how to correct that failure and get it right the next time around, growing as a person and a software developer. I enjoy this thought because I can think of many numerous occasions where I have failed at something – not just limited to software  development – and learned from my mistakes in the end. How are we to learn why something is correct without first understanding what happens when it is not correct? In my eyes, if we see why it fails then we can understand its true purpose and understand why it needs to be correct. This pattern suggests failure in order to learn. It does not suggest blowing stuff off and failing at the “real deal” stuff that will  be done at work, but rather urges us to practice on smaller projects/ideas with the same toolset as the “big one” in order to fail on a small level and in turn understand the true meaning of our toolsets. This is important because if we fail at a small level it will be easier for us to understand where and what went wrong and how to better understand our toolset that way when it is time for the big project we will have full understanding and control of our toolset so that we will not fail on the real-deal. The book also suggests building a wiki style page as your small project because you can track yourself through it, in turn building off of it and making it something big and meaningful from something small and easy.

From the blog CS@Worcester – The Average CS Student by Nathan Posterro and used with permission of the author. All other rights reserved by the author.

IndividualApprenticeship Patterns – Find Mentors

As we will be looking for the best skill or training from masters, we need mentors or a mentors who we can watch up to.

From the readings and with the understanding if got, finding a mentor is not all that easy, let alone mentors. As someone who want to be an apprentice or who is already an apprentice, he or she must be very careful choosing a mentor. Some of the things he or she must know before choosing a mentor(s).

  1. He or she must know her or his needs and also be very ready to be committed. Once he or she knows what he wants from the mentor then he starts searching. Only he know what things like dreams or desires and what type of person can help him get to where he wants to be. I also learnt from the readings, mentors do not have to be from the same company/industry, country or gender. One has to be more open minded to new possibilities by working outside of your comfort zone.
  2. To really succeed in the working world, one has to search for many mentors as possible. This helps you gain more skills from different areas. For example, you can be learning networking from a particular mentor whilst also learning another area like software programming from a different mentor. With that you are gaining a lot which does not limit you to a particular field or area.
  3. You need to choose very carefully when selecting a mentor. You don’t want to waste all your time learning things that will never be useful in your career. Also while carefully choosing for a mentor, one has to be sure he is very comfortable with the mentor.
  4.  As time passes on, your life evolves, your needs change and the desire for a new mentor may become apparent.  However, the mentors that helped you grow and prosper should never be ignored. Though you may now have different mentors, the relationships you formed with those from the previous chapters in your life must remain active.

From the readings, I got the understating i need not to rush in getting a mentor. When choosing one, i have to be very careful. I should not limit myself to only one mentor but to learn from many mentors. In that case, at least i gain a bit of knowledge in every field. One particular thing that interested me was “Passing along what you have learned from your mentors is one of the ways in which you can begin the transition to journeyman status.” From, i come to understand that in order for me to get to the top or to be a master, i have to also search the knowledge i have gain to others.

From the blog CS@worcester – Site Title by Derek Odame and used with permission of the author. All other rights reserved by the author.

Sam’s Ships || Apprenticeship Patterns CH1 & CH 2-6 Intro

csseries281829Welcome aboard! Today we are going to discuss Apprenticeship Patterns based on the book by Adewale Oshineye and Dave Hoover.

What it means to be a software craftsman is to be on a continuous journey to absorb new things and implement them, then taking the time to reflect. To me, being a software craftsman seems like a journey to do better, seek more, and learn from experiences while remembering where you came from.

The three stages of becoming a software craftsman are the apprentice, the journeyman, and the master. Based on those, I thought it was reassuring to read about what changes in each modern-day phase, like a guide or what to expect or what may happen in the technology world with software development. It seems useful because instead of having a core timeline of expectations, it was more based on how people personally developed or tried to grow and learn more.

I found two sentences on the apprenticeship phase thought-provoking, “Th[e] transition [out of apprenticeship] may take longer for some people than for others. For some, the transition may take longer than their professional careers.” It made me think about whether people were settling or just not able to have the right resources to continue growing. Or maybe they had just switched into technology on the further end of their career spectrum.

The reading also made me think about the cycle of knowledge; an apprentice learns from a master, becomes a journeyman, and then hopefully becomes a master as well who ends up teaching skills to newfound apprentices. There was a time before our jobs and there will be a time after our jobs.

The chapter introductions which seem most relevant to me are two and three. From chapter two, I liked how we are encouraged to get really good at a language but not rely on it so that we can continue branching out and learning more. It made me more grateful for sites available today that just serve as online courses to teach and guide you to learning new languages from the beginning.

From chapter three, it feels very relevant to read about “valu[ing] learning and long-term growth opportunities over salary and traditional notions of leadership.” As I will be graduating in only a few months from now, I will have to make an important decision on my first official career. This was an interesting perspective after all the current trends of always hustling and being on the grind and people moving to bustling technology cities.  I will most likely be writing about some points brought up in future blog posts as well.

Overall, this book seems pretty reassuring in terms of helping a reader slow down for a little bit and think about what path they are on and which ones they are willing to cross as well. It helped me reflect on what I have learned so far and what I may want to focus on in the future.

 

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