Practice Makes Perfect

Practice, Practice, Practice is an apprenticeship pattern that is all in the name. The pattern encourages one to constantly practice their craft. The goal is to eventually rewire the way your brain works and thinks about things until it is old hat and you can move on to practicing something else. As a pattern, its uses and merits are pretty obvious. The more you do something, the more you get used to it and commit it to memory, and therefore the easier it becomes to do that thing again.

As the text highlights, an important part of practice is that it is not stressful. It is challenging for many to learn in a stressful environment where deadlines and other stressors may come into play. Therefore, it is important to separate your practice from your work. Although you can still learn plenty of lessons from doing things, it is practicing the basics that will lead to a stronger foundation to support new knowledge.

I could personally benefit from more practice. As I have moved on to more advanced topics in Computer Science, I have found it important to constantly refresh myself on other things that I have learned. It can be hard to try to retain so much knowledge, and I think employing more practice more often would help me with that.

A way I often practice is to repeat assignment I’ve done that I struggled with, especially before a quiz or exam. Doing the assignment over and over again helps the process become almost muscle memory and helps me retain the knowledge for the quiz. It is something I need to do more often, and during more times than just quiz or test periods, as I absolutely benefit from the experience.

Everybody wants to practice their skills, but sometimes it is hard to find really effective ways to do it. I certainly need to find more effective methods of practicing, especially when it comes to answering job interview questions, as it doesn’t seem to get any easier. I believe that in time and with enough practice, anybody can learn anything.

From the blog CS@Worcester – Let's Get TechNICKal by technickal4 and used with permission of the author. All other rights reserved by the author.

Reflecting on “Apprenticeship Patterns” – Practice, Practice, Practice

The time has come where I need to start looking for jobs in the field of software development. These jobs require rigorous interview processes, which generally include some sort of coding assessment; in fact, I just took such a test only a couple days ago. I want to ensure that I will do the best that I can do during each assessment, while also continuously improving so that my performance will get better with each interview. This growth requires practice, practice, practice, which, conveniently, is the pattern that I will be discussing this week.

Practice, Practice, Practice, as the name of the pattern suggests, describes the ever-present need to keep up with skills and striving to improve upon current level of skill. One of the common challenges, though, is that an apprentice may only have the opportunity to practice in the workplace, so that there is a risk to make mistakes with potentially harmful effects. Apprentices should have the opportunity to practice techniques outside of this environment so that there is room to make mistakes. When there is the looming pressure of causing lasting damage should the on-the-job practice go wrong, it can definitely be stressful for the apprentice. This could result in a lack of learning from any mistakes made from the process. The whole point of practicing is to ultimately learn from it, and so it is imperative to separate practice from job training.

I completely agree with the points discussed from this week’s apprenticeship pattern. It’s so important that I have the chance to make mistakes and learn from them, without having to worry about messing something up in my job’s overall system. It’s also important that I keep working on my skills in general. As I keep applying to development positions, I need to (and will) make sure that I maintain a level of consistency with my practice exercises. Using online tools such as code katas, as described in the apprenticeship pattern, as well as other resources, I have plenty of ways to implement high-quality patterns of practicing.

Thanks for reading!

From the blog CS@Worcester – Hi, I'm Kat. by Kat Law and used with permission of the author. All other rights reserved by the author.

Balancing solo-work and team-work

For the eighth week’s reading, I chose to read the pattern, Confront Your Ignorance. This pattern takes on the problem that you have gaps in your skillset that is needed for the job. These could be tools or techniques that you are already expected to know but you don’t and need a place to begin. The solution to this problem is custom to the person in need, there are many different ways to start. Two ways suggested are trying to start with introductory material or jumping straight into hands on learning. It is mentioned that even if you are doing this in private to learn and apply it in the workspace, there are issues that could arise. One is that you are using work project experience for private projects solely for yourself and not the team. Another would be that the team will not be able to help you, learn with you, or help you along the way. As an apprentice, you should be learning in public where others can see the way you work.

The interesting part of this pattern is about the negative side effects from learning in private. When you work as a team, it is expected that you fail together, learn together, and learn from each other. By working solo and focused on improving your own performance, you are neglecting your team in the process. Another negative would be that you chose to implement a feature or system that has already been created elsewhere. By implementing your own version of it, the other members of your team are now required to learn from you about the system. This is a drawback and should be carefully considered when valuing your company’s resources and teammates workload.

This pattern has caused the way I think about my intended profession because there is a need for balance in terms of solo and team activity. If the workload shifts towards solo, then you aren’t benefiting your community. But if the workload shifts towards the team, then you are over reliant on the team. What I learned is that, you must know how to balance your learning such that everyone is winning in the end.

From the blog CS@Worcester – Progression through Computer Science and Beyond… by Johnny To and used with permission of the author. All other rights reserved by the author.

Pattern 3 – The Long Road

I thought the title of The Long Road would make for an interesting pattern to read, so I chose it for this particular post. This pattern describes the path that a craftsman will have to take to become a master throughout their career. This is specific to becoming a master of software development and not particularly for what is traditional success in a career path that we as newly graduating software engineers are “expected” to follow.

For this reason, I honestly disagree with the general idea of this pattern completely. The pattern does make it clear that this is the path specifically for people whose life goal is to become the best at software development and does not seek anything else out of a career in software development. I don’t see this as the norm, or generally good advice in any regard. I also feel that it is important to state that this is merely my opinion, but also one that I strongly believe in. From everything that I read about software developers who stick strictly to software development throughout their careers, they often burn out but also feel that it is too late in their careers to do anything else. These are engineers in their late 40’s and 50’s who have been working for the same company for well over a decade and feel that their knowledge in software development is so narrow because of a lack of exposure to other tech and other business domains. While this is not always the case, this is just what I’ve read and have been exposed to personally.

The pattern also preaches how admiral it is to stick to this strictly developer mindset and how money and promotions should not be a focus for you. While I think that this is important to not be the only focus in a career, this is just silly. Promotions and salary should not be a measure of your success but they should be something we all seek, and a goal for people to strive for throughout their careers. The way this pattern is worded, it seems to try to even nudge readers away from positions like architects where you aren’t specifically writing code on a day to day basis. It wants readers to avoid big picture positions and exclusively stick to coding. There is always more to learn in coding and we should all do something we love, but coding should not be the only aspiration for our careers. For that reason, this article has not changed how I will approach my career, but possibly reinforced the goals I previously had.

From the blog CS@Worcester – The Road to Software Engineering by Stephen Burke and used with permission of the author. All other rights reserved by the author.

Breakable Toys

For this weeks blog post I will be looking into the Breakable Toy pattern. The context behind this pattern is that experience is built upon failure as much as if not more than success. This is something that most people will agree with that you cannot better yourself without failure or knowing your shortcomings. Say for example you are working in an environment that really does not permit failure yet failure is important to learn from your mistakes. This could cause you to play everything safe without being bold causing you to never truly get the most out of your job. By being bold, failing due to new tricks or the boldness can you grow into a better version of yourself when faced with difficult problems. In a way this pattern is very similar to Be the Worst, but that pattern is about finding a team where you can be the worst in order to grow. Breakable Toys is about creating opportunities to learn by going out of your comfort zone and single handedly building complete software projects. Using your favorite tools to build the worlds simplest wiki while still maintaining the highest standards of quality is an example that fits this situation well. The initial version will not be fancy in anyway but a simple user interface that lets you view and edit the plain text files. As the project moves along you can add more features and find new interesting ways to distinguish the project from the other pre existing thousands. Let your professional- interests guide you not the constrains of existing implementations. It does no0t matter what you decide to do in this project but as long as you are experimenting and learning from it you are growing as an individual. Back to the be your worst blog I wrote a few weeks back I completely agree with the breakable toy ideology. This is a very good mentality to have especially for your own growth one I would see myself using yet again.

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

Time to “Be the Worst”

My blog post this week will be on the Apprenticeship Pattern “Be the Worst”, in which the idea is that you may have outgrown your current team and possibly even the entire job. If this is the case and you wish to grow as an apprentice, then you need to find a new team or job in which you are the novice again. I like the premise behind this because it is pointing out to the reader to be humble; you may have grown complacent where you are and to truly grow you need to be tested in a way you can’t currently. One thing the author goes on to do is reference a drawing in the article saying of it “shows that as the weakest member of the team, you should be working harder than anyone else”. To me, looking back at the previous work experiences I’ve had, this is what I would do without even thinking about it in that sense. In working this way, starting as someone new in the company or industry, while I may have been very inexperienced, my drive to learn and to grow showed through to my bosses. I did this similar to how the author points out by, “…mimicking the stronger developers until you are on the same level”, or finding the best people at the job and asking how they would handle a situation. While my aim might not have been for it, this effort resulted in several promotions in a short span of time, clearly showing if the effort is there then someone is going to notice. Something that the author points out about this approach though is that is very much a “sink or swim” method, which can work great or you could possibly find yourself drowning. I like how the author also points out that as an apprentice you should not be so focused on the big promotions or the high paying positions but those positions which will result in you learning the most; “…as an apprentice, you should typically look to be led”. Overall,what I liked about and, feel this pattern was primarily trying to get the point across to the reader to not let your road be easy, but rather challenge yourself. To work from the bottom up because that effort will show through both in your work and to those above you.

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

Journey into Dig Deeper (An Individual Apprenticeship Pattern)

On this Software Development Capstone journey part of my assignment is to choose 10 Individual Apprenticeship Patterns out of 35 patterns among Chapters 2-6 from the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsmanby Dave Hoover and Adewale Oshineye. For my sixth individual Apprenticeship pattern I have chosen “Dig Deeper”.

Summary

Lets say you have a superficial knowledge in a programming language, a problem you’re not even aware of until someone puts you on the spot. This is also a problem because you will have trouble maintaining whatever issues you may come across.  This pattern is an encouragement and gives strategies for you to dig deeper and have a better understanding on your programming knowledge. The way it does this is by telling you to… “Learn to dig deep into tools, technologies, and techniques. Acquire the depths of knowledge to the point that you know why things are the way they are. Depth means understanding the forces that led to a design rather than just the details of a design.”. This approach in learning is important because it gives you a deeper understanding on a topic which can lead you to have confidence that will help guide you to have the strength you’ll need to guide you in new areas. “Another advantage of digging deep into a technology is that you can actually explain what’s going on beneath the surface of the systems you work on. In interviews, this understanding will distinguish you from other candidates who can’t describe the software they’ve helped build in a meaningful way because all they understand is one little portion.” Having deep understanding is an advantage because it will differentiate you from those who are just building rubble to those who are building cathedrals, which will open up many doors for you. In order to be considered a cathedral builder you must really know how to debug, reverse-engineer and be willing to “read the specification, RFC, or standards for the technologies you use”. An action to take will be to find books, open source resources, and anything else that will help you gain a deeper understanding.

My Reaction

This pattern stresses the importance of digging deep in order to have a deeper technological understanding of your programming language that would help you stand out in your team. I agree with this idea. I found this pattern interesting but also useful and thought-provoking. This pattern has definitely changed the way I think about my profession and the way I think because it has made me realize that I need to dig deeper in order to be beneficial to my team.

Thank you for your time. This has been YessyMer in the World Of Computer Science, until next time.

From the blog cs@Worcester – YessyMer In the world of Computer Science by yesmercedes and used with permission of the author. All other rights reserved by the author.

B8: Practice, Practice, Practice

        The “Practice, Practice, Practice” pattern is explained as one of the better ways to develop your skills in new areas and get better with hands-on learning. The book continues by saying that being able to learn skills on your own time gives you multiple benefits that can’t exactly be emulated in a work environment. In a work environment, you constantly feel the pressure of learning new skills and learning them quickly while practicing by yourself allows you to control the rate at which you want to comfortably learn. The main idea of this pattern is to have a stress-free environment for you to experiment and eventually learn in. The idea of integrating feedback loops should also be in the back of your mind since it could prove useful here. It is possible to develop bad habits as you practice so making sure that someone can give feedback on your practice afterwards is also crucial. This allows a better learning experience in the long run by quickly correcting any habits that form rather than letting them sit with you for an extended period of time.

            I found this pattern to be important and useful as a reminder to make sure that I keep practicing. It outlined the positives of practicing code and how to set a personal pace for learning compared to a work environment. I found that when the book talked about the fast pace of work being different from learning at home, it resonated with me much more. I want to incorporate this pacing technique for personal learning more to find out how it can affect my overview on a subject. I predict that it will allow me to continue learning without getting too burned out since I would be able to control the pace at which I want to digest information. This can be helpful because there are some days where I don’t feel like working a lot which allows me to control the learning load compared to days where I want to learn a lot. I agree with this pattern for that very reason, to be able to personally create my own time schedule as long as I continue practicing at a continuous rate. Practice can only make my knowledge base greater and it allows me to experiment with ideas that I wouldn’t be able to in a work environment at my own pace.

From the blog CS@Worcester – Student To Scholar by kumarcomputerscience and used with permission of the author. All other rights reserved by the author.

Craft over Art

This method talks about how indulging in your own artistic nature isn’t always the best option even if you think the product would turn out better if you did it this way. If you are being paid to build something that will solve a problem, this method of Craft over Art explains you need to really consider the situation at hand. In this method, the situation that is discussed is that you believe that you are able to do something outstanding and fantastic that will impress your colleagues. In this situation, you are building something for a user. You shouldn’t be indulging in artistic expression. A lot of the times when we are handed with a task, we can sometimes think about the most outstanding ways to do something, rather than just to get the task done. This can go two ways. Doing something outstanding for a task can be great and have it’s benefits, but what will it cost the effectiveness of it? On the other hand, we can do the task at hand and that will be that. We won’t be able to put any personal expression in it, but is that a bad thing? Of course it isn’t a bad thing. This method seems to be very similar to function over form.

It is a matter of situational awareness. This is something I really enjoyed from this article. Make more straightforward choices and do not try to “sugar coat” solutions. As soon as you start making unfavorable trade offs in certain scenarios, the outcome will not always be as you like. in other words if you want a straightforward answer, you should provide a straight forward solution. Even though this isn’t always the case, I learned that you should always try your best to just try and perform the basic tasks first without adding anything extra or unique. Quality takes time, but having the correct operations in a product is what can make all the difference.

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

Friendly Ghosts

Kindred Spirits is an apprenticeship pattern that revolves around mutual progress through your peers. Specifically, it is about making relationships with people where you can learn things you find valuable from them and share your knowledge with them when they are in need of it. This is especially important if you feel like you lack mentor ship and are trying to improve with somebody else’s assistance despite that.

The ability to form mutually beneficial relationships is an incredible skill. I’ve found that some of my greatest opportunities and chances for growth in life have come from others. Often those people are mentors, people who are there to guide you on your path and give you advice. But there are also Kindred Spirits, people whose trajectory in life is similar to yours, and someone who can offer you a different perspective or introduce you to a new topic. Obviously it is challenging to cultivate the sort of relationships that fit this criteria, and a lot of it feels like luck, but those relationships in my life where I’ve been able to learn alongside another and share knowledge have been truly beneficial.

One thing I definitely have to work on is being comfortable with reaching out to others for help and forming new bonds with people. There are a lot of great students in the Computer Science department that have a lot to offer in the way of knowledge, ideas, etc. Being more involved with the community at large would help me better prepare and get a grasp on my future. I never know the kind of help someone could offer, so it is important to find out for myself by reaching out.

Overall, I think Kindred Spirits makes a lot of sense as a pattern from my experiences. Working with other people is such a great way to learn and be exposed to new ideas, and I just wish it was a little bit easier for me. It is something I have to work on, as there is a wealth of knowledge to be uncovered that is contained within some of my fellow CS majors.

From the blog CS@Worcester – Let's Get TechNICKal by technickal4 and used with permission of the author. All other rights reserved by the author.