Confronting my Ignorance

This pattern is called “Confront Your Ignorance”. The scenario it is meant to address is when a programmer has gaps in their knowledge that interfere with their work. More specifically, they want to master skills and tools, rather than simply be adequate, yet are unsure of the first step towards that goal. Finding the first step or even admitting they need to find the first step is difficult, particularly in environments where there seems to be an expectation to just have already mastered things.

The solution provided is simple. Pick something you need to learn and then learn it. While it sounds simple, it is easier said than done.

An important skill that I have only recently started thinking about, which this pattern touches on, is the ability to know when you’ve learned enough about a subject and that it’s time to turn your attention elsewhere. Without mastering this skill, one might still go out of their way to study something on their own. In the absence of any clear goals, they may simply give up whenever they get sick of it. This is something I used to do a lot, and it led to situations where I had taken time out of my day to learn something, but the knowledge itself was too incomplete to be useful. I wouldn’t go so far as to say that it was wasted time, but I think it could definitely have been better spent.

Different people have different approaches that best suit them for filling the gaps in their knowledge. Something I think is pretty important for me is to figure out what my ideal approach is. I have some ideas. For example, I think I tend to prefer concrete examples, hands-on involvement, and at least a general understanding of how the whole system works. Figuring out what works for me in more specific terms would be a good idea also.

I tend to struggle to seek help from peers. In this pattern, the authors suggest working together to learn things, which is something I think can be fun, productive, and worth trying.

One of the core ideas here, which I will talk about in a future post, is the idea of two extremes when learning, which need to be avoided. In one, ignorance is kept totally private, creating an atmosphere where not being proficient to begin with is extremely discouraged. In the other, no attempt is made to prevent one’s ignorance from interfering with a team’s project. Straddling the line between these is another skill that I haven’t really considered before, but should probably get good at sometime soon.

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

Sprint 1 Retrospective

The first sprint for Software development capstone class was believed to a successful event. Our objective was based upon the epics given to us and broken down to smaller issues to tackle the epics. Our team’s goal is to create new repositories for the backend and API. The nature of this sprint was to make sure the backend and API were setup with their schemas, endpoints, and dev containers to be running toward our next sprint we going to formulate.  Throughout the sprint we did a successful job at setting up the infrastructure and revisiting the previous semester assignment from Software architecture was a major help to us to progress at a steady rate.

There were some issues that our team that we came across our sprint that we struggled and affected our productivity and time management. First, whenever we conduct our standup meetings, we tend to get sidetracked and off topic, one person over speaks another person and bot waited till the end of the meeting thus making us waste our meetings and lose track of time. Second, as we learn more on GitLab and its functions we had many problems with repositories and understanding the merge requests as well as its purpose. The team was stuck upon making the appropriate comments to make a record of what we have discussed during the standup meetings or in general if needed for the next team to look through. Third, making unnecessary repositories, this is what we really struggled with because once we were working the API and we made a repository to accommodate each issue we had, sometimes we accidently work on each other repositories and created a workflow mess and had to revert the commit we made to detangle the situations that occurred.

To be sure we don’t have these issues reoccur, we had made an understand on the major conflicts we have faced to be squashed towards our future sprints. We agreed that for our standup meetings is to be respectful and allow the person to finish speaking their side and wait for all questions till we are finished. To make our own repositories in general to reduce confusion when we are working on our own issues and committing them to the correct repositories. Applying up to date comments in the issues we create and after our discussions to keep a record. 

Other than my team’s performance, there are improvements I want to make towards myself. When I was making one of the schemas for the API repositories, I had trouble on making one myself and had to ask a teammate and do research on a detailed explanation of it and to compose one. An issue like this one could’ve been done in a class period, but it took me two because of it. Backend is a weak point for me and to squash this fear is to resort to the previous classwork and material. As well as do massive amounts of online research to completely understand how to about be implementing the backend which is required for the next two sprints. Another improvement I can make is that for the issues I create are too broad and vague to understand, had some of them revised to be more meaningful. 

Sprint 1 Issues


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

The Pattern Of Enthusiasm

I think an apprentice should portray acts of enthusiasm for whatever they are aspiring to learn. I’ve found myself to have copious amounts of enthusiasm for learning how to program and becoming better at it. The issue I run into is finding ways to express that enthusiasm. I get giddy when I think about becoming a great programmer and I certainly wouldn’t want to rub anyone the wrong way because I came off as too much. My current composure and body language around others suggests that I am complacent, although I’m screaming with impatience on the inside. But I wouldn’t want to come across as apathetic for what I’m doing either. As I’ve been skimming over the different patterns in the Apprenticeship Patterns book, there have been many sections that made me feel like the authors were speaking directly to me and this pattern of enthusiasm is no exception.

The authors seemingly think that while being enthusiastic for your craft is an amazing thing, blindly expressing your enthusiasm can actually hurt an apprentice more than it can help them. With this in mind, it is important to curb your enthusiasm to an extent because you do not want to let the excitement you feel for the craft lessen because you don’t want to feel like a nuisance to others around you. As the authors put it, the excitement one feels is “a precious commodity” and I could not agree more.

The sense of discovery can be extraordinarily exciting. It is probable that individuals in well established teams are used to their routines, making discovery likely, but not exactly exciting. The authors mention that this sort of thing is predictable. Developers are always looking for better ways to getting “painful” work done more efficiently. This sounds more like searching for a sigh of relief rather than completing an exciting endeavor, and having with a hyper-passionate apprentice around probably makes tasks like these more grueling.

Finding a team that encourages your enthusiasm is important. An apprentice should be able to recognize a teams dynamic and see where appropriate to show their enthusiasm. If the team doesn’t seem like they would appreciate their apprentice’s ignorance, the authors recommend finding different strategies to nurture your need so that it does not jeopardize your opportunity to learn. However, if the team is open to bright and new fantasy driven ideas, the apprentice may offer new life to the team and boost morale.

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.

The White Belt

A sample is essentially a way to “attack” a trouble in a recursive way. It is at its strongest when its utilized productively repeatedly. You need to pick out a sample you use so you can talk about it barring repeating.

One sample that I located fascinating and had continually desired to practice however in no way may want to be “Rubbing Elbows”. It essentially talks about discovering any one type of like a mentor. I can align that to me working at Dynamic and having Javier and my coworker with me. Talking about fascinating stuff, studying from them, etc., being an apprentice. I have discovered that being an apprentice can lead you to locate new human beings and new approaches to examine stuff in a better, faster, and smarter way. Being humble and leaving your satisfaction apart is an ought to on this sample as you´ll be possibly getting to know that what you knew is wrong, or you´ll on occasion research from anyone youthful than you, as are my case. But at the end, the intention is to turn out to be a grasp and this may also take time. All this can relate to some other sample known as “The White Belt”, which essentially says that you must hold a beginner’s thinking regardless of your expertise. Wearing the white belt is essential as it will “foster a mindset of recognize and curiosity that opens up unexpected chances and solutions”.

Wearing the White Belt will maximize if you Unleash Your Enthusiasm. This sample talks about having keen human beings studying what they are involved in, in this case software program craftsmanship. It urges to ask the dumb questions. This is now not solely essential for the apprentice however for the group as it will supply curious surroundings stuffed with questions, discussions, etc. Again, this sample is intently intertwined with Expose Your Ignorance. This sample is unsafe in isolation as if you are afraid to make the dumb questions, it will generate a way of life the place mastering and failure are unacceptable.

Overall, if you can break this pattern down into 6 easy steps. We don’t realize it, but we tend to do these habits day to day without knowing:

  • Pattern: The White Belt
  • Context: You have competences in a programming language, have recognition and are competent in it.
  • Problem: Acquiring new skills seems harder. You stopped growing.
  • Solution: Wear your black belt-go back to not knowing anything and start over. Get a not knowing stance, unlearn what you learn, and you will open the door to more knowledge.
  • Action: Unlearn something-pick up a new paradigm, programming language, technology you’re not familiar with.
  • Connected Pattern: Breakable Toys Practice, Practice, Practice Reflect as you work

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

Apprenticeship Pattern: Concrete Skills

This week, I decided to take a look at the “Concrete Skills” apprenticeship pattern in chapter 2. This pattern describes the problem of potentially joining a team, with the expectation that you will learn more than you already know, and the team not wanting to take the risk on someone who may not be able to contribute to the workload. It is important to acquire and develop “concrete skills.” Concrete skills serve as proof of your competence, as it more so demonstrates your ability to apply the knowledge that you have. The pattern suggested that one should always acquire more concrete skills than just the bare minimum required in an interview. It is always beneficial to have examples on hand as proof of what you can offer to the team. The examples of concrete skills provided include writing build files in various languages and having knowledge of popular open-source frameworks. And so, concrete skills help reassure your future teammates that you are capable of contributing without the need for “day care.”

My immediate reaction to the pattern was that I can see myself in this specific situation. The pattern starts with a quote from Pete McBreen, where he states, “Having knowledge is not the same as having the skill and practical ability to apply that knowledge to create software applications.” That quote stuck with me because we can spend years studying a certain topic, but your expertise shows when you apply the knowledge. And reading through this pattern encouraged me to take a deeper look at the concrete skills I have developed thus far.

For the most part, I think this pattern gives some useful tips on how to build an impressive resume and come off as a capable job candidate. The question: “If we hire you today, what can you do on Monday morning that will benefit us?” is something that I will keep in mind since I will need to evaluate myself before even applying for jobs. I do think this pattern gave me a bit more insight into my intended profession. I never really thought about the fact that teams are more likely to hire someone that can be an immediate help rather than someone they would have to teach. So I think this is more encouragement to further acquire concrete skills. Perhaps I will spend more time with frameworks, especially ones we are working with in class such as Vue.

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

The White Belt

The White Belt

This Apprenticeship pattern was about unlearning what you already know in order to learn something new. It is important to do this because, especially with programming languages, what might be a good habit or convention within one language may be inefficient or bad practice within another. I could personally relate to this Apprenticeship pattern a lot because in high school I took an intro to programming class in which we learned the basics of python. I found python to be really confusing at first, but over the course of the school year I became very familiar with it and began to really like the syntax and structure of the language. While this class was very useful and helpful for learning programming, it made it more difficult for me being a computer science major in college.

In college, most of the programming we do is in java. Transitioning from python to java was very difficult for me because they are two very different languages, with different syntax and structure, and different coding conventions. In my experience, it is very difficult to translate from python to java, but somewhat easier to translate from java to python. Although you can translate from java to python, the way of going about things in java is very different from in python, and the direct translation from java to python is likely very inefficient, whereas code written from scratch in python is likely much more efficient in python. This means that in order to learn java, I had to unlearn what I already knew from python. Even things that I felt were general coding practice felt completely different in java than it did in python, which made it really hard to learn java. So, in order to properly learn java, I had to think about the concepts completely independently of similar concepts I knew from python. Even though this was very difficult to do, I find that it actually fortified my understanding of both languages, and helped me to think about them independently of one another.

I couldn’t find anything I disagreed with about this pattern. I think that this is sound advice in general, even outside of software craftsmanship. You can’t be afraid to fail when learning a new skill, because only through failure will you learn to improve. As the Apprenticeship Pattern mentions, this could mean that you will get worse before you get better, as you’d be much less proficient using whatever new skills you’re learning than you were with your old skills. However, the point it’s making is that it’s worth it to see it through, as only then will you expand upon your skillset.

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

Individual Apprenticeship Patterns: Expose your Ignorance

Reading the chapter “Expose your Ignorance”, there were mainly four words that stood out to me: Ignorance, Pretending and Learning ability. This chapter is telling us how important it is in the professional field to embrace our ignorance which is our vulnerability and transform it into our strength by embracing the learning process.

I have been going to school since I was two years old. Even though school is meant to be a place where we all must learn and support each other, exposing our ignorance is not quite something that makes us comfortable. We feel behind everyone and sometimes, asking questions can give a sense of “nonbelonging “or “not having the appropriate level yet” for the class and it is frustrating. This frustration gets worse in the professional world where we are expected to know a lot of things and sometimes, don’t. We are driven to believe that the knowledge of everything is what allows us to keep a job or impress the employers or recruiters.

The other word that stood out to me is “Pretending”. This is actually very interesting because pretending is a temporary mask that sooner or later ends up falling and revealing your true face. However, I wonder if “pretending” can be used by someone to gain time for example, to boost someone’s confidence level and allow the person to learn/ improve while not necessarily exposing his/her ignorance and be uncomfortable.

The third thing that stood out to me was “Learning ability”. I believe that we are never done learning no matter what stage we are in life. Leaning is what keep us going and growing, learning demonstrates a sense of modesty. We put aside what we know, and we learn something new to add to what we knew already. The world is everlastingly growing. New technologies, new improvements, developments happen every day and that should always motivate us to seek more, to want to feed our intellect more on any subject.

In conclusion, I definitely gained confidence about trusting the learning process and not being afraid to expose my ignorance. I personally never worked in my field yet and I anticipate it to be a challenge to get hired in a tech company and meet all the specifications as a freshly graduate. I am planning to be honest with myself and with my team, managers, and clients. That way I am confident to deliver quality and not under deliver because I didn’t have the courage to be myself and allow myself to grow in the process.

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

Sprint Retrospective 1

The AWS deployment project was very surprising to me as it was not among my first choices. But with time, I am very confident with the evolution of the project and what the final product will look like. The god thing about our project is that we are all learning what to do. There is no sense of feeling behind or being ahead of others in the team as we are all new to most areas of the project. I believe this has allowed our team to be very open minded to any idea and to accept each other’s participation without any previous knowledge of what could be wrong or right. I appreciate the team workflow in the project and the trust we had in one another to get things done. The professor has been a great source of reassurance when we had couple of blockages (especially with the AWS) website. I believe that the accesses we have been given so far will be enough to get us started however, having worked with AWS website before, knowing how complex it can be, we might always need something more. Overall, we are a great team, out scrum master did a great job keeping the team together and maintaining respect and work ethics.

Improvements as a team

I have always been skeptical when it comes to working as a team. The reservations and worries about whether the work will get done, whether everyone will be involved, and the quality of the work reflected on our grades has been inevitable for me in the past. However, in this class, I feel very confident in the way we work as team and the way the professor assists us regularly to make sure we are involved and progressing. During our first sprint, we needed to make a lot of research to familiarize ourselves with the project. We didn’t find the need to meet outside of our stand-up meetings. That resulted in us not really communicating on the discord server, or any other platform outside of the classroom. In the future, as we will get more in depth in our project, I expect to improve this area and communicate more outside class for better planning and understanding among the team.

Improvements as an individual

As an Individual, I believe I did a good job on providing ideas, communicating with the entire team. I believe I specifically played the role of the reflector. The scrum master did a great job, but I was always willing to keep everyone on track when it was necessary. One area I could work on in the future is help improving the efficiency of our stand-up meetings. I noticed that my team is a quiet team which is not necessarily a bad thing. However, more common, and altogether conversations and unified ideas can be a good thing for the development of our team. Another thing I am planning on focusing more on the future is provide more in-depth reports on GitLab of the research we make. Our project is definitely a very interesting one and it would be great to share as many details as possible. The third area of improvement is to merge with the Identity and Access Management System(IAM) team regarding our project. We know for sure that keycloak will be a crucial part in our project. Meeting regularly with the IAM team to work together will make it easier for the two teams to move faster and not slow down each other on other things we could separately work on.

Evidence of GitLab activities

I did add the files in the General repository

https://gitlab.com/LibreFoodPantry/common-services/aws-deployment/general/-/issues/1

I did make research on Keycloak and worked a little bit with the IAM team. Keycloak is an open-source software product to allow single sign-on with Identity and Access Management aimed at modern applications and services. It helps securing applications. It is a reliable tool to help manage users identity and accesses.

https://gitlab.com/LibreFoodPantry/common-services/aws-deployment/general/-/issues/10

I did the Research on the best practices regarding the AWS EKS. Some of the best and important practices are the security, reliability, cluster autoscaling and running containers.

https://gitlab.com/LibreFoodPantry/common-services/aws-deployment/general/-/issues/8

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

The white belt

Today, I decided to read about “The White Belt” in chapter 2 of the Apprenticeship Pattern book. Basically, this chapter talks about how learning a language and becoming good at it can make us feel confident about what we do; until we have to learn another language that comes to challenge us and question our knowledge. Speaking of the white belt, it basically is trying to make us understand that even if the black belt leads and knows the way, the white belt will have no choice but to follow and learn the way.

The solution gives a clear explanation of what is the white belt and how it is important to unlearn what we have learned in the past and start fresh. By learning a first language, we can practice and get familiar with it. It might make us feel like we know everything until we have to learn a second language that comes to question our knowledge and understanding of the first. It does not mean that we do not know the first language that we learned, but we have to combine and sink both languages and approach it with a mind of a beginner. One thing that I learned from computer science, is that we learn every time. We will never acquire the complete knowledge of coding, programming because there will always be improvements to make, new challenges to overcome and surpass.

Jerry Weinberg said: “In order to climb, you must leave the sure footing, letting go of what you already do well and possibly slipping downwards into a ravine. If you never let go of what you already do well, you may continue to make steady progress, but you’ll never get off the plateau.” What I love about this quote is that we need to understand that in programming, getting off our comfort zone (e.g. meaning letting go of that language that we perfectly know and mastered) and possibly slipping downwards into a ravine (meaning taking the risk to try a new language and not be afraid of the challenges, difficulties it may bring) should not scare programmers. It changed my way of thinking and what I learned is that to be a good programmer, we should be ready to face any challenges. A programmer cannot stay and remain in his comfort zone because he is scared of the challenges and difficulties another language might bring. Then, he will never learn and improve his skills, he will continue to make steady progress without going any further.

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.

Sprint 1 – Retrospective.

What worked well

As a team: 

We did a good job reviewing each other’s work. Merge requests were approved pretty quickly and we did a good job jumping in to help as soon as there was an issue.

Most of us did not remember scrum techniques and rules at first. However, we managed to catch up and follow the “rules”. We kept up with standup meetings and updating the scrum board. I also appreciated how every team member effectively reported on their work regardless of its state (in-progress, done, needs review, not-progressing,…)

Personally:

I think I did a good job being the scrum master. I had to brush up on scrum concepts a little bit but after that it went smoothly. I led all the standup meetings and took important notes for the group whenever we discussed our tasks.

As far as the project went, I worked on moving the api to its own repository. It was pretty straightforward. I created the folders and sub-folders and filled them up. I referred to the API repo we used last semester for the Microservices examples. I then added two JSON packages, some documentation and a development container.

What didn’t work well

As a team:

The biggest struggle we had was figuring out meaningful issues for our epics. We started off with not enough issues but then ended up adjusting the weights to reach the appropriate weights. At the end of the sprint, we realized that we actually underestimated the weights for a couple issues because we did a lot of “figuring out”, researching and that took some time that was not reflect in the board of issues.

Personally:

I feel like I could have done a better job looking at issues other than mines. I was so focused on doing the API that I didn’t have the time to look inside backend and the 3 front ends to sort of have an idea of what the others were doing. Consequently, at certain stand-up meetings, I would hear team members talk about specific blocks in the issues, but would have no idea what they were referring to. Another issue I had was with the GitLab pipeline failing in the API inventory. 

Changes to be made

As a team:

As a team, we need to do a better job creating issues. We also need to add more communication, discussion, and recording of decisions taking place under the GitLab issues and epics. We are looking forward to this sprint because we will most likely all work on the backend for a while so there will hopefully be a lot more to communicate on GitLab

Personally:

I will make an effort to look over the issues that are not assigned to me. I will also be a little more prompt to approve merge requests. I barely approved any last sprint and I want to make sure I review some of my teammates’ work because it will help me be in touch with how the project is going.  

Links to some issues:

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/1

Create structure of API Directory

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/12

Split openapi.yaml into paths folder

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/14

Create schema folder and add content from openapi.yaml

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/community/-/issues/64

Add hrefs to API directory

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.