Category Archives: CS@Worcester Blog

The Deep End

For this week’s blog post, I have decided to talk about the chapter “The Deep End”.  The idea with this chapter is that you a software developer, feel as though you have hit a rut with your learning. To be able to feel confident you need to grow your skills, your confidence, and your portfolio of successful work. You feel the need to challenge yourself with bigger things. This may involve bigger projects, larger teams, more complex tasks, new and business domains, or new places. The solution to this problem is to jump into the deep end. The longer you wait and stir with the idea that you are in a rut the longer you will be in that rut. If an opportunity comes up when you can take a challenging job you should take it, most people learn by taking difficult jobs and expand their knowledge from the research it provides. According to Dave H. Hoover & Adewale Oshineye, the authors of the book, they say on this,

“Even though we advocate seeking out the most challenging tasks you are capable of, you still need to remember that if the water level is above your head it means you’re drowning. Even in Enrique’s example, where he was changing his life in a big way, he was still moving to a country where he knew at least one person and could speak the national language. It’s your responsibility to offset the risks of this approach by Finding Mentors and Kindred Spirits who can provide help when you need it” (Dave H. Hoover & Adewale Oshineye)

This means that if a job is too over your head, don’t take it just to prove yourself. If you need try to find a mentor that will help expand your knowledge. I found this chapter to be very interesting. I like how it talked about how if you feel as though you have reached the end, try to grab a more challenging project to expand your knowledge. I liked this because it reminds of being in school and being assigned project that I knew nothing about. By working on them and doing research I found those project to be the most fun to work on. This chapter will definitely be applied while I am out in the field as I will remember that enjoyment from school.

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

The Long Road

You should plan for the long run and not focus on short-term goals. The further out you plan for yourself the better you will be prepared for unexpected challenges. If you want to program for a very long time, then you’ll be more skilled than people who are newly coming into the field and this will benefit you. It is important that being a master at the craft is the goal and not wealth or another position. It is important to stay motivated to program and not be distracted by nonessential things.

I find it interesting that it’s possible to get distracted over time while you’re at your job. I think it makes sense that over time you lose focus of the goal. It’s easy to be tempted by money to find a different job and stop programming. I think it was a good reminder to stay focused on your passion for becoming a master of the craft. Mastering the Long Road means balancing your work life and goals to meet a long-term desire for programming.

This pattern will help me focus on keeping my motivation for programming. It’s important to have an outlook of what you want in the future rather than just focusing day-to-day. Focusing on becoming a master at programming will also make money. But if you just focus on making money then you might not become a master. Someone motivated by money is not going to have the desire to learn to program. I personally have encountered this with friends who have software engineering jobs. They dislike their job and are only there for the money. They’re always looking for different opportunities and never spend time learning to program, they spend time trying to figure out how to get a different job.

I do not have any disagreement about what is discussed in this pattern. I think it is essential to stay motivated on the task of learning programming and not be distracted by other less important motivations. I think it is possible to have the motivation to become a project manager or a CIO while also maintaining your passion for programming. However, I think this pattern is correct in that the ultimate motivation should be about programming and nothing else.

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

The Deep End Pattern

For this week’s apprenticeship pattern, I did a reading on “The Deep End”. The Deep End is all about growing your skills, confidence, and your portfolio. At times you may feel as if you need to challenge yourself with bigger things such as projects or complex tasks, etc. This pattern tells you to literally jump in the deep end. For example, if you were offered a high profile job, then grasp it with both hands and take it on a ride. However, this does impose some risks because you could fail. Even if failing does happen, and be prepared if it does, recovering from a failure will opens many doors that those who are scared to take risks will never see.

My initial reaction after reading this pattern is that I can relate a lot with what this pattern has to say. I am constantly applying to jobs and some of them have requirements that seem to be out of reach with my portfolio that I have built up. Some descriptions of the jobs I see to me, makes me feel like I would have no idea what I would be doing, however I still apply to those jobs because I know I am more than capable of learning and implementing what I learn quickly and with accuracy. The reading was quite interesting and very useful. It is useful because it allows me to feel like I am not alone in these types of situations and its interesting because it talks about the many ways of how to get through it. It ties with other patterns I have talked about and mentions finding a mentor and just being brave and confidence.

The pattern has not changed the way how I view my profession because I know that many job postings will always have some sort of description to make the job sound harder than it is, and even if the job is hard, you can always learn and ask questions. I know that if I fail to get an offer, that means that I am lacking something, and it allows me to know what I need to work on. I am constantly practicing my skills and working on side projects to help myself get a good grip on how each technology work to ensure that I have the proper skill sets to tackle these types of problems when I eventually start my professional career.

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

Confront Your Ignorance Pattern

For this week’s apprenticeship pattern, I did a reading on “Confront Your Ignorance”. Confront Your Ignorance is about how to start the process. What I mean by this is to pick a tool, skill, or technique and use it to fill in the gaps of your knowledge about it. Confront Your Ignorance is overcoming your lack of knowledge in an area and doing your best to learn more about it to become knowledgeable about it. This pattern ties close together with Expose Your Ignorance pattern. However, implementing this pattern is a bit more doable since it is less of a challenge on your pride since it can be done privately. Other solutions besides learning on your own would be to ask your mentors or anyone that you know that may already have the skill and is willing to share what they know.

My initial reaction after reading this pattern is that it is a reflection of what I am currently experiencing. I have mentioned before that I have limited experience in the professional field of software engineering, I am constantly trying to fill in any gaps of knowledge to make me more of an ideal candidate to companies compared to those who have multiple internships under their belt. The reading was quite interesting and very useful. Interesting because I can relate to what it is talking about and useful because it helps me with my current job hunt and figuring out ways to tackle this issue. Even before reading this pattern, I’ve been trying to find ways of attaining skills and knowledge that I haven’t gained before.

The pattern has not changed the way how I view my profession because I know going that transferring from school life to being a professional Software Engineer, there will be a gap of knowledge I won’t have. I know that I am going to be required to research and learn new things in my career. Therefore, I am constantly practicing my skills and working on side projects to help myself get a good grip on how each technology works and how to incorporate it in what I want to do with my professional career.

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

Craft over Art

It is important to create things beyond that what is expected. You should go above and beyond the specifications of the application and create something that will wow the product owner.

I think it’s interesting to look at software development as craftsmanship and what you create as art. I do think that programming is a form of art because you have to use your creativity to make anything that you produce. Being artistic is a good way to look at creating an application, especially one with a user interface because it is what people will be looking at whenever they interact with the software. You want something to look beautiful and appealing just like a piece of artwork. In my opinion, someone would be more likely to use attractive-looking software than one that is unappealing to the eyes. It’s also important to make something that’s easy to navigate because that enhances the user experience.

I typically try to go above and beyond in the project that I’m working on. It is good for personal growth and reflects well on my portfolio. It is nice to be able to show a future client past work and be proud of the artistic design element of what I created. I prefer working on the backend, but I do enjoy creating a nice UI that users enjoy interacting with.

I think it is important to put extra time and effort into the products that you are creating for your clients. However, I think it’s important to not get lost in the details of creating something more than they asked for. Sometimes it’s possible to add features and create things that the client might not want and then you are forced to remove them. There are other times where you might put in extra work, and you were taking time away from yourself for other projects that need attention. Even though it’s good to have just to have the learning experience, I think it’s also important to make sure that projects for clients, that you put in extra effort into, should get some form of acknowledgment.

From the blog CS@Worcester – Jared's Development Blog by Jared Moore 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.

Exposing your Ignorance

For this week’s blog post, I have decided to look at the apprenticeship pattern “Exposing your ignorance”. The idea of this chapter is that you, a software developer, are being paid to know what you are doing. The problem is that you have become unfamiliar with some of the required technologies. This starts to fill you with uncertainty that you are not the correct fit for the job. The solution to this issue is to expose your ignorance. Show the people who are depending on you that the learning process is part of delivering software. Let them see you grow. According to Dave H. Hoover & Adewale Oshineye, the authors of the book, they say on this,

“The most obvious way to expose your ignorance is to ask questions. This is easier said than done, particularly when the person you’re asking has assumed that you already know the answer. Press on! Sure, you could protect your pride and take less direct routes to obtain the required knowledge, but remember that your road to journeyman will be shortened by taking the most direct route available” (Dave H. Hoover & Adewale Oshineye pg. 26)

While this method does expose your ignorance to the other team members, this shows that you can and are willing to learn and grow. This is what make a craftsman, someone is is willing and can learn multiple things, rather than an expert who is advanced only in one aspect. This chapter was a fun one to read. I found that exposing your ignorance was an idea that I didn’t even think about. Personally, I am a person that can clam up very easy and become afraid to ask something, thinking it may sound stupid. After reading this chapter, it has shown me that I can be in a professional setting and its okay to show the team my ignorance. This will tell them that I’m trying to grow and learn more. This chapter has changed the way I think about my actions inside a job context. Now if I am in the field and feel as though I have a stupid question, I know now to ask.

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

Second Sprint Retrospective

Reflection on what worked well and didn’t work well
After having the Sprint Retrospective meeting with my group overall, I would say that the project is progressing very well. The workflow of the group was the same of how everyone worked by themselves and together. Both the frontend and backend development teams were able to make a lot of progress towards the project. Overall, we were able to get everything done besides a few minor things. We didn’t have any real issues in the programming itself. Towards the end, after looking back at what we did, we were able to see how we are able to make it easier to start the servers, which will be part of our next Sprint. From the last Sprint, we made too many branches, but we were able to clean up the branches and really became organized for the second sprint. The backend is pretty much all set besides integrating it with the frontend and possibly cleaning up the code so it may run even smoother.

Reflection on what changes could be made to improve as a team
The team worked pretty well. We still had everyone in their original development team. Those who were on the backend stayed on the backend and the same goes for the frontend. The backend team however started to run out of things to do so we would hop on over to the frontend to see what they may need help with and to give a different perspective. From how the meeting went, everyone was able to communicate any problems they had with one another, and no one was ever afraid to ask questions when they needed help. I mentioned this before but something the team could work better on is being vocal. This Sprint was much better because it seems that everyone was more comfortable with speaking up. During our daily meetings, they were much better because everyone was able to elaborate on what they did instead of “I did this”.

Reflection on what changes could be made to improve as an individual
From my perspective, the sprint went really well. I was able to do a lot more work this Sprint and even learn a little bit about how RabbitMQ works. I will attach the work I did on the project at the end with a description. I also worked alongside colleagues Jared and Vien to clean up the backend. At the same time, we were able to learn some new things and teach each other a little bit. Last Sprint I mentioned how I needed to be more active, and I can say with confidence that’s what I did this Sprint. I don’t think I have much to improve on than learning and improving my programming skills. It was a very successful Sprint in my opinion.  

From the blog CS@Worcester – Michael's Developer Blog by michaelchaau 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.

Sprint 2 Retrospective

For this sprint my focus was to get the frontend and backend talking to each other. This worked well and now they are communicating and sharing data as seen from the commit below. During the sprint we like during the last one was on teams of three, three assigned to the frontend and three assigned to the backend. Like last time this team dynamic worked well as we were able to complete a lot of issues in a timely manner.  Also, I found that the new commit scheme using commitlint made commits much easier to read. Due to the way you must commit a message, it made it so much nicer and easier to read know what type of commit they were sending such as a feature, fix, etc.

During the sprint however I did think that there was an issue with the team dynamic. On the frontend we didn’t have a lot of issues for this sprint. This sprint was mainly to focus on integration and adding files to make commits and other applications work well. For this it was mainly me and Sandesh who were working on this. Brendan did some work as well, but I thought to my self what the best team dynamic as Brendan when he would finish his issue most of the other issues were already assigned. Also, during this sprint, the backend team had their hands full with issues such as rabbitmq and making sure that it integrates with no issues. They managed to get most of the issues done as their team dynamic is structured very well and they all have a passion for working on the backend. Like the last sprint, I think that if the teams changed to 2 and 4 then every group member would have things to work on as the backend team normally has many more issues to work on during a sprint then the frontend team.

Apart from the team dynamic, I found that there were no other things that could be improved as a team. From an individual standpoint, there could be some things that could improve. Like last sprint I am still experiencing issues with too many commits. It has definitely gone down but every once in a while, when I commit work, I sometimes accidentally leave my test objects in the code which if not explained to other group members could confuse them. Due to this, I find myself sending a “fix” commit to remove all these test objects. What can be done to remedy this is to read all my code again before submitting. Like if were taking an exam, double checking my answers would ensure that every test object is removed form the code before any commit is sent through. Apart from that I really enjoyed this sprint and the work that I was submitting.

Commits

Added Commitlint to frontend repository: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/6179634a126b7dadb3e2edb193a87195a9aa6281

Change frontend skema to match backend: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/cc60a90c708823c01d47e705946363d7cf94c274

Make gitlab.ci file for frontend: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/57cca658ba91a8707934a246d31912dc63f8a19d

Frontend docker container with nginx: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/5842bad96d66457b3574bd54d48096e0ad2938d7

Fix container to reload and not crash: https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/59a5599f7d3440f8472c4a5adc4f8abdb7b89e24

Integrate frontend image with backend:  https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfofrontend/-/commit/321de2c87834105dabf1ecdb185cda3e699705d0

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