Lots of great advice here. It's refreshing to see that, largely, people aren't just pushing their own language of choice, but are saying (quite rightly) that it doesn't matter. Like dpcan, I started on basic, then qbasic and moved up from there.<p>You asked about breaking down the options. Something which I've only fairly recently realised, is that languages differ in more ways than just syntax and built-in modules.<p>As I see it, the three main 'types' of language are:<p><pre><code> Object Oriented ("OO"/"OOP")
Functional
Procedural
</code></pre>
OO languages are usually built on top of procedural, and procedural languages are by far the most widespread.<p>Functional languages are based on a more mathematical model, and if you've studied maths they'll probably make a lot of sense to you. They're still seen as largely academic languages, but they are used in some real-world scenarios, and they have devout followers. It's a powerful paradigm.<p>Object-Oriented purports to allow you to model the real world more closely, but the degree of success is debatable. Personally it's my favoured approach; to me you can lay out your model really simply with an OO approach, which in turn lends itself well to separation of concerns, reusability and modularisation (i.e. you don't want to build your login system and have that also handle thumbnail uploads, they're different concerns, they should be handled in different parts of your code)<p>Procedural, to me, is really a necessary evil en route to OO.<p>So, yeah, I thought a broader view of language types might help, rather than a specific view of particular languages.