Apprenticeship Patterns

Context

The following post will be in reference to Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye chapter 1 and the introductions to chapters 2 to 6.

Opinion

“Most people won’t have an opportunity to work in a formal apprenticeship where they are being mentored by software craftsmen. In reality, most people have to claw and scratch their apprenticeships out of less-than-ideal situations. They might be facing overbearing and/or incompetent managers, de-motivated coworkers, impossible deadlines, and work environments that treat novice developers like workhorses, storing them in small, rectangular stalls with a PC and a crippled Internet connection. (Apprenticeship Patterns)”

This is an incredibly true statement. Due to the current state of the economy, it is very hard for people to gain work experience in any field, let alone in software development. One will frequently see requirements for years of experience in an entry level position, but how can one achieve years of experience if every entry level job requires it? In my opinion, this is the product of many things; moreover, it is an incredibly complex issue, as all issues are. One such thing is the abundance of college degrees. As with many of these possible causes, they are often both positive and negative. Every good action has negative consequences and every negative action has positive consequences.

The positive that comes with the abundance of college degrees is likely self-evident – average people are educated and have more opportunities. However, consider the issue of student loan debt. Many people put themselves into massive debt to get a degree they might not even use. Anyway, it is basic economics at play; you cannot fight supply and demand. The hiring process is simple. Now, the world we live in isn’t perfect but suppose it were an actual meritocracy where everyone has equal opportunities. How can we hire? If we assume that someone who has spent years in college dedicated to studying a topic we work with, we can discriminate based on degree in order to discriminate on skill set. It is important to note that discrimination is not inherently bad. In a meritocracy, discrimination is necessary; in fact, in any value hierarchy where object A has more value than object B, discrimination is necessary. The problem with discrimination is when we discriminate based on irrelevant characteristics. For instance, race has no influence on a person’s ability to be a good doctor. So it is unfair to discriminate based on race when deciding a doctor. However, suppose you need brain surgery and you have the choice of a doctor with twenty years of experience, or a new hire without any experience. In that case, in order for society to function at all, it must be considered fair to discriminate based on experience since that directly affects the chance of success and, in this case, survival. Thus, jobs fairly discriminate based on perceived ability and understanding to find the best for the job. However, the more people that have a degree, the less worth a degree has relative to employment. Having a degree is less of a discriminating factor and so jobs have to create other means of determining skill – hence the absurd amount of experience required.

It is a catch-22; employers use college degrees to discriminate to determine those best fit for their position so average people push their kids to go to college. Then, college degrees become worth less but people still think they are necessary so despite the immense cost, they push their kids to go anyway. Obviously, college is not bad. However, their is a failure to have the necessary discussion with kids. They have to decide whether the career they want is going to be worth the investment. They also need to consider that they might not even find a job in their field after college. It would help the issue if parents and schools viewed college as more of a tool rather than a necessity, and if they introduced kids to trades. Trades also aren’t for everyone, but they are a very founded career path. What society needs overall is a balance and a discussion. In my estimation, the entire education system needs an overhaul; but that is for another blog post.

I would go into the other things I think are causes of such a job environment, but I’ll save that for another day. Instead, I’ll focus on the immense power of environment. First and foremost, people like to view their environment as separate from their minds. However, just think about it. As an example, when you’re lazy, you create clutter in your environment and when your environment is cluttered, it can cause stress or discomfort. Your environment affects your mood and your mood affects your environment, so the distinction between the two isn’t as clear as people might like to think it is. A good working environment is crucial to doing good work. Think back to primary or secondary school and think about the old books and uncomfortable desks with pencil carvings in them. It might go without saying but, if you want to improve your work, put some effort into ensuring your work environment is designed for you to be productive.

Work Cited

“Apprenticeship Patterns.” Accessed February 22, 2021. https://learning.oreilly.com/library/view/apprenticeship-patterns/9780596806842/#toc-start.

From the blog CS@Worcester – The Introspective Thinker by David MacDonald and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

The book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye gives great solutions/patterns for problems often faced by software developers, mainly apprentices or beginners of the craft. I have enjoyed reading up to where I have gotten so far (Chapter 1 plus 2-6 introductions) and it has taught as well as clarified many ideas and methods. One thing I have never thought of is how your first language will affect how you will think and learn other languages in the future. While this may be the case, the more diverse knowledge you have, the more you will improve upon this fact. For example (given by the book), people who are more comfortable with object-oriented languages should explore functional languages. This will broaden your understanding and problem solving. Another pattern I found interesting was the Be The Worst pattern. This discusses your environment and its relation to your growth. Being on a team where you are the best or most skilled does not give you much room or motivation to improve as you will not be learning from your peers. It suggests keeping yourself in an environment/team where you are the least skilled. This forces you to catch up to your teammates so that you don’t hold them back as well as forces the habits, ideas, and information of your higher skilled teammates upon you. A few patterns that addressed things I already “knew” but clarified the process at which I should take are Expand Your Bandwidth and Reading List. If you want to be a software developer then you should already know that you will be constantly learning. Expand Your Bandwidth gives solutions on how to learn more than what your job teaches you. It gives examples such as joining online academic courses, following influential developers on social media, contacting authors and more. This gives you a starting point from which you can come up with your own ways of learning or just to boost you in the right direction. The other pattern, Reading List, gives great methods on organizing your book backlog. The first suggestion is to not only keep a list of books you wish to read but the ones that you have read as well. This allows you to keep track of the books you’ve read from which you can review and find gaps or trends in your learning. This can direct you/help decide what you should read next. The pattern also suggests that you keep your book list as a priority queue. If you find a book on a topic that would be more useful or has a higher urgency then put it at the top of the list. If the bottom of the list gets to the point where you will probably never read the books in those spots then thats okay because it clearly is not a priority. I like the way this book structures these patterns too. The authors organize these patterns into Context, Problem, Solution and Action. This makes it easier to understand rather than if they were just put into normal paragraphs.

From the blog CS@Worcester – Austins CS Site by Austin Engel and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Software Craftsmanship raises some of the thorniest and most
sensitive questions about software development and comes to the controversial
conclusion of finding answers in a system that has thrived for hundreds of years:
technology. Software Technology is a systematic
expression of the author’s ideas and attempts to answer the difficult questions
that have been plaguing the software industry. How should we restructure the
process of building software, such as we want it to be effective?

 

The author of Software Craftsmanship has been emphasizing
the role of the craftsman in the project. Craftsmen sounds is a very old word,
the craftsman in other industries is a what kind of person I want to say, must
be done in the field of a good man, I explain the below mentioned software
process artisans do what kind of person, craftsman is mentioned there is a very
rich in the process of software development experience, after years of
development, products are well received by customers, has a certain reputation,
they can submit a robust, high quality of the user application. A good
craftsman can make or break a project. This shows that the human factor plays a
very important role in the development of the project. Someone I have been
thinking without learning software engineering in software development has a
very important role in understanding of software engineering make me realize
software can also like assembly line engineering, development mode, people do
not development process, mainly the development process of software engineering
control, a relatively fixed process, as long as people do some mechanical work
can complete this project. In the current environment, software engineering
ideas are still dominant, but software technology ideas also have their base of
support, such as workers in the open-source community.

 

Software technology of the main pressure is a very important
role in the whole project, software process is very strict requirements of the
team, the team first small number, no more than 15 people, the general team is
three people, but for the team of personal ability request, the other teams
also are in high demand of health, a more stable team, team members can develop
the tacit understanding.

 

The book Software Craftsmanship gives us a good development
model, but many projects in the current environment are developed using
software engineering ideas. Why is this? In my analysis, the main reason is
that software technology requires too much of the team, and there are too few
excellent craftsmen, so it is difficult for many companies to organize such an
efficient team. Right now, the idea of software craftsmanship can only be seen
in the open-source community, where many of the true craftsmen are gathered.

From the blog haorusong by Unknown and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Software Craftsmanship raises some of the thorniest and most
sensitive questions about software development and comes to the controversial
conclusion of finding answers in a system that has thrived for hundreds of years:
technology. Software Technology is a systematic
expression of the author’s ideas and attempts to answer the difficult questions
that have been plaguing the software industry. How should we restructure the
process of building software, such as we want it to be effective?

 

The author of Software Craftsmanship has been emphasizing
the role of the craftsman in the project. Craftsmen sounds is a very old word,
the craftsman in other industries is a what kind of person I want to say, must
be done in the field of a good man, I explain the below mentioned software
process artisans do what kind of person, craftsman is mentioned there is a very
rich in the process of software development experience, after years of
development, products are well received by customers, has a certain reputation,
they can submit a robust, high quality of the user application. A good
craftsman can make or break a project. This shows that the human factor plays a
very important role in the development of the project. Someone I have been
thinking without learning software engineering in software development has a
very important role in understanding of software engineering make me realize
software can also like assembly line engineering, development mode, people do
not development process, mainly the development process of software engineering
control, a relatively fixed process, as long as people do some mechanical work
can complete this project. In the current environment, software engineering
ideas are still dominant, but software technology ideas also have their base of
support, such as workers in the open-source community.

 

Software technology of the main pressure is a very important
role in the whole project, software process is very strict requirements of the
team, the team first small number, no more than 15 people, the general team is
three people, but for the team of personal ability request, the other teams
also are in high demand of health, a more stable team, team members can develop
the tacit understanding.

 

The book Software Craftsmanship gives us a good development
model, but many projects in the current environment are developed using
software engineering ideas. Why is this? In my analysis, the main reason is
that software technology requires too much of the team, and there are too few
excellent craftsmen, so it is difficult for many companies to organize such an
efficient team. Right now, the idea of software craftsmanship can only be seen
in the open-source community, where many of the true craftsmen are gathered.

From the blog haorusong by Unknown and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Introduction

            In reading the introduction to the Apprenticeship Patterns book, I found a great deal of the material to be interesting. Looking at the learning curve of a software developer in the style of the apprenticeship to journeyman to master stages provided a much better framework for progression than I had seen before and putting it in these simple and recognizable terms makes a career feel more tangible. Beyond this, I was quite interested in a couple of the chapter introductions. Chapter 4 focuses on “Accurate Self-Assessment,” specifically the concept of complacency of being a big fish in a small pond. I do a fair amount of reading online about careers in software development, mainly focused on entry-level positions, competitive internships, etc. It stands out to me that many people in the field push and push to start at the highest level that they can, which makes sense in such a competitive environment. Whether this means working at a FAANG company or maximizing total compensation as fast as possible, the focus tends to shift away from becoming the best the one can be and instead on landing in what is generally perceived as the best environment/position. While I can’t say this is at all unreasonable as people have themselves to worry about and not just their software development skills (I know I definitely have this focus too), it can come to the expense of their long-term career. By this I mean we find a place where we want to be in the present and allow this to perpetuate for however long, not to the detriment of our skills as a developer necessarily, but not really broadening our skills either. The book elaborates on this, saying, “You must fight this tendency toward mediocrity by seeking out and learning about other teams, organizations, journeymen, and master craftsmen that work at a level of proficiency that an apprentice cannot even imagine.” This means that getting comfortable is easy, and for most, it’s preferable to be within one’s comfort zone. Getting outside of our comfort zone is so valuable though. I think it’s inevitable to play the game of comparisons with one’s immediate peers, even at our level of being students. It’s saying, “Well, I could go on and learn x, y, and z, but I’m doing better than most of the class at the current topic, so I don’t really need to.” It’s a trap I’ve definitely fallen into. But our class, our little sector of the computer science world is just that: a tiny little sector. It’s more valuable to focus on what we don’t know than what we do know at any level of skill. I love this concept, intimidating as it is, and it provides great motivation.

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

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Software Craftsmanship raises some of the thorniest and most sensitive questions about software development and comes to the controversial conclusion of finding answers in a system that has thrived for hundreds of years: technology. Software Technology is a systematic expression of the author’s ideas and attempts to answer the difficult questions that have been plaguing the software industry. How should we restructure the process of building software, such as we want it to be effective?

 

The author of Software Craftsmanship has been emphasizing the role of the craftsman in the project. Craftsmen sounds is a very old word, the craftsman in other industries is a what kind of person I want to say, must be done in the field of a good man, I explain the below mentioned software process artisans do what kind of person, craftsman is mentioned there is a very rich in the process of software development experience, after years of development, products are well received by customers, has a certain reputation, they can submit a robust, high quality of the user application. A good craftsman can make or break a project. This shows that the human factor plays a very important role in the development of the project. Someone I have been thinking without learning software engineering in software development has a very important role in understanding of software engineering make me realize software can also like assembly line engineering, development mode, people do not development process, mainly the development process of software engineering control, a relatively fixed process, as long as people do some mechanical work can complete this project. In the current environment, software engineering ideas are still dominant, but software technology ideas also have their base of support, such as workers in the open-source community.

 

Software technology of the main pressure is a very important role in the whole project, software process is very strict requirements of the team, the team first small number, no more than 15 people, the general team is three people, but for the team of personal ability request, the other teams also are in high demand of health, a more stable team, team members can develop the tacit understanding.

 

The book Software Craftsmanship gives us a good development model, but many projects in the current environment are developed using software engineering ideas. Why is this? In my analysis, the main reason is that software technology requires too much of the team, and there are too few excellent craftsmen, so it is difficult for many companies to organize such an efficient team. Right now, the idea of software craftsmanship can only be seen in the open-source community, where many of the true craftsmen are gathered.

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

Apprenticeship Patterns

We are at the point of life that in a few years we all be fully working adults. It is crazy to think that 4 years of college just flew by so fast. This semester the software capstone class will be the most interesting and challenging I believe. When it comes to reading a book, I have no patience at all, but after reading the introduction, something about this book: Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman is making me want to read it appropriately. It is possible to be that I can relate to this book on so many levels and it is relevant to me. After just reading the introduction I feel like it changed the way I think and view my profession.

All the patterns in the book are interesting and powerful in a way that we can adapt and combine these patterns in many ways and situations. One of the patterns that stood out to me the most was “Be the worst” from chapter four. The author has explained the concept very well in which it states that “Surround yourself with developers who are better than you. Find a stronger team where you are the weakest member and have room to grow” This statement Is very interesting and when I think deep into it, I believe that being worst in a team at least for me is a motivation to work hard and grow to improve. The goal is not to stay the weakest but instead work my way from the bottom to the top.

The author also talked about the risk factor that associates with being worst in the team including dragging the team down, good teams do not tolerate you, and the risk of being fired. Although I do agree that in situations all these scenarios could be possible but on the positive side this can motivate a person to improve and build a mindset that helps the individual. I do not think I disagree with any aspects of the pattern but, these patterns and the whole book have certainly changed the way I think about a certain aspect of software development. I realized that I need to work even harder and push myself to the limits for me to get where I want in life.

 

 

 

From the blog Derin's CS Journey by and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and 2-6 Introductions

The introduction to the Apprenticeship Patterns book really opened my eyes to the reality of software development, and how it is a constant learning process. In the beginning of my journey of computer science and programming, I have always felt that I have no clue what I’m doing and there is so much that people already know. I just started and wondered how is everyone already so ahead. It feels like I will never be able to catch up and there is just so much to learn. However, over the years I have realized that more often than not, most of us are in the same boat. We look at people around us and think that everyone else except me has everything figured out, but this is not the case. Everyone has their own different skillset level and has different things to learn on and improve. The main message the chapter had me reflecting on was that we should compare ourselves with our version from yesterday and how we can improve from that. It is with this growth mindset and getting things done we can improve our skills, while also enjoying the journey.

I think the chapters that were highly relevant to me was chapter 3, walking the long road, and chapter 6 which was construct your curriculum. Chapter 3 talked about how Dave in his earlier career had piled up various certificates to show he was able to do the work, but while interacting with more advanced developers, realized there was a farther road to go. What stood with me the most is that although some may be farther down the road, we all walking the same road. Chapter 6 essentially stated that any one person can decide what they want to learn due to the vast amount of information available on the web. Keep in mind this book was written in 2009, and the world is astronomically even more ahead with technology as it plays a role on a global scale. The information available now is too large to even contemplate so there is no excuse not to be able to learn anything. I need to take a lot more advantage of this and find useful information that will increase my skills, as opposed to mindless activities.

Overall, the reading impacted me in a very positive way and gave me a more broader perspective on the world of software development. Keeping an open mind and always learning to adapt is essential in the technological field.. Just look at how far we have come in the last 2 decades as technological advancements have been moving at an exponential rate and things are always changing. I would say for anyone reading that no matter where you are in your journey, don’t be discouraged by the overwhelming amount of things that can be learned, but focus on what you can learn in the moment. Too much thinking will limit action and action is what drives a person to move forward.

From the blog CS@Worcester – Roller Coaster Coding Journey by fbaig34 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

I want to start this blog with something very interesting that I read in the book; Surround yourself with developers who are better than you. Find a stronger team where you are the weakest member and have room to grow. Being in a strong team can make you feel as if you are performing better. The other members of that team will often prevent you from making mistakes, and help you recover from mistakes so smoothly that you will not realize that you may not be learning as much as you think. It is interesting and true but also, we have to be careful because there are risks. You can end up feeling bad about yourself and your skills or there is more than you can handle so is good and bad being in strong group.

This semester I’m learning something new in software development capstone. This means that I have to read new information and trying to understand it. Expanding your ability to take in new information is a critical, though sometimes overwhelming, step for apprentices. This book help explains that you must develop the discipline and techniques necessary to efficiently absorb new information, as well as to understand it, retain it, and apply it. I feel this chapter is so relevant to me because sometimes I feel lost with all that reading and new information. While Expanding Your Bandwidth can be fun and is an interesting skill in and of itself, for the apprentice it is a means to an end.

I always try to hide my ignorance when I don’t know something about a topic. This book helped me understand that it fine to not know or understand it. It helped me to work with my problems and allow yourself to Expose Your Ignorance in a specific technology in order to focus your attention on what you need to learn next. Then Confront Your Ignorance and let your team and your customers watch you flex your knowledge-acquisition muscles. When all this new information and mind-stretching becomes overwhelming, it’s important to Retreat into Competence, remember how far you’ve come and the skills you’ve developed, and gather yourself to ascend to the next plateau.

Source: Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye, Chapter 1 and Chapter 2- 6 Introduction.

From the blog CS@Worcester – Tech, Guaranteed by mshkurti and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Post #1

Coming into my final semester of college I was filled with an impending sense of doom. At the end of high school, I knew where I was going. Now I suddenly am thrust into the world of working adults; four years squandered trying to meet deadlines and maintain a GPA instead of earnestly absorbing my professors’ efforts. A four-year hiatus from asking myself the real questions: Do I really want to be a software developer and if so, what am I doing to get there?

Amid this crisis of self-realization, I was presented with a reading and blog assignment. I regretfully confess that it’s been years since I’ve read an actual book – a byproduct of instant information (thanks Google!). For some reason I thought it best to not just skim Chapter 1, but to read it actively, and as I did so I felt validated. As the author referenced a student with a college degree from a prestigious program and a self-taught developer, I recognized that I too am a software apprentice, and this is one I should probably read fully, regardless of it being assigned.

While I can see all the chapters applying to me, the most relevant are Chapter 3 – Walking the Long Road, and Chapter 4 – Accurate Self-Assessment. Reading the introduction of chapter 3, I could see a lot of myself in the author as he described feeling discouraged by the skill of others; the same often happens to me. I must recognize that no one got to where they are from day 1, especially in the field of software development. It takes time and I have definitely not put in enough yet.  

The relevance of Chapter 4 is probably apparent throughout this blog post, though it’s not quite in the way the author describes. Instead of being satisfied with my level of ability, it’s clear I am hard on myself, much more than is necessary. There’s a difference between humility and beating yourself down. I must learn the difference if I ever want to get to somewhere where I am happy with my ability.

From the blog CS@Worcester – Half-Cooked Coding by alexmle1999 and used with permission of the author. All other rights reserved by the author.