“Nurture Your Passion”

Passion is the devotion we invest in of our interest, could be a hobby, sport, or even a profession. Upon reading the book “Apprenticeship Patterns”. There are multiple chapters that are divided up into 35 patterns to give a breakdown of the broad idea of being a craftsman. For example, I have read chapter 3 “Walking the Long Road”, towards the pattern of “Nurture your Passion”. This pattern entails about keeping a strong leveled mentality. Going into our career field as a software developer which the environment would cause an impact on one’s passion. This pattern gives us an idea on how to tackle this situation. 

After understanding the purpose of this pattern, I saw it made sense to find multiple ways to help keep positive during workflow. The section of drawing your map caught my attention because whenever we have a certain goal, dreams, and needs it is separated out from our work goals, dreams, and needs. Two different lives which you try to maintain but eventually it outweighs each other which conflicts you. Personally, speaking we would rather just be selfish and accomplish our own goals and dreams. We are only human. But at the same time, we do not want it to conflict our mindsets when it comes to our profession.

For the type of action, they would want to conduct to keep our passion in check was to write up a list to control a conversation.  It is true you must keep a cool mind and keep your mind positive. But there will be days where things will not work out. For example, what if you had a bad day, the only it will do is put you in a funk for whatever reason It may be. Work related. Personal related. There are many factors you don’t have control like an environment or said workflow. 

I believe that I can take these steps but not all of them. I do agree that you must absolutely make sure the passion is there and do however to protect it because it what makes us motivated to stay concentrated. People are different and should be able to nurture their passion differently. Composing a list can help but nobody would like to compose one before work daily, that can be taxing. Sometimes you must be selfish, such as leaving work while the team are staying late. Just playing it by ear on a daily as it can shift constantly. A road we are set and take the necessary actions. 

From the blog cs@worcester – Dahwal Dev by Dahwal Charles and used with permission of the author. All other rights reserved by the author.

Apprenticeship pattern: The Long Road

For this week, I decided to read on chapter 3, “The Long Road” which talks about the reality of software and the reasons that should be behind it. Many people probably have their own vision of computer science, and most of them are about getting the highest-paying job, just like the chapter describes it.

One thing that we need to understand with technology is that it evolves all the time and changes. We need to understand that the more technology constantly changes, the more our knowledge needs to be increased and developed. Technology/computer science is about adaptation, change, learning all the time because it will never stop improving and increasing, so should be our brains.

When the author says, “You should be prepared for the length of this journey”, it means that we should always keep in mind that as software developer, the expectation of working, learning everyday should be part of us. That is something that I learned while being a computer science major; that it’s an everyday school even for those who are done and those who are still in schools. When we aspire to become a master software craftsman, we need to understand the work taht is behind it and the devotion, dedication and time we need to invest in them. We need to value long-term growth opportunities and be open to new knowledge because that will be the only way to become better at what we do and improve the skills we already have and also, gain new ones. It’s a lot of work and will take time, but at the end, it’s our reward from working hard and giving everything we could to become great software developer. Success is part of it, and all the benefits taht come with the hard work, btu we should not think of them as the main motivation as apprentice.

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Week 8: The Long Road

For this week’s pattern, I decided to read ‘The Long Road’ from Chapter 3: Walking the Long Road. The context of this pattern is that today’s society values quick success and overnight celebrities more than long term goals and success. Due to this, software developers are much different compared to veteran software developers and make the same mistakes they had made when they were inexperienced software developers. The problem of this pattern is that I, the reader, aspire to be a master software craftsman but my aspiration conflicts with what people expect from me, quick success. My guts tell me to take the highest paying job and first promotion I’m given and ignore slowly building up my skills. I thought this was pretty spot on of how society is today. Social media makes it so anyone can become an overnight celebrity which is probably one of the root causes as to why society is this way. Too much do we value quick cash and success, some people even expect it which is weird considering how hard it is to become an overnight celebrity. People need to take a step back and learn to have a long term goal and work towards your success instead of trying to get rich quick.

As for the solution of this pattern, it was basically the same as I wrote above. I should accept that I may be considered weird for thinking long term but I should accept it. I should also keep focusing on my long term goal, which is to become a software craftsman. By following the long term goal of a software craftsman, I’m able to become more skilled at learning, problem solving, and developing strong relationships with my customers. This is a good thing because, as mentioned before, people are too focused on getting rich quick and not focusing on building themselves up. By sticking to this, I won’t get rich quick like some of these people but I will be much more experienced, having built myself up long term and sticking to a goal. This is a long journey I’m not ready for but this will help me much more later in my life.

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

Concrete Skills

In approximately 6 weeks, I will become a new graduate student, and as I have not yet found an entry position for any company, it seems like I have no choice but to take any opportunity which comes first. Looking for a company makes me doubt that I am not good enough to qualify for any position and the waiting period is a bit frustrating and annoying.

An infamous reason that I heard from my friends is because I needed employers to sponsor me working authorization due to my international status. I was told that if employers see that option is on, the candidate’s document will immediately be excluded. Somewhat unfair but I will have a chance to verify it myself after earning myself working authorization and now I can be treated fairly by the applicant tracking system.

Besides, I think I made some mistakes in creating my resume initially that I did not include enough ability to show I am a good fit for the position. It is understandable that companies will not risk hiring someone who may not be able to directly contribute to the team’s workloads, even automate some simple manual tasks. Since my resume back then was poorly written, I failed to advertise myself to get the hiring manager’s intention.

Luckily, my action over the problem was kind of similar to what I read from the book, by collecting CVs from different people from the Internet and by hearing some tips and tricks from my friends on how to make my CVs better, I was able to rewrite my resume and checked it with different trusted ATS sites. Furthermore, my understanding on the subject improved considerably since then, so I can add more properties to the CVs. Comparing my initial CVs with my current one, it seems like I am now ready to reapply for every suitable position.

In conclusion, it could be tough getting to my first job, but as I started to be hired, it will be easier by then. Besides, I learned that I should put more preparation in my CVs, make a section to list every concrete skill that I have and related to the specified projects in the CVs.

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

Practice, practice, practice

The people we know as masters don’t devote themselves to their particular skill just to get better at it. The truth is, they love to practice—and because of this they do get better. And then to complete the circle, the better they get the more they enjoy performing the basic moves over and over again.

—George Leonard, Mastery

The pattern I will be talking about in this blog post from the Apprenticeship Patterns book is the “Practice, practice, practice” pattern. What we can understand from the title of this pattern, is that practice is the solution to learning things in general and is the only way that can make things easier.

As George Leonard has described in this pattern, based on context to develop concrete skills in new areas, we will try our best to get better at the things we do. I totally agree with this context of trying to develop our skills. We always need to practice new things and not only the thing we have known better. It won’t help us for sure.

There is an expression in English that says: practice makes perfect. This expression is used for encouraging someone to continue to do something many times, in a way that the person will learn to do it really well. Specifically, this phrase means that if we practice something enough, eventually we will be able to do it perfectly. But George doesn’t agree at this point. He thinks that in fact, practice makes permanent. The only reason he says that, is because we need to choose the right thing to practice every day. And this thing, according to him, is the most important skill than repeating practice. I totally agree with him at this point. When it comes to practice, we have to know what we are doing and learn it in a perfect way. And then we need to try a new exercise to solve and then practice it. In this way, we can learn new things and at the same time, we can be able to solve whatever problem we might face.

That said, when I first started to work on programming I needed some time to fit in and learn new things. It was some hard and at the same time, it was slow and something that looked so difficult to be comfortable with.  But the good thing was that my school was a post-secondary and was based on practice. I did two years in a rowing practice and then we had a theory part. This was really helpful for us as new programmers. By practice, we learned a lot. And here I am after some years, practicing again for new programs and learning every day a new thing that can be useful in the future.

From the blog CS@worcester – Xhulja's Blogs by xmurati and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Chapter 2

Confront Your Ignorance

This pattern specifically covers an area of your skill-set or knowledge that you are not well-versed in. It challenges you to take the thing you are ignorant of that is relevant to your work or perhaps relevant to future work and invest your time to master it. The roundabout way of doing so is, as it describes, to pick the skill-set or technique and fill those gaps.

Seems simple enough but I felt as if this pattern is missing a bit of useful advice. Your personal growth when confronting your ignorance is more than organizational as the actions describes. It’s a matter of personal reflection and recognition. It’s definitely easier to say, “hey I know nothing about network communication”, and harder to recognize your own competency in network communication. The pattern does cover a bit of this, but it seems to focus far more in directly confronting easier problems.

I picked this specific pattern as it directly impacted how I worked during this semester’s sprints. In specific I applied this pattern unknowingly when I was thinking about working on a specific issue that related to using html. I have seen html code and references to it plenty of times during my college career but have never really used it before. I also overhead fellow classmates speak about it on rare occasions and mention building a custom resume styled website using html and other tools. I have had plenty of introductions and chances to learn something that is common in computer science, yet I have never taken the chance to learn it. At the start of the first sprint, I finally confronted my own ignorance around html and put myself into a situation where I would have to learn it in order to complete the issue. While I could have done this at any time it seemed prudent to place myself in a position to succeed at and implement to help motivate me to fill my gap in knowledge. This is why I felt like this pattern should describe learning how to identify your weaknesses a bit more as just knowing your weakness is quite different as confronting it is. One is merely a slight acknowledgement and the other lets you learn how to continually find your gaps.

From the blog CS@Worcester – A Boolean Not An Or by Julion DeVincentis and used with permission of the author. All other rights reserved by the author.

Sprint restrospective #2

For this second sprint, we did have good communication with my team, and also we had progressed a lot in our organization. We came up with new techniques to work on the project, divide tasks, and also we were meeting every week on Thursdays and Saturdays to talk about what we have done so far, what needs to get done before the next class, what needs more help and support from the other teammates. I personally took a lot of time trying to find a solution on how to make Keycloak work on my computer because I had a lot of issues with that. All my teammates have been able to make it work on their computers, but mine was still causing issues. So, because of that, I did not spend too much time on the rest of the tasks like working on Docker for example, which made it hard for me to complete that issue before our sprint review. One thing that I noticed during our second sprint, is the fact that we were all one when it came to knowing what to do and were always available to help one another whenever someone is stuck or is having difficulties doing part of the project. After having my Keycloak running, then I started focusing on the other issues I had to work on.

So, the issues that I assigned to myself were first to make Keycloak run, but also to create basic Kubernetes/ Docker Container with Keycloak, deploying Keycloak on AWS Kubernetes.

I got Keycloak working on my computer after having George help me to figure out the problem. Once it started working, I also tried to create a docker container with Keycloak and see what it will do. I am still working on this issue, but there have been improvements compared to the last class. Also did some research on how to deploy Keycloak on AWS Kubernetes and put both under the status done because there was nothing else left to do with those issues. But since I am still working on the Docker container issue, I moved it back to the product backlog and include it in the next Sprint planning on Monday. I also did some research on RabbitMQ and how to deploy it on Docker/Kubernetes. It’s not really part of our project but I thought it was necessary because we were going to work with another team that will actually need Kubernetes and RabbitMQ. I did not put too much of my time into this issue but I did find some good links.

As an individual, I think this sprint two went way much better than sprint one. For the first one, I was still getting familiar with the project, still not close to my teammates and I was not contributing at all (creating issues, writing comments, fixing issues,…). In this second sprint, I actually worked on what I did wrong on the first one and improved it for the second one. There was more communication with the team, and I was more involved (sharing ideas with others, creating issues to help go forward with the project,…) and that was just very helpful for me and my team.

I still need to improve some things like being more active on GitLab, posting important information, writing/responding to comments, making changes/and fixing issues. It is very helpful to have a person in the team that always make sure that we are all on the same page and that we’re all getting closer to put goal. Mike has been a great help for the team when it comes to making sure that we need to get things done, issues, and what needs to go where (sprint backlog, in progress, needs review,…). I am also planning on being more vocal in class and sharing more opinions and ideas to help the team. I am looking forward to the next Sprint on Monday and seeing how it goes.

Links to the GitLab issues that I worked on:

https://gitlab.com/LibreFoodPantry/common-services/identity-and-access-management-system/general/-/issues/15

https://gitlab.com/LibreFoodPantry/common-services/identity-and-access-management-system/general/-/issues/24

https://gitlab.com/LibreFoodPantry/common-services/identity-and-access-management-system/general/-/issues/5

RabbitMQ links:

https://phoenixnap.com/kb/install-and-configure-rabbitmq-on-kubernetes#:~:text=Install%20RabbitMQ%20on%20Kubernetes%20With%20Helm%20successfully%20installed,git%20repository%3A%20helm%20install%20mu-rabbit%20stable%2Frabbitmq%20–namespace%20rabbit

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Learn How You Fail

This apprenticeship pattern talks about how software developers should learn about how they fail. It specifically discusses how apprentices should seek to identify the ways in which they tend to fail and attempt to resolve those that they think are worth fixing. It should be noted that this apprenticeship pattern is not about dwelling on past mistakes nor is about seeking perfection. Rather, the goal is to get a better understanding of yourself and your behaviors, habits, patterns, and conditions that lead you down the path of failure. With the knowledge gained of yourself, you will have an awareness of your boundaries and limitations. This awareness could also help you make conscious decisions about your actions, goals, and career as well as temper the tendency towards idealism.

By becoming conscious of the things that lead you to failure, you permit yourself the choice between working to fix them or cutting your losses. It is important to accept that there will some things that you are either not good at or simply require you to invest too much time and effort to make a small improvement. This will feed into your accurate self-assessment, but it also allows you to set realistic limitations on your goals. It is impossible to be good at everything, and accepting your limitations is important because it forces you to consciously acknowledge distractions and focus on your goals.

I personally think that learning how you fail is an incredibly valuable skill to gain. Failure is inevitable, and everybody at some point or another is going to experience it. If somebody does not experience failure, then that means they either have not pushed their abilities to their limits or they have learned a way to overlook their mistakes. Learning to recognize your failures, what led you to fail, as well as what you can learn from your mistakes is all vital to growth. It also helps software developer apprentices like myself have the ability to make better career decisions when drawing career maps for ourselves because learning how we fail allows us to be aware of our limitations and boundaries.

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

Craftsmanship Log #5 – Learning how I fail

               I mentioned in a previous post that, essentially, failure is as much an important factor of the learning process, at least for those who use the mistakes they make as an opportunity to reflect and properly understand the new knowledge that they may have gained. This means that our learning process has helped us, in a way, adapt our way that we approach problem solving so that we may avoid falling into any pitfalls depending on what we are needed to work on or properly utilize any techniques that we may have picked up for the right situation. However, no matter how diligent we are in our learning, we all have certain strengths and weaknesses that play a major role in each individual apprentice’s learning process. This situation is elaborated in the pattern titled “Learn how you fail”.

               Now, it is important to understand what is really means to “fail” in this case. This patter is not about an apprentice being unsuccessful in their craft and giving up without putting the proper amount of work to improve. Rather, it is about an apprentice’s acknowledgment of where their weaknesses related to their craft lie, which weaknesses does one feel they are worth working towards mending, as well as how to approach their craft in such ways that their weaknesses do not interfere. When one needs to learn how to fail, what they are really learning is developing the self-awareness that is needed to further hone their craft. While being an expert on a specific concept may be convenient, turning into a one-trick pony because one is complacent in what they are good at and do not feel like taking the risks necessary to improve their craft will do an apprentice more harm than good in the long run. An example from my own experience (though not CompSci related) that comes to mind is from my job as a tutor; while I am familiar with all the mathematics courses I am expected to know, I am aware of my weaknesses in the way I tend to communicate certain concepts to others. Through experience, I learned how exactly that weakness manifested so that I would make sure to change the way I would communicate my knowledge to others.

               Though gauging how far we have progressed in our learning process based on the number of our successes may help us in building up confidence to continue honing our craft, it is important to acknowledge and admit our weaknesses, as well as knowing which weaknesses are worth improving or avoiding provided we take the necessary risks.  

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

Apprenticeship Patterns: Breakable Toys

The breakable toys design pattern proposes a solution to working in an environment that does not welcome failure. Since failure is such a huge part of the learning process, it is important to create a private space outside of work where failure will not damage anything. Hoover and Oshineye recomend building a simple system that is relevant to your work and easy to build upon. For example, you could build your own wiki and use it to learn HTTP, databases, and web design. You should enjoy the thing you are building so that you are motivated to keep building and breaking it.

I think this design pattern is really interesting. I can see how it would be useful to have a private project to mess around with and not have to worry about breaking it. This seems like a very good way to build up your confidence in an area while also being able to experiment with new skillsets. I also think it is useful to build a project you are personally interested in. If you are interested in the project you are using to learn, you are more likely to keep experimenting with it.

I probably will wind up adopting this design pattern once I enter my professional career. I like the idea of having a private project to experiment with; it would be nice to have the chance to get more comfortable with concepts I’m less familiar with in an environment where failure has few consequences. I am specifically interested in the example the book mentions of creating breakable games. Especially if it’s a project I’m interested in and enjoy working on, I think it would be easy to keep myself interested in working on it.

I do disagree with this being the solution to a work environment that doesn’t allow for failure. I think any work environment should be able to tolerate failure; if your work expects you to succeed all the time, you should not be working there. Rather than taking on extra work in an effort to avoid failure, you should find a healthier work environment.

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.