A friend of mine talks about the six month window for learning a new technology. He’s funny about it, when he talks about Rails. It takes six months to learn Rails, so the so-called experts have just been learning the same thing over and over again for the past 10 years.

I have been almost exclusively working in JavaScript for about 2 1/2 months. Before, I could build rich clients in the browser. Now, I’m using a functional style, I’m building up server-based APIs, integrating with smart data flows. It’s been crazy, how mind bendy my days have gone. It’s getting easier though.

One thing that reinforces my beliefs is I’ve gone from reading books and copying examples to trying new things and working without a reference. That’s a major step in learning anything. From past experiences, I know that it’s going to take a little more time before I am comfortable with the whole picture and can correct my mistakes as I make them.

That’s the trick for anyone. If we want to break into a new technology, or break into the technology world in general, we’re going to have to go through this process. Let me tell you a few of the milestones. You might have more confidence if you know you’re not lost.

It starts with a burning desire. You really want to make something, or know how something works. Maybe you’re attracted to beatiful design. Maybe you wonder how things work and want to make it yourself. Something is triggering you to get involved. Usually, there is a lot of excitement in the beginning. Don’t hide or bury that excitement. Yes, it’s a clear indicator that you’re a newb. No, that’s not a bad thing.

You give it a name and start learning. This is a critical first step. You want to build something, so you decide to learn JavaScript or Ruby on Rails or Python or design. You picked a name, because it seems to match. Later, you’re going to learn the strengths and weaknesses of that thing, and you might decide you learned the wrong thing. This is normal. You’re going to learn a lot of things that you don’t continue to use. It’s OK, keep going.

You have your first moments of doubt. You are going to hit against some weird obstacles at some point. It may be the way coders talk that intimidates you. It may be you can’t get your environment working because of something mysterious you don’t understand. At this stage, there’s a lot of magic going on around you, and you feel really intimidated. One thing that’s useful at this stage is to just find some recipes and try and copy them into your working environment. Just getting into the habit of making something, even if you’re kind of stuck, is a really good thing.

Soon, you’ll try things on your own. You had something you wanted to build, and an example reminded you of that. You try and change it a little to fit your ideas. This can sometimes go really well. Sometimes it goes really wrong. You can switch from feeling like you’re the smartest person in the world to the dumbest in about 30 seconds. This too is normal, keep going.

As you build steam, you’re going to start to write things you want to keep. Your work may be super messy, but you know there is really good stuff in there. You don’t want to throw it away anymore. You have been working hard and you want to start planning out projects. You are trying to get a sense of how much longer you have, and it’s sometimes disappointing how that time keep stretching into the future.

I get this experience when climbing to a mountain peak and the summit keeps “moving away” from me. What’s really happening is I’m close enough to the summit I can’t quite see it, only part of the crest near the summit. As I climb higher, I realize the true summit is a little further ahead.

I find it’s common, around this stage, to have a hard time bringing everything together. In other words, there’s so much you’ve learned and tried, it doesn’t quite hang together, but it’s getting there. Put another way, the pieces are there, but the confidence is lacking a bit. What I find is useful at this stage is to try something and then get a little rest. Enough is in my head that I’ll be able to straighten things out after a few minutes or a night’s rest.

At some point, you get your project working. This is a crucial milestone. At the heart of breaking into a technology, you build things and show people. In fact, if you keep your focus on just that, you’ll be just fine in the process. Now, showing people can sometimes be a really hard thing to do. That’s normal too. You know some of your flaws and limitations. You still have to show people. The longer you delay at this stage, the slower your progress will get. Wise people will support you and know how to give good feedback. Even if you didn’t get good feedback, you’re going to learn from how people react to your project. Take this in stride and keep going.

You’re going to want to do a lot of little projects for a while. This is good. Some of it will be repetetive. This is still good. Get your feet under you and learn a thing or two about what’s going on. You’ll still be expanding, remembering, reinforcing your skills and knowledge. At some point, the projects get a little more complicated. At some point, you start to see your own mistakes before they drive you batty. This is proficiency.

Congratulations, you’ve just virtually gone through a six month learning process. That’s about what it feels like. Every time. In fact, if I’m not starting this process about every six to nine months, I’m probably resting on my past successes a little. This is a difficult enough path that sometimes I delay starting it again until I get excited about something. It’s also difficult enough that a lot of people start to learn to code and never get where they intended.