Category Archives: CS@Worcester Blog

Learning How We Fail Until We Hit Growth

Hey Everyone! In the nonstop pursuit of excellence, the “Learn How You Fail” pattern reminds us of a old forsaken truth: failure is not a curse but a catalyst for growth. It challenges us to confront our weaknesses head-on, to seek out the patterns and behaviors that lead to our missteps, and to use that self-knowledge as a powerful tool for transformation.

The whole point of this pattern means a lot to me deeply, as it recognizes that true creativity and work ethic are not born from a quest for perfection but actually a willingness to form somewhat of a imperfection. As Atul Gawande states, “Ingenuity is often misunderstood. It is not a matter of superior intelligence but of character. It demands more than anything a willingness to recognize failure, to not paper over the cracks, and to change.”

Personally, I find this pattern both humbling and it gave me a sense of confidence. After reading it a couple of times, it forces us to confront the uncomfortable reality that our successes are often counterbalanced by our failures and weaknesses. I’ve always related to the fact that you have to get out of the comfort zone otherwise you’ll stay there forever. Reason is, in that discomfort is the seed of growth – by consciously acknowledging our limitations, we open ourselves to the possibility of going past them.

This pattern has profoundly influenced my perspective on the intended profession. It has reinforced the idea that your craft is not a destination but a continuous journey of self-discovery and self-improvement. By embracing the idea of “learning how we fail,” we create a mindset of resilience and adaptability, qualities that are essential in the ever-evolving landscape of software development, especially after reading about these patterns.

One aspect of the pattern that resonates particularly is the hard point on making conscious choices. By gaining self-knowledge about our patterns of failure, we empower ourselves to make informed decisions, sort of how some work better under pressure– whether to work on fixing those weaknesses or to acknowledge our limitations and focus our efforts elsewhere.

Lastly, the “Learn How You Fail” pattern is a powerful reminder that failure is not an enemy to be feared but a guide to be embraced. It is a call to take in vulnerability, to find the illusion of perfection, and to strive as more self-aware, adaptable, and the best version of ourselves we can be in and out of software development.

May 15, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Embracing the Cycle of Growth

Hey Everyone! The “Create Feedback Loops” pattern shines a light on this predicament, reminding us of the fundamental importance of going outside the box, objective feedback to fuel our growth and development.

At its core, this pattern challenges the idea that self-assessment alone is enough for recognizing our strengths and weaknesses. It acknowledges the built in biases and limitations of our own perspectives, which can be hooked by the very teams we work with or the environments we are around. The solution is in actively creating methods that provide us with a mirror, reflecting our true selves through the eyes of others.

What resonates with me about this pattern is its emphasis on the nature of growth. I’ve always been one to say how we never stop learning in this field and by requesting feedback early, often, and effectively, we can create a clean cycle – one where we become conscious of times where we lack understanding, take action to improve, and then seek further feedback to validate our progress. We need to understand there is nothing wrong with taking criticism. This continuous loop not only fuels our personal development but also helps search for a mindset of success and openness to learning.

Personally, I find the pattern’s recognition of the difference between useful and ineffective feedback is definitely a new way I would’ve originally thought about it. It highlights the importance of constructive criticism from distractions, separating obtainable data from well-meaning but misguided advice. This judgment supports us to focus our efforts on the feedback that truly matters, giving us a new way to make targeted improvements and avoid the mindset of false confidence or unnecessary self-doubt.

So to speak on how this impacted me, I like when the patterns give me a different influence on my perspective on the intended field in a positive way. It has strengthened the concept that true mastery is not a isolated push but rather a collaborative journey, where we actively seek out and embrace the perspectives of others. By creating feedback loops, we not only improve our own skills but also contribute to the growth of those around us, fostering a culture of mutual support and shared learning.

In conclusion, the “Create Feedback Loops” pattern is a powerful reminder of the importance of seeking objective, actionable feedback in our quest for growth and mastery. It challenges us to be open to the idea of okay to listen, okay to fail, and okay to continue trying. By cultivating this cycle, we encourage our own development but also add to the supportive growth of our peers and technical community.

May 15, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Teaching to Learn: Understanding Through Sharing

Hey Everyone! As apprentices in the making , we spend countless hours absorbing knowledge, honing our skills, and making our craft as efficient as possible. However, the “Share What You Learn” pattern reminds us that true growth lies not just in getting knowledge but also in generously sharing it with others.
The essence of this pattern is fairly captured in the quote from Twyla Tharp: “Look at the luckiest people around you, the ones you envy, the ones who seem to have destiny falling habitually into their laps… they involve their friends in their work, and they tend to make others feel lucky to be around them.” This resonates deeply, as it highlights the equal relationship between sharing knowledge and creating a fulfilling, comfortable community.
Personally, I find this pattern both thought-provoking and inspiring. It goes against the idea of knowledge is a finite resource to be put aside, instead advocating for its free exchange and somewhat of distribution. By sharing what we learn, we not only empower others but also solidify our own understanding. As the saying goes, “When one person teaches, two people learn.” I’ve never resonated with a quote as much as that one. Teaching forces us to organize our thoughts, anticipate questions, and articulate concepts in a clear manner – a process that always deepens our understanding.
Moreover, this pattern has influenced my thoughts on our field. I now recognize that true mastery extends beyond individual expertise; it follows the ability to communicate effectively and uplift others. The pattern explains how a skilled craftsman who fails to share their knowledge ultimately limits their impact, while one who embraces this pattern becomes a trigger for collective growth, leaving a lasting legacy that goes past their individual contributions.
One aspect of the pattern that I agree with a lot is the perspective of knowledge sharing. It serves as a reminder that not all lessons are ours to share, particularly those that may harm others or breach confidentiality. This way highlights the importance of wisdom and care when sharing knowledge, ensuring that our actions contribute to a positive, trustworthy environment.
Overall, the “Share What You Learn” pattern has inspired me to embrace the joy of knowledge sharing and to view it as an important part of my professional journey. By defining what I’ve learned, I can make stronger connections within my community, validate my own understanding, and help to the collective improvement of our craft as we say how we never stop learning. It’s a upright cycle that benefits all involved, to continue to make an environment of continuous growth and mutual support.

May 15, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Sprint Retrospective Blog #3

Hi everyone, my name is Abdullah Farouk, for those who don’t know me by now, and this is going to be my first sprint retrospective of the semester. First, I will start out by saying, considering this whole thing is brand new to us, we did a great job working with this new style and adapted quickly to all the changes. Don’t get me wrong, there is still a lot of room for improvement from everyone in the team, but we successfully passed through this semester. This sprint consisted of us getting more familiar with libre food pantry more and to see how this scrum framework actually go and went more in depth into the actual system. The first thing we did in the beginning of the semester was weighing the different issues and breaking some epics into smaller issues and assigning it to our team. We then organized the issues on which one we wanted to do first and so on. I worked on most of the issues during class time, which worked out nicely because I had my team member there to help me with things just in case, I got stuck, which I did sometimes. I liked meeting in person instead of virtual meetings, as I think we do more work when we see each other instead of behind a computer screen.

One thing that I would say the we massively on was how we weighed the issues in the beginning. Compared to the first sprint, Some of the issues took less than what we had anticipated, and some took way longer, but this sprint we got it spot on and managed to finish all the issues on the board just in time. Another thing that we improved on was communicating outside of class time. I started privately messaging class mates for updates if they haven’t said anything in days. One thing we still didn’t do well was Some of the issues we had made, we didn’t add a description to it, so it was a little harder for me to figure out what they want me to do just from the title, so I had to ask classmate to double check.

Other than that one issues, I think me, and the team did a great job going through these issues and completing them on a timely basis. I worked on multiple issues for this sprint that I will list at the ends, but mostly I was trying to clean up code and made sure anything that I had left unfinished, was either finished or deleted so the next class is not having a headache trying to figure out why it’s there. I also checked a couple of my classmate’s issues that needed to be reviewed in order to merge to main. I also worked on. I also learned a lot about nodemon function and have a basic understanding of how it works and how to properly integrate it.

  • Update CheckInventoryFrontend

  • Verifying that ReportingAPI has correct extensions and linters

  • Think and write down possible ways to further enhance the CheckInventoryFrontend

  • Examine GuestInfoFrontend with its wireframe to see if there is any helpful code that can be shared

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

Balancing Innovation and Caution: Chat AI’s Impact on Software Testing Methodologies

Hey everyone! As a computer science student enrolled in the Software Quality Assur & Test course, I found this resource particularly relevant and thought-provoking since it provides a different overview of how Chat AI is reshaping the testing landscape, showing both its advantages and limitations.
The article by Jonatan Grahn begins by acknowledging the paradigm shift occurring in the agile testing landscape due to the rise of Chat GPT. While some view Chat GPT as a solution for automating test case creation and code generation, the author argues that AI still lacks the maturity to handle complex testing aspects, such as security, code maintenance, and adaptability. Additionally, the post emphasizes the importance of web content accessibility guidelines (WCAG), an area where AI currently falls short due to its lack of understanding of human disabilities and user experiences.
I chose this particular blog post because it aligns perfectly with the course material we’ve been covering on the variety of ways in software testing. As we’ve discussed in class, AI and machine learning are rapidly transforming the testing landscape, and it’s crucial for aspiring software testers like myself to stay informed about these advancements. This resource provides important understandings into the potential impact of Chat AI, a cutting-edge technology that has garnered significant attention in recent times.
The blog post resonated with me on several levels. First, it reinforced the importance of maintaining a critical mindset when evaluating new technologies. While Chat AI undoubtedly offers exciting possibilities, it’s essential to recognize its limitations and potential risks, as highlighted by the author and their colleague.
Going forward, their point on educating professionals and future generations on effectively interacting with AI really made me think. I mean as I prepare to enter the workforce, I recognize the need to hone my skills in crafting queries and scenarios that can leverage the strengths of AI while mitigating its weaknesses. This blog post gave me another reason to explore more resources on effective AI integration and to seek opportunities to practice these skills during my coursework and future jobs.
Additionally, the blog post’s discussion on the advantages of AI in handling repetitive tasks and pattern recognition resonated with me. As a future software tester, I can see how utilizing AI tools to streamline tasks, freeing up time and to focus on more complex aspects of testing. However, I also appreciate the author’s view that AI requires large datasets and strict rules to be effective, building the importance of domain expertise and careful planning in leveraging AI effectively.
Overall, this blog post has deepened my understanding of the impact of Chat AI on software testing and has provided valuable insights that I can apply in my future practice. I think as a student, I need to maintain a critical and balanced perspective, always prioritizing the quality and effectiveness especially for the testing process.

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

The Wisdom of the White Belt

The “White Belt” pattern resonates with me on a personal level, as it summarizes the mark of maintaining a beginner’s mindset, a quality that I believe is crucial for continuous growth and learning in any field, especially in the realm of software development.
One interesting aspect of this pattern is the acknowledgment that expertise and mastery can sometimes become a double-edged sword. While we try to have proficiency in our field, there is a risk of becoming proud or developing a fixed mindset, where we rely too heavily on our existing knowledge and fail to embrace new perspectives or paradigms.
The analogy of “wearing the white belt” serves as a sad reminder that true mastery is not in holding to what we already know but in building a mindset of humility and openness to learning. It challenges us to overlook our assumptions and approach new challenges with a fresh and curious mindset, to a beginner’s eagerness to explore and discover.
What particularly resonates with me is the idea of “unlearning what we have learned,” as emphasized in the quote from “The Empire Strikes Back.” (Favorite movie haha) This concept challenges the work that our knowledge is lively and pushes us to question our assumptions and be willing to adapt and evolve our thinking as we meet new contexts or technologies.
Furthermore, the pattern’s point on approaching new domains with respect and curiosity, rather than assuming expertise, is rather more of a debate. The reason I say so is because it reminds us that true understanding often comes from collaborating with others and acknowledging the unique perspectives and realities they bring to the table.
One interesting aspect I find compelling is the idea of questioning how veterans in the field approached coding in the past versus how we approach it now. While we may be tempted to dismiss older methodologies or technologies as outdated, there is value in understanding the historical context and the challenges that shaped those approaches. By adopting a beginner’s mindset, we can explore these historical perspectives with an open mind, potentially uncovering insights or principles that remain relevant today.
In spirit, the “White Belt” pattern encourages us to have a mindset of continuous learning, humility, and adaptability – qualities that are essential for being advanced in the landscape of software development. It reminds us that true mastery is not a destination but a lifelong journey of growth and exploration, where we must be willing to use our preconceptions and embrace the wisdom of a beginner’s mind.

May 5, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Sprint 3: A Candid Look at Our Sprint Journey

Sprint Retrospective
Reflection on what worked well:
Hey Everyone! During this sprint, our team demonstrated effective communication and productive collaboration. We were able to complete our assigned issues on time, and each team member contributed by conducting individual research. The meeting with the professor provided valuable insights and guidance, particularly regarding the challenges we faced with Docker Compose and the startup process involving RabbitMQ.
One aspect that worked well in our favor was our ability to divide tasks and responsibilities based on individual strengths and interests. This allowed us to support each team member’s expertise and ensure that the workload was distributed evenly. Additionally, our regular check-ins and progress updates made the ideal coordination and helped identify potential obstacles early on.
Reflection on what didn’t work well:
Despite our best efforts, we encountered some difficulties with Docker Compose and the startup process involving RabbitMQ. Configuring the containers to communicate effectively and ensuring proper dependency management proved to be a great challenge. However, these obstacles presented valuable learning opportunities for our team, and we gained a better understanding of the areas that require further improvement.
Another area that could have been improved was our initial planning and estimation process. While we successfully completed our assigned tasks, there were instances where we underestimated the difficulty of certain issues, leading to potential time crunch or scope.
Reflection on what changes could be made to improve as a team:
To enhance our team’s performance, we could explore more effective ways to share and combine our research findings. By creating a collective repository or doing regular knowledge-sharing sessions, we can ensure that everyone is up-to-date with the latest ideas and techniques. This would not only help grow a collaborative learning environment but also prevent duplication of efforts and assist a mutual learning affair within the team.
Reflection on what changes could be made to improve as an individual:
As an individual, I could focus on improving my expertise in JavaScript linter tools and debugging utilities. By focusing time to hands-on practice and exploring more advanced features of the tools we’ve identified, I can better contribute to the project’s code quality and debugging efforts. This would not only enhance my technical skills but also position me as a valuable resource for the team, capable of providing guidance and support when needed.
Furthermore, I could enhance my documentation skills to ensure that my research findings and insights are effectively communicated to the rest of the team, clear the way for helpful information and collaboration. Clear and brief documentation can serve as a valuable reference for future sprints and aid in onboarding new team members.
We have provided a broad overview of our research on JavaScript linters tools and debugging utilities, which will be a valuable resource for future teams who tackle this. The dedication to exploring various options and understanding the strengths and weaknesses is what we want to leave our mark on.
Overall, I would say for Sprint 3 as a cleanup and research Sprint, it allowed our team to identify areas for improvement and gain a valuable experience into the challenges we faced. By implementing the suggested changes and continuing to collaborate effectively, we can enhance our productivity and deliver high-quality results in future sprints. Open communication, continuous learning, and the strive to move forward will be key to our success as a team.

May 5, 2024 One of the issues I worked on was the JS Linters research.

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Rubbing Elbows: Shortcutting the Path to Software Mastery

The “Rubbing Elbows” pattern advocates for software developers to actively seek out opportunities to work hands-on, side-by-side with other skilled programmers. The core premise is that certain techniques and micro-habits can only be absorbed through close collaboration on shared coding tasks. Practices like pair programming try this kind of knowledge transfer, but the pattern applies to any endeavor that allows you to observe the workflow and decision-making of an experienced developer.
I found this pattern incredibly insightful and motivating. As a software engineering student, I’ve already experienced how much more I can learn by watching lecturers code and explain their thought process in real-time, versus just reading examples. The “Rubbing Elbows” pattern highlights how that same example of accelerated learning through consistency well beyond the classroom.
The authors make an good point that there are “thousand little everyday moves” that skilled developers have pressed through years of experience. These small refinements may seem minor on their own, but include into real improvements in productivity, code quality, and problem-solving prowess. However, these micro-habits are nearly impossible to fully carry through written documentation or formal teaching. Rubbing elbows allows an apprentice to organically absorb them through repeated, intimate observation.
I’m reminded of when I pair-programmed on a school project with a talented classmate. While daunting at first to have my code exposed, I soon realized I was gaining insight into his mental models, techniques for juggling complexity, and little shortcuts that markedly lifted his coding flow. Rubbing physical and mental elbows enabled knowledge transfer that couldn’t have occurred through solo learning.
This pattern has inspired me to be a go getter about joining open source projects, participating in local meetups, and seeking out internships that enable close collaboration with experienced mentors. Identifying and creating these “rubbing elbows” opportunities will be important for go beyond my current peak and speeding my progression as a capable, well-rounded software crafter.
While the unusual feeling of being the “newbie” amongst experts is unavoidable, I’m excited by the authors’ advice: embrace feeling lost at times, ask questions, rotate pair partners if stuck, and record learnings to cement them. Absorbing the tacit knowledge of those further along the path is key to rapidly elevating my own skills.

April 28, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Software Testing Synergy: Leveraging IT Expertise for Optimization

Hey Everyone! As a student in a software testing course, the article “How Integrating IT Support Enhances Software Testing Outcomes” provided insightful perspectives that directly relate to our classroom lessons on implementing robust and comprehensive testing strategies. Having a good software testing process is important for defining quality and catching defects early before product release.
The article summarizes the key advantages of integrating IT support resources into the software testing lifecycle. It highlights how IT support teams have deep technical knowledge using testing frameworks, systems, networks, and more. By collaborating with developers and testers, they can apply this expertise to help assist processes like building robust testing environments, troubleshooting issues, identifying potential risks and creating test cases that accurately relay real-world scenarios.
I selected this particular resource because it reinforced topics we’ve covered in class about the importance of having well-designed testing processes and environments in place. The article’s examples resonated with me after completing last summer’s IT internship, where I saw firsthand how vital the support staff’s skills were for efficient testing and issue resolution when glitches started. Their ability to quickly diagnose and mediate problems minimized delays and facilitated a smooth development pipeline.
One of the most insightful sections outlined the advantages of integrating IT support beyond just bug detection. As we’ve discussed in our course lectures and materials, catching and fixing bugs is only one side of a comprehensive testing strategy aimed at delivering a high-quality product. The article demonstrated how collaborative IT-tester efforts enable a proactive, physical and mental approach for continuously validating software across the entire system and architecture. With their system-level expertise, IT staff can provide invaluable insights on creating more robust test cases that account for the complexities of production environments and real-world usage scenarios we may not anticipate.
What truly resonated was the need to tailor software testing processes and IT support services based on regional factors like the local talent pool, regulatory environment, and domain-specific challenges. This localized approach was obvious during my internship with Isto Biologics, as their IT support services catered their recommendations based on the market’s unique needs.
As I prepare for my future career, I now better appreciate the varied collaboration required for achieving comprehensive software testing and quality assurance. I expect to apply these learnings by prioritizing open communication between all stakeholders and advocating for strategic IT support integration from the onset of projects. Leveraging this relationship will be key to implementing robust testing processes that continuously validate quality while optimizing resources.

April 28, 2024

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.

Nurturing Software Craftsmanship

Hey everyone! In “Apprenticeship Patterns,” the authors present the pattern “Nurture Your Passion.” This defines preserving and growing one’s passion for software craftsmanship, even in unique work environments.
The authors acknowledge that as a software developer, your true passion lies in the craft itself. Unfortunately, the daily grind can decrease this passion, with factors like crushing hierarchies, “death marches,” abusive managers, and colleagues ruining your enthusiasm. The pattern suggests strategies to protect and add on to your passion. One is to focus on aspects you genuinely enjoy and dedicate time, even outside work, to pursuing these interests. The authors cite Paul Graham’s advice to “work on what you like.”
Another strategy is to seek out “kindred spirits” – joining user groups, participating in forums, and starting a blog to connect with others who share your passion. These interactions can renovate your thought process and provide a supportive community. The pattern also encourages studying the “classics” of software development literature, as you involve yourself in the great works can open your eyes to a more inspiring world.
Finally, the authors emphasize the importance of drawing your own map – being willing to move to an organization that better aligns with your goals, even if it means leaving a comfortable job. They warn about going against the “hero mentality” that leads to “death marches.”
As an aspiring software developer, I found this pattern insightful. The idea of caring one’s passion, even among adversity, resonates deeply. I appreciate the authors’ acknowledgment of the challenges and their suggestions for proactively addressing them. The priority on seeking kindred spirits and studying the classics is crucial. These activities can help renew my enthusiasm and provide a sense of purpose, even for future career challenges.
Additionally, the authors’ caution against the “hero mentality” and the importance of setting boundaries to protect one’s passion is a valuable lesson. I will be thinking of maintaining a sustainable pace and refusing to compromise my standards.
Overall, the “Nurture Your Passion” pattern provides a compelling framework for approaching my future career as a software developer. By actively protecting and growing my love for the craft, I believe I can navigate the profession’s ups and downs and maintain a granting, fulfilling, and consistent career. Thanks for tuning in!

From the blog CS@Worcester – A Day in the Life as a CS Blogger by andicuni and used with permission of the author. All other rights reserved by the author.