Category Archives: CS-448

448- Blog Post

This week I have read the section called Construct Your Curriculum The text emphasizes the immense access to information in the modern era, fueled by technological advancements like the printing press and the internet. Despite the abundance of digital media, it stresses the enduring value of books, particularly those authored by experienced professionals like Jerry Weinberg and Fred Brooks. These books offer a extent of wisdom and insight that goes beyond what can be found in blogs or online resources.

To manage the overwhelming number of books one may wish to read, the article suggests implementing a Reading List—a  list of books to read and those already read. This list serves as a personal curriculum, allowing individuals to prioritize their learning and track their progress over time. By making this list public, others can benefit from suggestions and contribute their own recommendations, fostering a collaborative learning environment.

The article introduces the concept of “Reading Constantly,” advocating for a steady intake of programming books to deepen one’s understanding of the field. It advises against rushing through books and emphasizes the importance of timing—reading the right book at the right time can significantly enhance the learning experience.

Additionally, the article encourages exploration of classic literature in the field, alongside more contemporary resources. It suggests asking mentors for recommendations and seeking out long-lived books that offer timeless insights into software development.

Finally, the article points out the value of a balanced approach to learning, incorporating both classic and modern literature, and leveraging tools like Reading Lists to navigate the vast sea of available knowledge effectively. Through continuous reading, reflection, and interaction with mentors and peers, individuals can cultivate a deeper understanding of their craft and continually improve their skills on their journey as software developers.

This was a good read to mark the importance of the continuation of learning and reading even after graduation and starting the professional career. It opens up the eyes for readers so that they grow and learn more and not stay stagnant.

From the blog CS@Worcester – CS- Raquel Penha by raqpenha and used with permission of the author. All other rights reserved by the author.

Blog Post

The piece “Draw Your Own Map” encourages individuals to take control of their career paths rather than relying solely on their employers or societal expectations. It addresses the common notion that programming and career advancement in the field are limited, especially for those who may not fit the stereotype of fresh graduates. It emphasizes the importance of identifying one’s own career goals and taking proactive steps to achieve them.

The solution proposed involves identifying logical yet ambitious career steps and visualizing the incremental actions needed to reach those goals. It advocates for taking the first step, even if seemingly insignificant, as it generates momentum towards larger aspirations. Rather than setting only high-level goals, the article suggests defining small, achievable steps that provide feedback and aid in obtaining assistance from like-minded individuals.

The narrative includes personal stories illustrating individuals’ struggles to pursue programming despite organizational constraints. It highlights the importance of prioritizing personal aspirations over organizational expectations and seeking opportunities that align with one’s goals.

The actionable advice includes listing potential career paths, extending the list to explore additional options, and challenging preconceived constraints to open up new possibilities. It also encourages seeking mentors and kindred spirits who can provide guidance and support along the way.

Overall, the piece advocates for a proactive and flexible approach to career planning, empowering individuals to chart their own paths and overcome obstacles to achieve their desired destinations. What I thought was the most important of this piece is the career planning aspect of it especially since this semester I am finishing up my degree and starting on looking for a career, this also like points me in the write direction on a professional work future.

From the blog CS@Worcester – CS- Raquel Penha by raqpenha and used with permission of the author. All other rights reserved by the author.

Learn How You Fail: Embracing Failure to Forge Success

Understanding the Pattern of Failure

The insightful pattern discussed in Atul Gawande’s “Better” emphasizes a profound truth: recognizing and reflecting on our failures is crucial for personal and professional growth. This notion is encapsulated in the phrase “Learn How You Fail,” which posits that true ingenuity stems not from sheer intellect but from character—specifically, the courage to face our shortcomings and adapt.

Personal Reaction

I found this pattern both challenging and refreshing. Initially, it’s discomforting to focus on failures rather than celebrate successes. However, Gawande’s approach—focusing on identifying and understanding the causes of our failures—provides a constructive framework for turning apparent setbacks into stepping stones.

This perspective is not just about acknowledging weaknesses but actively choosing which battles are worth fighting. The notion that not all failures need to be addressed equally, and some might even be embraced as limitations, is liberating. It helps in setting realistic goals and focusing efforts where they can truly make a difference.

Changes in Professional Perspective

As someone aspiring to thrive in a fast-evolving sector, this pattern has shifted my thinking towards a more adaptive and resilience-oriented professional mindset. The emphasis on continuous self-assessment and setting realistic boundaries resonates deeply. It underlines the importance of focusing on areas where I can excel and accepting areas where I may never be the best. This realization takes away the useless pursuit of perfection in every domain, instead encouraging a strategic approach to skill development and goal setting.

Points of Disagreement

While I appreciate the core message of the pattern, I hold reservations about the practicality of some suggested exercises, such as writing and debugging code without initial testing. While this can reveal unforeseen errors and personal blind spots, it may not be the most efficient learning method for everyone. This approach could lead to frustration or demotivation, particularly for novices who might benefit more from immediate feedback and iterative learning.

Conclusion

“Learn How You Fail” is not just about understanding how to handle failure—it’s about strategically leveraging these insights to refine our skills, set achievable goals, and foster a mindset that views challenges as opportunities for growth. This pattern has encouraged me to embrace my limitations, prioritize my efforts, and continue pushing the boundaries of my capabilities with a clear and realistic vision.

From the blog CS@Worcester – Site Title by rkaranja1002 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Introduction (CS 448)

I had thoroughly looked through chapter 1 “Software Craftsmanship Manifesto” and the introductions to chapters 2-6, and I had found some things that had made me feel anxious. I am not stating that there is anything wrong with chapter 1 or the introductions, but rather I learned about some things that I think I should have learned about earlier. One particular part of chapter 1 that caught my attention was a paragraph of “What is Apprenticeship”, where it had teased at something that relates to a struggle that I have; “Most people won’t have an opportunity to work in a formal apprenticeship where they are being mentored by software craftsmen. In reality, most people have to claw and scratch their apprenticeships out of less-than-ideal situations.” chapter 1 mostly described in short about how Apprenticeship is more about your “journey” rather than those that helped cultivate the goal that you have longed for, and that you have to find the answers all by yourself. As someone who has very little experience with Apprenticeship, it feels more like trying to put down all of your problems in pursuit of accomplishing much greater than your initial expectations.

I had said before, I do not have anything that I found wrong with anything I read from chapter 1 or the introductions to chapters 2-6. On the contrary however, I felt that the reading had not explained the “Accurate Self-Assessment” introduction very well. I may need to read more about it in the future, but I had felt that the thought of “comparing yourself to others to improve” did not sit very well with me. The reason I felt that you should not compare yourself to others is because we are all have our sights set on different ambitions. While I can understand why others find this part of the reading useful to find some inspiration for their own goals, we still have to find our answers all by ourselves at the end of the day. The “Perpetual Learning” introduction further explains that we need to have the desire to seek out knowledge regardless of our own circumstances in order to be inclined to take in all the tools and skills needed to achieve our goals.

Having explained chapter 5, I find that the introductions to chapters 3, 5 and 7 seem most relevant to me after reading all of chapter 1 and the following introductions. I think in my personal opinion that having a great interest in your field of study or your life-long dream requires that you need to look into your interests more in-depth and decide whether you would like to continue your career on your current trajectory or if you want to divert to a different career as a means of exploring your own interests.

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

Apprenticeship Pattern: White Belt

Summary of the Pattern:

The “White Belt” pattern emphasizes the importance of approaching new learning experiences with a beginner’s mind, regardless of your level of expertise. It suggests setting aside previous knowledge and preconceptions to fully absorb new information. Drawing analogies from various fields like family therapy and programming, the pattern illustrates the benefits of adopting a mindset of not knowing. By embracing ignorance and being open to making mistakes, individuals can accelerate their learning and gain deeper insights.

Reaction:

As someone who takes pride in my skills, it’s easy to fall into the trap of believing I already know the best way to approach a problem. However, the “White Belt” pattern reminds me that there’s always more to learn and different perspectives to consider.

What to Do:

The pattern suggests practical steps to implement its principles. For example, it recommends trying to implement a program in a language with a different paradigm, or learning from someone in a different technological community to understand their perspectives. These actions challenge one’s comfort zone and encourage embracing new ways of thinking.

What I Found Thought-Provoking:

The analogy of wearing a white belt, signifying a beginner’s level, is powerful. It reminds me that true mastery comes from a willingness to continuously learn and adapt. Additionally, the idea of consciously unlearning and relearning is intriguing. It requires humility and courage but promises significant growth.

Changes in Thinking:

This pattern has reminded me in the importance of continuous learning and humility in any area of life. I aim to approach new challenges with a more open mind, ready to embrace the discomfort of being a beginner again. Instead of seeing setbacks as failures, I now view them as opportunities for growth.

Disagreements:

While I don’t disagree with the core principles of the pattern, I recognize that fully embracing a beginner’s mindset can be challenging, especially in environments that value expertise and efficiency. However, I do see a view of balance on where it can be useful to listen to new ideas/appreaches while incoperating past ideas. As I do not think the White Belt pattern suggest to blondly accept any and all new information without any rebuttals or input.

In conclusion, the “White Belt” pattern serves as a powerful reminder to approach learning with humility and openness. By unlearning and relearning, we can break through plateaus and continue our journey toward mastery.

From the blog CS@Worcester – CS: Start to Finish by mrjfatal and used with permission of the author. All other rights reserved by the author.

The Long Road

For this week’s blog, I decided to write about the pattern called “The Long Road” from Chapter 3. My previous blogs touched a bit on the contents of this pattern so I decided to discuss what the authors suggest for this pattern. In this pattern, the situation that is presented relates to how your aspirations to become a master software developer conflict with the expectations of others and how “Conventional wisdom tells you to take the highest-paying job and the first promotion you can get your hands on, to stop programming and get onto more important work rather than slowly building up your skills”. 

The solution that is presented is to first accept the judgments you may receive from others to go against the status quo and then to stay focused on the long term. During the journey you will gain quite a bit of skills and knowledge; it is a long one so you need to prepare for it by drawing your own map. The text mentions “ you should keep in mind the expectation that you will be a working software developer even when you are middle-aged. Let this influence the jobs you take and the scope of your ambitions. If you’re still going to be working in 20 years’ time, then you can do anything”. You will be able to catch up to anyone in terms of skills in the decades that you will work and you may just pass them. Before reading this pattern I never really thought about just how long I will be working in the field. As I have discussed in many of my blogs for this class, I have been working on developing myself professionally and learning from other developers; as I have progressed, I have thought about the possibility of not being the weakest on the team so I agree that it is realistic to surpass people during your long journey.

The pattern really stresses the idea that instead of counting the days to retirement, a craftsman will willingly work until their final decades. You should thoughtfully work on developing your craft over many years. The idea of taking the long road is the foundation for a successful apprenticeship along with self-assessment. I couldn’t find anything in this section that I could disagree with. It definitely made me think of what I want to get out of this long journey because I didn’t take the time to think about it in-depth before.

From the blog CS@Worcester – Live Laugh Code by Shamarah Ramirez and used with permission of the author. All other rights reserved by the author.

CS-448: Week 11

Confront Your Ignorance

This pattern is about confronting your ignorance. After going through the “Expose your ignorance” pattern, where you identify gaps in your skillset, the next step is to confront those gaps. The main problem that comes from this pattern is that there are techniques and tools that need to be learned, but the process of actually learning these techniques in unclear. Some of these may be techniques that everyone already knows, so there is an expectation that everyone be competent in that area.

The solution to this pattern, with the list generated from “Expose your ignorance”, is to pick an item from that list and actively fill the gaps for that item. How this can be done is a matter of preference. Some prefer to research everything they can about a topic, such as introductory articles and forums. Others prefer a more hands on approach by going straight into the topic by building a simple project. Although confronting your ignorance is mostly an individual task, asking mentors and experienced people is important to learn what information they can share with you. Asking mentors can also be beneficial as they may have learned tricks that they found themselves that may not be discoverable through documentation.

As mentioned before, this pattern is do be done after exposing your ignorance. Exposing your ignorance is a critical step because it makes the gaps in your knowledge public, which makes your team aware of those gaps and your learning ability. Having your gaps be on display for your team encourages an environment where failure and learning are acceptable as they both play a large role in an apprentice transitioning to become a journeyman and so on.

Conclusion

This pattern is helpful to me because confronting my ignorance is something I struggle with at times. The pattern states that exposing your ignorance without confronting can lead to excessive humility and helplessness which are feelings I have had in the past, so this pattern helps to give some encouragement to start confronting that gaps in my knowledge. After reading the patterns “Expose your ignorance” and “Confront your ignorance”, I feel much more confident in the future on how I can improve my skills in a methodical manner.

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

CS448 Software Development Capstone – Apprenticeship Patterns – “Record What You Learn”

In this blog post, I want to talk about the “Record What You Learn” pattern from the “Apprenticeship Patterns” textbook by David H. Hoover and Adewale Oshineye. The premise presented in the pattern’s introduction,

“You learn the same lessons again and again. They never seem to stick… You remember doing very similar things in the past, but the exact details escape you.”

, captures some of the feelings that I’ve been having as our development group continues our work on Thea’s Pantry. I remember doing so much backend HTTP server work last semester, but I haven’t retained the lessons as well as I wanted to, and I feel like I’m repeatedly reviewing old material.

Lately, I’ve been reflecting on how well I’ve been nourishing my writing abilities – I stopped keeping a daily journal some time ago, and I’ve noticed that I haven’t been taking as many handwritten notes in my classes as I used to. The first reason I can think of for not wanting to stick to the habit is that I haven’t been exactly clicking with the record-keeping tools that I’ve been using. At first, I wanted to keep digital personal journals with tools like Microsoft Word or a journaling app on my Android device because I liked the idea of having as much space to write as much I wanted, without having to think about reaching a physical “end of the book”. However, I’ve realized over time that there are parts of the electronic writing process, like the glow of the monitor and the distractions of other applications, that can make it harder to concentrate on personal writing as opposed to pen and paper.

I’ve also been reflecting on my writing practices in addition to the tools I’ve been using. I’ve known for some time that I would be helped by keeping records of the things I’ve learned about computers, networking, and software development in my own writing, but I just haven’t known how to start or structure a collection of notes that I want to return to and reference in the future. One solution offered by the “Record What You Learn” pattern is to utilize a personal wiki to organize and store your notes. While I’ve been thinking I want to return to pen and paper for more personal writing, I think that a digital tool like a wiki would be a great choice to organize knowledge-based writing and references to further learning resources. The review process is also an essential part of using the “Record What You Learn” pattern. The authors emphasize the importance of rereading your material: “Your notebook, blog, or wiki should be a nursery, not a graveyard—lessons should be born from this record, rather than going there to die.”

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

The Deep End

This pattern describes growing your skills by challenging yourself with any opportunity that is given to you. Whether it’s done through taking on bigger or more complex problems or working with larger teams, there is always something to learn by trying something new. This also means seeking out projects to work on to build a portfolio and expand your skills.

For someone who started programming java in 2007, my portfolio is pretty barren. This comes down to two factors. Lost old files, and failing to start new projects. This pattern is one that I can definitely relate to the problem of feeling like I have plateaued. My eyes are opened to the truth as I get more exposure to the world of software development. If I am going to gain new skills I need to actively seek projects that push the boundaries of what I already know. I have always wanted to develop an application, but without any clear idea of what kind of application I wanted to make. This has always paralyzed me from actually learning how to develop an application. There are two clear solutions I can think of right now based off of two other patterns I have written about in the past. Following the pattern of “Find Mentors,” I could have sought out the guidance of a mentor and asked for ideas for projects that would develop my skills. The second pattern of “Breakable Toys,” gives me the option of just making an application for the sake of having a tool I can use. Making a breakable toy for an application would be a great way for me to jump into the deep end as far as pushing my knowledge of software development.

The other part of challenging myself is working with larger teams. Up until last year all of the projects I have worked on have been solo. Last semester, where I was partnered with another classmate, was one of my first exposures to developing large projects with someone else, and the challenges that come with it. Teamwork is crucial as anywhere I go in my career I will be working on a team, so being able to work together and communicate are important skills to develop. And just like learning from actually developing code, these skills will be built by actually working in larger teams.

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

Sprint 2 Retrospective

After finishing our second sprint I believe it went very well. Our team did a great job of communicating, time management and ensuring everyone’s ideas were heard. We also made sure to ask each other questions if we were stuck on an issue as well as ask anyone if they needed any help with their issue if they were having any problems. I believe the only problem we had was reviewing the issues, we either got a little sidetracked or were waiting on a response to a question we had about the issue so it kind of prevented the reviewer from checking on it. As a group of 5, we needed a weight total of 30, we managed to complete all of our issues. Since the last sprint, I believe we made a lot of progress as a team and managed to get through this sprint without a lot of issues.

As a team, I believe we made a lot of progress in this sprint and didn’t have a lot of issues to work on. We made sure to communicate with each other about how everyone’s progress was going on with their issue and if they needed any help with anything. The reason why we managed to get through this sprint is because of our communication and teamwork. As a team an improvement that we can make is our reviewing, we did have a couple of issues left in the needs review column that just needed to be checked but we kind of delayed that. I believe that was our only problem this sprint since for most of the issues we worked as a group and managed to get it done in one meeting. If we just made sure to stay on top of any work that needs review I feel like our sprint would’ve been done sooner than later.

As an Individual I believe I made a lot of improvements since the last sprint. I made sure that the work was even spread out between me and the team. The issues I worked on were Get the InventorySystem General test and build working and Verifying GuestInfosystem/Documentation. I made sure that the guestinfo system documentation had the right extensions, linters and that the pipelines were working. The only problem I ended up having was with the inventory system general test and build working. I just ended up asking Professor Wurst what I should do with them since by looking at other repos the general didn’t have a test or build so I just ended up disabling those pipelines and everything ran smoothly. Next sprint I plan on working on my issues and making sure that nothing sits in needs review so my team members don’t have to do more work than they need to and make sure that I’m contributing as well. I also plan on making sure to get any questions I have asked as soon as possible so that the issue can be solved sooner rather than later. 

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