Apprenticeship Pattern: Expose Your Ignorance

This pattern I chose was something that jumped off the page at me. IGNORANCE was the word that captured my attention, but what kept me reading was how interesting the pattern is. Exposing your ignorance means owning up or confronting the area of your jobs that you might not be good at. It take a… Continue Reading →

From the blog CS@Worcester – Computing Finn by computingfinn and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns – Use the Source

Use the Source is about the importance of reading other people’s code. Reading code is important because it is the only way to truly understand a system. Without studying and emulating examples of good code, you may never realize the bad habits that you have. A good practice is to read the code of the applications and tools that you use every day. By doing this you will learn good programming practices and start to understand the systems that surround you. It is also important to have other people read your code. Taking feedback from others will help you become a better programmer. Thanks to the large amount of open source projects available, it’s possible to read or contribute to a wide variety of projects built by the global community of software developers.

I enjoyed reading this pattern and found it to be extremely relevant. It is true that the only way to really understand code is to read it. I found it interesting how the author said that working programmers spend far more time reading code than writing it. If your only experience coding is what you’ve done in school, that might be hard to believe. But it makes sense for a number of reasons. Professional developers work on projects much larger than those that students work on, and all of that code must be read in order to understand it. Developers also don’t want to reinvent the wheel for every project, so a lot of time is probably spent reading implementations that others have created. Being able to quickly understand what a piece of code does by reading it is an important skill that isn’t taught in school. To become a great developer, you have to spend a lot of time reading other people’s code. This will introduce you to new ideas and better coding practices.

I thought that this pattern was very useful. When I have wanted to improve my coding skills in the past I have always tried writing new programs. I never realized that reading code is just as important. This is a great pattern that I will definitely try to implement in my life.

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

Apprenticeship Patterns – Rubbing Elbows

The Rubbing Elbows pattern is a solution to the problem of productivity reaching a plateau. If you always develop software by yourself, you may eventually get the feeling that there are superior techniques that you don’t know about. In order to fix this, you must rub elbows with another software developer. This means you must work on a hands-on task, side-by-side. This is necessary because there are some things that can only be learned when you are sitting with another software developer working to accomplish something.  There are many little techniques that can only be picked up when collaborating closely with somebody. The author uses pair programming as an example of this pattern. Apprentices should always look for opportunities to work on teams that use the technique of pair programming. However, pair programming isn’t the only application of this pattern. You can collaborate on a number of things such as a presentation, academic paper, or an open source project’s sprint. The goal of this pattern is to find ways to expose yourself to the working habits of other skilled people so that you can pick up on those habits and refine your skills.

I think that this pattern makes a lot of sense. If you are programming by yourself all the time, you will almost certainly reach a plateau because you aren’t being exposed to new ideas and techniques. Reading this pattern made me realize how important it is to work side-by-side with other people. It is true that by doing this you will pick up on the small techniques that the other person uses, and will learn things that can’t be taught in a book or classroom. I really liked the Richard Sennett quote about the ideal craft workshop. It captures the idea that gaining knowledge isn’t just about listening to words, but absorbing the thousands of little techniques that make up a skill. After reading this pattern I have a greater appreciation for pair programming, as I now realize the benefits of working on a task right next to somebody. Overall I found this pattern very useful and it has inspired me to rub elbows with fellow software developers.

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

Practice Practice Practice

Hello again! For this week’s blog I have chosen to write about the chapter from our textbook entitled “Practice, Practice, Practice”! The reason I chose this is because I saw it in the table of contents and it looked like something relateable and interesting to read. So without further ado, let’s jump on in to the chapter “Practice, Practice, Practice”.  The problem set up by this chapter is that you are always switched “ON” which never gives you a chance to learn from your daily programming mistakes. The book says its almost as if you’re always on stage. I feel that this can happen easily especially in a fast paced work environment like software development. Things in this field are always growing and changing and twisting and turning. Monday you might get assigned a project with requirements ABC and by Wednesday those requirements have changed form ABC to XYZ and the project now no longer holds any resemblence to the original project. In this case it is quite easy to get lost because you don’t have time to learn from your daily mistakes if you’re always trying to play catch up. The solution set forth by the book is interesting, however quite elementary and almost common sense. The main objective of the solution is to practice coding in an environment with zero pressure and in a place that you are comfortable and it is okay to break things. In other words, make a personal project at home or someplace other than work where the end objective does not matter, there is no customer or end user on the other side, and you can be free to break things and learn why they broke, then fix them at your own pace, allowing you to learn more so than if you were to be pressured and rushed to fix breakages in the field. There are many different ways to practice without interruption at your own pace where the actual environment does not matter. I think that it is one of the strongest ways to learn. Not only because you are teaching yourself (because you know how you learn best!) but because the environment in which you’re learning is truly stress free and problem free. Did it break while you were working? Who cares! It isn’t effecting anyone other than you. So take your time, work through the breakage, and fix it at your own pace and learn why it broke and how it was fixed!

From the blog CS@Worcester – The Average CS Student by Nathan Posterro and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns: Craft over Art

While forms of craft and art may seem similar to one another, sometimes it is important to note the distinction. This is the exact distinction that Craft over Art outlines in Chapter 3. The point is that crafts have utility, and works of art are made for beauty and reflection. It’s important that, if you’re crafting something, that you treat it that as it is meant to be treated — because it is something that may be used in the future by someone else. Sure, there is room for artistic expression in your craft, but they shouldn’t be anything more than decorative or stylistic touches. As they point out in the book, craftsmanship is built on relationships. It’s about delivering value to a customer and using that to earn your living. Art is usually something that comes from a very personal, self-reflective place that others may connect with. “After all, there’s no such thing as a starving craftsman.”

I like this pattern because it encourages the reader to focus on doing something useful as opposed to something beautiful, as stated in the action paragraph. I feel as though this is important because as of late, I’ve been focusing on this a lot myself in anticipation for upcoming coding interviews. Although I may not be working on things I find myself feeling extremely passionate about, I do feel happy working on what is expanding my skill set. Practicing the language fundamentals of both Java and C, doing interview-style questions, and my independent study have been a blessing in terms of knowledge and learning. They’re all things that will allow me to push the boundaries of my skillset for my future projects.

I will disagree partially with one thing about this pattern, though. I feel as though with the degree that web development, specifically front end, revolves around design choices, that programmers with an artist’s mindset have become extremely valuable. With the amount of emphasis placed on good website and app design, there is absolutely a place for those programmers who seek to make beauty with code where there may have been less of a place for them in the past. Granted, these are UI/UX designers who are partaking in a craft themselves — their art has utility and is meant to be used by others.

Regardless, I found this pattern fairly interesting as a reflection of what programming is and what it is meant to be. Placing yourself in the mindset of a craftsman makes a world of a difference (at least, to my geeky brain) in terms of how you should conduct yourself in the work environment.

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

Apprenticeship Pattern “Nurture Your Passion”

In this week’s post, I will be discussing the apprenticeship pattern “Nurture Your Passion,” as presented by Adewale Oshineye and Dave Hoover.
I chose this chapter because I think I have felt like I’ve been just getting by for a while now. The  problem it identifies as, “You work in an environment that stifles your passion for the craft.” I don’t think that’s quite fair to my school or professors. I think that in any discipline, if someone is only studying for the tests or working on the assigned projects and calling it a day when they have passed them in, they are not truly adopting the apprenticeship mindset.
Without a constant push forward, I will stagnate. I may get an “A” on the exam or project, but if I forget the material the next day, there is no point. The pattern suggests finding something that sparks interest and pouring myself into it. I have been wanting to do this for a while, but I have made excuse after excuse of not having enough time. The next sentence in the book says “consider putting in extra some time.” It often feels that is easier said than done.
I am reminded of the quote in the beginning of one of the chapters from this book by CS Lewis.  There should be no excuse for starting work. “Favourable conditions never come.” I got very little done over winter and spring break, and I won’t start the next break if I don’t start now.
The pattern goes through some other patterns and notes their relevance. I have blogged here about a few (e.g. “Kindred Spirits”), and a few others piqued my interest, so I read a few of them as well. “Breakable Toys” seemed particularly interesting. I may write here about it in the near future if another pattern doesn’t catch my eye.
I really liked the action. It was while commuting to work, think of three positive ideas to talk about, and when feeling down, shift the energy to one of the exciting ideas. They say this is to avoid getting dragged down. Furthermore, on the way home, they say to reflect on how successful the day was, and think how to improve my environment.
I like how this is a very achievable action. It doesn’t require me to spend any extra time on it. I commute to and from school everyday, and it will likely be the same when I start in the workforce. More often than not, I am already thinking about this sort of thing already, but in a different context. This will be a very natural thing to shift my way of thinking. I could see myself implementing this from here on out.

From the blog Sam Bryan by and used with permission of the author. All other rights reserved by the author.

B10: Sweep The Floor

          The “Sweep The Floor” pattern is described as a way be able find your place on a new team that is unsure of you. This pattern expresses how to find a way to earn your teams trust and contribute to their work without getting in their way. A good way to start is to volunteer to do simple tasks to show initiative and competence for small tasks to eventually work your way up to the big ones. An important fact to remember is to go for quality of work rather than quantity to ensure your teammates of how seriously you are taking this opportunity given by them. This may seem like a step back from all the studying and preparation you’ve done to get to the point, but you must also remember that now you are hired to be on this team. You must prove yourself before they can put any sort of trust in you and the best way to do that without causing any accidents are smaller tasks. This does not mean that you should let the team see you as the pack mule for meaningless tasks, but rather someone who can pick up the slack if needed.

         I found this pattern to be a great introduction to read before really starting out on a team. It allows an easier incorporation to the team dynamic and earn a teammates trust. It created a good sense of what to do and not to do so as to make sure that you are doing extra work for the good of the team while not becoming a pack mule. I want to start using these skills and think that they will definitely make working in a team easier. I think it will make the workload harder, but it seems to be a good trade off to earn the respect for other teammates. I agree with this pattern for that very reason because respect is a very big deal in teamwork. Every team member should prove their skills and respect for the good of the team. I want to continue this practice to make sure that my dedication and commitment to the team is seen to create a better bond with teammates.

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

Kindred Spirits

Week 9

My blog post this week will be on the Apprenticeship Pattern labelled “Kindred Spirits” which encourages the reader to seek out others with the same goal in software craftsmanship. This pattern applies to those that feel the current organization that they are in does not share the same goals as that individual; increasing his or hers software craftsmanship. Instead these organizations can be focused on one thing, getting the product out to consumers. Instead of letting this focus of the organization affect you, you have to seek out others with your same passions so that you can keep your own. The two stories the author uses I feel is a good example of showing how, despite either living on the other side of the country or from completely different organizations, finding a “Kindred Spirit” who shares the same goals of learning as you can be exactly what most people need. Something else that I like that the author points out is the dynamic of having a mentor, where if they start researching a new method or language, you as the apprentice may feel you need to follow suit and drop what you are learning. However, with a community of “Kindred Spirits” you are not obligated to follow their same paths but just to learn from them and show what you have learned in your own studies. One final thing the author points out that I think people forget about to often is the idea of “group-think”, or thinking about a problem as an entire group entity. The author makes note that you as the individual need to be able to still retain your own thought, and the ability to ask critical questions and not just go with the group answer. I like this particularly because I notice that I do this myself, when arguing with friends or work colleagues. People are far too often set in their own decision and I feel, from personal experience, it is always helpful to have someone there acting as the “devil’s advocate”. Even though I might not agree with some of the points that I am making, it is critical to be able to acknowledge and understand other viewpoints or ideas. Overall, this pattern to me highlights the benefits and encourages the reader about finding a community of like minded software developers to bounce ideas off of, as well as seek mentoring when you may not be finding the right mentoring at your current organization.

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

Sprint Review #3

Hello and welcome back to benderson’s blog! I know I posted yesterday but I recently finished another sprint in my software capstone class and thought that you would like to hear how it went, what we did and what are trying to do for our next sprint. Let me start off by saying that my teammates are very hard workers and great teammates for this class, I couldn’t ask for a better team to work with. This last sprint we had was good for the most part, some tasks weren’t completed but we made good progress on most of them which gives a good start for our next sprint.

Let me talk about what we did this sprint. We first decided that to get the most work done, we should split up the work a little bit and have people working on individual tasks to do for the sprint. Nick was working on coding a back end to the Libre Thea food pantry and getting that squared away so we could move forward after that and get more answers from our client on what they want. Nick even has a working mock up on Stack Blitz where it has the form that the client showed us that every person has to fill out once they go into the food pantry to take out food. Johnny was working on the database side of the project where he made a whole hierarchy of the database, what we need to include in the database and he even made a mock up one online with an application we used last semester in a database class. Andy was working on code for the REST API for the food pantry and was making great progress on it last time we checked up with him. Andy has also been working with some teammates from the other class that are also working on the food pantry to get the task done as efficient as possible. Nate was working on the CSS of the project where he was making it look pretty and having the Worcester State colors on it and it looks pretty nice so far. I was working on making sure we have everything set for this sprint, making sure we didn’t miss any features and I was also trying to code up a little mock up myself but I just let Nick do that since he was making a lot more progress than I was. After I thought my task was complete, I tried helping Nate with his CSS work on the program. This sprint went by pretty quick it felt, I think we missed some classes but Im not exactly sure. As I said though, we made some good progress on the tasks we had set out for this sprint and are hoping to complete what is on the backlog by next sprint so we can be closer to the final product at hand. That is basically all we did for this sprint this time, next sprint Ill make sure to write another review and let you know how it went. Thank you for joining me again today, have a good one!

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

Sprint Reflection 3

In our third sprint, we ended up having to revisit some of our previous work and recreate it, but better. After having a lot of difficulty with the previous way of doing it, using some old code from an old project, I decided to go with a more structured approach and read the guide on making template driven forms on angular.io. This guide was incredibly helpful in creating the form, as it has step-by-step instructions, example code and is very descriptive in the how’s and why’s of doing things.

Using the guide and their code as a template, I began to customize the intake form to the necessary specifications. I pretty much tried to recreate the “Thea’s Food Pantry Intake Form” given to us by the food pantry representative. I had to make different types of input for the text and the button input, and this time I was able to get some error-handling working, such as required certain fields before submission. Instead of using WebStorm as my IDE this time, I developed everything on Stack Blitz, a free online IDE and Angular editor that displays your application in real time. It was really useful to use, and hopefully once our group figures out its intricacies and how we can use it to collaborate within it, we can use it more in the future.

I was able to use some of the lessons learned in my Software Process Management class to make sure I maintained the clearness and readability of my code as well. I tried to use good spacing and white-space in the form so that it is clear where one module of the code ends and another begins. I also tried to keep my names both clear and consistent, so that variables containing the same information are named the same throughout the program. This is an issue that caused me much confusion last semester when I was developing a different web based form.

A unique issue I ran into while making the form was the compiler getting confused about the format Student IDs at Worcester State University have. Because my ID number is “0662077” the compiler kept thinking I was trying to use an octal, which would be something like 0x662077, and would not compile. I had to accept the Student ID as a string instead of text to fix this issue. Another issue with accepting Student IDs is that the program tries to get rid of unnecessary 0’s, which ends up making my ID Number different from what is desired. It took me a while to solve this issue, as I had no idea what was going on at first, but it was interesting to see how it could misinterpret my input data because of a preceding 0.

Overall, this Sprint was relatively productive for me, and I hope to continue going forwards. I have to find out what my next goals and challenges are and figure out what I’m doing next. Hopefully it will be something I’m familiar with.

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.