Apprenticeship patterns – Your First Language

This week i picked the pattern, “your first language”. I was very interesting reading it. I got to know more about why you should learned your first language to perfection. At least master it well before learning another language. From the reading, get a language you like and very easy to use, is the best way to be a better programmer by mastering it. The reason is because all the programming languages follow the say pattern. Only different statement but the same principle. So by mastering one and feeling very comfy about it, make it very easy for you to learn new programming language with ease.

From the readings, to my understanding. I got to know by becoming very good at your first language, you need to ;

  • Use the language all day, every day. Usually this means being full-time employed in the language.
  • Read all you can about the language. Especially, “best practices” and idioms.
  • Join a users group to talk with others about the language and what they do with it.
  • Work with other people’s code! There is no faster way to learn what not to do in a language than to have to clean up after someone who did something awful.
  • Support the code you write – every bug becomes a tour of your worst decisions!
  • Study computer science and languages in general
  • Learn a very different language. A great compliment to C would be a functional language like Lisp. This will turn the way you think about your procedural language inside out.
  • Learn to use the frameworks and APIs available for that language.
  • Take the time to do your own experiments with the language. SICP is not applicable to C, but the attitude of learning a language by testing its limits is a very productive one.
  • Read the history of the language to learn why it was made the way it is.
  • Attend conferences to hear the language authors speak, or to hear what industry leaders are doing with the language.
  • Take a class in the language.
  • Teach the language to others

As I said, reading this pattern made my understanding broadened. I really know by following the pattern given from the book will be a great fit for anyone who want to have a better and easy life at work in the future as a computer software or programmer.

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

Apprenticeship Patterns: Learn How You Fail

Similar to last week, I continued to read through Chapter 5: Perpetual Learning. This time, the pattern I am writing about is Learn How You Fail, and I’m finding it extremely relevant to my independent study at the moment. The pattern itself discusses that the path to success isn’t just all about learning and knowledge acquisition, but that it is equally important to pay attention to how your learning progresses and analyze why it stalls when it does — because it will stall. Sometimes we have behavioral patterns that negatively influence our ability to learn and perform. Once we become conscious of these behavioral patterns, we’re faced with a choice. You either accept that you will not change and attempt to collide with the issue forever, or you work to fix the problem. In the world of software development, this pattern may come up where there are gaps of knowledge in things that you have failed learning before. When you come across this, try sitting back and examining the trajectory you were on when you originally attempting to learn it and recognize what caused the interference. Try to reiterate on what mistakes you made originally, and intentionally spend time on those issues.

This pattern was particularly good for me to read at the moment because I’m attempting to tinker with the MINIX 3 operating system for my independent study and feel as though I’m struggling to make progress. I’m a fairly reflective person and I try to recognize any mistakes I’m making so I can work on them, but sometimes when something causes much stress and feels overwhelming it is very easy to get sucked in and forget the bigger picture. Taking time to step back, create a new plan of attack, and going at things from a different angle is key to overcoming obstacles. There is always an angle that will work, and it does just take finding it sometimes.

This, perhaps above any other patterns so far, may be the most important lesson to take from this book. It can be applied to every aspect of life and is absolutely critical for success in a field. Not only for success, but for staying in the right mindset (and for staying humble) in your advancement. Recognize that everyone, including yourself, has made and will make mistakes. It is precisely how you proceed forward from those mistakes that makes the difference in the long run.

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

Confront Your Ignorance

This method talks about how there are tools that we need to master but we may not always understand how to master them. A lot of the times we try to be a master of all, when in reality that doesn’t necessarily work all of the time. What I mean by this is that when we are faced with  a task, sometimes we think we understand each little aspect of the specifications. However, upon actually tackling that task, we aren’t really sure where to go. Like one of my previous entries on “Exposing Your Ignorance”, confronting your ignorance really focuses on selecting on skill, tool, or technique and really honing in to fill gaps in your knowledge about it. One of the points in this method that really caught my attention was it’s mention of humble, ignorant, and dependent team building. If you are working with a team of developers and each team member has this ideology that everything is “just because of the way it is”. this can lead to a multitude of problems.

One of these problems is bad team building. When you assemble a team of people for some sort of project, you want to be able to work together to share ideas. If a problem arises you all want to be able to come together and understand what the issue is so you can solve it as a team. If you all think that things are just the way they are because they are, this can often lead to disagreements among team members. Some team members might even think you are against them just because you disagree with them on something. It’s this idea of confronting your ignorance that is vitally important to understand. You should learn one thing at a time, that way when a problem arrives, you can put aside  what you know, and focus on what you don’t know. Failure in a public place can be embarrassing, but it is exactly these failures that make it better. If you failed at something, you wouldn’t want to be ridiculed for it. Instead, you should learn from it and always be willing to learn more and more about the issue.

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.

Craft Over Art

This week’s Apprenticeship Pattern was one that really got me thinking. This week I read ‘Craft over Art’. This pattern talked about exactly what the title says. It was more about focusing on the craftsmanship than the beauty of one’s work. I know that a lot of what I will be doing will not be focused on the arts but when I first started reading this article I thought it was very harsh their way of putting it. I thought that in any job you always want to improve yourself so doing projects that will make your work look better would be the ideal, but after reading their reasoning behind it I got a better understanding for their thought process. One point they had mentioned that I had honestly forgotten about was the feeling of the customer. The goal as the employee is to make the customer happy, and that is the main priority for any company I will be working for. This means that I will always need to place the interest of the customer first before my own needs, and that in hand does make me a better craftsman. This doesn’t mean that what I make has to look awful or unprofessional, but it also needs to be useful to whoever I am helping out. While you may get self satisfaction from something that you have made yourself that may impress your boss or colleagues, making the customer has its own satisfaction in itself. I really like how they mentioned that utility and beauty were interdependent of each other. They say that when a software is more useful there is more pressure and a need for it to be of high quality. I think for myself that this is a very important lesson and pattern to learn about. Everything I do I care a lot about the outer appearance of it. I care a lot about the image and how pretty it looks and sometimes I forget about the utility of the design. When I start working for other people and making products for customers, I will really need to think about how useful my software is and if it will truly make the customer happy. When working in a company, it is not just myself that I working with to make happy and useful, but a whole team of employees and customers.

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

Apprenticeship Patterns – Rubbing Elbows

My blog post this week will be on the chapter “Rubbing Elbows” of Apprenticeship Patterns, in which the reader is encouraged to seek out working with another fellow software developer. The basic thought behind this is that if you develop software alone you can reach points where your learning can stagnate, and cooperative work can get you to learn things in new ways. One very important point that the author made was the aspect of “micro-techniques” (small ways one developer has found to handle certain problems or situations) and how important learning them from other developers can be. This is important to me, and should be to others, because I feel I had to figure out how important those “micro-techniques” are first hand. When I first started working with software I was very independent, not wanting other people’s help. But, the longer that I have worked with software, and just worked in general, I have found out how important it is to see problems and fixes for them from other people’s perspectives. Towards the end of this pattern, the author again points out this importance of being able to see problems from others points of view, even if in the end you do not agree with another person’s perspective. One thing that I found interesting, and wound up doing more research into, was the idea of pair programming. The idea behind this programming technique is to have two programmers work together on one terminal with one programmer writing the code, while the other reviews each line written. This approach of matching a journeyman programmer with an apprentice I can see being very effective way for both the apprentice to gain critical knowledge and for the journeyman to progress further towards becoming a master by passing on his knowledge. One downside to implementing this technique with pair programming that the author points out is that the apprentice may often feel lost, but I feel this can be combined with another one of the patterns(Expose your Ignorance). In essence I feel that as the apprentice in this case, you have to be humble, acknowledge you won’t know much, and to ask a LOT of questions. Don’t ask just  one person these questions too, but ask other’s the same questions to see their perspective on the same problems.

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

“Sweep the Floor”

To continue with chapter four “Accurate Self-Assessment”, int his chapter we learn how to assessment ourselves. We learn our value in the team, how to work with each other. Everyone is beginner of craftsman at one point. We all at some point is a new apprentice on a project. This is where you’re unsure of your place on the team, and the team is unsure of you. This is not just when you are new software developer, its also apply to you are new to the group.

“Sweep the Floor”, a job not a lot of people want to do. Everyone in the group should contribute same amount of work, but that’s not always the case. Most people would want to be the best craftsman, but there are other important job that need to do. One way I discover while at school, to get group trust when you are newbie to the group is be active volunteer for work. We want to show our desire to work, it is the easy way for group get to know you. Also, a great way gets to know how the group operate/code design from bottom up. For example in the book, task as “maintaining the build system, production support, responding to maintenance requests, bug fixing, code review, eliminating technical debt, setting up the project wiki, updating documentation, acting as a sounding board for other people’s ideas, and so on.” This is do so for the group benefit. There are also a few negative consequences, your teammate also takes you wrongly as someone who doing job that no one else will do. You will not have opportunity to do changeling one. If we know our value, though our hard work we can earned their trust. With this mentality, we have the flexible to be in any environments. This also apply when there is other new addition to the group, you can understand them and show them the right way.

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

Journey into Concrete Skills (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 fifth individual Apprenticeship pattern I have chosen “Concrete Skills”.

Summary

Although you may have the skills to learn quickly, it is important to acquire and maintain concrete skills. This is because when you demonstrate that you have certain ability with specific tools and technologies it will increase your chances to be trusted enough to contribute with minor task until you start gaining stature, where at that point you will be able to contribute more directly. The concrete skills pattern suggests you to acquire the type of skills that would reassure your prospective team that they do not need to babysit you because you have skills that could be put to good use. It states that an “Examples of concrete skills include writing build files in various popular languages, knowledge of various popular open source frameworks like Hibernate and Struts, basic web design, JavaScript, and the standard libraries in your language of choice”. These concrete skills shows how you can benefit the company because it shows what you can bring to the table and be able to do on you first day of hire. According to the book a way you can show this by having “A deep understanding of Your First Language“. These skills are important in the beginning because as you “transition to the role of journeyman you will become less dependent on these skills, as you start to be hired on the basis of your reputation, your portfolio of previous work, and the deeper qualities you bring to a team”. Action to take are:

  1. “Collect the CVs of people whose skills you respect.”
  2. Identify five discrete skills on the CV for each of the people you chose, and then determine which one is useful for the kind of team you want to join.
  3. “Put together a plan and a toy project that will demonstrate that you have acquired these skills. Implement the plan.”
  4. Make sure you go through your own CV and separately list the concrete skills.

My Reaction

This pattern stresses the importance of developing concrete skills that would help you get hire in a job market. 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 sharping up my concrete skills in order to show how I can be beneficial in the work place environment.

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.

Apprentice Pattern – Sustainable Motivations

The apprenticeship pattern “Sustainable Motivations” refers to the situation in which you want to develop your technical skills but are faced with the messy reality of ambiguously specified projects for customers with shifting and conflicting demands. This is often frustrating because the best motivator for a programmer is being able to do things their own way, but you often won’t be able to have this motivation because you’ll be forced to work on problems no one wants to do. It’s crucial that you find sustainable motivations that push you to achieve mastery.

What I found interesting about this pattern was that it talked about some of the “ugly” parts of the software development world: working on tedious tasks you don’t enjoy working on or becoming frustrated with ambiguous specifications or conflicting demands. It’s hard to stay motivated when you aren’t enjoying what you’re doing, but you need to remember why you’re doing what you’re doing. Being able to realize what motivates you to continue pushing yourself is something that’s very important if you ever find yourself questioning your commitment to the craft. I suppose that for some people, they may find that they don’t have many, if any, sustainable motivations and decide to quit in pursuit of another path. For them, it may be beneficial to figure out early on that this isn’t what they want to do. Others may be able to figure out why they continue to push beyond their frustrations.

This pattern caused me to consider what motivates me to continue what I’m doing. Obviously for someone who hasn’t fully experienced what frustrations are being referred to in the article, it’s hard to be able to decide if what motivates me outweighs the potential frustrations, so this is something that I’ll have to experience for myself before figuring out what I should do.

Writing down a list of things that motivate you and keeping that list with you is a great idea to be able to push you whenever your feeling frustrated. If you aren’t able to come up with sustainable motivations, perhaps it may be time to think about if you’re walking on the road that you actually want to walk on.

From the blog CS@Worcester – Andy Pham by apham1 and used with permission of the author. All other rights reserved by the author.

Best of the Worst

This week, I read all about an apprenticeship pattern titled Be the Worst. This pattern details the benefits of being surrounded by people who are smarter than you and have more experience than you. The idea behind the pattern is that the more time you spend around others, the more information you can learn from them. Why spend your time figuring out a problem somebody already solved when you can learn the veteran’s way of handling it from a colleague? Surrounding yourself with more advanced developers can help build your skills and gain experience in ways you wouldn’t if you were learning concurrently with them.

This is a pattern I can absolutely relate with from experience. Some of my best classes where I learn the most are the ones where there are a few peers above my level to help me learn what they already have. Sometimes, the way someone explains something to you is difficult to make sense of, but another peer can explain it in a way that makes more sense and is easier to understand. Similarly, working with many people above your level gives you a wide variety of different methodologies and ways of doing things, which can help illuminate best practices and start insightful conversations.

The alternative, being the smartest person in the room, can be very unchallenging and doesn’t give you any room for development. It is nice to Share What You Know, but if that is all your doing it can be hard to progress your personal goals. A large disparity in the skill level of developers causes more time to be spent on closing that gap rather than working on the project at hand.

The challenge with this pattern is more the emotional toll it can take on you to be surrounded by smarter people. Being the dumbest person in the room can be beneficial from a self-centered learning perspective, however it can definitely feel a little embarrassing to be so far behind everyone else. Being able to swallow your pride for the development of yourself and the team is a challenge, but the rewards are worth it.

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.

Apprenticeship Blogs: Draw Your Own Map

Hello and welcome back to benderson’s blog! On this edition of benderson’s blog, we will be discussing another pattern from the Apprenticeship Pattern book that contains many patterns that influence a computer scientist and how they should approach certain obstacles in their career. The one I chose today is called “Draw Your Own Map” which discusses the problem of your employer not having the career path that you want to do or fits your plan in your career. This really impedes your production to reaching your future goals and becoming the best you can be. The solution that the book provides includes identifying the next step for your career and what you think should is the next stop on your path to becoming the best programmer you can be. If your job doesn’t meet your vision that you have yourself then you should start to seek other opportunities where you feel that it does meet your vision. You should also reassess your map as your journey changes, you may run into obstacles that are too big for you and you want to take detour, or something just isn’t right to you and you want to try something else. There is no map that is always right as changes always happen. The action the pattern suggest is to web storm where each of your jobs go and see if that map is good for you and fits all your goals if not keep trying until you get a map that does.

The reason I choose this pattern for this week is because as a Senior computer science major, I don’t really know what my map looks like right now. I work at a grocery store and I know that doesn’t have anything to do with computer science so once I find my first job in the computer science field, then I will be able to draw a map to see where I could end up. I could draw a map now but I don’t know exactly what I want to do after college yet. Since I’m a software concentration major, I would want to do something with software and software development but will see what happens when I start job hunting. My big goal in life is to create something revolutionary that changes how people perceive technology and apps, another big goal of mine would be working on video games at a company such as Microsoft or Sony. My map hasn’t been fully made yet but for sure one day I will be able to create it and find my journey as a computer science major. Thank you for joining me this week on benderson’s blog!

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.