Category Archives: CS-448

use the source

When working with a project that has already been built up to a certain point, one can find themselves lost in where to look first, how to accomplish their job within that project, how the program even works as a whole. I’ve had firsthand experience with this already working with the Thea’s Pantry system. Ultimately, the only way to really learn what is going on in the system is by looking at the code and trying to make sense of it.

This pattern is very important within the context of working in the Software Development field. The quote at the end is a synopsis of it: if a programmer can learn a codebase quickly after being hired, then they can more quickly be productive and add value to the project for the employer they are writing code for. Otherwise, you’re spending a lot of time just trying to get an understanding of things while you have deadlines coming soon.

The one thing is that obviously getting an understanding of a codebase is incredibly difficult depending on your level of knowledge in various languages and programming as a whole. Of course, this is one of the later patterns (chapter 5), but regardless if I don’t have much experience with JavaScript, trying to read a project that operates on JavaScript at a high level will be a bit more difficult than reading a project that uses C given that I have worked with C for a year, let’s say.

There’s also the consideration of documentation. Documentation can be very helpful, but there will always be cases where the code was changed and the documentation was forgotten about. This leads to additional confusion, and it only compounds when there are comments in the actual code that are misleading, or functions that weren’t written with clean code principles in mind. Everyone makes mistakes, and sometimes those mistakes lead to tech debt that has been compounded upon to the point where that bit of code that’s hard to understand cannot be changed without a whole refactor.

Of course, this is dependent on the project. I’m sure that projects like version control systems that were mentioned in the reading are fairly consistent because they need to be, and having the experience of learning a codebase like that is definitely useful and builds on adaptation skills that are somewhat of a necessity in the tech field. It’s an interesting thought, and I can see how it can lead to better code.

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

Confronting Ignorance: A Path to Growth in Software Craftsmanship

“Confront Your Ignorance” urges us to face our lack of knowledge head-on. Instead of shying away from what we don’t know, this pattern encourages us to acknowledge our ignorance and embrace it as a stepping stone to growth.

Key points of the pattern include:

  1. Recognizing Blind Spots: We all have blind spots – areas where our knowledge is lacking or incomplete. The first step is acknowledging these blind spots and accepting that there’s always more to learn.
  2. Seeking Learning Opportunities: Actively seek out opportunities to expand your knowledge and skills. Whether it’s through reading books, attending workshops, or collaborating with peers, every experience is a chance to confront your ignorance.
  3. Embracing Humility: Embrace humility and be open to learning from others. Recognize that expertise comes from a continuous process of confronting and overcoming ignorance, rather than pretending to know it all.
  4. Asking Questions: Don’t be afraid to ask questions, even if they seem basic or obvious. Asking questions is a sign of curiosity and a willingness to learn.

My Reaction:

“Confront Your Ignorance” resonated deeply with me, especially as someone navigating the complex landscape of software development. It’s easy to feel overwhelmed by the vastness of the field, but this pattern reminded me that it’s okay not to have all the answers.

One aspect of the pattern that particularly struck me is the emphasis on humility. In a culture that often values expertise and confidence above all else, it can be daunting to admit when we don’t know something. However, this pattern taught me that true growth comes from embracing our ignorance and using it as fuel for learning.

I’ve also realized the importance of seeking out learning opportunities proactively. Instead of waiting for knowledge to come to me, I now actively seek out books, courses, and conversations that challenge my existing understanding.

One point of contention I have with the pattern is the suggestion to ask questions, even if they seem basic. While I agree with the sentiment, I sometimes struggle with feeling like I’m bothering others with my questions. However, I’m working on overcoming this hesitation and embracing the value of curiosity.

In conclusion, “Confront Your Ignorance” has shifted my perspective on learning and growth. By embracing the unknown and confronting my ignorance, I’m committed to embarking on a journey of continuous improvement and discovery.

From the blog CS@Worcester – Hieu Tran Blog by Trung Hiếu and used with permission of the author. All other rights reserved by the author.

The Vital Role of Mentorship in Software Craftsmanship

Summary: The “Find Mentors” pattern emphasizes the importance of seeking guidance and mentorship from experienced individuals in the field of software craftsmanship. It acknowledges the challenges faced by apprentices in navigating their professional journeys and advocates for actively seeking out mentors who can provide valuable insights and guidance. The pattern highlights the rarity of finding a master craftsman but encourages apprentices to engage with a series of mentors, recognizing that mentorship can come in various forms and may not always be face-to-face.

Reaction: This pattern resonates deeply with me as it underscores the significance of mentorship in personal and professional development. It acknowledges the inherent challenges in finding suitable mentors but emphasizes the transformative impact that mentorship can have on one’s journey towards mastery. I appreciate the practical advice offered in the pattern, such as lurking in online communities to identify potential mentors and taking the initiative to reach out to them for informal advice.

Interest: What I find particularly interesting and useful about this pattern is its emphasis on the reciprocal nature of mentorship. While apprentices seek guidance from experienced practitioners, they are also encouraged to pay it forward by mentoring others who are earlier in their journey. This aspect highlights the collaborative and communal nature of the software craftsmanship community, where knowledge sharing and mentorship play vital roles in fostering growth and development.

Reflection: The “Find Mentors” pattern has prompted me to reflect on my own approach to mentorship and how I can leverage it to enhance my professional growth. As I navigate my career in software development, I recognize the importance of seeking out mentors who can provide guidance, feedback, and support. Additionally, I am inspired to contribute to the community by offering mentorship to others who may benefit from my experiences and insights.

Disagreement: While I wholeheartedly agree with the principles outlined in the pattern, I believe that it could provide more nuanced guidance on navigating the complexities of mentorship relationships. For example, it could delve into strategies for building meaningful connections with mentors and managing expectations within the mentorship dynamic. Additionally, the pattern could explore potential challenges or pitfalls that apprentices may encounter in their quest to find suitable mentors.

Conclusion: In conclusion, the “Find Mentors” pattern serves as a valuable reminder of the importance of mentorship in the journey towards software craftsmanship. By actively seeking out mentors and engaging in reciprocal mentorship relationships, apprentices can accelerate their learning, navigate challenges more effectively, and contribute to the growth of the software craftsmanship community. As I continue on my own journey, I am committed to embracing mentorship as a cornerstone of my professional development and to paying it forward by supporting others along the way.

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

Chapter 1-6 Reflection

As I dived into the narrative of the young philosopher and the Zen master, I found myself intrigued by the wise words. The metaphor of the overflowing cup resonated deeply, serving as an important reminder of the importance of humility and receptivity in the pursuit of knowledge. It prompted me to reflect on my own approach to learning, highlighting the need to set aside assumptions and take in new perspectives with an open mind.

The comparison of formal training certificates with the quest for genuine expertise struck a chord with me. Like the protagonist, Dave, I’ve often relied on certifications and accolades as markers of proficiency. However, the reading challenged me to reevaluate this mindset, showing the value of continuous learning and self-improvement over static credentials. It prompted me to shift my focus from external validation to internal growth, recognizing that true mastery is an ongoing journey rather than a destination.

There was a lot to agree on with the reading, but there was also some points that I disagreed with. The claim that small ponds and big fish can show the image of satisfaction seemed too simple to me. I believe that individual growth is complex, influenced by a a large amount of internal and external factors beyond the scope of pond size or fish scale. While exposure to diverse perspectives is undoubtedly valuable, it’s essential to recognize the inherent value of all learning environments, regardless of their perceived size or significance.

In terms of relevance, several chapters stood out to me. “Perpetual Learning” resonated with my desire to accelerate growth and deepen my understanding. The notion of embracing discomfort and seeking out new challenges spoke directly to my aspirations for professional development. Additionally, “Reflect as You Work” and “Create Feedback Loops” struck a chord with me, highlighting the importance of self-assessment and continuous improvement in my journey toward mastery.

In conclusion, the reading served as a step for introspection and growth by making me to reevaluate my approach to software apprenticeship. By embracing humility, fostering curiosity, and prioritizing continuous learning, I aim to navigate the complexities of the field with purpose and strength.

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

‘Your First Language’ Pattern

  The ‘Your First Language’ pattern from chapter two consists of the idea that you are just starting out and only have a basic understanding of one or maybe even two languages. The problem which is presented is that you as an apprentice believe that your job depends on being able to produce the same quality of work in a specific language that the others around you can even if they may have more experience using said language or that getting any job will depend on your knowledge of one particular language. Then the solution presented it to decide on a ‘first language’ which you will dedicate to familiarize yourself with and when trying to solve a problem you will use this language and further your understanding of its inner workings. Then if an employer requires you to use a specific language you approach it by taking small steps at first and then exponentially grow your steps as you gain more knowledge in order to efficiently learn another language. This pattern encourages you to seek help from experienced friends in order to quickly progress through a problem as long as you do not grow a reliance on them for all the answers. 

  I have a great appreciation for this pattern as I feel it is something that many students and or apprentices may struggle with. Initial thoughts on a first language can be intimidating and heavily influenced by the schooling you go through if any or even others opinions online if you do not pursue technical training initially. You put a lot of consideration into a choice like this and it is important but this pattern highlights the thought that many people may have that they must fully master a language in order to be ‘employable’ in that said language when realistically even people that are considered to be ‘masters’ of a specific language are still learning. What really matters is that you take the steps in your first language and learn from the experience so that you can adjust the steps to learn other languages in the future as your first language is basically your jumpstart in the world of programming languages.

From the blog CS@Worcester – Dylan Brown Computer Science by dylanbrowncs and used with permission of the author. All other rights reserved by the author.

The White Belt – Ignorance and the Journey of Learning

In a nutshell, “The White Belt” encourages us to embrace our ignorance and adopt a beginner’s mindset. It’s like entering a martial arts dojo for the first time – a white belt symbolizes a blank canvas, ready to absorb the knowledge and skills the journey offers.

Summary of The White Belt:

  1. Ignorance is Okay: The pattern emphasizes that it’s perfectly fine not to know everything. Acknowledging our ignorance is the first step towards real learning.
  2. Focus on Learning: Instead of trying to be a jack-of-all-trades, the pattern advises us to focus on learning one thing well. Mastering a single concept or technology sets the foundation for broader expertise.
  3. Practice, Practice, Practice: Hands-on experience is key. Whether it’s coding exercises or real-world applications, practice is the bridge between theory and mastery.
  4. Seek Feedback: Actively seek feedback from experienced developers. Constructive criticism is the secret sauce for improvement.
  5. Expose Your Ignorance: Don’t be afraid to admit what you don’t know. Being open about your limitations opens the door to learning from others.

My Reaction:

What struck me most about “The White Belt” is its emphasis on humility and curiosity. In a world where the pressure to know everything can be overwhelming, this pattern grants permission to be a novice. It made me reflect on how, as a student entering the vast field of software development, it’s okay not to have all the answers.

The call to focus on learning one thing well was a game-changer for me. In a world filled with shiny new technologies, I now appreciate the value of depth over breadth. It’s like building a strong foundation before constructing the skyscraper of knowledge.

This pattern has reshaped my perspective on learning. It’s not just about accumulating information but immersing oneself in the process. Admitting my ignorance, seeking feedback, and practicing relentlessly are now my guiding principles.

In conclusion, “The White Belt” is not just a pattern; it’s a mindset. It has ignited a spark within me, encouraging me to embrace the journey of learning with open arms and a white belt.

From the blog CS@Worcester – Hieu Tran Blog by Trung Hiếu and used with permission of the author. All other rights reserved by the author.

CS-448 Week 1

This week I learned about one of several apprenticeship patterns from the “Apprenticeship Patterns” book by Dave Hoover and Adewale Oshineye, the White Belt. The purpose of this is to embrace the state of being a beginner, with no pressure of being an expert. It also states that every step should be embraced with an open mind and to set your previous knowledge aside when taking on new situations. The name “White Belt” comes from the prestige rankings of karate belts, with the white belt being for beginners. As a white belt, you do not carry any previous knowledge about the situation and are forced to learn the way, rather than black belts who know the way. As a programmer, learning a language and becoming proficient in that language is a great feeling. This can create a stubbornness in the person to be unwilling to go through the learning process again in hopes of not making a fool of themselves again when making a mistake.

While these principles are referenced in terms of computer science, they can be applied in general situations as well, especially the White Belt pattern. The well-known saying “you learn something new every day” applies to this pattern as it states that everyone still has room to improve/learn and no one knows everything, even if you feel like you do. This is important to remember when attacking new situations so that you do not limit yourself to possibilities you may not know about. It is something that people might not feel comfortable with at first due to the learning curve that comes with it, but there is always something to take away from failing the first time.

I believe this will be an important principle to follow when going into the professional world. As a software developer, there are a lot of different programming languages that can be learned with their own benefits. While some programming languages are similar, others can be harder to learn with syntax that may not align with each other. Knowing more languages allows for more opportunities when looking for a job. However, it is not easy to learn multiple languages especially when they look completely different. This is where, as a leaner, you must unlearn what you already learn.

2. Emptying the Cup | Apprenticeship Patterns (oreilly.com)

From the blog CS@Worcester – Jason Lee Computer Science Blog by jlee3811 and used with permission of the author. All other rights reserved by the author.

CS448 – LibreFoodPantry and Thea’s Pantry

It was cool to navigate the LibreFoodPantry website and get a better understanding of their company ahead of helping with website development. While exploring their page, I came across the agile values and principles and the Twelve Principles of Agile Software. One of the principles I found interesting was the embracement of changing requirements, even late in development. This is to provide continuous change and adaptations to the product for the customer’s competitive advantage. I chose to write about this because the typical thought process is to stay the course and follow the original plan. However, for an ever changing product market, it is more valuable to welcome the change of requirements rather than staying the course of the original plan.

Thea’s Pantry has a lot of valuable information that is organized in a simple manner that makes it easy for users to navigate. The “User Stories” was a helpful page as it gives insight as to how the process works for a specific cause. For example, they list the steps for when a guest visits the pantry and the different possible outcomes that can happen from it. I chose to write about this because I found it very valuable to get a full understanding of the different types of user interactions that will occur with the website. This will help in the development process as there will be more insight with the website and give a better grasp on the best way to fix the problems and enhance the user experience.

https://librefoodpantry.org/

Developer/UserStories.md · spring2024-updates · LibreFoodPantry / Client Solutions / Theas Pantry / Documentation · GitLab

From the blog CS@Worcester – Jason Lee Computer Science Blog by jlee3811 and used with permission of the author. All other rights reserved by the author.

expose your ignorance (apprenticeship patterns)

Essentially, be willing to admit that you have gaps in your knowledge when you do, and be able to ask those around you for help when you really need it. The authors make a point to mention that this is relatively difficult for many people because of the self-imposed expectation of being omni-competent (that is, always competent) and when you aren’t competent, considering it a failure. This is definitely a difficult mindset to get past, but it is necessary for growth. Otherwise you remain stagnant in the things that you know and never challenge yourself.

This pattern is good. It’s true that in order to learn things, we often have to turn to those who have more experience and learn from them. It also gives a good way of asking productive questions rather than the common (and not very useful at all) “how do I make this work?” I find that in order to really understand what’s going on, you have to go to the root of the thing you’re having an issue with and work up from there. Otherwise, for example, you’re just writing code and you don’t even know what it really does, just that it works. This is one of the main reasons I get bothered whenever anyone has asked me to just show them my code in the past, not only does it not really help them learn anything most of them time, there’s a good chance the code I wrote ends up being copied directly. I don’t really care about getting credit for the stuff I wrote all that much, but it’s moreso about the precedent it sets.

Another interesting thing about this pattern is the idea of being willing to step out of your comfort zone to other fields and technology to better your versatiliy. I think this is truly important, especially when working in the tech sphere. Things change very quickly, and to not adapt means to remain with legacy components which are less efficient and less secure as a whole. This stagnation spreads to everything in the ‘system’ so to speak, and the results affect everyone who holds a stake in what your group does.

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

Apprenticeship Patterns Introductions

  The introduction chapter for the Apprenticeship patterns book gives a definition and understanding of not only the term ‘software craftsmanship’ but it also explains the stages of ones development within the software development career path. These stages can be attributed too many other careers but the apprenticeship patterns contained in this text are meant to help guide an apprentice software engineer to become a journeyman and later a master.

  Chapter Two ‘Emptying the Cup’ contains apprenticeship patterns which are meant to help when initially taking on an apprenticeship and the learning curve you will face when having to “relearn” how to do a task that you may already do in one way in order to learn another way to complete the task. This is very important as you must be open to learning different ways to do things even if a different way may be less efficient.

  Chapter Three ‘Walking The long Road’ refers to the everlasting cycle of learning that is ahead of an apprentice and the importance of learning new techniques and strategies continuously in order to increase your skill and understanding which will remain important even after exiting the apprentice ‘phase’ of your career.

  Chapter Four ‘Accurate Self-Assessment’ is meant to make you realize that you have not finished your “walk on the long road” and encourage you to realize and learn from flaws in your own work or seek mentorship from your more experienced counterparts.

  Chapter Five ‘Perpetual Learning’ contains patterns that you are meant to use for your entire career regarding both learning an communication but they are vital to success early in your journey due to the emphasis on expanding upon your own abilities and your knowledge in order to expand your career.

  Chapter Six ‘Construct Your Curriculum’ refers to the necessity of continued learning once again and the need for an apprentice to be responsible and dedicate some of their own time to the expansion of knowledge even though the reading and research required will not be ‘assigned’ but it is still important and necessary when it comes to your own development and success.

  All Six of the chapters included in the Apprenticeship Patterns book are very important for your own development and the development of your career. Many of these patterns are things that can be disregarded by people while learning but it is important to remember you started somewhere and it is up to you to ensure you develop well professionally and you utilize your counterparts as mentors and examples.

  My thoughts on the reading are that I believe many people including myself forget the significance of looking as different perspectives. The different patterns in this reading provide a whole new perspective in which I agree with the majority of the content and find it rather though provoking. In my opinion chapters four and six would be the most important because truly nobody can assess you more accurately than yourself in order too better yourself and constructing a curriculum is something that can in a sense guarantee your continued learning throughout your life as you assign things to yourself and hold yourself accountable.

From the blog CS@Worcester – Dylan Brown Computer Science by dylanbrowncs and used with permission of the author. All other rights reserved by the author.