Category Archives: Week 10

“The Long Road” Apprenticeship Pattern

Summary:

This apprenticeship pattern concerns the long term journey that a programmer / developer will take throughout his or her lifetime. In a society that continuously values decadence, it’s important to find a path that is right for you, no matter how weird or seemingly unusual it may be. As we gain experience as programmers and developers, there will be temptation to mindlessly progress down the path of greater income and short term gain. Instead, this pattern is for those who aspire to progress down a fruitful path in software development, gaining experience in a lifelong career.

What I find most thought provoking about this pattern is the prospect of leaving the field of programming permanently to go down another field of salesmanship or to a high ranking position in a corporation. Software development to me is a very intricate and professional field that requires a lot of research, experience, and experimentation. Someone who progresses far enough into the field only for them to change directions because of their experience seems somewhat confused to me. On the other hand, it at least makes some sense as someone who has a lot of experience in software development can have a lot more skill as a business owner or a salesman in selling software, and recognizing development cycles for a product.

This pattern has indeed somewhat caused me to change my view of my future. I knew that within the software profession there were many different ways that one could go, and that we would need to be experienced with different tools if we needed to create a competent product. I wasn’t sure, however, of the potential of an opportunity arising to shift to a different career

I generally agree with this pattern. The part I agree the most is on the matter of strange roles that one may possibly find himself in in the future. Personally, my work and perspective on planning my future took a drastic turn almost a year ago, where I actively tried to search for a career as a programmer based on the tools that I already knew. Then, I found out that it’s better to learn and gain experience with new things that I don’t know, based on the demands of a job and the industry.

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

Apprenticeship Pattern: The Long Road

This week I decided to take a look at ‘The Long Road’ apprenticeship pattern that covers the expectations and the reality of becoming a software craftsman. The pattern begins by explaining that society expects immediate results without really thinking about the journey. Usually one would aspire to take the highest-paying job and the first promotion as opposed to building up your skills. The pattern encourages you to value learning and long-term growth over salary and leadership positions. Keeping a long term goal in mind allows you to hone your skills as you work towards it. Of course this pattern is not for everyone, the long road is just one of many that a software developer can take on their journey.

Reflecting on what I read in the pattern, it is certainly more realistic to set a long term goal as opposed to trying to go for the high paying jobs immediately. I am definitely guilty of having the desire for overnight success. I agree that the biggest factor for this would be today’s culture and as well as my family’s expectations of me. But when it comes to software craftsmanship, I would like to spend more time accumulating knowledge instead of settling down and potentially stop improving. The only statement that stuck with me was, “Along the way, it is not unlikely that you will take on roles of power and responsibility or find yourself quite wealthy. However, these roles and benefits are not the main motivation of the successful apprentice—they are merely by-products of a lifelong journey.” I would say that I would probably not be ready for an executive job or being a team leader, but I can’t deny that money is one of the bigger motivators when it comes to working. That being said, you always have to start from somewhere, and I have much to learn. This pattern is more so a reminder for me to take the time to improve my skills and success and money will come after.

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

Blog 1: Expose Your Ignorance

This pattern is about shedding light to dark or unknow spaces of a craftsman knowledge. The context and problem given are that the people who are paying you to be a software developer are depending on you to know what you’re doing, and your managers and team members need confidence that you can deliver, but you are unfamiliar with some of the required technologies. The solution suggested is to show the people who are depending on you that the learning process is part of delivering software and to let them see you grow. The book also mentions how hard it is to practice it because it is scientifically proven that the need to appear competent is ingrained in most people. That being said, there is no need to hide an area of ignorance because one of the most important traits that a craftsman can possess is the ability to learn, identifying an area of ignorance and working to reduce it.

I can absolutely relate to the context given in this pattern because it’s quite frankly where I am currently at. As I am navigating working my first “real” jobs, I quickly realized that I do have many zones of ignorance and it is extremely difficult to just lay them out because there is a lot of pressure to deliver what I have been hired for. Reading this has definitely reassured me in knowing that most people feel the same. The pattern suggests asking questions as a way to expose one’s ignorance and I have really found that to be true. Often, I would just go straight to google, stackOverflow or any similar website when I was presented with unfamiliar material or when I didn’t know how to approach a task and I would ask question after I ran out of ways. I have then realized that it should be the other way around because hearing from the employer/client and asking the right questions first made my tasks easier to achieve. I found interesting the emphasis they added on expertise not being the destination but being a by-product of the long road we’re all on. It just means that with time and some practice you get the extra knowledge that make one an expert at something.

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

Expand Your Bandwidth

The Expand Your Bandwidth pattern gives advice that makes suggestions based on how the title sounds, broaden your horizons.

In learning how to traverse the field of software development there are many tools one must learn to become a successful developer. One type of solution will not work for every problem that a developer faces and that’s why it’s important to never stop learning. The problems will never stop changing and that means that sometimes the application in dealing with or recognizing the problem might change too. The authors mention that an apprentice “must develop the discipline and techniques necessary to efficiently absorb new information, as well as to understand it, retain it, and apply it.” Ways to start applying this pattern include signing up for software development newsletters, following “software luminaries” on Twitter, and even taking free courses online.

I aspire to be a better developer everyday and sometimes finding the energy to become better doesn’t exist. These moments are the most crucial in terms of my own development. I remember being a part of a mailing group where you would pledge to setting aside a dedicated 15 minutes to learning something new in the software development field or use the time trying to write a part of a program. During those 15 minutes your attention should be undivided, and you should be hyper focused on the thing that you are working on.

I agree with the sentiments of this pattern. Being able to “to be able” in this field comes with a lot of knowledge that needs to be drawn upon. Even if you are not knowledgeable about something you should be able to have the skills to know where to look to find information related to problems you are trying to solve. Once the fountain of information has been located, being able to consume it and properly nourish one’s mind is also a skill that one must obtain. Just knowing where to look is not enough. One thing the authors do mention that I may have overlooked is knowing when to stop expanding your bandwidth. This is really important because if you spend all your time trying to learn everything it will actually have a negative impact on your everyday life, in terms of work and possibly even family. This is why I think the 15 minutes a day example is a good starting point to figure out what kind of balance you need to “stay frosty”.

From the blog CS@Worcester – You have reached the upper bound by cloudtech360 and used with permission of the author. All other rights reserved by the author.

Confront Your Ignorance

For this week’s other blog post, I have decided to look at the chapter “Confront your ignorance”. This is somewhat a continuation of the previous chapter “Expose your ignorance”. The idea of this chapter is that you, a software developer, have found gaps in your skillset, gaps that are relevant to your daily work. These gaps include tools and techniques that you need to learn. However, you don’t know where to begin and it is already expected that you know these things. Unlike “exposing your ignorance”, the solution here is to not start asking questions to try and close this gap. The idea of this chapter is to divide and conquer what you need to learn by picking one skill, tool, or technique and activity fill those gaps. However, like the other chapter, can you actively close this gap by finding a mentor in the workplace who will teach you this. According to Dave H. Hoover & Adewale Oshineye, the authors of the book, they say on this,

“This pattern is closely tied to Expose Your Ignorance, but implementing it is less of a challenge to your pride because it can be done in private, without anyone else ever finding out the things you did not know. However, as an apprentice with aspirations to mastery, you need to be willing to Expose Your Ignorance as well. Using this pattern in isolation (that is, confronting your ignorance without exposing it) runs the risk of encouraging a culture where failure and learning are unacceptable because everybody does their learning in secret.” (Dave H. Hoover & Adewale Oshineye Pg. 29)

After reading this chapter, it has changed slightly the way I will think in a work environment. I liked how this chapter coupled ideas from the previous chapter giving me a more deeper understanding about learning and growing in the workplace. I though it was cool how ideas were continued in this chapter with a different meaning. Now when presented with the issue of my own ignorance, I know now the way to think if this should be something I’m asking question about or learning on my own.

From the blog CS@worcester – Michale Friedrich by mikefriedrich1 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Craft over Art

The craft over art apprenticeship pattern becomes relevant when you are hired to build a solution to a client’s problem. Building this would give you the oppurtunity to try something new, however a standard and stable solution already exists and is readily available. Hoover and Oshineye suggest focusing delivering to the client what they need rather than indulging an interest. It is better to build something functional for a customer over something beautiful, and you should work to balance the desire to create something artistic with the need to create something useful.

I think this apprenticeship pattern is interesting. I think, especially in a professional environment, your priority should be to create something your customer can easily use over something cool. It this pattern could be really useful if used in tandem with the breakable toys pattern I wrote about previously. I don’t think it’s bad to want to do cool and artistic things with your projects. Building something you think is beautiful sounds like a really good way to expiriment and develope your skills. However, if that interest interferes with your ability to deliver functional products to your customer, it may be wise to indulge that interest outside of work.

Reading through this design pattern has helped shape my expectations for my future profession. It highlights for me how focused the industry is on utility. I was not expecting to be able to use work projects as expressions of creativity, and this has confirmed that. I know to keep my personal and professional endeavors separate.

I do disagree a little with the way Hoover and Oshineye discuss creating beautiful works. In sections of this chapter, they talk about wanting artistry in your craft as if it is a bad thing. I agree that you should be able to recognize when it is appropriate to invest time in making a customer’s product beautiful, but I don’t think that urge should be shut down completely. That energy could easily be channeled into a personal project; you shouldn’t stop trying to use your skills to make beautiful things just because it might not benefit your employer.

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

Breakable Toys

The idea of Breakable Toys is that you can only really learn when you are given the ability to fail. When you are working in a real environment, you cannot afford to break anything. This limits how much you can learn, since the best part about messing up is learning from your mistakes. The main suggestion of Breakable Toys is that you should work on your own personal projects where you are able to make mistakes without affecting anything important.

If I’m being completely honest, I don’t like the idea of this pattern. I understand it, I realize why it is a good pattern, but I am not the person to work on programming in my free time. I have done it before, and the personal projects I worked on were fun, but I enjoy doing other things with my time. I enjoy being able to turn off work when I get home, and feeling like I need to continue to work is going to haunt me.

I do realize what this pattern is trying to say though, and I am not against that at all. The pattern says that you should work on something that you enjoy, and it shouldn’t be considered work but more of a hobby. I have been thinking about this ever since I began programming, but I feel like most of my ideas are outside of my skill level. Breakable Toys suggests that you should create a wiki about whatever you want so that it is personal to you, but as of right now I don’t want to do anything.

I am not too worried about the fact that I don’t really work on personal projects; I do when I feel like it. It is great to practice in an environment where you can try experimental things and build things for your own personal use, but I really do not want to feel obligated to do work on my own time. Overall, I think this is a very good pattern which is a hard pill for me to swallow. I know it will be good for me, but I cannot shake the feeling that I feel like I need to work on my own time.

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

Apprenticeship Pattern “Stay in the Trenches”

For this week’s blog post, I decided to write about this section of the textbook because I feel like this is an issue, I can see myself having when I get into the field. If I were to summarize this section in two statements, it would be “don’t let success go to your head”, and “never let someone take you away from something you love”. In this section, the author talks about what we should or should not do when we get a promotion. The author cautions us to be careful and warns us against blindly accepting a promotion because while in our new position we may never have to code, and if we do not practice on our own time, it can be easy to let our coding skill become dull. In addition, the more we move away from programming, the more we become disinterested in programming. This relates to a previous section in the book about nurturing our passion. If we don’t continually nurture our passion, we may lose that passion. As an alternative to the promotion, the author recommends that we work with our employers to find other ways to reward our hard work such as a pay increase or role change so that we can continue coding.

First and foremost, I agree with most of what was said in this section. Where I see myself having an issue later on in life is I feel like I am the type of person who when they receive a promotion will blindly accept the promotion and not think too much about the implications or effects until it is too late. In which case, I can also see myself having the problem of not being motivated enough to continue practicing programming during my own time and let my skills dull. So, reading this section made me realize that I probably will want to find some way to keep motivated before I go out there and get a job in the field. I am not sure what it will be or what it may look like just yet, but I have time.

After reading this section, I also thought it was really interesting because throughout this section, it seems like the author was making an emotional appeal to our sense of pleasure and focuses on the idea that a lot of people that go into this field go into it because they enjoy the work. That is why I am going into it but that may not be the case for everyone.

From the blog CS@Worcester – Just a Guy Passing By by Eric Nguyen and used with permission of the author. All other rights reserved by the author.

Draw Your Own Map

Draw your own map is a very interesting pattern. And a pattern that feels relevant to my journey. Draw your own map means that a software apprentice may need to leave his current job, if that employer is not providing the right path. What I like about this pattern is that it forces the apprentice to consider, and write down that path that is best for him. Instead of what his current employer wants.

This pattern feels relevant to me as I am graduating and starting my career in tech. I have worked at a company for a few years, in a mostly non programming role. But I have done some coding work part time. Upon my graduation in the spring, I was offered the oppurtunity to stay at my company, and join the automation department. Where I would be developing software. I was very happy to be offered the role, but I had to draw my own map. I knew that I would be able to grow as an apprentice more effectively at a bigger company, with more resources to train me. So I made the decision to move on.

There are many career paths in tech these days, as there are more oppurtunities that there has ever been. Some people stay in development for their entire career, and many switch to management roles. I don’t think that changing to technical management is a bad thing. But I do agree that each apprentice should draw his own path. Because it can be easy to just follow the road that your employer lays out. But it is much more rewarding and fufilling for an apprentice to draw his own path.

There will be more times in my career where I will change paths. I could change the industry I work in, or the tech stack I use. But the idea behind the pattern is that I should make these decisions for myself. As a developer, I am fortunate to have many possible paths, so it is very important that I consider which path will be the most rewarding to me.

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

The White Belt

The White Belt is a pattern all about expanding your horizons. When learning how to develop software, it is easy to be overly confidant in how experienced you have become. It is easy to become competent at one area of expertise, but that experience should not be translated to other areas. Other areas of expertise have different skills and methods which work best for them, and that may not align with what you already know. You should always take an unexperienced approach when learning new skills, since your previous experiences might interfere with how effectively you learn.

I can personally relate to this one a lot when working on the capstone project. Despite my Java knowledge, I barely knew how to use Docker, API calls, and have never used JavaScript before. Trying to learn JavaScript is difficult since I keep trying to impose my Java habits upon JavaScript. Java and JavaScript are both very similar, but are not the same language.

I like this pattern because it makes you reevaluate your level of expertise. With software development there is so much to learn, and as an apprentice you will never know how little you know. I hope to keep this with me throughout my entire apprenticeship. It is too easy to become comfortable and confidant with your abilities, and I plan to always learn new skills throughout my career.

In my experience, it is scary to learn new things. Once you get comfortable working one way, working any other way is difficulty and confusing. Trying to learn something new is always more difficult than doing what you’re already doing, and staying with what you’re already doing is too easy to do. This is why it is so important to try and learn with an open mind, since trying to force one mindset into another application is not going to work.

Overall I think this is a good pattern but not the most important pattern. It is certainly important, but when working in such a drastically different environment you will almost be forced to work differently. It is definitely important to keep a beginner approach when learning new skills, but I feel as though in most cases it will come naturally. When you are working in a very similar environment, however; it is very important to remember that you are in fact working in a different environment and should work differently as a result.

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