Friday, January 9, 2009

Learn Faster

No, this post isn't about speed reading. In the spirit of speed reading, though, I'll make this post mercifully short.

In my last post on programming languages I said that you should learn one language really well before you start branching out into other languages. Understanding programming concepts at a deep level is more important than learning the syntax of many different languages, but it can also help you learn new languages more quickly too.

Once you're at the point where you're ready to learn a new language, what do you do? Do you pick up a copy of "Learn Blub in 10 Minutes a Day" and slog through 24 boring chapters about the syntax of a new language? Or do you spend an entire year going through SICP, watching the video lectures, and doing the exercises? (I keep meaning to do that.)

No matter which path to enlightenment you choose, I have a quick tip that will help you get through any programming book faster. It allows you to apply concepts from languages you already know to the new language that you're learning. Ready to hear what it is? Here you go:

Do the problems at the end of each chapter first, then go back through and read the chapter. If you can't actually do the problems yet, at least read them and try to understand what they're asking.

This method works for two reasons. First, reading the questions and exercises at the end of the chapter gives you more accurate information about what's important in that chapter than even the title and section headings. If you read a question about while loops, for example, you're going to be paying attention for that topic when you read through the chapter. Second, it tells you what you already know, and can skip over. If you read a question about while loops, for example, you know that you can skim that chapter quickly or skip it altogether because you're already familiar with the concept.

This is the method I use when I need to learn a language in a weekend so I can use it in my project on Monday. It really works, but don't take my word for it. I know you have a Sam's book hidden away somewhere so no one will catch you reading it. Don't be ashamed. Okay, maybe a little shame is in order, but maybe if you get through it fast enough, no one will catch you.

7 comments:

BruceA said...

That sounds like a good idea. I've got a Ruby book I've been meaning to go through; I'm going to try this method on it.

Bill the Lizard said...

BruceA,
I just ordered Learning Ruby and was thinking about blogging my progress on each chapter using this method. Is that the same book you have? I might switch to something that's available for free online to make it easier for other people to follow along if they're interested.

Let me know how it goes for you.

enocnroll said...

That's an excellent suggestion. It reminds of what programmers do in general, even in languages they know, when they encounter advanced code, figure out what it is doing and then learn the formal concepts (if there is time).

Bill the Lizard said...

enocnroll,
That's probably the thing I love most about programming. I learn at least one new thing every single day.

Hiankun said...

Thank you for the tip. Besides the reasons you have mentioned about why this tip works, I think it's necessary to understand what one have learned by solving the problems. Maybe your tip also works on other learning area. I will try it. :-)

Bill the Lizard said...

Hiankun,
I definitely do the exercises when I'm reading a book that has them. If the author is any good at all, the exercises at the end of each chapter should tell you exactly what the most important concepts are.

Also, this really works well in other areas besides programming. One area where I know it works great is on reading comprehension tests (like if you have to take the GRE or similar standardized test). Reading the 6-7 questions first tells you what points to look out for when reading the passage. This can really save a lot of time.

xyz said...

This really sounds like a nice idea.

And coming from the area of Physics, it kinda reminds me that when I had troubles in solving a (physics or mathematics) problem, I usually went back to the basic theory. This trick always worked for me.

But you suggest the other way round.

Thanks. I'll experiment with this method :).