Chapter One

Chapter One of Apprenticeship patters was a very helpful and interesting reading. For the most part I agreed with mostly everything this chapter has talked about. I love the idea that programmers are broken down into three different categories which are the apprentice, the journeyman, and the master. Within these different categories I still believe that I am an apprentice. As an apprentice I aim to keep learning new programming languages and to expand my knowledge for me, myself, and I. So, I am always looking for tutors, “masters”, and any kind of outside sources to help me learn as much as I can. Next stage would be the journeyman. These people are still trying to improve themselves and their knowledge of programming language however they are educated and experienced enough that they can talk to other journeyman and interact with other people. Finally, there are the masters who has reach the point in their lives that they are proficient enough in programming (however still learning because you can always teach an old dog new tricks.) these are the people who become mentors, teachers, project heads. They are the people that the apprentices and journeyman aspire to be and look to for help.

 

There was also a section of the chapter where it talks about the community of practice united and defined by overlapping values. Few of them are things I believe that a lot of new programmers should follow which is “A willingness to experiment and be proven wrong.” This is very important because we should not be afraid to make mistakes. With mistakes comes a learning/teaching experience. This shows you that there are things that you don’t know and that is fine because you are not supposed to know everything. If you are willing to make those risks then that just means that you accepted that you are not the best and is willing to learn from others. I also like the value that talks about “A belief that it is better to share what we know than to create scarcity by hording it.” I honestly think that this is something a lot of people should follow I understand with today’s society money rules the world. However, knowledge should not cost an arm and a leg to get. With education we should be able to get information from others to help each other out and to increase productivity with each other.

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

Software Craftsmanship

I tried to go into the Apprentice Patterns with an open mind, but this was difficult as my preconceived notions of an apprentice craftsman generally aligned with the old timey examples the first chapter described as not being what a software craftsman apprentice would look like.

The first chapter did a good job avoiding my worst expectations for the text, advocating for a return to past apprentice master relationships or some other ridiculous notion. These worries were not at the forefront of my mind, but they were at the back hoping they turned out to be unwarranted. Which they were thankfully.

The focus on being determined, hard working, and eager to learn and advance was definitely expected and aligned with what I believed a good software developer would be like. I agree with the assertion that people are not simply talented and skilled to begin with, it takes work to get there and continued work to maintain the level of skill achieved. Being talented or not is often seen as a binary value that you have or do not, stifling some who believe it is simply out of their grasp. I enjoy the text dissuading this line of thinking.

Being a software craftsman means to be skill centric rather than process centric is an idea that I’ve implicitly come to myself, but never really thought about in terms of consequences. The downsides of a skill centric field is petty obvious when it was stated, but I never considered it before. My eyes have opened somewhat and I feel like I will be seeing careers around me in terms of skill or process centric for some time.

When the text described the roles and differences between apprentices, journeymen, and masters it was about what I expected. It was somewhat vague, but that makes sense given how undefined things can be in the real world. What I found interesting was the mention of how some apprentice patterns would not work for a journeyman and that failure for them and masters cause much more harm than an apprentice’s. Failure is not discouraged for an apprentice, it is seen as a learning experience. So the limiting of options as one gains more responsibilities and failure becomes less acceptable was something I did not consider. Obviously as one gains more responsibility and experience failure should happen much less, but it is interesting to consider if the pressure of not being allowed to fail limits growth or not.

Overall, I am quite excited to keep reading the text. It seems to be geared specifically to people in my situation. Having several patterns that give guidance when I might not have any provides a nice safety net I can fall back on instead of guessing what works.

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.

All About Apprenticeship Patterns

I read through Chapter 1 of Apprenticeship Patterns a few times and really like the approach of seeing software craftsmanship in different levels.  When I think about it I guess that I’ve always thought of software development as either able to do it or not and getting better at it as you practice.  I like the idea of seeing it as being an apprentice, a journeyman, and a master.  It puts software craftsmanship in the same boat as other skills and trades.  It makes it sound like something that is more attainable to more people who are willing to practice at it.  Many times in just the past three and a half years of school when I tell people that I am majoring in computer science quickly say that they could never do that.  The truth is they could if they wanted to and practiced at it.  It is a skill/trade like plumbing or car maintenance.  You may not know anything now, but if you went to school for it or took the time to learn on your own you will grow your toolkit.  Seeing it as three levels is nice and makes it seem like less of a constant climb, it still is because the field is always changing, but when you reach the next level it is a little accomplishment rather than a constant climb with no specific advancement.  As the book says though that the definitions of apprentice, journeyman, and master are not the same as you would find in a dictionary.  For other trades there are unions set up and standards set in place that dictate when someone moves from apprentice to journeyman and journeyman to master.  There is no such set up for software development.  That would be an interesting development in the field if there was a governing body of some type and software developers created a union type set up.  I don’t believe that it will happen though as it is a new skill/trade and not seem the same as a plumber or an electrician.  For software developers it will be a more gradual and seamless transition rather than taking a test or working in the field for a certain number of hours.  As a portfolio grows and more skills are learned a developer will start to either search for a job at a higher level or start taking on more responsibilities at their current company.  Then without realizing they will be in the role of a journeyman and have a few apprentices that they will be around and either intentionally or unintentionally inspiring them and helping to shape their careers.  Then years later after working on many projects and taking leads they will make another gradual transition to become a master of their craft.  These won’t be as pronounced as your more traditional skills and trades.  I don’t think that it will change anytime soon because it is viewed differently than physical trades.

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: Guidance for the Aspiring Software Craftsman

The Introduction to the textbook sets the goals for the book and the targeted audience.

“One of our goals for this book is to inspire the people who love to create software to stay focused on their craft.”

“This book is written entirely for you—not for your boss, not for your team leader, not for your professor.”

What Is Software Craftsmanship?
The book considers software craftsmanship as some overlapping values, listed here are those values with my thoughts on them.

  • Growth Mindset, the belief that you can always improve and find faster, easier ways to do things if you are prepared to work. Failure should be seen as an incentive to change your approach. “Effort is what makes you smart or talented” – Carol Dweck. I think the growth mindset it very important to quality and success and avoiding burn-out.
  • Constantly adapting to constructive criticism and learning to improve areas where you are lacking. This idea is essential to ensuring quality work and keeping up-to-date on the best practices.
  • A desire to be pragmatic rather than dogmatic. This important trade-off allows you to get things done and avoid spending too much time making things “perfect”. This ties in well with YAGNI.
  • A belief that information is better shared than hoarded. Everyone benefits from shared knowledge which is the basis for the idea of Open Source projects. This allows a greater population to improve shared code and learn how things work.
  • Ability and willingness to experiment and not worry about failing, because you are able to learn from the experience.
  • Taking control of and responsibility for our destinies rather than waiting for someone else to give us the answer. I think this is basically saying to take initiative, or try to think differently to solve a problem.
  • Focusing on individuals rather than groups. This book is meant to help you as an individual improve your skills.
  • A commitment to inclusiveness. I think this is a good rule in everyday life but works with being a craftsman.
  • We are skill-centric rather than process-centric. It’s more important to be highly skilled than using the “right” process. I think it boils down to it pays to have the knowledge to use your skills in any situation, not having to rely on a template of tools.
  • Situated Learning, the idea of learning a skill around those using those skills. Working your first job as a software developer would be a good example of this.
  • Based on the introduction, this text appears to have very useful information for someone who wants to improve the quality of their work and what they contribute. The book includes good lessons that can apply to any aspect of life. It stresses the idea of improving skills by being open to learning from others, learn from mistakes, and never stop improving.

    The post Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman appeared first on code friendly.

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

    Apprenticeship Patterns Chapter 1

    “Apprenticeship makes a difference because it instills a lifelong passion to master the craft. It instills a passion for perpetual learning and, in the process, enables the apprentice to become a great developer.” – Pete McBreen

    I do agree with this statement that was at the beginning of the chapter. As an individual, whenever I hear the word “Apprentice”, I always wonder and think about the “Master” because that is who the apprentice learns from. After reading through this chapter, I tried to tie all the concepts back to the title of the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. An apprentice should always try to learn and understand the concepts that the master is trying to teach. Understanding and learning the concepts is one thing. Learning how to implement and use the concepts is another. The techniques that you learn from a master can sometimes, if not most times, be found found in textbooks or they can’t be basically self-taught. Every master can have different styles, which is why a “master” is very valuable and special in a sense. To me, that is an Apprentice and Master relationship. When the apprentice is trying to perfect their craft with the aid of their master, it instills something very special within the apprentice’s work and makes them have the desire to want to learn and create more. This quote by McBreen is very important to me and makes sense to me the most. To relate it to myself, I feel that the Master is the contents of which I am trying to learn, and the Apprentice or Journeyman is myself.

    There is a quote that also sparked my interest because it is a statement that I fully acknowledge. “One of the lessons we’ve learned from the Agile development movement is that just telling people to do things doesn’t create lasting or sustainable change. When the people you’ve advised encounter a situation that isn’t covered by the rules, they’re lost. However, if those same people have imbibed the values that underpin the rules, they can come up with new rules to fit any situation. Our goal here is not simply to hand people a rule book, but to give them the ability to create new practices for new contexts, which in turn drives the discipline of software development forward.” This supports the thought of critical thinking in a sense that thinking outside of the rules in order to create new ones is the foundation of continuing the evolution of software development. If developers encounter a situation that certain rules do not cover and they become lost, software development cannot progress forward.

    As I am currently aspiring to become a future video game developer, I expect that there are going to be new rules that are going to be created constantly. I know that I am going to learn and to develop certain “crafts” to be very efficient in that environment of work because there will be many things to adapt to. As Pete McBreen points out, there are many developers out there today in the field. The important question is are there enough “good” ones? When I head out there in the field, I would want to be recognized as one of those “good” developers.

     

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

    Apprenticeship Patterns Chapter 1

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

    Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman – Chapter 1

    At first, while reading this chapter of Apprenticeship Patterns I was a little skeptical of how software development could be thought of as a “craft” with some kind of software guild made up of apprentices, journeymen and masters. However, after reading the authors’ own definition of what they believe “software craftsmanship” is I started to agree with what they had to say. I actually found their interpretation of apprentices, journeymen and masters, in the context of software craftsmanship, to be pretty interesting. I think that if all developers took on this way of thinking about software development the software engineering community could benefit immensely. By adhering to an apprentice mindset, software development newcomers might be able to avoid making the same mistakes that past generations of software developers have made.

    Another thing I liked about this chapter was the values in which the authors believed every programmer should adopt. I think that adopting these values and committing to the idea that the only way to become a true “master” is through continuous learning though trial and error is the best way to progress your skills and career in the software development field. Among the values laid out by the authors’, I saw a common theme in that they think it is important to be open and transparent when it comes to software development techniques. I feel that competition can sometimes discourage companies and individuals from sharing their ideas and innovations, but this is can be detrimental to the software development community.  If all developers shared their work and development experiences, then software in general could possibly become more reliable and efficient.

    This reading definitely made me change the way I think about software development as a whole. One thing it has made me consider is my overall career goals. The book talks about how one of the most important parts of becoming a better developer is finding a position that provides good mentors rather than finding the position that simply has the highest paying salary. This is something I didn’t really think about before and it has made me realize that if I want to enjoy what I do for the rest of my working days I should definitely try to find a place that encourages learning and provides many opportunities for mentors to give me feedback and ideas. Also, I think this reading will change how I work in the sense that I will look at failure in a new light. Instead of being mad that I can’t get something to work the first try I will remember that even the best developer out there has made countless mistakes to get where they currently are.

    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.

    Thoughts on “Apprenticeship Patterns, Chapter 1”

    In this blog post, I want to go through Hoover and Oshineye’s values of software craftsmanship, and how I can apply them to my work and my development as a developer.  To summarize quickly, they are:

    • Talent derives from effort and practice.
    • Adapt and change.
    • Embrace pragmatism.
    • Share knowledge.
    • Experiment, and be willing to fail.
    • Take control of own destiny.
    • Focus on individuals.
    • Include the best ideas from everyone.
    • Focus on skills over processes.
    • Find like-minded people to learn with and from.

    I don’t necessarily agree that all talent comes from practice and effort, but practice and effort are the cornerstones of ability; talent certainly languishes without use.  I also don’t think that it’s enough to just do my work for classes or my job.  Improvement requires practice on new things and dedication of time outside of the minimum needed to put food on the table.

    Like any machine learning system, we can improve via feedback.  Unfortunately, it’s not always so easy as minimizing a loss function and backpropogating information.  I agree with the authors wholeheartedly on the need to find solutions to my inadequacies.

    Pragmatism is great, but I don’t agree that it’s the end-all, be-all; I do appreciate, however, that it’s more important in the context of apprenticeship than it might be later in my life.  I recognize the tendency within myself to become paralyzed by attempts to force “theoretical purity” or “future perfection” from the start, and then never start at all.  This is something I very much want to change, or at least to recognize when it is useful versus times it gets in the way.

    One of the things I enjoy most about being a part of a learning community is the ability to share what I know, and learn from my peers.  I will miss that after I graduate, so I may try to bring that kind of sharing to wherever I end up next.

    I absolutely agree that progress in any form requires experimentation and failure.  From my experience playing various games, I know that it’s important to take something away from each loss, and also to acknowledge the room for improvement in each win.

    I think that many of Hoover’s and Oshineye’s points follow from taking control of one’s destiny.  I agree that conscious choice and involvement in learning and life are key to the improvement of self.

    I like the idea of a community of like-minded individuals rather than a blind reliance on hierarchy.  In my gaming life, I’ve found that (sometimes somewhat heated) debate is an excellent way to grow myself and to learn.

    Inclusiveness goes hand-in-hand with pragmatism.  If an idea is useful or productive, adopt it.  If a person has value to contribute or simply wishes to share in the learning and information, include them.

    My earlier education was heavily focused on skills over memorization, and that different processes may work better or worse for different individuals.  I agree that it’s important to recognize these things, as well as acknowledge that skill is not always equitable.

    Learning is communual, and this last value of “situated learning” seems to follow naturally from many of the earlier ones.  I want to continue to align myself with like-minded individuals, even if that requires more effort than just showing up to class.

    There is more to unpack in this chapter than what I have covered here, far more than what I could digest and boil down for a single blog post.  I believe that commitment to the values Hoover and Oshineye lay out will help me improve as a software craftsman.

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

    CS-448 First Post

    This is my first post for the dev capstone

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

    Apprenticeship patterns – chapter 1

    On a lay man point of view, craftsman is a person with a defined knowledge of doing something at its very best level. In this case the skills he or she posses and the ability to do well in his trade are very important to his clients. For instance, a building craftsman will be aiming at providing his client with the best and attractive finish building. To some extent, I am beginning to see how wrong I used to think about the term craftsman. If I was asked to define a craftsman without the knowledge after reading this chapter, I would not have think of software as a craft. I will describe craftsman as a highly skilled person who owned a workshop and have people called apprentice who are in the process of acquiring knowledge to enable them set up their own businesses. One may be surprised to see or hear that those practice in the 1900s where apprentices watch and imitate their master still exit. Only a few trades will allow or give the apprentice the chance to learn by doing it themselves. Doing it yourself will enabled you to learn and improve from your mistakes in the past. However, in the perspective of software the term craftsmanship have a deeper meaning attached to it that might affect the meaning. Even though term like craftsman, master, journeyman and apprentice are not new to many, they have difference meaning in difference field of study. In the light of software, many factors have to be taken in consideration; a professional developer who have been earning meet from his work for years will soon realize he or she is yet to undergo an apprenticeship process in his trade. One have to be prepared to learn or work hard for earn credit to his work. In this field, there is bound to be failure as in other trade and as a craftsman, you need to accept those failures as a motivation to improve in your next task rather than seeing them as mere failure or something discouraging. Again, to be successful, one need to be able to adjust to a changing situation and also able to accept criticism as a lesson for improvement.

    besides, apprenticeship in this modern day is quit difference from the past where the apprentice just watch their master work for years and at some point learn by imitating what the master does. As an apprentice, you are given the chance to learn by trying it yourself then using your failures as a routine of mastery and improving your skills. In this modern world, even though an apprentice might be in small teams working under the supervision of the master, the outcome of their apprenticeship is solely their responsibility.

    Also, a journeyman in this contest is a person with a knowledge in between the master and the apprentice and is able to lead the in the absent of the master. The journey man ideas in this chapter are something new to me and I am yet to see it practically.

    Master in the other hand is the person with adequate knowledge of doing all the work of an apprentice or the journeyman and also keeping the trade alive. As a master, you should be very skillful and creative. A master as software craftsman, need to be able to create and share superior skills with his or her apprentice. In the other hand, apprenticeship is a process where new comers in the industry are trying to learn the requirement skills and knowledge that will make them function as developers and to earn living from it. These new comers need someone called the software craftsmen (Masters) or mentor to guide them through this process.

    In conclusion, this chapter has been an interesting one I have read so far in this semester because I have drawn a lot of ideas from it and it will help me to take my destiny upon myself to explore the available resource and my professor as a mentor to achieve the necessary knowledge needed to survive in the software industry.

     

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