Author Archives: nchabot1

Be the Worst

This apprenticeship pattern discusses the risk of finding yourself the strongest member within your team, and stunting your learning possibilities. To be the worst means to always surround yourself with developers who are stronger than you whenever possible. This can continue to encourage your learning growth, and make you realize you are capable of things you did not know you could achieve. While there are many positive to being the weakest member in a team, there are also many risks. A high performance team will most likely expect you to be able to keep up with them when they are working full blast, and if you do not have the knowledge or skills available to consistently keep up with their pace, you run the risk of getting fired or kicked off the team. There is also the risk of ruining your confidence level. For example, if you were the best developer in your old team or job, and suddenly get thrown into an environment to where you are simply not the best anymore, it can be damaging to your self confidence, which can then decrease motivation and the drive to learn and achieve new things. To accomplish “being the worst”, it is good to make a list of all the developing teams that you are aware of, and rank them based on their skill level. Then identify who is accepting new members who want to advance in their skill set. This process would require looking at different departments than the one you are currently in, as well as different companies. It is always wise to keep your mind open to new opportunities when compiling these lists. It would be a good benefit as well to join mailing lists or other services that will keep you updated on new positions available.

In my experience, I have always felt I was not the strongest developer in no matter what team I found myself in. I always felt that there was at least a single person who way beyond my performance. Instead of letting this drag me down however, I followed closely to what the stronger individual was doing and how they operated in order to learn more and increase my skill. I always did my best to learn on my own when I needed to so I would not drag the team down. I felt that I was not just merely a passenger on the team, and I was bringing valuable information and skills towards the projects we were completing. In some aspects, I actually was the most proficient in a certain task and I did not even realize it, and that could be contributed to having been surround by such strong developers in my past. It is important to keep advancing your learning so that you are able to perform and produce the best quality products for customers, and surrounding yourself with individuals who are a higher skill level than you will increase your chances of becoming the best in your group, restarting the cycle and starting back at looking to become the worst.

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

Sprint 3 Retrospective

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/59 – This issue consisted of fixing up our tests and ensuring they worked.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/52 – We realized that we needed manual calls to be able to make sure that the call would actually be able to work before we tried to create the chai tests.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/54 – Same issue as issue 52

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/62 – Same as issue 59

This sprint was much shorter than most of our other sprints. We only had about a week and a half to actually work on the code within class, so this led us into working on the project outside of class more. This sprint there was also a lot more teamwork between the different groups, as we all were running into the same issues. The GuestInfo group were extremely helpful in helping us finally fix our test-runner docker container, as well as helping us fix some of the glaring issues that were riddling our tests. We did not go back to our old ways in the previous sprint, and we all tackled each issue as a whole group, which allowed all of us to have input and give possible solutions to issues. This worked well as it made the whole group feel like they were involved in the process and no one was left out.

I do not think I can point out anything that we could do better if there were to be another sprint. We all worked together well, we were in constant communication through out the whole sprint. This ensured that no one was lost on any of the issues we were working on, and everyone was on the same page as to what path we were taking to fix an issue.

I assumed my role as scrum master again this sprint, and I felt I did a good job at managing the whole group, communicating with the other teams to be on the same page when working in groups and working on a singular issue together. We did not have a discussion on who was going to be the new scrum master, but everyone just assumed I would take back over as the sprint was very short and we were not working on any new issues, just fixing the ones that we working on from last sprint. One thing that I could have improved upon is my time management skills. In class I felt I did a pretty good job at managing how long it would take to work on certain tasks, but when I am at home those skills seem to vanish. This is probably due to the many distractions while I am at home on my personal computer and my pets. The remedy this I could starting doing most of my outside work at my job, where I am left alone and kind of forced to work on my homework with no distractions.

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

Confronting Your Ignorance

This apprenticeship method is closely related to Expose Your Ignorance, but instead of just simply identifying what you don’t know, you learn those topics. Reading this method expanded my thinking about how to go about learning within a team environment. The article describes that there is a detrimental difference between incorporating your learning in a positive way and a negative way. The negative way can appear in a few different ways, mainly an individual doing all of their learning in private, not sharing their experience with other individuals who also are learning the craft, and the risk of creating niche products and tools that only you are able to use and understand. This could lead to frustration and other issues within your team, and drive the team towards a “fend for yourself” mentality. It can also lead to individuals stagnating in their learning, causing them to not really care when a problem occurs within the code that is someone else’s issue, since they did all their learning in private.

Exposing your ignorance can also appear in positive ways as well, which is the ideal goal. After identifying what areas of knowledge that you didn’t know, one positive method would be to seek out other individuals that also want to learn, and learn together. Applying this to my life, I am luckily in that situation with my team on the Libre Food Pantry project. We all are working on the same issues together, so we are also learning together when we solve the issue. We are all learning chai together and how the docker containers interact with the rest of the project. And when one individual is working on an issue by themselves, they explain how they got to where they are in the code and let everyone see the inner workings of the code. By doing this, the team will all be caught up on how to work on a particular issue, and there won’t be any frustration when a team member is not available for the day.

When I begin my new job, I will already have taken in my list of topics that I want to learn about. The next step would be to seek out other individuals who are also wanting to learn the same topics that I do, and discover them together. Working on “breakable toys” as a team will give everyone the opportunity to use them without hassle. Also seeking out mentors and senior leaders who have experience in whatever topic we are striving to learn will help, as they can show us what they have learned, what mistakes to avoid, and how to effectively apply the knowledge to a team environment. It is important to always keep your team in the loop whenever you are learning a new topic, and to keep learning and seeking out new things to learn.

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

Expose Your Ignorance

This blog posts discusses the issue of individuals at their work place dealing with the expectation that they are an expert in their area of work. In regards to software, this is a difficult issue to tackle, as new innovations and technologies are pushed towards software developers rapidly. It can be hard to catch up to all of the new ways of doing tasks and creating code, new IDEs that the company is enforcing software engineers to use.

Personally, I relate to this topic. Growing up, I was always the “tech guy” in my family, helping my parents and everyone else at family events. This gave me a false sense of confidence when I started college, and I realized how little I knew in the world of software. With this little knowledge though, I still felt I had to maintain my sense of “expertise” when I was with my friends and family. When I was in class however, I was in awe of how much the knowledge of software I did not know. This idea can also apply to the workplace. I would assume that when I do start my new job, I will be with other recently graduated software engineers, and everyone will want to make their mark. Who would want to work with the new grad who didn’t know how to work in a certain language? This way of thinking is created by the idea that in the corporate world, its everyone for themselves.

When I start my new job, I will try to keep the mentality that I can always learn more when I am working on a project. The reading describes a method of writing five things that you don’t know, and keeping them in the open at your workstation so other coworkers can see it, and to always refresh the list. Working on the Libre Food Pantry project, I already have most of my list assembled for that project. The list includes: chai syntax, inner workings of docker containers, and the CI pipeline. This list will obviously change when I transition to a new work environment and new projects, but the idea will stay the same. Keep refreshing the list of new things that you want to know more of, and keep it out in the open and “expose” your ignorance. Its ok to not know everything in a certain field, that what experience does. It helps you develop your skills and become a better developer.

Another solution is to just simply ask questions. The more direct the question, the quicker you’ll find yourself becoming the person that answers those questions. As stated before, it’s difficult to ask questions, especially when you are brand new in a project. You are expected to be able to handle yourself and not rely on anyone else, and if you do rely on anyone else you are just a hinderance to the project.

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

Sprint 1 Retrospective

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/40: The documentation of the project needed to be updated for the Backend

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/41: The directory structure was outdated and needed to be revised for the Backend

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/42: The dev containers needed to be updated to reflect new settings and extensions for the Backend

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/backend/-/issues/43: The pipeline files needed to be adjusted to reflect new standard for the Backend

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/inventorysystem/addinventoryfrontend/-/issues/11: he dev containers needed to be updated to reflect new settings and extensions for the AddInventoryFrontend

Our team worked very well together. We were always in communication on when we needed help and what work we accomplished. The standup meetings were efficient which allowed us to jump straight into the work for the class. Whenever someone needed help with an issue, there was at least one team member available to help out and solve the issue. The way the epics were divided allowed everyone to pick a project that they were comfortable working in, and helping each other out allowed people to delve into different project types.

While everyone was working in a project they felt comfortable in, the way we structured the work didn’t allow us to really experience different project types. I focused on the backend for the entire sprint, so I did not gain much experience in working within any of the front ends or the API. This caused issues when someone asked for help, we didn’t necessarily have all of the answers to help them.

Overall, the team accomplished a lot during the sprint. We completed all of our work before the sprint ended, which gave us time to fix a few major issues we ran into completing the last few issues. For the next sprint, we should focus on spreading out the work through the different projects so that one person doesn’t just work with one project type. The whole team should be experiencing the different projects so that when an individual, even if they are not from our team, should be able to respond and help with the issue. This will also help for future careers, as when we get jobs in the real world we can say that we have experience working in all different types of environments. The different projects also contain different languages which will help with development.

Personally, I put a lot of effort towards my team and towards our work. Next sprint, I should consider spending more time at home doing work so that more of the epic can be completed. I was available most times to respond to my teammates and any other individuals who needed help, but my out of class time could have been spent better working on my own issues and completing them. Now that I am the scrum master for this sprint, I can work on my leadership skills as I did not really show them and use them effectively last sprint. Overall I feel I did well for the sprint, and I learned a lot to be able to enhance this current sprint.

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

Week 2 – Your First Language

In the chapter Emptying the Cup, I chose to write about the apprentice pattern Your First Language. This pattern discusses picking your first language and what practices to develop to enhance your understanding of it. This pattern stood out to me this week because I relate to the fact that I only really know one language, Java. I have dabbled in other languages like Python and Vue for other classes, but a majority of my college education was in Java. I have had worries looking at job applications where the employer requests that the individual that applies has knowledge of different languages such as C++. The section explains however that if an application calls for experience in a different language, then to create something in that language and learn, and build something that you can show off to employers.

The article explains that different languages have tools that can help individuals learn that specific language, such as Ruby having an interactive command-line tool irb. The pattern ensures that there are tools and help available for individuals in case they need a little extra push in learning a new language.

Another important point that the pattern points out is to ask an experienced individual in your life for help when struggling with a new language, but not to become completely dependent on that individual. Working through struggles on your own will ensure that you learn more throughout to process. I have had experiences like that through my education, where I have been stuck on an issue and I needed to lean on my professor to help out. Instead of just giving me the answer however, the professor would ask questions that would help guide me towards the solution. This is an effective mentorship trait.

This pattern really helped comfort me with the worries I had regarding job searching when I graduate. I want to be able to perform at my new job and become a helpful member of the team, and the worries of not being proficient in a certain language holding me back was hindering my confidence to achieve that. But the article reassured me that if a job asks for proficiency in a certain language, it’s just an excuse to mess around and learn in a new environment and adapt.

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

Chapter 1, 2-6 Introductions

The introductions of the chapters gave a really nice and simple outline in the different ways to expand your learning and tools that are available to be a better apprentice. It also defines what it means to be an apprentice, or journeyman or master, and where the origins of the listed apprenticeship patterns originate from. The most useful section I found was the section explaining that without discipline, we would let ourselves be constantly distracted by different things in our environments so that we would avoid work. I felt this applied heavily to myself, as when I do work from home I find myself easily distracted by different things. My cats jump on the desk and want attention or Discord notifications ringing in my ear. After reading the section, I realized that I do not actively attempt to get away from those distractions and will end up spending time giving attention to my cats or responding to my friends on Discord. I need to attempt to disengage from these distractions when I am trying to work so that I can produce quality work, and not something that when I look back upon it I will be disappointed. Another introduction that I found heavily applying to myself was the section regarding self assessments. The reading notes; “You must be willing to let go of your perceived competence and allow yourself to recognize that you have traveled only a short distance on The Long Road.” I feel that I can get lost in my abelites and my limitations, and I will either take on too much work at once or not enough work, or that I will become too confident in myself, not realizing that I have only scratched the surface of a certain topic or skill. Reading this made me realize that I need to constantly be aware of what I can and can’t do, and if that I am ahead of my fellow apprentices that I need to not become over-confident, and maybe help guide them along the way so that they can accomplish certain tasks as well. All of these apprenticeships patterns will create a better teamwork environment.

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

Set Up Task #3

One of the things I found interesting about the LibreFoodPantry’s page was their mission. I found it amazing reading about how they are both helping aspiring computer science individuals while also supporting food pantries with free software to help run the organization. The opportunity to have a community like this available to individuals who want to learn more about computer science is helpful to promote strong networks between individuals and create a support group for individuals who need more advanced help when they become stuck on a topic. In regards to Thea’s Food Pantry, I found the User Stories page to be quite interesting and helpful. Being able to see how the program works, and how a user would navigate through the program helps with the software designer working on the software be able to see the perspective from the user’s point of view, and encourages their thought process to create more features that would help the user. If an individual who was new to computer science and was reading the User Stories page, they would be able to compare what is happening within the user stories and compare that to the code, and be able to see how code can produce different features.

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

Week 10 – Rest API

For this week, I decided to look at freecodecamp.com’s article on REST APIs. We are currently learning how to use and work within REST API environments, so I assumed that this article would just be review, but I have learned some new topics. The article essentially describes what REST API’s are and how they work. Before delving into REST APIs however, the article explains what API’s are. Essentially, they are a middle man between the user and an application regarding information. The article uses a customer at an unknown restaurant for an analogy. The server is the API, and the customer is the user. The user requests a specific item from the menu, or the API’s documentation, and the server brings that request to the kitchen, or the application, and then returns with the user’s order. Rest API’s are specific to web servers only, and use a set of 5 different HTTP functions to perform their operations, GET, PUT, PATCH, DELETE and POST. All of these essentially create, read, delete and update information. These features allow the user to alter and gather information from a web server from a simple application and without having to go into the actual code to do this, after the REST API is set up. The information is then returned to the user in either a json or XML format.

I picked this article due to its simple yet effective explanation of what REST APIs are. As stated before, we are currently working with REST APIs in class, so a lot of this article was review, but this article expanded my way of thinking how REST APIs work. I have used freecodecamp’s articles in the past, and they provide free and simple explanations for complex software topics that are very beginner friendly. The article also included real code examples of how to use some of the requests, along with a different method of using the requests than from what we learned in class by using the fetch API.

This article will help with my work in REST APIs thanks to its clever ideas in how its explained. I have never thought of the restaurant analogy, and I am sure it will help with learning more about REST APIs, and when I am explaining to my friends or family what it is I am doing in school, I can lead them to this article to help their understanding.

https://www.freecodecamp.org/news/what-is-rest-rest-api-definition-for-beginners/

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

Week 9 – GRASP

This week, I decided to look at an article based on the GRASP principles, and found this insightful article from Kamil Grzybek, an experienced designer in the .NET Framework. The GRASP concepts essentially explain how to assign certain responsibilities to different classes within a project. Each principle is derived from a problem, and the principle solves the problem. The first principle, Information Expert, decides which class will take the responsibility for a certain operation. In his example, his Customer class takes the responsibility of compiling an order since it has all the necessary information to do this. The next principle is Creator, which asks the question who creates an object? The answer according to the principle to assign a class to create this object, only if said class is closely related to the object. The next principle Controller decides who is the first object beyond the UI to control a systems operation and delegate information. The fourth and fifth principles are Low Coupling and High Cohesion, which solve the issue of keeping classes independent and to keep them focused on minimal tasks. The sixth principle is Indirection, which solves the issue of avoiding direct coupling between objects. The seventh principle is Polymorphism, which helps control flexibility within the code. The eighth principle, Pure Fabrication, solves the issues of what do to when there is an intermittent task that needs to be completed and avoiding more direct coupling between classes. The final principle, Protected Variants, is argued to be the most important principle. It helps to keep code available to change.

After reading this article, it seems to be a more expanded version of principles and concepts we have learned earlier in the class. Most of the principles within the GRASP lineup are connected to either another set of principles like SOLID, or directly correlate to a specific concept like loose coupling. The main reason I selected this article was the nice use of physical code examples to show off the principles. Throughout the whole article, Kamil used a Customer project that tracked orders. Each concept was show in a different section of the project, which makes it easier to visualize when thinking about how to apply it to code that I create. This article seems more to be for more experienced software designers, which I enjoyed. Learning new concepts with descriptions that are easy to understand can be helpful, but having a more challenging description given to me challenges me to understand the concepts deeper.

To use these principles in the future I must remember a two different ideas.
1.) All aspects of the code need to be individual and loosely related to avoid breaking the code when adding change
2.) It is easier to assign certain tasks to a separate class than to jam pack a single class with all of the functions

Link:http://www.kamilgrzybek.com/design/grasp-explained/

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