views:

642

answers:

9

I wonder is there a good strategy to use when you're about to start learning completely new stuff.

For example, you want to learn LISP and you know nothing about functional programming and you've been always working with imperative languages, or you want to learn Aspect-Oriented programming and have no clue what's all about.

There are usually plenty of books and tutorials on the subject but you aren't sure there most of them are of any good.

So, how should you plan your learning process in order to get on the right track or to realize that isn't the right thing for you without wasting much time? Or how to grasp the essential concepts of a new technology?

I'm pretty sure there are lot of people who would change the way they learned their first programming language.

There are some questions which look like this one (1,2,3), but I think I'm trying to ask more general question here.

A: 

Personally I'm a jump right in at the deep end kind of guy. The internet has made this a lot easier but it's not going to be the right strategy for everyone.

sparkes
A: 

C'est en forgeant qu'on devient forgeron!

Find a short project difficult, but short, adapted to the language and implement it. Refactorize a bit.

When your finished, look at your code and see which part of your design you would like to rewrite.

Check how your code compare to the other language you knew. If you're crazy, rewrite it. Buy a good book, with a lot of insight and experience (e.g. a Scott Meyers's for C++) Read it, enjoy it...

poulejapon
+2  A: 

Here's my approach to checking out a new language and to some extent libs and such.

I start by digging through code snippets/examples of said language until I got a feel for the syntax and the most used syntactic "shortcuts". After that I start hacking away on some minor projects (simple I/O, basic networking, console manipulation and such).

At this stage I find it useful to download some larger open sourced project in order to try to understand and follow their logic.

During all this google is your best friend and when you're done with those steps you should be fairly sure if it suits your needs.

Markus Olsson
A: 

First thing I do is go to the official website for the language (if one exists), then begin my hunt for a good tutorial, print it out and read it away from distractions.

By this stage I'm usually excited to get back onto the computer and start hacking away at some code. Just basic stuff like loops, etc.

Finally the next step is to try and use it for a small project that I have to do. I find that using a new language for a 'toy project' won't get you far, I think there has to be the motivation to produce something workable at the end.

Afer that, the long journey of remembering the libs begins, which you'll only really learn through lots of reading, trial and error.

And by the way, you have to keep using the language. Like anything, use it or lose it - which is why it's a good idea to choose a language you'll actually use professionally.

Steve M
+1  A: 
Anders Sandvig
+10  A: 

The following blog entry Six steps for learning difficult subjects quickly provided some tips in this area, summarizing:

  • Bombard yourself with information
  • Identify the key concepts and make them yours
  • Only memorize what absolutely has to be memorized
  • Get some feedback on your understanding
  • Bombard yourself with some more information, but from another source
  • Get some real-world feedback
David
+1  A: 

For languages, some sample code like the infamous "Hello World" or "FizzBuzz" are also one source of information, just to get into the "mood" of the language, to understand it's basic flow and to just be able to read code written in that language, even if you don't understand it all.

Then, start with simple console or similar apps. Just as an example: If you want to learn Java, you should possibly not start learning how to deploy stuff on Tomcat as that is just a distraction from the actual goal of learning Java. Same with .net: Sure, ASP.net is nice, but "how to set up asp.net in IIS" should not be your first priority - Visual Studio comes with the Cassini server, which is fine to learn it. What I am saying: Don't "waste" your time learning about deployment before you learn the language. You will learn about deployment sooner than you want to anyway ☺

Apart from that, I think David made a nice list as well.

Edit: And it also depends what type of learner you are. Some people can learn best with a book or a document that explains all the abstract concepts and caveats. They read that 1000 page book and then start working. Other people - incl. me - find that approach boring and discouraging. I want to build my own Hello World as soon as possible, nevermind if it includes a Memory Leak and a SQL Injection Bug, but being able to look at my Hello World is the equivalent of coming out of a cave and shouting "Aha. Look what I've created. I have made FIRE." and just fuels the desire to do more and more in that language. I find building stuff a thousand times more encouraging than reading about building stuff.

But what I really wanted to say in my overly long paragraph: People are different and learn different, so if one way of learning does not work, it may just be a sign that another approach would possibly suit you better.

Michael Stum
+1  A: 

My approach has been downloading source code to simple programs. Then I read the code and try to understand each section. I also put comments on the code to Identify the sections I understand. Then I look up the class or section of code that do not make sense. Then I write the application exactly as see it and rewrite/compile the code until I no longer have to look at the original.

I look at it like cooking. Use the recipe until you know how to make the dish on your own. After creating the dish several times you will start adding your own flavor.

Jordan Johnson
+1  A: 

I'm learning JavaFX right now. This is the approach I'm using:

  • Start by looking at a few simple examples, just to get an overall familiarity with what you're looking at.
  • Get the best learning material you can. There are a lot of free sources that might not be good; there are sources that might be out of data. Get the best source possible, even if it costs money.
  • Follow along with the examples: Type them in (don't use the book's CD, you won't learn if you don't do it), run them, change them.
  • Teach what you've learned. Offer to give a presentation to your group on the topic you're learning. It's amazing how much more you learn when you need to present it to someone else!

I personally don't find it useful to get into a open source project at the beginning - it's too easy to get bogged down with the specifics of the project's domain. Instead, I prefer to come up with my own example that I'll write from scratch.

David