You are not alone. What I mean is, if you are sometimes feeling lost and overwhelmed in the world of Computer Science, programming, web development and the alike, you are not the only one feeling that way. The problem is that, nevertheless the world is full of IT students, enthusiasts and professionals trying hard to find their way and getting lost and found over and over again, it is also full of people who are lost but very good at pretending that they are not. Understandably so. Which, however, leaves a lot of people feeling like they are the only ones lost. One of the patterns in this book says “expose your ignorance”, which is interesting. I would also add “admit that you sometimes feel lost” in the world of IT. It’s OK to acknowledge the complexity of the IT world, and it is OK to need maps. Some of these maps are books. BTW which maps have you found useful? How do you share your maps with others? Do tell me in the comments, please!
One of these useful maps is the book “Apprenticeship Patterns” (read it online here!), by Dave H. Hoover and Adewale Oshineye, published by O’Reilly Media, first edition in 2009 (mine is the 2010 one). It is great for reminding you that you are not the only one finding your way along the apprenticeship path. And it also contains good advice, presented in an interesting way. Suggestion it offers range from learning your first programming language to constructing breakable toys, from finding mentors to choosing teams where everyone is better then you (be the worst), from unleashing your enthusiasm (and beginner’s enthusiasm is a resource for the team) to learning how you fail, from organizing your reading list, including the classics, to sharing what you learn, etc. Different aspects of the programming craft are taken into account, and things that are too often left unspoken or taken for granted are spelled out for you. The book may not be quite as fun and funky as Chad Fowler’s “The Passionate Programmer”, which I shall blog about some other time, but it is definitely a useful read.
Click “Continue reading” to get more details. Please do write in the comments if you have any advice of your own about dealing with these issues. How do you map? How do you keep your maps? How do you decide your priorities and manage your time? How do you keep track of your progress? And anything else that comes to mind.
The first chapter is an introduction.
The second chapter is about “Emptying your cup”, that is knowing how to be a beginner, and knowing how to act as a beginner every once in a while, to start over, reboot yourself a bit, can be useful. The patters are (click to read them online):
Your First Language The White Belt Unleash Your Enthusiasm Concrete Skills Expose Your Ignorance Confront Your Ignorance The Deep End Retreat into Competence Wrapping Up
I LOVE the way they dedicate a “pattern” to reminding everyone that the beginner’s enthusiasm is a great resource for everyone around. The apprentice may not be the champion of ability in the team, but has a precious one to see everything with fresh eyes, mind and heart, which can be all around motivating and boost productivity. I like the idea that exposing and confronting your ignorance is a good thing, and that we need to work towards a culture that encourages that. I find it interesting that it is considered useful for more advanced programmers to retreat into competence every once in a while to regain composure, if you feel lost and in over your head. Because we are not beginners just once in our lives, but over and over again in different ways.
The Long Road Craft over Art Sustainable Motivations Nurture Your Passion Draw Your Own Map Use Your Title Stay in the Trenches A Different Road Wrapping Up
I like this citation, from the Long Road pattern:
“First, accept the fact that you may be considered a bit strange for what you want to become. Second, keep your focus on the long term. During your apprenticeship, value learning and long-term growth opportunities over salary and traditional notions of leadership.”
This is important because the world of IT, programming and the Web can be a confusing one, full of all kinds of people with all kinds of motivations who would have you believe all kinds of things. That is why it is important to keep your priorities straight, and think long term, almost monk like. Takes dedication. I was blessed with having had the opportunity to encounter some inspiring and very advanced techies in my life, so I know how good, creative and dedicated one can and should aspire to get. That makes it easier for me.
I am inspired by the advice to be the worst, and find it fundamental. I’ve seen people get trapped in the idea that they need to be the best or, even worse, appear to be the best, which makes them pretend to be better then they are or surround themselves with so-so people, just to boost their own ego. Which stops them from improving and actually become the best that they wanted to be (even though no best should ever be good enough, best is relative). Being the worst, finding mentors and kindred spirits, rubbing elbows and sweeping floors all have to do with humility and modesty. But these words need to be understood correctly, it is not about belittling yourself in order not to offend the egos of others, it’s about keeping your energy well focused and not wasting it in showing of and trying to appear better then you are.
Expand Your Bandwidth Practice, Practice, Practice Breakable Toys Use the Source Reflect As You Work Record What You Learn Share What You Learn Create Feedback Loops Learn How You Fail Wrapping Up
This is about cultivating your skills. Sometimes it means expanding your horizons and finding new ideas, others it just takes practice, practice, practice and building “breakable toys”. Reading the source code is always a good idea. And also “reading the source code” of your own career, that is “self reflection” is a must, that is you should always keep track of what you are doing, what you are capable of, what is going on, in order to avoid becoming victim of the Peter Principle and being promoted to your “level of incompetence”.
Books over blogs. Written reading lists. The classics. In every problem looking for that “underlying computer science concept behind what you are learning, and what trade-offs were made in the implementation that you are using”. Figuring out if the problem “has a well-known solution or is in fact impossible”. Gaining deep knowledge is hard, but well worth it.
Apprenticeship for me is about being enthusiastic and grateful for simply learning something interesting every day, being willing to work for that, and finding motivation in it.