Practice, Practice, Practice…

Summary:

The pattern is about emphasizing the importance of practicing our skills, coding in this scenario, to become the master in that particular skill set. The pattern states that we need to keep practicing every time we try to master a new skill. The pattern also recognizes that our work life balance does not provide a safe or stable enough environment for us to keep practicing. The solution provided by the pattern is that we organize our days. To join people, face to face or online, and to practice coding or other skills as part of a community. The pattern also points out that we need to make time and create safe & stress-free environment, because if we are not in a relaxed state then we will not be able to learn from our practice.

Why this pattern?

From the first year to last year, I have been using and writing codes in Java language. Entire semesters have been dedicated to learn and practice Java concepts. However, in a span of few months, I had to learn languages like python, R, JavaScript; frameworks like Junit, mocha, and many other things like VS code, Node.js, docker, R studio, Jupiter notebooks, etc. Therefore, I may not have mastered Java completely, but I am definitely far more confident and competent in Java than any of the things I have learned in the last year. Its like Bruce Lee said,” Practice makes perfect. After a long time of practicing our work will become natural, skillful, swift, and steady.”

Where I disagree:

To put the practice of practicing over and over is far easier said than done. Over the last few months, I have been swamped. Unless I start polishing my skills when I am eating and using the restroom, I do not see a way I can manage a time schedule where I can successfully complete my workload and carve time out for practicing.

The problem with community practicing or group learning is that every has their own schedules. It is next to impossible to co-ordinate meet times and even if that some how works out, different people want to work on different set of skills.

The point where I disagree the most is that while working in this safe and personal environment, we have almost no help or oversight. If we are stuck on some problem, it will be difficult to find help; or worse we keep practicing the wrong way without anyone there to correct us and now we have wasted all this precious time.

From the blog CS@worcester – Towards Tech by murtazan and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Sustainable Motivations

The ‘sustainable motivations’ apprenticeship pattern discusses the realities of beginning a career in software engineering. In the process of developing your skills, you may be stuck working on projects with obscure specifications and fickle clients. This work can be, as Hoover and Oshineye describe, “rigorous, sometimes tedious, sometimes exhausting, often frustrating, and frequently overly chaotic or constraining,” and it may start to wane on your motivations. The trick is to not become wrapped up in your motivations; you should recognize that some days will be harder than others. You should not be driven by a single desire; if you are motivated only by money or a desire to build your reputation, you might burn out and lose that motivation. Your motivation should also come from wanting to master your craft

I thought that this apprenticeship pattern was really interesting. I think it highlights how easy it can be to become disheartened with your work, especially if you are not properly motivated. It can be devastating to invest time and money into a career you wind up losing interest in, and it is helpful to see advice on avoiding this.

I like the suggestion to have multiple motivations for working; obviously, if more factors are motivating you, you are less likely to lose interest in your work. The suggestion to, in addition to your other motivations, be motivated by mastery to avoid stagnating your skillset seems very useful. I also like the advice in this apprenticeship pattern to maintain a good balance between your work and your life. I think a healthy work-life balance is so important; your work should not demand so much of you that you are unable to enjoy other parts of your life.

I don’t agree with the first example discussed in the ‘solution’ section of this apprenticeship pattern. The person in this example hates the programming that their job requires, but they like the money and the reputation. The solution to this example is that they endure the job until it improves. I think this solution sounds absolutely miserable. I realize this is not as realistic a suggestion as it should be, but you should probably switch professions if you hate performing the main task your profession requires.

From the blog CS@Worcester – Ciampa's Computer Science Blog by robiciampa and used with permission of the author. All other rights reserved by the author.

Concrete Skills

In concrete skills, the main topic discussed is establishing discrete, provable skills with specific technology. By developing concrete talents, this elevates your values as a potential member of the team, increasing your chances of receiving an offer. The patterns explains, to obtain an offer, developers should showcase their specific skills such as certain languages.

This pattern is a great tool to develop. My personal skills (besides languages) are vast but I would say for me personally I still have the fear that my skill level is still not up to par with some of my fellow competitors. Constantly comparing myself to them when I should be focused on my own skill set and become the best at those skills while then taking on other areas that I may be weak in or want to learn more of in the future. Being able to scale each company on what they are looking for is what concrete skills have helped me understand.

Each semester I would take on a new language of skill framework to become better in that area to be able to have a variety of skills to bring to the table. I’ve become skilled at languages such as JAVA, Python, C+, MySQL and many others. Using tools such as Android Studio to create applications, GIT and AWS. By concentrating on become proficient or even an expert level at these skills, I will be able to showcase my skills to any professional team if such skills are required. This is better than reaching at skills that you haven’t gotten a clue on where to begin.

To better sell yourself, utilize the Breakable Toys pattern. The developer exhibits their talents in a distinct, particular and demonstrable context by creating personal, low-stakes projects. This shows the employer what your skill level is and what you can offer to the company.

From the blog CS@Worcester – The Dive by gonzalezwsu22 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns – Unleash your Enthusiasm

In opposition to my personal experience with almost every other pattern, this is one that I very much struggle with. I have enthusiasm for certain things, but I find my motivation and discipline to be very shaky in my average lifestyle. This might have to do with personal mental health struggles and general disposition, and to be fair I’m still young enough to be unfamiliar with a passion I could truly want to pursue.  

To be completely honest, I believe this is the most difficult pattern for me to grapple with. I’ve certainly been involved with different types of projects where I was more enthusiastic compared to my other teammates, but they are few and far between. However, something that I can aspire to learn is the freedom of my enthusiasm as a “responsibility of the apprentice.” I find this line to be profoundly interesting, as I would have originally thought that the more experienced veterans embodied this type of archetype. Upon reflection though, I realize how mistaken I was, as innovators can’t be pigeonholed into time spent in an industry; rather the fresh ideas that emerge from newly aspiring minds are the most important part of the process. Regardless, I’ve learned that despite age or experience, a person who’s passionate about whatever they’re working on has (somewhat) the inherent obligation to innovate in the industry they work in. 

Unfortunately, I’m of the mindset that one should do the bare minimum to pass as a competent employee; I don’t know if this is because I’ve worked enough minimum wage jobs to understand the dynamic, or if I’m a lazy person inherently. Not to say that going above and beyond is a bad thing, but that raising the expectations eventually leads to a standard for most people that is unfair and not an expected level of engagement with the job. 

Anyways, with the last portion of the “Action” section, I see a true position where I’m lacking in my work ethic. I’ve certainly been in the place where I’ve declined to present an idea that may or may not be applicable to the project in question. It’s not that I’m reluctant to share, but more so I’m not inclined to add an argument/idea where it’s not necessarily necessary. I absolutely contribute where I think an idea may be beneficial, but in my experience it’s not worth the hassle to say something that could be thrown out with a disregard to the necessity of the point being made. Regardless, I’m certainly going to take this advice to heart and implement it in the future.

From the blog CS@worcester – Dummies that Code by howbrash and used with permission of the author. All other rights reserved by the author.

Retrospective #3

Final sprint before I lose my maintainer status to the repository, this sprint objective is to clean up our workspace, fix some minor issues which have been around since last sprints, and left the next semester a decent documentation so they will not be confused like us at their first step with this repository.

To begin with this sprint, I started with an issue that I was not able to solve from last sprint, which is registering the backend application with GitLab CI. This issue was a bit painful because after we plugged in RabbitMQ, we had to modify the execution cycle. To be specific, the RabbitMQ server must be up for some seconds before the backend application and I thought that I should figure out a way to use the pipeline to build that RabbitMQ container before the backend.

I actually found out the solution for both the pipeline and the integration when we had a conversation with the Kubernetes team where they told us to have each image in a distinctive container. After that, I attempted a different approach, instead of trying to inject the RabbitMQ to the backend during pipeline, I would only build a standalone server and release it, then, the RabbitMQ container will be defined once again in frontend testing and integration consisting of necessary environment variables which will trigger the backend server properly once it is executed.

However, the server’s execution consistency is still roughed as sometimes RabbitMQ is not detected. Besides, it happens on some computers while others don’t. Specifically, it only runs on a strong computer. Therefore, we changed the assumed time to have RabbitMQ start with an environment variable so we are free to modify the runtime based on hardware.

Last but not least, I created two environments for the backend repository, one for development, one for production. The small difference but undoubtedly critical is the binding and `nodemon` execution. Binding the container to local is not visible without `nodemon` since it will restart the server for every change we made. However, the default `nodemon index.js` is not working properly on Windows operating system after bind while MacOS works like a charm. I Looked around for several days without rushing and I just found out that `nodemon -L index.js` will make it work regardless of the operating system, where `-L` is the legacy flag.

To conclude, I am proud of my team overall because at our in-person retrospective meeting of this sprint, by showing our work, the Professor said that it is almost ready to be released. Back when we began in January, we had a not working server and a vanilla JavaScript frontend, the objective initially was to fix the server and somehow pull the Vue-CLI up as soon as possible; now we have a functional page where guests can register with their information and submit to the database. I learned a lot from this experience, both technical and soft skills, and I am feeling grateful for being given a chance to work in this meaningful project.

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

Familiar Tools- blog 9

This week, I read a pattern called Familiar Tools. This pattern happens when you feel hesitant to let go of some familiar tools that will soon become obsolete at some point. Through this pattern, I can understand that everything has two sides, even familiar tools are not an exception. As the author said, familiar tools can help you solve problems quickly, easily beat another candidate in an interview or increase your productivity at work. However, if you stick to what you already know and ignore the changing of the world, your career will be in jeopardy. That is because over time, many new tools will emerge and some existing tools will become obsolete and lose their effectiveness. If you cannot throw away a part of your toolbox to discover something new and update your toolbox regularly, then it is like you are wielding a sword to battle in a world where everyone uses guns. There is no way for your existence in that world. Therefore, to solve this problem, besides constantly looking for new tools to update your toolbox, you need to face the challenge of giving up some familiar tools that will soon become obsolete to reclaim space for other new tools .

In my opinion, this pattern is really not difficult to implement. In other words, as an apprentice, I understand that it takes a lot of time to learn and get used to a tool, so letting go of what you are already an expert on can be described as feeling loss. However, I wonder what if I keep a tool that I will no longer need or use in the future? Or what if I use a tool I am familiar with, but it does not help me; on the contrary, all it does is make me feel like every problem is suddenly getting harder and I cannot solve any of them? For myself, those familiar tools have now become obstacles in my long career path. So, I never hesitate to replace outdated tools from my toolbox with new ones. In my opinion, throwing away my familiar tools, it may not be something I can choose, it is something that I have to do to advance my career.

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

Apprenticeship Patterns – The White Belt

I think this is some of the best advice that the Apprenticeship Patterns have to offer. Stagnating in the learning process is an incredibly difficult problem to resolve, as learning is such a unique process to each individual person. I learn quite differently from my brother, while he and I learn wildly different from my father. With such a discrepancy even within a family, I think this is a very poignant point to address. From a personal standpoint, I’ve certainly experienced this phenomenon to an extensive degree. My ability to intake new information varies drastically based on how interesting I find the topic.

As the author mentions, “Dave’s not knowing stance helped him to collaborate with the family to find solutions as a team.” I find this to be invaluable advice; maybe I’m a little jaded, but I believe most people have no idea how much they don’t actually know. The capacity of people to not understand how uninformed they may be on certain topics genuinely shocks me sometimes. Even worse, this type of person often thinks other people are wrong when they are woefully uneducated on whatever the topic may be. Apologies for ranting about this for so long; it’s genuinely one of the most frustrating things I find about the modern era. I blame the internet honestly. 

I don’t want to claim I’m an expert on people, but this is something common I’ve frequently observed in various jobs or interactions. To step off my high horse for a minute, I generally tend to regard myself as an idiot in most situations – not even as a self-deprecation thing. I find that humility in knowledge is one of the most valuable traits that anyone can have, in literally every situation. Akin to “not wanting to be the smartest person in a room,” I think there is, without a doubt, ALWAYS something that can be gleaned from a dispute or conversation. After opening up my biases or assumptions in some ways, my opinions have been drastically changed in ways I could have never predicted. Even if one is an expert at something, I find it incredibly important to maintain this white belt mindset.    

I realize I’ve definitely deviated from the original point of the pattern, but because I’m so adamant about this type of subject I felt the need to rant a little bit. Thanks for coming to my Ted talk. 

From the blog CS@worcester – Dummies that Code by howbrash and used with permission of the author. All other rights reserved by the author.

The Long Road

The pattern I’m going to look at today goes like this: Our culture is fixated on success to the detriment of true understanding of the work behind it. Consequently, there is pressure to abandon the craft at the first opportunity in favor of chasing success. The authors argue that you should push past that pressure, with the understanding that if you keep at it there’s no one you can’t eventually surpass.

I think the initial point about how our culture values fast, seemingly effortless results is insightful. In my experience, this is a pretty significant hurdle to get over to get good at anything. It can be difficult not to compare yourself to an imagined prodigy out there.

Broadly, I think it’s good to set your own goals, rather than chase illusory culturally-defined ones. I already have my own goals in mind that aren’t exactly things everyone wants, although I have a slightly different outlook than the authors here.

I think the authors, although probably not intentionally, frame things that everyone should expect from full time employment as either incidental and unworthy of consideration, in the case of money, or even a form of failure, in the case of retirement. If it were up to me, I would be content to do any type of work, with honing my software skills as a passion project. I unfortunately need money to live though, and the easiest path towards it is to leverage my interest in technology. The authors seem to view the need to make a living as incidental and irrelevant, but I don’t really think it’s harmful to your skills to not dedicate your whole life and career to honing them.

The authors also have a kind of competitive edge to their idea of personal development, suggesting that through devotion to honing one’s craft it becomes “realistic rather than vain to think about surpassing people like Donald Knuth or Linus Torvalds.” First of all, I don’t think realism and vanity are mutually exclusive. And furthermore, I don’t think this is really a healthy attitude to have. Why should you care about your skill relative to other people? How would you even be able to tell that you’re better than someone? Speaking from personal experience, I think the need to be better than other people has the potential to be really harmful to your own development. At least, it was for me. To “surpass” someone isn’t really a concrete, actionable goal, and I think it’s illusory in the same way as chasing success in general. I think it’s better to instead focus on what you actually want in your life, and on the people in it as much as possible.

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

CS 448 Post #7

I continued through chapter 5 and wanted my next post to be about the pattern Share What You Learn before moving on to chapter 6 because it interested me most out of the other patterns. The previous patterns and chapters have mainly been about our own growth and journey, so it was interesting to read about how we can help others grow. While some patterns partially touched on this by talking about teamwork, this pattern isn’t about working with others and improving yourself and them, instead it is about you becoming one of the sources of research for others to learn from. Overtime as you grow and learn more, you will have more that you can share and pass along to others who want to learn from you. This can be done by starting a blog, making a book, or some other way that you can share your experiences and work. The blogs that I and other students have been writing is an example of that too. I like that it was also mentioned that even the people sharing with and teaching others also learn from those experiences, similar to teamwork. It was also important for the book to mention that some things should either not be shared, or should be shared by someone other than you depending on what it is, like personal information or secrets.

One experience that this reminds me of is when one of my teachers in school would ask about my work, specifically math in this case. The journal I worked in for that class would sometimes have messy work when I was going through the math problems, and I wasn’t thinking much about how the work looked. The teacher for that class mentioned to me that others may want to see my work and learn from it, whether it be other students in the class, or even other people who may come across it after I’m done, so I should try to make the work more easy to understand. At the time, I didn’t think anyone would want to look through my work or think that it would help. Part of that was doubt in what I was doing. I’ve been considering it more in recent years, especially after reading through this book, that others will want to see my work and that some people may learn from it.

From the blog Jeffery Neal's Blog by jneal44 and used with permission of the author. All other rights reserved by the author.

Retreat Into Competence

The problem being discussed here, like many others in this book, is something that I think is intrinsic to any kind of professional development. It’s the sensation of being out of depth in your work, a feeling that creeps into your thoughts, slowly atrophying your confidence.

At first glance, it seems like something that shouldn’t matter. You either know what you’re doing or you don’t, right? Why should your feelings about yourself play a role? That’s how I used to feel, and I also used to be pretty abysmal at putting in the work to get anything done, whether professionally, academically or personally. As unpleasant of a reality as it is to deal with, we are not machines that can churn out code like a printing press so long as things are physically working. Something I’ve learned the hard way, which this article touches on, is that you need to be firing on all cylinders emotionally as well as physically in order to actually do your best.

The solution proposed here is to prioritize something you know specifically for the sake of rebuilding confidence, rather than simply productivity. This could actually mean sacrificing productivity in the long term, but the feeling of competence is critical. Even if you don’t think this would work on you, you’d probably be surprised.

You will not be an expert at every problem. The key to building your expertise is to connect things you can do well to things you can’t, and sort of expand your understanding from there.

For example, I struggled quite a bit with Thea’s Pantry when I was getting started with it. The whole ecosystem of tools seemed extremely unintuitive to me. The turning point for me came when I realized that everything my project was doing started with running the index.js file, similar to how in most programming projects you have a main file where the execution begins. First, I started familiarizing myself with Node.js, the runtime for the project. Then I started looking at the other tools we were using, listed in the documentation, and trying to see how each fit into the flow of the program, like how external libraries fit into a more conventional application. This took time out of my work, but that time was critical for building my understanding.

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