Category Archives: CS-448

Apprenticeship Patterns – Unleash your Enthusiasm

In opposition to my personal experience with almost every other pattern, this is one that I very much struggle with. I have enthusiasm for certain things, but I find my motivation and discipline to be very shaky in my average lifestyle. This might have to do with personal mental health struggles and general disposition, and to be fair I’m still young enough to be unfamiliar with a passion I could truly want to pursue.  

To be completely honest, I believe this is the most difficult pattern for me to grapple with. I’ve certainly been involved with different types of projects where I was more enthusiastic compared to my other teammates, but they are few and far between. However, something that I can aspire to learn is the freedom of my enthusiasm as a “responsibility of the apprentice.” I find this line to be profoundly interesting, as I would have originally thought that the more experienced veterans embodied this type of archetype. Upon reflection though, I realize how mistaken I was, as innovators can’t be pigeonholed into time spent in an industry; rather the fresh ideas that emerge from newly aspiring minds are the most important part of the process. Regardless, I’ve learned that despite age or experience, a person who’s passionate about whatever they’re working on has (somewhat) the inherent obligation to innovate in the industry they work in. 

Unfortunately, I’m of the mindset that one should do the bare minimum to pass as a competent employee; I don’t know if this is because I’ve worked enough minimum wage jobs to understand the dynamic, or if I’m a lazy person inherently. Not to say that going above and beyond is a bad thing, but that raising the expectations eventually leads to a standard for most people that is unfair and not an expected level of engagement with the job. 

Anyways, with the last portion of the “Action” section, I see a true position where I’m lacking in my work ethic. I’ve certainly been in the place where I’ve declined to present an idea that may or may not be applicable to the project in question. It’s not that I’m reluctant to share, but more so I’m not inclined to add an argument/idea where it’s not necessarily necessary. I absolutely contribute where I think an idea may be beneficial, but in my experience it’s not worth the hassle to say something that could be thrown out with a disregard to the necessity of the point being made. Regardless, I’m certainly going to take this advice to heart and implement it in the future.

From the blog CS@worcester – Dummies that Code by howbrash and used with permission of the author. All other rights reserved by the author.

Retrospective #3

Final sprint before I lose my maintainer status to the repository, this sprint objective is to clean up our workspace, fix some minor issues which have been around since last sprints, and left the next semester a decent documentation so they will not be confused like us at their first step with this repository.

To begin with this sprint, I started with an issue that I was not able to solve from last sprint, which is registering the backend application with GitLab CI. This issue was a bit painful because after we plugged in RabbitMQ, we had to modify the execution cycle. To be specific, the RabbitMQ server must be up for some seconds before the backend application and I thought that I should figure out a way to use the pipeline to build that RabbitMQ container before the backend.

I actually found out the solution for both the pipeline and the integration when we had a conversation with the Kubernetes team where they told us to have each image in a distinctive container. After that, I attempted a different approach, instead of trying to inject the RabbitMQ to the backend during pipeline, I would only build a standalone server and release it, then, the RabbitMQ container will be defined once again in frontend testing and integration consisting of necessary environment variables which will trigger the backend server properly once it is executed.

However, the server’s execution consistency is still roughed as sometimes RabbitMQ is not detected. Besides, it happens on some computers while others don’t. Specifically, it only runs on a strong computer. Therefore, we changed the assumed time to have RabbitMQ start with an environment variable so we are free to modify the runtime based on hardware.

Last but not least, I created two environments for the backend repository, one for development, one for production. The small difference but undoubtedly critical is the binding and `nodemon` execution. Binding the container to local is not visible without `nodemon` since it will restart the server for every change we made. However, the default `nodemon index.js` is not working properly on Windows operating system after bind while MacOS works like a charm. I Looked around for several days without rushing and I just found out that `nodemon -L index.js` will make it work regardless of the operating system, where `-L` is the legacy flag.

To conclude, I am proud of my team overall because at our in-person retrospective meeting of this sprint, by showing our work, the Professor said that it is almost ready to be released. Back when we began in January, we had a not working server and a vanilla JavaScript frontend, the objective initially was to fix the server and somehow pull the Vue-CLI up as soon as possible; now we have a functional page where guests can register with their information and submit to the database. I learned a lot from this experience, both technical and soft skills, and I am feeling grateful for being given a chance to work in this meaningful project.

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.

Familiar Tools- blog 9

This week, I read a pattern called Familiar Tools. This pattern happens when you feel hesitant to let go of some familiar tools that will soon become obsolete at some point. Through this pattern, I can understand that everything has two sides, even familiar tools are not an exception. As the author said, familiar tools can help you solve problems quickly, easily beat another candidate in an interview or increase your productivity at work. However, if you stick to what you already know and ignore the changing of the world, your career will be in jeopardy. That is because over time, many new tools will emerge and some existing tools will become obsolete and lose their effectiveness. If you cannot throw away a part of your toolbox to discover something new and update your toolbox regularly, then it is like you are wielding a sword to battle in a world where everyone uses guns. There is no way for your existence in that world. Therefore, to solve this problem, besides constantly looking for new tools to update your toolbox, you need to face the challenge of giving up some familiar tools that will soon become obsolete to reclaim space for other new tools .

In my opinion, this pattern is really not difficult to implement. In other words, as an apprentice, I understand that it takes a lot of time to learn and get used to a tool, so letting go of what you are already an expert on can be described as feeling loss. However, I wonder what if I keep a tool that I will no longer need or use in the future? Or what if I use a tool I am familiar with, but it does not help me; on the contrary, all it does is make me feel like every problem is suddenly getting harder and I cannot solve any of them? For myself, those familiar tools have now become obstacles in my long career path. So, I never hesitate to replace outdated tools from my toolbox with new ones. In my opinion, throwing away my familiar tools, it may not be something I can choose, it is something that I have to do to advance my career.

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

The Long Road

The pattern I’m going to look at today goes like this: Our culture is fixated on success to the detriment of true understanding of the work behind it. Consequently, there is pressure to abandon the craft at the first opportunity in favor of chasing success. The authors argue that you should push past that pressure, with the understanding that if you keep at it there’s no one you can’t eventually surpass.

I think the initial point about how our culture values fast, seemingly effortless results is insightful. In my experience, this is a pretty significant hurdle to get over to get good at anything. It can be difficult not to compare yourself to an imagined prodigy out there.

Broadly, I think it’s good to set your own goals, rather than chase illusory culturally-defined ones. I already have my own goals in mind that aren’t exactly things everyone wants, although I have a slightly different outlook than the authors here.

I think the authors, although probably not intentionally, frame things that everyone should expect from full time employment as either incidental and unworthy of consideration, in the case of money, or even a form of failure, in the case of retirement. If it were up to me, I would be content to do any type of work, with honing my software skills as a passion project. I unfortunately need money to live though, and the easiest path towards it is to leverage my interest in technology. The authors seem to view the need to make a living as incidental and irrelevant, but I don’t really think it’s harmful to your skills to not dedicate your whole life and career to honing them.

The authors also have a kind of competitive edge to their idea of personal development, suggesting that through devotion to honing one’s craft it becomes “realistic rather than vain to think about surpassing people like Donald Knuth or Linus Torvalds.” First of all, I don’t think realism and vanity are mutually exclusive. And furthermore, I don’t think this is really a healthy attitude to have. Why should you care about your skill relative to other people? How would you even be able to tell that you’re better than someone? Speaking from personal experience, I think the need to be better than other people has the potential to be really harmful to your own development. At least, it was for me. To “surpass” someone isn’t really a concrete, actionable goal, and I think it’s illusory in the same way as chasing success in general. I think it’s better to instead focus on what you actually want in your life, and on the people in it as much as possible.

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.

CS 448 Post #7

I continued through chapter 5 and wanted my next post to be about the pattern Share What You Learn before moving on to chapter 6 because it interested me most out of the other patterns. The previous patterns and chapters have mainly been about our own growth and journey, so it was interesting to read about how we can help others grow. While some patterns partially touched on this by talking about teamwork, this pattern isn’t about working with others and improving yourself and them, instead it is about you becoming one of the sources of research for others to learn from. Overtime as you grow and learn more, you will have more that you can share and pass along to others who want to learn from you. This can be done by starting a blog, making a book, or some other way that you can share your experiences and work. The blogs that I and other students have been writing is an example of that too. I like that it was also mentioned that even the people sharing with and teaching others also learn from those experiences, similar to teamwork. It was also important for the book to mention that some things should either not be shared, or should be shared by someone other than you depending on what it is, like personal information or secrets.

One experience that this reminds me of is when one of my teachers in school would ask about my work, specifically math in this case. The journal I worked in for that class would sometimes have messy work when I was going through the math problems, and I wasn’t thinking much about how the work looked. The teacher for that class mentioned to me that others may want to see my work and learn from it, whether it be other students in the class, or even other people who may come across it after I’m done, so I should try to make the work more easy to understand. At the time, I didn’t think anyone would want to look through my work or think that it would help. Part of that was doubt in what I was doing. I’ve been considering it more in recent years, especially after reading through this book, that others will want to see my work and that some people may learn from it.

From the blog Jeffery Neal's Blog by jneal44 and used with permission of the author. All other rights reserved by the author.

Retreat Into Competence

The problem being discussed here, like many others in this book, is something that I think is intrinsic to any kind of professional development. It’s the sensation of being out of depth in your work, a feeling that creeps into your thoughts, slowly atrophying your confidence.

At first glance, it seems like something that shouldn’t matter. You either know what you’re doing or you don’t, right? Why should your feelings about yourself play a role? That’s how I used to feel, and I also used to be pretty abysmal at putting in the work to get anything done, whether professionally, academically or personally. As unpleasant of a reality as it is to deal with, we are not machines that can churn out code like a printing press so long as things are physically working. Something I’ve learned the hard way, which this article touches on, is that you need to be firing on all cylinders emotionally as well as physically in order to actually do your best.

The solution proposed here is to prioritize something you know specifically for the sake of rebuilding confidence, rather than simply productivity. This could actually mean sacrificing productivity in the long term, but the feeling of competence is critical. Even if you don’t think this would work on you, you’d probably be surprised.

You will not be an expert at every problem. The key to building your expertise is to connect things you can do well to things you can’t, and sort of expand your understanding from there.

For example, I struggled quite a bit with Thea’s Pantry when I was getting started with it. The whole ecosystem of tools seemed extremely unintuitive to me. The turning point for me came when I realized that everything my project was doing started with running the index.js file, similar to how in most programming projects you have a main file where the execution begins. First, I started familiarizing myself with Node.js, the runtime for the project. Then I started looking at the other tools we were using, listed in the documentation, and trying to see how each fit into the flow of the program, like how external libraries fit into a more conventional application. This took time out of my work, but that time was critical for building my understanding.

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.

Week 13: Reading List

For this week, I chose to read ‘Reading List’ from Chapter 6: Construct Your Curriculum. I thought this pattern would be a good last pattern to read about now that the semester is ending. This chapter consisted of mostly patterns that are useful for post undergraduate stuff and things to reinforce in your head moving into your software career. So, for the context of this pattern, after becoming proficient in your first language (another pattern), you begin to look around and see the vast sea of info. I found this relatable as there is so many different languages in software programming and so many different technologies that accompany it as well, there is a lot to learn. However, with that in mind, I think that just makes me wanna learn about a lot of the different languages and technologies since software development is so vast.

For the problem of the pattern, you are unable to keep up with the amount of books you need to read. I thought this was kind of a weird problem, if you reach this problem, you probably aren’t managing your time well and need to readjust your curriculum in my opinion. However, the solution tackles this problem similar to what I was thinking, managing your time better. The solution is to maintain a reading list, this isn’t to only manage the books you read but also to reflect on past reading habits and you can use this info to construct a path on what to read next and what to focus on. I thought this was pretty clever, I wouldn’t have a reading list for that purpose, I would just use it to manage my reading habits. The solution does come with caveats though, it’s difficult to implement this pattern without having a deep understanding of your topic in order to figure out which books to read and the order. Ultimately, I think this pattern relies on having a deep understanding of what you want to learn about and what rabbit holes to go down in order to become more proficient at those topics.

For the action, you obviously create your reading list, however you keep it under source control and up to date. Pretty simple action to do, it’s just finding out where to start and what to read that is the hardest part of this pattern.

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

Sprint Retrospective #3

This Sprint was the last Sprint for this semester and with that being said, there is still more work for the next team to come in and work on. During this sprint, we worked on both the back end and front end. I was responsible for building the test, however, there was not much to be done due to the complexity of the test case. T has helped me during this sprint as well, as she has always done with the other Sprints. It would take me all day to admire her effort in this project. She not only does such a good job but also is supportive of other teammates.
Since there was not much to be done in this project test case due to the completion of this project. I had switched to the front end to work. The point is to make the submit button retreat data whenever it is pressed. It took quite a while for me to figure out how to get that button to work. It was not tricky but since I did not enough knowledge of HTTP calls, so it was sort of a struggle for me to find a solution. However, T and I worked out and fixed the problem by using the right method. We also added a function to download CSV files for the front end. This method is used to call back to the backend for retreating the data and then downloading the data to the user’s computer.
During this last sprint, we worked well on most of the issues that we listed in the first two sprints. We finished them on time and perhaps most of the issues were finished before the Sprint Review. However, that does not mean the work is finished. Since this is the last sprint, the improvement in working as a team and communication has been developed significantly. We improved ourselves a lot in this one and there were barely any conflicts that happened.
Besides all the improvements that the team had improved in this Sprint. Some new issues had appeared. Since this was the last sprint, we understand that every team member has projects and finals to study and work on. Therefore, some of us did not spend much time working as much as we had hoped. But that was understandable by each of the team members.
In addition to the team, there was me. During this sprint, I honestly did not contribute much as I had hoped. I was all over places from different classes, exams, and my internship. I managed time badly and I could have said that I was burned out. If there is anything that needed to be improved, I would say it was me. I need to prioritize some tasks over others such as choosing which tasks need to be finished first. I failed to do that in this sprint which led to many things that had not been done as the deadline came close.
Since this is the last Sprint, I have learned what I need to improve and what I need to change. I would need to manage tasks more carefully with more attention. I have improved a lot in working with my team and got better over three sprints to have better prepared for the professional world.

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/reportingbackend/-/issues/36

https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/reportingsystem/generatewcfbreportfrontend/-/issues/15

From the blog CS@Worcester – Hung Nguyen by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

Nurture Your Passion

This week I decided to right about Nurture your passion. As I finish my academic career and move into the professional world, nurturing my passion is something I will be conscious of.

The problem laid out in this pattern is that the craftsmen is working in a workplace where his passion is stiffled. I think that everyone will experience this. For my part, I have gone to long team meetings that felt like they could have been half the time. And that is one of the best problems to have. Work places can be toxic, or there could not be oppurtunities to learn and grow. With this problem explained, Dave sugguests that the craftsmen should look to nurture his passion outside of his job.

There are a few ways to do this. One is my making interesting side projects or Breakable Toys. I could see this being a nice change of pace, where I could focus more on learning instead of meeting the deadline. Another solution is to meet kindred spirits. Dave suggests meet up groups. One thought I have here is that if I am coding for six to eight hours, five days a week. I may not feel like building breakable toys, or going to meet ups. I like writing code, but not everyone has time to write open source in addition to working a full time developer job.

The action Dave recommends is to write three positive ideas down to bring up at work everyday. And bring one up if things turn negative. Finding happiness and positivity at work is important for anyone. So I think is is a very meaningful pattern.

I think the best advice here is that if the craftsman finds himself at a firm that stiffles his passion, it is time to move on. This piece of advice is very relevant now as we are in the midst of “The Great Resignation”. I think finding a job that a craftman can at least partially nurture his passion is very important. We spend so much of our lives at work. So it is very important to find happiness there, if possible.

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

Apprenticeship Patterns: Chapter 4 Part 2

Sweep The Floor

A common stereotype amongst movies and literature when an apprentice first begins their work, they are handed a menial task and told to perfect it. Often sweeping or “wax on, wax off” from the movie Karate Kid, the task being grueling and numbing in a sense. This task assigned to you wasn’t to demoralize you or just give you something to be distracted by, it was to get you ready and perfect a skill by practicing frequently.

As an apprentice you are nearly always going to be on the lower rung of experience and will find yourself doing work closer to your skill level. With programming the metaphorical broom might not be clear, or obvious. Instead of waiting for instruction you should take the initiative and volunteer for things. Take a task that you can complete or learn to complete and lighten the load of others.

This won’t necessarily seem like sweeping the floor but in a sense you are taking the tasks that will help yourself and the team you are aspiring to become an essential part of. I understand this aspect fairly well absorbing this concept through admittedly far more media than I should have, but I agree with this pattern pretty much wholeheartedly. Being apart of the group and not being as skilled as them is fairly demoralizing, but taking the lesser tasks can still make you a vital part of the process while you make the effort to become as skilled as your group members.

While learning and developing your skills you do have to step back and learn the basics. Focusing your skills and learning the essentials is integral and necessary. It’s also usually the tasks that most don’t want to work on. Mind numbing maintenance and formatting is one task that higher level workers dread maintaining. These tasks are necessary and vital to the projects success and someone needs to do it. You might as well put yourself into the problems you can solve and along the way you will learn things vital to improving the project and increasing your skills. To learn the basics is to master them. Sweep the broom before you place the first brick of the new structure. Stack bricks thousands of times before you can build a sturdy wall. This pattern is to take the mindset of the novice within your group and how as an apprentice you can learn while also helping out your group.

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.