No Stranger To Shame

I think it’s a fair statement to say that anyone who has ever seen me fail, knows that I have often failed spectacularly. Failures of mine come with embarrassment, enigmatic errors and explosions as far as the eye can see. Long story short: I’m no stranger to shame.

Due to my experience with failure (and my tolerance towards the ensuing embarrassment), I often fail without thought or fear. This is an essential personality for learning exactly how I fail, and how to improve upon this type of failure. Reading Apprenticeship Patterns’ reflection on the topic has also helped me come to terms with “failure analysis”.

According to the book, everyone has experienced failure at some point; people that haven’t either never left their comfort zone, or are denying a past failure. It also dabbles on selecting which failures are worth improving upon to salvage sub-par skills. Finally, it admits that some skills may have to be left to rot, as an example of embracing our non-perfect nature.

I agree with the idea that no one is perfect; extending on the topic, I also agree that “ditching” some forms of failure are necessary to becoming a specialized worker. As the old saying goes: “a jack of all trades is a master of none”; I admit myself that trying to work on various topics only results in a mess of files, each one being less impressive than a single, focused file of well-written software.

However, I run into conflict with the pattern early on: its solution mentions “working on problems that are worth fixing”. In my opinion, as contrary as it may be to my above statements, ALL problems are worth fixing. The priority should be chronological, not a binary form of “assert/ignore”. Yes, figuring out our failures and becoming specialized is great, but even a specialist should be somewhat familiar with as much material as possible. A good team member benefits from a great crew, but can also proceed on their own (even if the progress slows down).

Going forward, I plan on using this pattern in my Capstone adventures (as well as my professional career) by trying to figure out what my specialty is. Which failures are the most extravagant? Which ones are fixable? Which ones are worth the effort despite the challenge? A big problem about my stance in computer science is that my stance is too vague (this was the original reason why I declared this major).

Hopefully, I will be able to cut down on this “vagueness”; despite computer programming being applicable in many fields, I will find the one that I am meant to work in. By finding my failures, the search will increment ever more closely to a successful result.

From the blog CS@Worcester – mpekim.code by Mike Morley (mpekim) and used with permission of the author. All other rights reserved by the author.

At Least They Have the Spirit

PREVIOUSLY ON MPEKIM.CODE…

So far, we have come to the conclusion that it is okay to not know everything. It is also alright to even be “the weakest link” of a team. What matters the most is the enthusiasm, the drive to learn more about our projects and programs. For Apprenticeship Patterns, this means that newcomers can be useful to a team if they provide morale and enthusiasm to expose and attack their ignorance.

To start, I believe that the book stating the idea of “repressing enthusiasm when it is not welcomed” isn’t entirely incorrect. However, I do believe that, unless an enthusiastic apprentice is drastically creating dire consequences for the team, then the members with lower morale should lighten up a bit. No one starts out “creating the next Linux”; if seasoned professionals are not held up to these high expectations, then it seems ridiculous (to say the least) that the newcomers will be held to it.

Interestingly enough, the controversial idea of repressing enthusiasm is supported by a factor of the pattern that I do enjoy: the idea of “experiencing diversity”. According to “Unleash Your Enthusiasm”, teams actually have the most efficiency when they consist of members who each have various amounts of experience. “Old farts” who have seen it all will likely be numbed and unaware of an issue that a newcomer will notice with their “fresh eyes”. Likewise, the more experienced will create sorcery, solving programming problems that the newbies weren’t even aware of.

As far as the future is concerned, I can say that I apply this pattern on a daily basis. While the book helps to reinforce this ideology, I am no stranger to “pumping up a crowd”. Unleashing enthusiasm is not only the idea of providing positivity and workplace morale, but it also involves taking the initiative. Even if they get shot down, we should always put our ideas out there – scribbles, doodles and random notes are never irrelevant. Some of the greatest ideas were the result of an accident (caused by an enthusiastic dreamer).

So far, in the grand scheme of my selected patterns, here is what I see as a “list” or “chain”:

  • Find a team that you are the worst on.
  • Discover and acknowledge your weak points.
  • Take the initiative and enthusiasm to work on these issues.
  • Give yourself the breakable toys needed to grow from mistakes.
  • Practice correctly, with feedback from professionals.

In retrospect, I find it amazing to take my previous blogs, and discover a path within them (similar to a graph data structure). Now, we must take the time to implement it….

From the blog CS@Worcester – mpekim.code by Mike Morley (mpekim) and used with permission of the author. All other rights reserved by the author.

Honesty is the Best Policy.

“It is better to be honest about your skills and fail to land a job, than it is to lie and put yourself in a situation that’s over your head.” – Someone, probably.

That quote, while partially meant as a joke, does have some truth behind it. Unfortunately, in this world of ever-increasing job requirements, it seems enticing to claim skills that you don’t actually have. This, however, can lead to an avalanche of constantly falling behind on work, and procrastinating/struggling to keep up with the rest of the team. Tapping into my previous entry (“Being the Worst”), we can see that is better to be honest about ignorance than to “shove it under the rug”, as one would say.

“Apprenticeship Patterns” essentially states that for this pattern, we must face a very difficult aspect of our lives – admitting that we are not the best at everything, and that we need to ask for help. Similar to “Being the Worst”, I find this philosophy to be familiar, but fascinating nonetheless. While it took me more time to confront my ignorance than to challenge my skills, I understand that both of these processes will make me a better programmer (and a better person) in the long run.

The most useful aspect of this pattern is the idea that, regardless of what we do with our lives (from scientific advancements like coding software to artistic talents such as playing guitar), it is more important to learn how to learn, than to “learn towards a goal”. To phrase this with better clarity – if we can understand the most effective way to learn, it will make our challenges much easier to overcome than trying to simply take on the challenge directly.

While I don’t think that this pattern has changed my thoughts about professional programming, I do believe that it has emphasized the importance of brainstorming, “thinking outside the box”, and other important factors of discovering unknown material. Most importantly, exposing ignorance shows that, as programmers, we know that we don’t have the solution that our client desires (yet), but we are also searching for it.

Maybe it’s because I’m no stranger to shame, but I must say that I disagree with the idea that there is “tremendous pressure to satisfy clients, regardless of one’s actual competence”. For me, the best way to satisfy clients (and pacify my own anxiety) is to select the most reasonable long-term solution – in this case, admitting my ignorance. “Dodging the bullet” during the sprint planning might provide short-term anxiety relief, but the problems avoided remain unchecked, building up far more anxiety in the long-term.

From the blog CS@Worcester – mpekim.code by Mike Morley (mpekim) and used with permission of the author. All other rights reserved by the author.

Started From the Bottom, and It Only Goes Uphill From Here: How “Being the Worst” Is the Best Place to Be

It seems as though across several different environments, people have come to an agreement that “being at the bottom” actually isn’t as bad as one may make it seem. Rap music often makes references to “starting at the bottom” and “creating a grind for the paper”; Harvard University, despite its reputation for requiring high GPA scores, has an urban legend of “failing new students on their first semester”. Whether or not these previous statements are framed in facts or anecdotal assumptions, the idea remains that we as a society understand that “there is always room for improvement” – every day that you don’t make yourself stronger, you make yourself weaker.

This brings me to my first pattern of self-assessment from the Apprenticeship Patterns book: “Be the Worst”. In a sentence, the pattern explains that if we have nothing/no one to challenge us, then our knowledge level plateaus or even weakens; it is always a good idea to surround yourself with people that are better than you. This gives you the ability to learn from them and become an even greater programmer.

To be honest, I am glad that I started with this pattern. While I cannot say that it’s interesting per se (since I have always had this philosophy in mind), I can say that it is useful. I get where the book is coming from, and I would like to always be the “weakest link” as it ensures that I am in good, professional company.

As I stated before, the pattern has not really changed my way of thinking, since I have already held this idea of “being the worst” near and dear to me. However, I must say that it is nice to see a professional textbook reinforcing my beliefs – while it goes against the philosophy, being correct before a confirmation is a good dopamine rush. I also cannot say that there is much to disagree with, since the pattern hits every nail on the head:

  • Join a team in which “you are the worst”.
  • Work harder than the rest of the team; don’t “be a passenger” or have people carry you.
  • Provide as much help as possible, even if these tasks seem “menial”.

Could this pattern be an excuse for my procrastination at the start of this semester? Maybe – I think the “early start” didn’t help either (and some burnout from constantly taking classes to boot). However, in the end, I am glad that I have a great team to work with, and a bit of “set back” in order to keep myself on my toes for these upcoming classes. If this setback is my “rock bottom”, then I can only imagine how great it will be at the summit.

From the blog CS@Worcester – mpekim.code by Mike Morley (mpekim) and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

Dave’s story introduces both motivation and fear. A fear that next new big thing might make all our efforts wasteful but motivation to work hard in learning every new skill and language.  We see many versions of this statement by researchers like, “Failure is merely an incentive to try a different approach” by Carol Dweck or “recognize the inadequacies in what you do and to seek out solutions” by Atul Gwande.

However, Etienne Wenger said it best using ‘situated learning’ that, “best way to learn is to be in the same room with people who are trying to achieve some goal using the skills you wish to learn”. ‘Situated Learning’ is also the key to Apprenticeship and achieving Mastery. A man who is always working to find a better/smarter/faster way to accomplish their goals using connections between practitioners, the communication channels within and outside the team is a man who will enhance the skills of his apprentice and journeymen.

That said, ‘Situated learning’ is no small feat. It is a long and hard journey for an apprentice to become a journeyman and then Master. Learning new skills throughout one’s career is vital but perfecting skills warrants one to have a concrete learning skill to learn new skills and therefore Perpetual learning pattern must be applied as early as possible in our career path.

The biggest mistake I have heard graduates make is that they overestimate themselves. Coming out of university with bachelor’s in computer science doesn’t mean we have four years of experience, it means we have just started and that is why the author writes in the very first paragraph, “this book is for people at the beginning of the journey.” To avoid this one must have accurate self-assessment skills. We must recognize the limited information we have compared to the limitless treasure of knowledge available and strive to acquire them by learning about other teams, organizations, journeymen, and master craftsmen. We can also acquire great amounts of knowledge and skills through internet via text, audio, and video however, we must also recognize that the vast amounts of wisdom captured in the books of experienced software craftsmen cannot be replaced by blogs posted on world wide web.

“Walking the long road” teaches us how to practice patience and hard work, we cannot learn all languages by working hard only one month or year. We need to keep practicing and polishing our skills, which we learn in “Perpetual learning”, skills like self-assessment (“Accurate Self- Assessment) and learning not only through internet but also through wisdom and experience of software craftsmen who came before us. However, I do not agree with “Emptying our cup”. We should not forgo of our skills and knowledge but build on them. We should never be arrogant or foolish enough to think we have learned everything we possibly can.

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

Apprenticeship (Chapter 1, 2-6 Introductions)

While I was reading the chapters’ introductions for the book Apprenticeship Patterns Guidance for the Aspiring Software Craftsman, I was amazed and drowned in the book because those introductions, examples from other software craftsmen, and their journey made me understand that we should not see or underestimate ourselves when looking at others’ successes in computer science. It doesn’t mean it has always been easy for them since the beginning. They had to work hard, fell, and failed many times but still stood up and kept working harder and harder.

The story of Dave really stood up to me and while I was reading that story, I realized that many times, in the computer science field, I felt like giving up because I was not doing anything right. Or maybe I was but it was very low compared to all my classmates who were stronger and smarter than me. But with this story, I understood that it’s all a matter of sacrifice and always keep standing up after a fall. If Dave had given up, he probably wouldn’t have learned and gotten better. As a computer science major, interested in software development, this book will be my best friend because I can tell that I am going to learn how to become a good, excellent software developer.

One thing I also learn while reading chapter 4, is that we should not compare in computer science. Especially when that comparison makes you feel inferior or not capable of achieving great things. We don’t know what those people who are better than us in a certain domain have been through. So, we cannot just envy or feel less smart than them. Maybe they also felt that way when they were at our level. With computer science, it is about learning every day, every time, everywhere, and always trying to become our best version and do better than yesterday. That is why I loved what the zen master said about emptying the cup: “If you come to me with a cup that is already full, how can you expect me to give you something to drink?”. Even though we feel like we already know everything about computer science, software development, the experience we already have should push us and motivate us to put into emptying the cup, meaning clearing our mind of bad habits, setting aside the pride we have in our skills, and opening ourselves up to the different, often counterintuitive, approaches of our more experienced colleagues.

We learn every day, we never cease learning and we will always be learning no matter what. So, a certain position of knowledge should not make us feel that we’ve reached the highest point and stop there, because there can be another who will come and do better and surpass us all. knowledge never ends, it actually extends.

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Chapter one of Apprenticeship patterns was quite the interesting read in my opinion. I think the chapter is overall very interesting, however I especially liked Dave’s story. I think his experience is somewhat like mine. I also tried to teach myself to code when I was younger, but my attempts were unsuccessful because I got easily overwhelmed. It was only when I came to college did I start properly learning a programming language, Java. I think having professors act as mentors that I could learn from and ask questions really helped me pick up Java. I think the authors really tried to emphasize how important mentors are to growth in this chapter, and I can’t help but agree based on my own experience. However, I wouldn’t call myself proficient in Java or any language. I feel like I just started scratching the surface of programming and I still have a lot to learn. I think that’s the takeaway from this story. In order to grow as a software developer, you need to be humble and open minded. You can never master software development or learn everything, there will always be room for improvement and new things to learn. This idea seems to be reinforced with the other chapters.

The emptying the cup story in the introduction of chapter two stresses the importance of having an open mind. Just like the young philosopher, we all need to empty our cups. We all need to make sure that we clear our heads of bad habits, setting aside our pride, and opening our minds to new and different things. I personally never thought of my previous experience as something that could hinder my learning, but after reading this emptying your cup story I can understand why that may be the case sometimes. Chapter three talks about the importance of learning. It talks about how learning gives you insight on much more you have to learn. There will always be exceptional people to take inspiration from and there will always be new things to pick up and learn. Chapter four adds on to the previous chapters by discussing the significance of ambition. The idea of growth shouldn’t be capped to being an average developer or an above average developer, but rather, to be a better developer than you were yesterday. Chapters five are similar to each other since they both talk about how an apprentice should grow their skills and knowledge. In chapter five, the emphasis was placed on practice and communication. You should practice what you learned so you can retain the knowledge and you should communicate your understanding to demonstrate the extent of your knowledge. Chapter six talks about how a good apprentice should read old fashioned books to increase their knowledge. Overall, the introductions of these chapters all complement each other, they all give ways in which a software developer can get better. I think these are all very useful, and it’s important for me to keep an open mind and learn from them.

From the blog CS@Worcester – Fadi Akram by Fadi Akram and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

The book Apprenticeship Patterns from what I have read so far seems to be a good insightful resource to read for college students like me still early on our learning experience through software development. I have noticed a few things from the reading that were common throughout the chapters or were interesting such as with how there is a general theme of there is always room for improvement and an opportunity to learn no matter which stage of experience you are at. It does not matter if you are just an “apprentice” like me or a master for those who have coded for decades; there is always room for improvement as the industry changes so we should steel our will and continue learning.

The chapters that are the most relevant to me so far are probably 1 and 3 because firstly, chapter 1 is the setup chapter; it hold the purpose of this book in which it is to guide us on our journey forward while we are still apprentices and gives us some good insight on our journey ahead as we progress throughout our careers. It gives us the meaning of what it means to be an apprentice and what we should be doing in general. Then with chapter 3, the introduction highlights a similarity between everyone as they walk the same road but also as old skills get built on over time as you expand into other areas of coding as it seems to be symbolically done with Dave and his training certificates. It is crucial for one to be active in the coding community all the world to obtain information on the different skill sets that people have that could provide vital information, inspiration or connections that will boost ones journey ahead.

This book so far has given me insight on what I should be prepared to do in the future whether such as to forever continue bolster one’s mind and as we become more experienced, we obtain more intuitive ways to apply our skills onto the world and help prepare for the next generation of journeymen and apprentices.

From the blog CS@Worcester – kbcoding by kennybui986 and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Chapter 1 and Chapter 2-6 Introductions

Upon reading the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye for my CS-448 Software capstone class. It showed much interest on trying to understand on what it takes to being a software and to what lies ahead on that path. Teaches developers and students that are seeking answers to their questions or possible need more guidance, this book helps clarifies us. For example, in chapter 3 it speaks of determining a goal in the long run, basically draw a map out of your goals and dream on becoming a software craftsman, think ahead and plan. Visualize where you could stand in 10-20 years from now. This part has piqued my interest because once I put more thought into it, I want to accomplish so much in my life and career as a software developer, there are endless paths and opportunities I could walk towards but only one step at a time. In chapter 6, where it teaches us to make our curriculum, I agree but also disagree with some parts on this because even though we are no longer in school and we are to read books, do research on our own since the world of the internet is ever so expanding every day. People always have their own way of learning on expanding through methods. Reading is not for everybody. That is why there is more ways people can learn. Through YouTube, articles, tutorials, or even another developer. Sometimes people don’t even want to expand or just want to stay with the experience they’ve obtained, that’s their choice. Makes me think if going further in more than one subject is necessary depending on the job you got and its need and requirements. But then again to become more experienced in your professional history we must be determined to visualize further on in life. For example, if we study on an area an hour a day for the next five years than we become experts on that subject. I believe this will give more insight once I go more into the chapter I wish to read about and deeply understand the purpose of its contents and carry on with its teaching to be a software craftsman.

From the blog cs@worcester – Dahwal Dev by Dahwal Charles and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns

“I guess it basically means having the attitude that there’s always a better/smarter/faster way to do what you just did and what you’re currently doing. Apprenticeship is the state/process of evolving and looking for better ways and finding people, companies and situations that force you to learn those better/smarter/faster ways.” – Marten Gustafson

This quote by Marten Gustafson pretty much sums up the introduction to this material but also the intros to chapters of 2-6. As software developers, technology is forever growing and changing. If a developer chooses to remain plateaued, then just like in the book, you will get a sense of resentment and want to exit the field due to being dissatisfied. That dissatisfaction is due to our own faults. We should continue to learn and grow as developers.

What I liked about this book is that in the beginning of every chapter, there was a real-life story of someone that relates to the material. Not only you can understand how it connects but you are also able to relate to the situation. For example, in Chapter 3 when Dave felt discouraged due to not being on the same level as some of the hackers. Instead of letting that defeat him, he dived in learned the material, watched the other hackers, and learned. Dave put in the work with the result being that they are all walking the same road, and no one is left behind.

So far, the reading is aligning with my ideologies when it comes to apprenticeship. I do think as software developers we should take on internships to become that apprentice to learn different ways of coding and applications of it. With internships your able to pick the minds of the team that you assigned to and tackle challenging real world problems in a team. Being able to pick a mentor’s brain on topics that you are not strong in or will like to improve on. Apprenticeship to me is something that a developer should always be. Meaning a software developer should always welcome new ways to applying code or applications.

Just like in Chapter 4 states, “you must be willing to let go of your perceived competence and allow yourself to recognize that you have traveled only a short distance on The Long Road. Your goal isn’t to become better than the “average developer.” Your goal is to measure your abilities and find ways to be better than you were yesterday.”

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