One of my students emailed me privately. She wanted to learn a new
language over the summer, but she has “always had trouble finding
structure and knowing what to learn when pursuing independent studies
such as these.” I’ve had this same question a number of times in the
past, so I thought it might be useful to post my response.
This is just my way of thinking about it. I’d be interested to hear your
techniques for picking up new things.
I do a fair amount of woodworking. It’s one of those hobbies where you
are constantly tempted by bright, shiny new tools. When I first started,
I fell into that trap, and bought a lot of stuff I never really used. So
I have a rule: now I only invest in a tool if I have a current, real
need for it. That way I can guarantee that when it arrives I will
actually use it. And, by using it, I’ll get to learn it so I’ll know
when I can apply it later.
I think it is the same with all tools. So when it comes to learning a
new language, my advice is always: find a thing you want to do. It
doesn’t have to be a major project; in fact it’s probably better if it
isn’t. Look for something that would be useful, not vital. Maybe
something that would help with a hobby, or a group that you belong to.
Something that could be solved in hundreds, not thousands, of lines of
Then choose some aspect of it. Something you understand in terms of
requirements. Prototype it in the new language. Know going in that
you’ll waste a couple of days just getting familiar with the tooling.
Don’t try for finished code, but explore. It’ll be frustrating, because
you’ll have to keep stopping to look things up, and because you’ll
constantly realize that what you just wrote could be written better.
Understand that this is the entire point of learning. It’s not about
getting things right. It’s about getting things wrong and gaining
experience from that.
At the end of maybe a week, throw all that code away and start again.
You’ll find that you’ll be able to knock out the same functionality that
took a week in maybe a couple of hours, and you’ll feel that it is
At this point you’ll feel that you’re finally getting it, and you’ll
start to feel productive. Keep digging into the language and tooling.
Keep challenging yourself.
There’ll come a time when suddenly it feel like you’ve hit a wall; stuff
stops being easy, and you begin to doubt that you actually do understand
it. This happens to everyone learning something new. It’s a
manifestation of the fact that you have now internalized enough of the
language that you find yourself making decisions based on not “how can I
make this work?” but rather on “what’s a good way to make this work?”.
This point is a bit like earning a black belt in the martial arts. This
is when it starts being fun!