Author Archives: mousammishra21

Draw Your Own Map

In this week’s blog post, I will be discussing the thought-provoking chapter titled “Draw Your Own Map” from the book “Apprenticeship Patterns.” This chapter delves into the notion that your envisioned career path may not align with your current employer’s trajectory and provides insights on how to forge ahead in pursuit of your own career aspirations. The author emphasizes a crucial point: it is solely your responsibility to identify what you want to achieve in your career and then take deliberate steps to initiate progress towards those goals. However, this does not discount the significance of seeking guidance from mentors or individuals who can offer valuable insights and steer you in the right direction.

One noteworthy aspect highlighted by the author is the tendency of successful apprentices to gravitate towards companies that share a “certain family resemblance.” This concept is rooted in the idea that apprentices make career choices based on their own values and principles. Put simply, the author suggests that as a programmer, it is unwise to join a company that lacks shared passion and values, as it will likely lead to a lackluster work experience. Another aspect that resonates with me personally is the emphasis on gracefully transitioning from one company to another while maintaining positive relationships with previous employers. This is particularly significant in the industry, as a tarnished reputation with former employers can potentially limit future opportunities.

On the whole, this chapter conveys a compelling message: change is a necessary catalyst for personal growth. While change can be daunting, it is an essential ingredient for becoming the person you aspire to be. The author offers a practical exercise to facilitate this process: write down a list of potential career paths that your current job can lead to, and critically evaluate if any of them align with your long-term vision. Overall, this chapter reinforces a valuable lesson that I have personally experienced: sometimes, in order to evolve as an individual, it is necessary to move on from your current employer, even if it means accepting a temporary reduction in income. The valuable experiences and personal growth gained in pursuing your new path far outweigh any financial considerations.

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

Sprint 3 Retrospective

Greetings readers, and a warm welcome to final sprint blog! As we find ourselves drawing near to the end of this semester, it is an opportune moment to embark on a thoughtful reflection of the path we have done throughout the three sprints and revel in the remarkable accomplishments of our team. Through tireless collaboration and concerted efforts, we have truly excelled, leaving an indelible mark on this semester. It fills me with great pride to acknowledge the incredible work we have accomplished together, making this academic period truly exceptional.

Sprint 1 served as a foundation for us to understand how things work and familiarize ourselves with the project. We spent time getting to know the intricacies of the task at hand, gathering information, and learning the necessary skills to tackle the challenges ahead. Building upon our initial knowledge, we dove into sprint 2 with enthusiasm and determination. This sprint allowed us to make significant progress, and we were able to complete most of the assigned work. It was a time of productivity and accomplishment, as we applied our newly acquired skills and worked seamlessly as a team. However, sprint 3 presented us with a different set of circumstances. Although we didn’t have as much work to do, the time allotted for this sprint was relatively short. Nonetheless, we utilized this time effectively by focusing on specific tasks. Our primary objectives during this sprint were to fix pipelines, implement automated testing, and tidy up any loose ends from the previous work completed throughout the semester. We dedicated our efforts to ensuring that issues were resolved promptly and documented carefully. We paid close attention to detail, understanding the importance of thorough documentation. Additionally, we took the opportunity to refine our unit tests and incorporate any necessary conditions or improvements during the final sprint.

As we approach the end of the semester, I am currently working on the final presentation. As this sprint was relatively shorter than the last two, we were mostly able to just clean up the codes mostly and get this organized. Looking back as a whole, I am genuinely impressed and satisfied with how much we have accomplished as a team. Our collaborative spirit, combined with our hard work, has brought us this far, and I am confident that our final presentation will reflect the excellence we have demonstrated throughout the semester. Let’s take a moment to acknowledge the growth we have experienced individually and as a team. We have not only expanded our technical knowledge but also honed our communication and teamwork skills. I am proud to be a part of this incredible group, and I look forward to showcasing our accomplishments during the final presentation. As we conclude this semester, let’s celebrate the milestones we have achieved and the lessons we have learned. I am grateful for the opportunity to work alongside such talented individuals, and I am confident that our future endeavors will be equally successful. Together, we have proven that teamwork, dedication, and a shared vision can lead to remarkable outcomes.

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

Expose Your Ignorance

Greetings! I recently stumbled upon an intriguing concept called “Expose Your Ignorance,” which originates from the book “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” by Dave Hoover and Adewale Oshineye. This pattern advocates for individuals to openly acknowledge and address their knowledge gaps by seeking assistance from mentors, peers, or experts. Personally, I found this pattern to be quite relevant and valuable, as I frequently encounter scenarios where I need to acquire new knowledge. I appreciated how this pattern emphasized the importance of seeking feedback and assistance to cultivate both personal and professional development.

What I found intriguing about this pattern is its emphasis on recognizing the strength in admitting ignorance or not knowing something. In the past, I have been guilty of feigning knowledge to avoid appearing foolish or incompetent. However, this pattern advocates for the opposite approach, highlighting the benefits of being forthright about one’s limitations. By doing so, individuals can receive constructive feedback and foster personal growth. Furthermore, this pattern places significant importance on seeking guidance from others, which can be a daunting task, particularly for those who are just starting out. Nevertheless, reaching out for help is a crucial step towards expediting the learning process and avoiding potential mistakes. The pattern emphasizes that seeking assistance should not be viewed as a weakness, but rather as a strength. By doing so, individuals demonstrate their eagerness to learn and advance. I believe that the Expose Your Ignorance pattern offers significant advantages for personal and professional development. It encourages individuals to be transparent about their knowledge gaps and seek assistance, leading to more rapid growth and learning. This pattern has significantly impacted my outlook on my profession, as it has taught me to embrace my limitations and seek help when necessary. I believe that anyone looking to enhance their skills would benefit from adopting this pattern.

In summary, I strongly suggest reading the book “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” and implementing the Expose Your Ignorance pattern. This approach can help expedite your progress and advancement, whether you’re a software developer or working in any other field. By acknowledging your limitations and seeking help, you can foster personal and professional growth.

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

Sprint-2 Retrospective

During sprint 2, our team set a clear goal to maximize our production and efficiency. We aimed to complete more issues than we did in the previous sprint and were highly motivated to achieve this target. As a team, we analyzed our previous sprint’s performance and identified areas where we could improve. We realized that we needed a more effective approach to tackling our workload to achieve our goal of maximum productivity. To ensure that we were working efficiently, we focused on prioritizing our tasks. We spent time looking over all the current and new issues, and we carefully ordered them based on their urgency and complexity. Our strategy was to tackle the easier and more pressing epics first, before moving on to those that would take longer to complete. This approach helped us work through our tasks systematically and efficiently, ensuring that we did not waste time on issues that could be dealt with later. We also made a concerted effort to communicate better as a team. We set up regular meetings to discuss our progress and brainstorm ways to overcome any challenges we encountered.

During the second sprint, the first issue I was tasked with was, removing the openapi.yml file from the project’s documentation folder and deleting the build.sh command as they were no longer necessary. To ensure that my work was aligned with the team’s goals, I communicated with them before proceeding with the deletion and tested the project to confirm that everything was functioning properly. Streamlining the project’s structure in this way improved its efficiency and reduced the likelihood of errors occurring. The second issue was a small issue that we had inadvertently created during sprint 1. The issue involved adding a missing opening bracket to a call.http command. Although it was a minor fix, it was important to ensure the proper functionality of the command. After reviewing and addressing the issue, we ran tests to confirm that the command was working correctly. The third issue that I worked on was to make sure the correct types were used and to accomplish that I reviewed the codebase to ensure the correct types were being used to maintain the project’s high standards of quality and performance. The Forth one was to make sure API is complete and to accomplish that I had to go through the code again sure it’s good. The fifth issue I worked on is to design a comprehensive unit test for the guest retrieval process. The test was designed in a way that it returns code 200 for successful retrievals and a code 400 for non-existent guests. During the Third sprint we will be working on cleaning up and make tests better that were done during second sprint. As an individual I am happy with how much issues we were able to fix during second sprint.

During sprint 2, our team made significant progress and successfully resolved multiple epics. We identified which epics we plan to complete by sprint 3 and decided to leave the frontend issues to a subsequent team. Our teamwork and commitment to quality were evident throughout the sprint.

Links:

  1. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfoapi/-/issues/108 (Deleted openapi.yaml and build.sh files)
  2. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/issues/85 (Added “{“ to calls.http file)
  3. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfoapi/-/issues/101 (Determine if correct types are used)
  4. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfoapi/-/issues/98 (Determine if API is complete)
  5. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/issues/78 (Design Unit test for retrieve guest)

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

Craft over Art

In software development, surpassing the expected work is very essential. This means going above and beyond the project specifications to create a product that not only meets but also exceeds the product owner’s expectations. When you see software development as a craft, you approach it as an art form, which requires imagination, innovation, and meticulousness. This approach is particularly crucial when designing user interfaces, as the visual appeal of software can significantly impact the user experience. Therefore, striving for excellence in software development can elevate it from a mundane task to a creative endeavor that delivers results that stand out.

Personally, I try putting extra effort to go above and beyond when working on class or personal projects. This mindset not only promotes personal growth but also adds value to my portfolio. I especially take pleasure in crafting user interfaces that are not only visually attractive but also user-friendly. However, it’s crucial to be mindful of the balance between adding valuable features and spending excessive time on details that aren’t necessary. As software development requires careful planning and prioritization, focusing on what’s essential and avoiding distractions can save precious time and effort.

Balancing extra effort on client projects with their needs and requirements is essential. Adding unnecessary features can waste effort, and spending too much time on one project can harm others. Still, going the extra mile on critical projects can bring significant rewards and boost one’s reputation. Effective communication and understanding client priorities are crucial in making informed decisions on where to devote extra resources and attention. Ultimately, delivering work that satisfies the client’s needs while exceeding their expectations is key to success in software development and this is something I will be using in my future endeavors.

In conclusion, exceeding expectations in software development can yield positive outcomes and personal and professional development. Thinking software development as an art form can help produce anything that’s visually appealing and user-friendly interfaces, enhancing user experience. However, it’s crucial to maintain a balance between investing extra effort in projects and fulfilling clients’ needs and specifications. Ultimately, effective communication and understanding clients’ priorities are crucial in creating informed decisions on where to devote additional resources and attention.

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

The Deep End

The Deep End approach is designed to motivate learners to take on difficult tasks and ambitious projects that may seem intimidating at first. The goal is to immerse oneself in unexplored territories and push past the boundaries of their comfort zone to accelerate learning and personal growth. By tackling challenging tasks, apprentices can gain a deeper understanding of their trade and develop their skills more rapidly.

As a software developer, I find myself identifying with The Deep End approach. It’s all too easy to become complacent with the familiar and continue with what we already know. However, by accepting challenging projects and tasks, we can reap immense benefits. This methodology recalls the saying such as, “Life begins at the end of your comfort zone,” which holds true for personal and professional growth alike.

I particularly value the emphasis on embracing uncertainty within The Deep End methodology. It can be fearful to dive into a project or task that is entirely new and unfamiliar, but by doing so, we are forced to learn and grow in ways that wouldn’t be otherwise possible. This is especially important in the fast-paced world of software development, where new technologies and techniques are continuously emerging. It’s critical to keep up with the latest trends and stay ahead of the game. Furthermore, I value the concept of assuming responsibility for one’s learning and development. Instead of relying on external sources to delegate assignments or undertakings, this approach motivates learners to actively seek out prospects to push themselves and expedite their progress. In my opinion, fostering this mentality is crucial, not only in software development but also in any discipline that necessitates ongoing education.

This pattern serves as a reminder that learning and development do not end with formal education or training. In fact, it is often the experiences outside of our comfort zones that provide the most significant opportunities for growth and development. Therefore, The Deep End pattern has the potential to unlock new possibilities and accelerate personal and professional advancement. As a result, I am committed to applying this pattern in my endeavors and look forward to the growth that it will facilitate.

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

Use the Source

Programming is a skill that requires applying the right patterns to various scenarios. To become proficient in pattern applications, it’s helpful to analyze how other developers have used them. One great approach is to study open-source code published by experienced programmers. Carefully reviewing their work can spark ideas on how to enhance one’s own programming patterns and projects. This enables developers to expand their skill set and gain inspiration from the expertise of others.

I find it intriguing that as I read more code, I find it easier to comprehend. It’s fascinating to think that this improved comprehension reflects my mastery of the craft. Additionally, I discovered an interesting suggestion to track code changes over time using git. By reviewing the history of a codebase, I can gain insights into how the code has evolved and identify patterns that proved successful in the past. This knowledge can then be applied to the code I write in the future. Being able to observe and understand the evolution of code not only helps me identify errors that were initially overlooked but also provides me with an opportunity to continuously improve my programming skills. By incorporating successful patterns into my own work, I can strive to produce high-quality, efficient code.

When I use open-source packages, I sometimes face challenges where the documentation doesn’t fully explain how to use the package. It can be frustrating, but I’ve learned that diving deeper into the source code provides an excellent opportunity to learn from the author’s coding patterns and techniques.

I completely agree with the insights provided by the pattern, which suggests that going through open-source code or someone else’s code is an excellent way to learn from experts. I believe that studying experts’ codes is the best way which can help me with much more than just how to use a particular software package. By observing the patterns and techniques used by skilled programmers, I can improve my own way of programming and learn to write more and make code run efficiently. Inspecting open-source code is a crucial aspect of my development process, and I plan to continue doing so in the future. It’s a great opportunity to learn from the best and enhance my programming skills.

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

The Long Road

Instead of solely focusing on the short run, it’s important to strike a balance between short-term and long-term goals. While it’s essential to plan, it’s also crucial to set achievable goals that can be accomplished in the short term, which will motivate you and keep you focused. Furthermore, the focus should be on continuous learning and growth, rather than just becoming a master at the craft. With the constantly evolving technological landscape, it’s important to keep up with the latest trends and advancements in programming. Additionally, it’s essential to maintain a work-life balance and not let programming consume all your time and energy, and staying motivated at the same time.

As a programmer, it’s easy to become distracted over time. I remind myself to stay focused on my passion and aim to become a master of the craft by balancing my work life and goals. The Long Road pattern taught me to stay motivated towards achieving long-term success in programming reminding me that money is not important at the same time. I believe that having a consistent routine and a long-term outlook is essential for staying motivated in programming. Prioritizing becoming a master of the craft, rather than just making money, is crucial for personal growth. I focus on developing a love for programming and continuously learning to maintain motivation and achieve success over wealth. I have a uncle who works as a software developer, and I have heard him express his dissatisfaction with his job. He mentioned that he is only in it for the money and does not enjoy programming or continuing to learn new skills. This attitude of solely working for financial gain can hinder personal and professional growth in programming. Instead, it’s crucial to prioritize developing a genuine passion for the craft and continuously learning new skills. This approach leads to greater fulfillment in the job and the ability to achieve long-term success.

I honestly agree with this pattern, staying focused on learning programming is crucial. While having additional motivations such as becoming a project manager or CIO is possible, prioritizing a genuine passion for programming is essential for long-term success and fulfillment.

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

Sprint 1 – Retrospective

Greetings everyone, I hope you all had a fantastic spring break. As we begin a new week, I wanted to take a moment to reflect on the recently concluded sprint 1. Undoubtedly, it was a unique experience for all of us as we delved into the real-world work environment. For many of us, including myself, it was a significant learning curve as we navigated the intricacies of our new job. However, I firmly believe that the challenges we faced during sprint 1 provided us with an excellent opportunity to develop our skills and learn from our mistakes.

Personally, I found myself drawing on the knowledge I gained from my computer architecture class in the fall of 2021. Although there was a long gap between that class and my current class, I was able to recap the essential concepts I learned in the CS-343 class, which proved to be incredibly helpful in my work. As we move forward with the next sprint, I am confident that we will continue to learn and grow, both as individuals and as a team. Let’s take the lessons we learned in sprint 1 and use them to make even greater strides in sprint 2.

As a team, we faced challenges during the first sprint, needing more time to learn how things work. However, we did our best to adapt and make progress. Moving forward, we will continue to improve our work process and complete tasks efficiently.  During the first sprint, I faced an initial hurdle with getting visual studio code and docker to work on my new laptop. Fortunately, my Scrum Master and Professor were extremely helpful in guiding me through the process, and I was able to overcome the issue with their assistance.

After resolving the initial challenge, I was able to focus on other aspects of the work, and I quickly identified a pattern that required my attention. I noticed that the variables in the code were being declared with ‘var,’ even though they did not change throughout the program. Thanks to the previous team’s efforts, I was able to change these variables to ‘let’ or ‘const’, in a little amount of time. The second issue that I encountered during the sprint involved removing MongoID from guestinfoAPI. To accomplish this, I had to delete the MongoID schema from the schema folder and remove the schema from the Index.yaml file. With these changes implemented, the guestinfoAPI was updated and functioning as intended. To resolve the third issue, I updated the code in the Dockerfile to replace the existing Swagger CLI image with a multi-architecture version. This was done to ensure that there were no issues running the code on my M1 laptop and to ensure compatibility with other devices. By using a multi-architecture version, the code could run smoothly on different architectures and avoid any potential conflicts or errors.

To improve team performance in the next sprint, dividing the workload efficiently is crucial. This will ensure that tasks are assigned according to each team member’s skills and expertise, leading to a streamlined development process and successful outcomes.

Links to GitLab issues:

  1. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfobackend/-/merge_requests/62  “Change ‘var’ variable declarations to ‘let’ [or to ‘const’ when they don’t ever change]”
  2. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfoapi/-/merge_requests/92 “Remove MongoID schema for GuestInfoAPI”
  3. https://gitlab.com/LibreFoodPantry/client-solutions/theas-pantry/guestinfosystem/guestinfoapi/-/merge_requests/93 “Replace swagger-cli image with multi-architecture version”

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

Find Mentors

Programming can be a daunting task, with many uncertainties and unclear paths to follow. Without guidance, it can be difficult to make progress. That’s where finding a mentor comes in. The “Find Mentors” apprenticeship pattern stresses the importance of seeking out guidance from someone who has more knowledge and experience in a particular programming area.

Finding a mentor can be very challenging in some cases, but it’s worth the effort. It requires actively seeking out someone who is willing to dedicate their time and energy to help you grow as a programmer. The mentor doesn’t have to know everything, but they should have more experience and knowledge than the apprentice. The process of finding a mentor is similar to starting as an apprentice in any other craft. You start small and learn from experienced practitioners, gradually building up your skills over time. The author’s experience of finding a mentor after years of programming demonstrates that it is never too late to seek help from someone who knows more.

This pattern emphasizes the importance of approaching programming as a craft and seeking guidance to make your skill better in programming.  It’s not just about finding a mentor but also about being open and willing to learn. The author’s recommendation to “expose your ignorance” means admitting what you don’t know so that your mentor can provide the necessary guidance putting in mind that no questions are stupid, just be open when you ask for help with the problem. The apprentice can also become a mentor, passing on the knowledge they have gained to someone just starting. This creates a cycle of learning and growth, where everyone benefits from sharing their knowledge and experience.

The “Find Mentors” pattern provides valuable advice on how to approach programming as an apprentice and emphasizes the importance of seeking out guidance. The author’s recommendations and personal experiences are insightful and practical, and they highlight the need for mentorship to develop programming skills. It’s a reminder that programming is not just about technical skills, but also about the community of practitioners who support each other in their growth as programmers. It’s not about just finding a mentor, you can also be a mentor for someone else and still learn new things.

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