The dentist. Karaoke. Rush-hour subways. Each comes with its own brand of unease. But the one that takes the cake is being a beginner. Out of your element, failing way more often than not, and trying to solve problems that you know should be simple but feel so insurmountable at the moment.
I think the hardest part of being a beginner is not knowing where to start. As you learn more about a topic, its intricacies and processes become innate, second-nature. This is missing when you're a beginner. Presented with a goal, an expert has the intuition to decide which steps to follow and which path to take. To a beginner, however, the trip to the solution doesn't feel so much like a quest as it does trying to access a fortress surrounded by a deep and bridge-less moat. Sure, there are obstacles in both routes, but the expert has the tools and confidence to face any problems that should pop up. The beginner does not. The beginner gets to the moat, realizes they didn't bring any tools with them, have no prior experience to help them figure out how to solve this type of problem, and moreover, didn't even bring a swimsuit.
Learning Ruby these past few weeks, with no prior experience with such a conceptual language, I've felt like a tool-less, resource-less, clueless and bumbling n00b for most of my time there. It's hard to learn something new at such a fast pace. But I think the hardest part has been trying to kick the mentality that I need to know how to solve the whole thing all in one go. It's hard to kick this because it's the gut reaction, and it's (partially) true— you do need to solve it, and eventually you will need to know all parts of the problem to solve it. But the key difference is that you don't need to know how to solve all of it at the same time. Below, I've detailed a few steps for problem solving, culled from teachers' advice, the wonderful book "Think Like a Programmer," and my own experience. Being a beginner isn't easy. But breaking it up helps.
Read, re-read, repeat.
The best way to make sure you understand what you need to do is to make sure you understand the problem. There's nothing worse than spending time working toward a solution, only to find it doesn't work because it doesn't apply to the problem at hand. Sometimes clarifying with others helps as well. Sometimes something seems clear, but after double-checking, I've realized I was off. That being said...
Appreciate the Detours.
You're going to take some wrong turns. You'll work on a solution that you'll eventually, crap!, realize is completely wrong. But understanding why something doesn't work is adding to your great arsenal of knowledge as well. Sometimes getting off track gives you knowledge you'll need to use down another trail.
Break it Down.
Solving the entire problem at once should feel overwhelming, miserable, and impossible. But here's the secret: You only need to figure out how to solve the first part to get started. That first part can be as simple as restating the problem until you can identify a clear plan of attack. Hell, it can even be forking the repo. If it's working toward a solution, it counts as progress. And once you take the first step, the path ahead gets a little clearer. Working on each step gives an idea of what shape the steps ahead may take. But these steps won;t have a clear direction unless you...
Make a Plan.
Even the vaguest map is better than none at all. Sure, you may only have general blobs of green and blue to guide you, but at least you've narrowed out some area where a quick walk on land won't succeed. Having a general outline of where you want to go is immeasurably helpful in figuring out a solution. If all else fails, making a list of everything you think might work or might be worth exploring can begin guiding you in the right direction. And if it doesn't, see No. 2.
When in Doubt, Consult the Documentation.
If something exists, you can rest assured that someone else has taken the time to explain and define it. This is a great resource for learning more about a concept you don't understand, or to clarify how a method is used. And, more often than not, a trip to credible documentation leads you to discover something you didn't even know you didn't know. A big part of being a beginner is turning the unknown into the known. Learning from the people who know all (or most) can only improve this. And finally...
Don't Get Frustrated.
I mean, you will. Everyone does. But if something isn't working and you feel like you've tried everything and hours later, you're still not any closer to a solution, reach out for help. A fresh pair of experienced eyes can help sort things out and get you past any roadblocks. Also, understand that learning is uncomfortable. Really, really uncomfortable. If you're really challenging yourself, you'll probably spend a decent amount of time questioning your intelligence, how you made it this far without anyone ever telling you how dumb you are, and feel like giving up because if it's this hard, it probably just isn't your thing. But you're here. You chose to learn this, and to spend time working through it because there was a passion and an interest there. Hold onto it. Even when it feels like you'll never get it, you'll always be a beginner, and maybe getting some teeth pulled would have been a more pleasant use of your time. Being a beginner builds character. And working hard for something means the payoff is going to be great. You just have to work through it to get there.