How I would start learning programming if I did it now [November 16, 2012]

Recently, talking with some newbies, I've been asked how they should start learning programming, what language they should start with and what resources they should use to learn.

Now, I'm not the kind of person that gets a book or tutorial, goes through it, tries some exercises and whatnot. I learned programming starting by my own needs, which means I already had a project in mind but had no idea about how to start or do it.

Well, I just started it and researched what I specifically needed as I kept going, rewriting everything as I learned about what's bad in how I designed the system or what was slow/ugly as I implemented it.

I still think this is the best way to learn, especially the need part, programming is a craft, and programming languages are tools, so if you don't need anything why would you learn programming to begin with?

That aside, I think that the biggest flaw in how new programmers tackle programming is that they tend to become monoprogrammers (they only know one language, it would be like a carpenter only knowing how to use a hammer), in the end they don't even look around for better tools and just stick with the single language they know.

What I would suggest instead, would be to read in parallel PLP, SICP and the Intel manuals, this will give the novice programmer a better overview on programming languages, on programming itself and the system they're going to develop for.

After a while they should start a project on their own and choose the language they find most appealing. This implies that they must first look around at the vast land of programming languages and tools, which will end up avoiding them the deadly sickness which monoprogramming is.

Oh and learn vim, seriously.