Category Archives: Week 1

‘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.

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.

Nurture Your Passion

In this week’s blog post, I will be discussing the “Nurture Your Passion” pattern discussed in chapter 3 of “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman” by Dave Hoover and Adewale Oshineye. This week, I chose this topic for my blog post because I often worry about losing my passion for software development. This pattern discussed in the book has helped a lot with this particular anxiety.

The first part of this pattern mentions some everyday work environment issues that can break down your passion for your work. “You might be faced with demoralizing corporate hierarchies, project death marches, abusive managers, or cynical colleagues.” While I have worried about the inevitability of dealing with corporate hierarchies and toxic coworkers, I haven’t considered a work environment called a “project death march.” This initial part of the section did not alleviate my anxieties. However, as this section continues, my concerns are inflamed and relieved.

The authors described project death marches as the most damaging of the hostile conditions mentioned, and as they go into detail as to what a project death march entails, I agree with them. “It saps your time and energy, preventing you from taking any significant actions to protect your passion as more important issues like personal health and strained relations at home demand your attention.” This isn’t very good, mainly because it affects your passion, health, and relationships with your loved ones. Thankfully, the authors mention some ways to mitigate the harm done by this and other toxic traits a work environment may suffer from.

One of these examples is setting boundaries for what you are willing to put up with in a work environment. “This might mean you leave work while the rest of the team stays late, that you walk out of a meeting that has become abusive, steer a cynical conversation toward constructive topics, or refuse to distribute code that doesn’t meet your minimum standards.” While I certainly don’t have the confidence to stand up and leave a meeting or not stay late with my coworkers, I feel that I can steer conversations to a more positive topic and only distribute code that meets my standards. Reading this section also made me realize that I need to work on my confidence in standing up for myself and not be afraid to take a break and come back to something with fresh eyes.

From the blog CS@Worcester – P. McManus Worcester State CS Blog by patrickmcmanus1 and used with permission of the author. All other rights reserved by the author.

Indiv. Apprenticeship Pattern : The White Belt

In CS448, we’ve begun independently reading Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye and looking deeper into the patterns discussed in the first six chapters. The first Apprenticeship Pattern I focused on was the first described in Chapter 2 – the “White Belt”. This pattern suggests taking a beginner’s mindset with an emphasis on humility and open-mindedness when learning new things or otherwise addressing professional development. 

This pattern’s Context statement grabbed my attention because it felt very relatable as a senior with a strong understanding of Java who is looking at delving deeper into other languages like C++ and JavaScript. While I have a solid grasp on Java and general programming concepts, I have a lot to learn and really at a beginner level in other languages as I need to relearn basics like proper syntax as well as other concepts like memory management. To this point, one aspect of the White Belt pattern involves admitting ignorance – there’s much more than I don’t even know I don’t know yet. But, I also find this to be encouraging – I also don’t know how much I can possibly learn and gain professionally by taking this perspective in picking up skills.

Another concept that’s brought up and discussed with the White Belt pattern is the notion that particularly when learning and strengthening new skills, it is going to take more time to do tasks that would otherwise be simple to us in our first language – but that is okay and to be expected. This can be a point of frustration for me personally, so it was nice to see this acknowledged and helpful as I can address these tasks in a more patient headspace prepared for slower speed. Furthermore, the long-term benefit to struggling through this slow period usually pays off – the authors eloquently put it as “losing some productivity in the short term in order to take a leap forward once you master the new approach.”

Embracing humility, admitting ignorance, and actively seeking to understand challenges are key components of this pattern that I also try to live life by. So, the “White Belt” individual apprenticeship pattern was very insightful and impactful to read about and a great introductory pattern to more soon to come. It seems most applicable to situations where I/my team will be learning or enhancing skills, particularly when working with others and in environments with more experience to learn from. As a soon-to-be graduate, I look forward to keeping this pattern in mind as I enter the professional field.

Sources:
Hoover, Dave, and Adewale Oshineye. “Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman.” O’Reilly Media, 2009.

From the blog CS@Worcester – Tech. Worth Talking About by jelbirt and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Hi, my name is Abdullah Farouk and this will be my first blog of the semester and it is based on the readings from chapter 1 and the introductions of chapters two through six.

I did not know what apprenticeship actually means until after reading these chapters. From what I understand, It is basically learning from more “experienced” coders on how to be a better developer. Dave’s story was pretty cool and awesome to read as it gives me more motivation and I can see how good it is to get some help sometimes. From the three stages he provided for us in a developer’s career, I think most people are stuck between an apprentice and a journeyman with very few people in the masters category. An apprentice is someone who still has a lot to learn and wants to improve their way of doing things. I believe I am at this level right now because I still have some areas in my field that I need to upgrade or work on with my team or the professor. This gave me extra motivation because I want to be in the journeyman stage, at the very least by the end of this semester. Our professor would be in the “masters” category because he is very advanced in his area, performs the roles of a journeyman and is focused on moving the industry forward by teaching us and advancing the Worcester state pantry website. I do agree with these roles but I do think that there should be another category because there is a lot of difference between a journeyman and a master and that gap should be filled and made its own category. I like the idea of always wanting to improve and adapting based on the feedback people give you. The author talked about “a belief that it is better to share what we know than to create scarcity by hoarding it.” I found this quote very interesting and I 100% agree with him but I feel like this only is true in the computer world since people go off each other’s ideas and make changes to improve it. After reading the introduction for chapters two through six, I think I have found what my next blog is going to be about so it is giving me something to look toward and forward too. I will see you on the next blog, hopefully. 

Website: https://www.oreilly.com/library/view/apprenticeship-patterns/9780596806842/ch01.html?_gl=1*2xjvhe*_ga*MjYwNDQ1ODc5LjE3MDY1NTY4MTg.*_ga_092EL089CH*MTcwNjU1NjgxNy4xLjAuMTcwNjU1NjgyMy41NC4wLjA.#introduction

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

Embarking on the Final Chapter

Greetings, fellow enthusiasts of code and programming! I’m Hieu Tran, a senior majoring in computer science, and I’m thrilled to welcome you to my latest blogging adventure. As I step into the realm of CS-448 Software Development Capstone, I can’t help but feel a blend of excitement and anticipation.

This blog marks a significant milestone in my academic journey, representing the beginning of my final computer science course before donning the cap and gown in May 2024. The Software Development Capstone promises to be a culmination of the knowledge and skills acquired throughout my studies, providing a platform to showcase and apply what I’ve learned in a real-world context.

As I navigate through this capstone experience, I’m eager to share my insights, challenges, and triumphs in the realm of software development. From coding intricacies to project management strategies, I aim to document the various facets of this course that contribute to my growth as a computer scientist.

To my fellow readers and learners, whether you’re a seasoned developer or just starting your coding journey, let’s embark on this final chapter together. As I delve into the complexities of software development, I invite you to join me in exploring the ever-evolving landscape of computer science.

Here’s to a semester of learning, coding, and making the most of every opportunity that CS-448 Software Development Capstone presents. May this journey be as enlightening and rewarding for you as it promises to be for me. Cheers to the coding adventures that lie ahead!

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 Power of Community and Collaboration in Software Process Management.

In the world of software development, there is an old saying “two heads are better than one” that has taken on a whole new meaning. Modern software development is often a complex interplay of various skills and perspectives, and it is through a community and in collaboration that the collective genius of a team truly shines. By working together, developers can leverage their unique strengths to produce code that is both efficient and elegant.

Collaboration within a community means the free exchange of knowledge. Developers can share their insights, tips, and tricks, leading to a collective increase in skills. This not only benefits the individual but also enhances the overall quality of the software produced.

Community involvement often means peer review becomes a standard practice. Code reviews by fellow developers help identify and rectify issues before they become critical, ensuring a higher standard of code quality.

A strong community fosters diverse expertise. When developers with varied backgrounds and skillsets come together, they bring fresh ideas and problem-solving techniques to the table. This diversity can be a catalyst for innovation, leading to the creation of more robust software solutions.

Efficiency and productivity are crucial in software development, where tight deadlines and shifting project requirements are the norm. Community and collaboration bring a host of benefits in these areas. This usually entails task allocation, shared responsibility and furthermore some feedback given. This ensures full effective productivity in a team.

As we look to the future, the role of community and collaboration in software process management is likely to expand. With the advent of remote work and online collaboration tools, developers from different continents can seamlessly work together.

GitHub, the largest platform for hosting and collaborating on code, has seen exponential growth, with millions of developers contributing to projects daily. Platforms like GitLab and Bitbucket also play crucial roles in promoting community-driven software development.

Furthermore, open-source projects continue to thrive. The Linux Foundation, in its annual report, highlighted a growing number of open-source projects, reflecting the sustained interest in community-driven development.

In conclusion, the power of community and collaboration in software process management cannot be understated. By coming together, sharing knowledge, and working towards a common goal, developers can drive innovation, enhance efficiency, and foster a strong sense of togetherness in the ever-evolving world of software development. The success of the entire industry is built upon these foundations of unity and shared expertise, and it continues to thrive thanks to the collaborative efforts of developers around the globe.

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

First Post

Hello World! This is the first of hopefully many posts here… As a CS student I was tasked on making a weekly blog regarding my progress throughout the semester as I learn more stuff about software design through the course lectures, podcasts, and articles I find across my stay at WSU. I think this journal is a great idea. One thing I remember from a previous psychology course is that writing things down is a great memory reinforcement tool so hopefully whatever I jot down here I will be able to recall when I need it the most, not only that but I think that making this blogging thing a weekly habit will help me be more consistent on my extracurricular projects, because I must admit that I tend to neglect past projects whenever I start a new one, which happens often on a whim. This is the main reason why I added an archive, and made public a list of personal projects, so that in essence I am hanging my work on the wall ready for everyone to see, regardless if anybody actually sees it or not, the peer pressure I get from posting unfinished ideas will entice me to put more effort and love into them so that they stop being merely just ideas and become a finished product instead. Even if the quality leaves more to be desired, I must learn to finish what I start! So, in a sense, if this blog helps me be more consistent with my schoolwork as well as my personal projects, I would consider it a huge success. But I don’t want to stop just there.

I aspire to be a software developer one day, doing what exactly I am not entirely sure, but if there is any constant among every respectable professional out there is they all have some sort of journal that they share and discuss their findings as they develop new tools and design features for their projects (just like this school project!). Collaboration is a big part of this career, programmers borrow and share code all the time, so I think it’s fair play that we also share concepts and anecdotes with each other too. My goal with this website therefore is to join the cool kids club and write stuff down not only for me but for anyone that’s following my steps, of course there is not much to tell right now but who knows when it might prove useful one day.

I’ll stop daydreaming for now and get started

From the blog CS@Worcester – Andres Ovalles by ergonutt and used with permission of the author. All other rights reserved by the author.