Apprenticeship Patterns: Emptying the Cup (Chapter 2)

The authors began this chapter with a really thought-provoking story of a Zen master and a young philosopher. In this story, the young philosopher sets out to learn the ways of the Zen master but every time the zen master would begin to describe his own practices the young philosopher would cut him short and start talking about how he does things and how it might relate. Essentially, the Zen master is never able to complete any of his thoughts because the young philosopher keeps interrupting and talking about his own experiences. This goes on for a while until the Zen master goes to pour a glass of tea and he keeps pouring until the the cup is overflowing. at this point, the young philosopher tells the zen master to stop pouring to which the zen master replies, “If you come to me with a cup that is already full, how can you expect me to give you something to drink?”

I think that the short story about the Zen master and the philosopher is extremely relatable to learning how to become a software developer. In the field of programming its’s really important to approach problems with an open mind and to not disregard certain techniques or practices due to the fact that they aren’t familiar to you. By emptying your ‘mental’ cup and being upon to new ideas you will inevitably be much more successful in developing and honing down your programming abilities.

The authors go on to describe the best way to get your software development career started. They suggest that you choose one specific programming language and “become fluent in it.” Some of the things they proposed to get help get you started are using that programming language to build a “toy” application, trying to solve real problems using that language, and reading the language’s specification documentation. The authors recommend using tools like git to publish and/or contribute to open source projects. The benefits of contributing to open source projects include the fact that you can get feedback on your code and advice from experienced professionals that already know the language your learning. Overall, I’d have to say that they present some really good advice on how to get your programming career started and I wish that I had read this when I was starting out as it probably would have saved me a lot of headaches.

 

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

Unleash Your Enthusiasm

Unleashing your enthusiasm focuses on bringing enthusiasm to your new team.  It emphasizes approaching your new team with energy and readiness to learn as much as possible.  The book explains that a lot of new developers may be hesitant to appear too enthusiastic, thinking that the team that they are integrating into might not be welcoming to the new injection of enthusiasm into their work place.  Enthusiasm is infectious though and in just a short period your enthusiasm to work and learn will spread to the other team members and the overall work environment will rise.  I agree that this works not only in software development, but in any industry.  During my time in the Army there were plenty of days that were miserable at best.  No matter what the condition was though if you had a positive energy and enthusiasm it made the day a little easier.  When one person showed up with this type of attitude they were quickly berated and rejected by those who were determined to stay miserable.  Soon enough though the positive attitude spread to others and everyone had seemingly found what little good and joy there was to find that day.  Work then seemed easier and the day moved quicker.  No one could tell you any specific time or event that the change occurred.  The tone of the team just kind of changed as the enthusiasm spread.  I think that a high morale and enthusiasm for the job will greatly improve the overall morale and performance of the team.  I found the study from the aircraft carrier interesting.  The idea that new employees mixed with seasoned vets of the industry makes sense, but is often overlooked until it is brought up.  The vets share their experience with the new employees while the new employees are able to share the newer ways of teaching and question the way things have been done in order to change procedures if necessary.  When the employee is in the middle of these two extremes is where changes are made and new procedures and policies replace the old.  It’s important to for all to remember that this process doesn’t work without a mutual respect and open mindedness towards all.

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

Apprenticeship Patterns Chapter 1 Reflections

Reading the first chapter of “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman”  by Dave Hoover and Adewale Oshineye, has so far changed the way that I look at being a new developer and the approach that I will take to growing. The quote that resonated with me the most was said by Marten Gustafson, he stated “I guess it basically means having the attitude that there’s always a better/smarter/faster way to do what you just did and what you’re currently doing”. The previous quote in my opinion is the most important idea portrayed through the entire first chapter of this article, it applies to not only the apprentices, but also the journeyman as well as the masters. I think it’s very important to work with the attitude that there is always a better way because it keeps us from getting complacent and leads to many innovations, and because of this I will try to keep this attitude as I go through my development career.

The other key idea that this article taught was self responsibility. The classical apprenticeship pattern that they compared theirs to has a larger reliance on others (the apprentice has a reliance on the journeymen and masters for their learning). Though this chapter acknowledges that this will play a role in our careers, they make the argument that we should take control and and responsibility for our destinies. I found that particular part of the chapter very empowering because it stresses the fact that the responsibility falls on you. It tells me that I am responsible for acquiring the skills needed to advance in my career, and that I am responsible for finding the correct mentor when that is needed, and most importantly that I am the only one responsible for my successes and failures.

While a big part of the chapter stressed the idea of individual responsibility and growth, I really like how it demonstrated the link between this individual growth and that of the community and the craft itself. It shows that as you get enough skill to consider yourself no longer an apprentice, it is almost your responsibility to share your knowledge and ideas. As a developer you are going to be working in many different teams on many different projects, and you will be exposed to many other ideas, but you will also expose others to some of your own ideas. This exchange of ideas is in my opinion the best thing that could happen for the craft and profession as a whole, it ensures that things will not stagnate and is responsible for the many innovations we developers have had.  It talked about how as a master you are putting these skills and ideas under the microscope to improve the way that the community as a whole operates. That last sentence really summarized the theme of the chapter for me, I see it as saying something like even when you know almost everything about the craft (mastery) you still don’t know if this is the best way to get things done and that is something you have to investigate and try to improve on.

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

Thoughts on “The White Belt” apprenticeship pattern

The White Belt pattern arises out of an issue I’ve encountered — I’ve learned one language fairly well and have some practice with others that follow similar paradigms, but have found it to be more challenging to learn new things.  Tools, skills, and languages that are different from what I know don’t come as naturally as it seems they should.

This apprenticeship pattern seeks to solve that problem through a mindstate and a more practical approach.  It teaches the mindset of a willingness to feel like a beginner again, to fail and maybe look foolish in order to adopt a childlike ability to absorb knowledge.  More practically, it suggests a learning strategy: adapt a simple, known software project from one language to another, using the paradigms of the new language to their fullest rather than trying to write “Fortran in any language”.

As I said before, I have notice that I struggle more and more to acquire new skills.  Whether that’s environment setup, picking up new languages, or adapting to a different set of tools it seems to get harder as I learn more.  That doesn’t bode well for my mental plasticity, and this pattern provides a useful solution.

The most useful aspect of the pattern, for me, are what the authors calls the mindset of not knowing.  Of willingness to ask questions, start from the beginning (whether that’s following tutorials that feel beneath me, or finding help elsewhere).  Of taking a harder road to learn things right and come up with a better and more nuanced solution rather than patching together something that’s familiar and comforting.  This speaks to something I learned in a high school gym class: we learn and grow the best and most successfully just a bit outside of our comfort zones.  I need to push myself into the “learning zone”.

The action advice is also something that I can take away and use moving forward.  While I don’t have a lot of time now, I am interested in refactoring old projects into new languages as a learning exercise, to blend something that I know well already with something brand-new.

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

Apprenticeship Patterns – Concrete Skills

A pattern that peaked my interest in Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman[AP] by Dave Hoover and Adewale Oshineye was “Concrete Skills”. In short, it discusses how it is important to have a basic set of “concrete skills” as they will be important when going for jobs and gaining the respect/trust of team members [AP]. It also discusses how to acquire these skills [AP]. The reason I was interested is because this is a book for the apprentice. One might think that an apprentice may not have a whole lot of concrete skills. They may have enthusiasm about the subject matter and are probably more that willing to learn, but they may not have the necessary skills. In my opinion, a person is an apprentice because they have to learn these concrete skills before they can go off on their own. There should be no expectation for a new apprentice to know anything other than a few basics of a language or two. If you already have these concrete skills down pat, then why would you still be considered an apprentice?

While I disagree with the expectation that apprentices should have a bunch of these concrete skills (at least that is how I interpreted it), I don’t disagree that concrete skills are very important when going for jobs and getting a new team to accept you. You have to be able to prove that you can do the very basics of the job at a minimum. In other words, you don’t want to walk into a job and be a burden to the team. I think it is understood that there will be a learning curve and someone from the team is going to have to go out of their way to teach the new person how things work at the company, what the project they are working on is all about, etc., but the team shouldn’t have to babysit and guide the person through every task for the next year. Having some concrete skills along with the ability to learn quickly will prevent the babysitting aspect. It will also give the respect of other more veteran team members. It is important for people with more experience than you to be able trust that you can get the job done and respect your work. I just feel that if you are going for an apprenticeship type positions (a.k.a. internships), that the expectations of what you know are significantly lower than if you were going for a full fledged engineering position.

Link to the pattern in the book:

https://www.safaribooksonline.com/library/view/apprenticeship-patterns/9780596806842/ch02s04.html

 

From the blog CS@Worcester – README by Matthew Foley and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns – The Deep End

Summary

The need to grow your skills is a necessary part of being an apprentice. Part of this is getting outside of your comfort zone and trying new and challenging projects. Understanding what your deficiencies are can help. Waiting until you are comfortable is a recipe for accomplishing little. To truly understand what you are capable of, you have to jump into The Deep End.

My Reaction

In Chapter 1 we were warned that some of these points may seem obvious. When I first read through The Deep End​, I believed that this was one of those. But the very next point in the first chapter was that successful people around me were already doing these things. That was the most profound take away from this point was for me. I am struggling to expand my understanding beyond the web centric background from which I come from. My attention could be better directly communicating with those in class who have completed larger projects that me.

I do not believe that this pattern has changed my opinion about my intended profession. In fact, this articulates a gnawing hunch that I couldn’t quite grasp. It motivates me to find ways to expand my understanding and abilities. Just today, I created, signed, and installed a new SSL Certificate for a client which allows them to process credit cards on their site. I believe these are the types of incremental boosts in confidence that jumping in The Deep End may provide. 

I agree with this pattern because it makes obvious sense on the surface yet may be one of the hardest to put into action. I enjoy branching out in class creating applications in Java but find a certain comfort in Drupal web development and its environment. I have done it for years and know it well. But if it is not plateauing, I may be in a bit of a rut. This pattern helped me realize this about myself.

The other part that I agree with involves how you can ask yourself the question regarding your past projects and their scope. You should have the answer to this handy to determine where to go next. This can also help you gauge to measure every project you have ever been a part of. I will try to see how well I am able to do this. 

From the blog Rick W Phillips - CS@Worcester by rickwphillips and used with permission of the author. All other rights reserved by the author.

Mastery as a Lifelong Endeavor

While I think that it is relatively straightforward to begin the software development journey, it is another thing entirely to become a master. Mastery is nearly impossible to measure and may require a lifetime of dedication to the craft to achieve. While these facts may be almost universally applied to any craft, I think that when applied to software development in particular they are especially telling. In Hoover and Oshineye’s Apprenticeship Patterns, they discuss a pattern termed The Long Road. It is this Long Road that is representative of the lifelong journey that is mastering the craft of developing software.

Hoover and Oshineye urge that the true value of mastery lies not in making more money or gaining status and power, but in, “comprehend[ing] and appreciat[ing] the deeper truths of software development.” This focus on the craft rather than on typical indicators of success such as promotions or high salaries is what sets truly great software craftsmen apart from the mediocre. I found it both inspiring and a bit comedic that Hoover and Oshineye included the parts about surpassing legendary software craftsmen such as Donald Knuth or Linus Torvalds. When you think about it, however, such feats do not seem entirely unrealistic considering that anyone truly hoping to become a master software craftsman will likely dedicate over forty years to that end.

I feel that this pattern would likely be offensive to developers who chose computer programming simply because of the abundance of jobs or relatively high starting salaries, not because of a genuine appreciation of the craft. These software developer posers would have no desire to become masters of the craft, and would jump ship at the first opportunity for a promotion or raise. This is also where the lack of knowledge transfer between generations of developers mentioned in the pattern’s introduction originates. If developers are waiting for any opportunity to move on, then the void that they leave is constantly being filled with new developers, leaving few veterans to show them the ropes.

I can certainly appreciate why a promotion to project lead or some executive position would be a tempting opportunity for career advancement. These roles, however, often require giving up the very things that make software development such an exciting and rewarding job to begin with. The feelings of pride and excitement after finally figuring out a difficult piece of a program or passing every test case is something that software craftsmen on their journeys to becoming masters will continually experience.

From the blog CS@Worcester – ~/GeorgeMatthew/etc by gmatthew and used with permission of the author. All other rights reserved by the author.

The Importance of Feedback

I decided to focus on the pattern involving feedback loops this week, because I saw it being referenced in many of the various other patterns throughout the text I browsed. Also, because it seems like to be a good apprentice, having lots of feedback to see what one is doing right or wrong seems like an incredibly important step.

The pattern is called Create Feedback Loops. The idea behind it is incredibly simple, but strong. Make sure to set up mechanisms that will give you concrete feedback on how you are doing. There are many various possibilities, from purely technical such as test-driven development to simply asking others for honest criticism of what you have done.

However, make sure the feedback is examined and the good feedback that can be implemented is taken, not bad advice that can set you back in the disguise of feedback. It is important to have positive feedback that encourages you to keep doing good things, and balancing feedback which discourages bad things.

I have realized the importance of concrete feedback implicitly throughout the years, but having it cemented as the important step it is and being explicitly aware of it, I feel, will make things going forward much easier for me. I have experienced the feeling of being completely lost many times and see how good feedback loops would have prevented many of these instances.

I was nodding my head the entire time reading the section on this pattern. Everything stated made sense and I could relate to. The personal story of Patrick’s situation was something I’ve felt many times in and out of software, where any feedback you get is vague at best and it feels impossible to know where you should head or do. Unfortunately, this was a situation I faced with some courses and professors, where after a discussion or question and answer session, I felt like nothing was clarified or it was even less clarified. These situations sometimes worked and sometimes did not, but I was always left with the sense that I did not learn much.

Going forward, I will attempt to avoid this from happening as much in the future as possible by using the techniques and actions the text suggests.

From the blog CS@Worcester – Fu's Faulty Functions by fymeri and used with permission of the author. All other rights reserved by the author.

CS@Worcester – Fun in Function 2018-01-29 23:40:24

The “Unleash Your Enthusiasm” pattern from Chapter 2 of Apprenticeship Patterns was interesting to me, because I hadn’t previously thought about what an apprentice might be able to add to a team. I didn’t even really consider that there were things an apprentice could add to the team, apart from the promise of future skills acquired during their time as an apprentice. But according to this pattern, the enthusiasm of the beginner software developer is a valuable asset, as it sparks the enthusiasm of the more experienced developers on the team. The authors encourage you not to suppress it in an effort to blend into the status quo, and in fact assert that it’s an apprentice’s duty to bring their enthusiasm to the work. Moreover, apprentices are comparatively blank slates who are more likely to suggest creative new ideas that developers with more entrenched habits wouldn’t think of. These should be shared instead of held back out of fear.

I did disagree a little bit with their statements about unwelcoming environments, which seemed to undermine their overall point. The last thing someone who’s unsure about sharing their excitement needs is to have it suggested that they’ll be secretly looked down on for it. Even in groups that don’t seem hospitable to a newcomer’s enthusiasm, there might be more inconspicuous ways of introducing it. Maybe enthusiasm can be shared with individual team members that seem open to it. The group’s status quo could be slowly altered from more private morale boosts, but even if it isn’t, you’ve still shared your excitement with someone. And maybe that’s a bad idea for reasons that aren’t obvious to me yet, but as an apprentice with no preconceptions, it’s my responsibility to share maybe-bad ideas.

After reading about this pattern, I have no doubt that it will come to mind in situations where I feel self-conscious about my enthusiasm and suggestions. I’ll have the ability to recognize now that it’s one of the few commodities I can offer my teammates, and that it won’t last forever, so I ought to use it while I can instead of restraining myself for the sake of pride.

From the blog CS@Worcester – Fun in Function by funinfunction and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Study The Classics

In this post, I will be covering the “Study The Classics” pattern from chapter six. I chose this pattern because it’s title seemed interesting. This pattern is contained within the chapter that focuses on individuals who are not necessarily motivated by learning for a grade, but those who are motivated by knowledge growth. So, this… Continue reading Apprenticeship Patterns: Study The Classics

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