I've been taking a little bit of my time to try an improve my Java skills, it's an experience which I've found equal parts confusing, exhilarating, and frustrating and unfortunately I'm nowhere near done. I say unfortunately because like most people I enjoy things a lot more when I'm good at them but in order to get good I'm forced to navigate myself though many of the less pleasing states of learning and if I'm honest I find that pretty hard.
One thing I've identified recently is that I'm hit by problems in different ways depending on where I'm at on the learning curve. When I'm start out with something new I get stopped by Errr? problems. Errr? problems are the kind that leave you with a feeling that you have absolutely no idea what you're doing. As I develop these change into Oh! problems. Oh! problems are those that at first seem insurmountable but which lead inexorably to moments of exquisite clarith. Argh! problems come last, right when you think you've got things sorted they're frustrating, horrible and on the face of it completely inexplicable.
The err stage usually happens in the early days of learning and can be characterised by long periods staring at the screen blankly, hoping beyond hope that problems will magically fix themselves. Its a time of pasting cryptic looking error messages into google, a time of frustration and slow progress. It is quite often the time when you quit. Simply put, the err stage sucks.
Getting through the err stage quickly is important for me. Yes, I could persevere and hope to attain enlightenment and this may even lead me to a deeper understanding of the subject matter and a more righteous sense of satisfaction, but we're all different and I find it difficult to keep motivated when everything feels like it results in a roadblock to your development. So for those of us that suffer from the frustration of the err here are some things that can help shorten that stage in the learning process.
Mentoring and Coaching
Mentors are a great way of getting through the Err? problems. A mentor can be a person that you can use to bounce ideas off of in the early stages of your learning. They may also serve as a north star guiding you to some future ideal of what you'd like to be capable of. A mentor will help get you through some of those initial roadblocks and help you get back up when you find yourself falling. Finding a mentor can be as easy as reaching out to a colleague or friend. If you want (or need) to look further afield then local user groups are often a good source of mentors.
When done right pairing can be a great way of learning the ropes of a new skill, but you can't just sit there whilst someone else does you tasks for you no, you're not going to learn anything that way. You need to ensure that you're engaged in the session asking questions, seeking understanding and generally soaking up all that great knowledge. If you can drive the pairing session all the better, the more you do the more you'll learn.
The Oh stage is probably the most enjoyable of all stages to be in for me. It's characterised by that wonderful feeling of enlightenment as the pieces of a once complex or unfathomable idea fit into place. I can still remember the Oh! moments from when I transitioned from building websites with tables to using CSS. Another reason why this is often the most enjoyable state is that it is where you notice a marked acceleration in your ability to taken on new concepts and a hunger for more information. In order to keep this momentum up and to help us through those problems that we encounter there are a couple of things that I like to do:
I find that one of the main things missing in the Oh! phase is confidence. I feel like I have sufficient breadth of knowledge to know how to perform a given task or overcome a specific challenge but I don't feel like I have the depth of understanding or experience needed to make decisions confidently. This is where peer review can be a very useful tool. The review process can take on many forms. If you don't feel that putting incomplete or imperfect code into a pull request is the right thing to then simply reviewing ideas with a peer at your desk or over drinks can really help to fill in those gaps.
Watch one, do one, teach one
This is a great way of building confidence and it really helps to cement ideas and concepts. The theory runs a little like this: Start by learning a new technique from some already experienced in it, once you have the concept down you replicate as you were taught and finally to ensure that you have understood the ideas taught, you then take the time to educate someone else in the same skill. How you go about this, whether its by mentoring a new developer, running a bootcamp class or taking the time to present at a user group like SydJS and SydCSS that I've attended recently. Personally I find the pressure of having to present to a group of people really helps focus the mind, but I understand it's not to everyones taste.
The Argh! is arguably the most frustrating place to be as it is characterised by those moments when you consider yourself to be a subject matter expert but are unable to resolve a particular problem or challenge. This is a particularly tough place to be as you may be perceived as the the most knowledgable or experienced dev in the team. The fact is that all the exercises listed here are equally valid at this stage. In some respects the biggest challenge with the Argh is overcoming that feeling that you shouldn't be seeking help.
Take a break
I can remember a few situation where I should probably have downed tools and taken a break but didn't. We don't do our best work when frustrated, stressed or exhausted so it's important to acknowledge when our thought processes are being impaired and to take some time out to reset ourselves. It's not unusual for the act of taking time out to give us a fresh perspective on an issue and to drive us towards that illusive solution.
When these situations occur, when you've exhausted what you feel are all possible avenues and that you've hit that proverbial brick wall, a spot of Rubber ducking might help you think your way out of the situation. For those not in the know rubber ducking is the process of explainging your reasoning and/or approach to a problem by talking it through step by step to some sort of inanimate object (like a rubber duck). The idea is that by doing this you will dislodge any flaws in your logic. It can be really quite effective. If you can't find a rubber duck and friend or colleague can be equally useful for this process.
I think that when you hit these seemingly impossible problems the best thing to do is to keep at it. Some of the most rewarding times in my career have come from plugging away at a problem until the resolution became clear - ask me about how copy and paste bugs can in rich text editors can be caused by errant CSS in safari - yes things are frustrating, hard, stupid but the sense of satisfaction that comes from figuring out hard problems is worth the effort.