I would like to learn programming but haven't been able to get started. Advice appreciated, both high-level (you should try learing language X) and low level (you can find a program that will run language X here), the latter has been a particular problem for me, I don't really know how this sort of thing works.
I am currently studying maths and physics, and I have a particular talent for the former, so I would probably do well with a language that plays to that strength. My only actual experience with programming was when my father let me play around with Jython a bit when I was about 13, I had some fun calculating prime numbers and approximating pi but never got any farther.
Thanks in advance for all suggestions.
http://www.catb.org/~esr/faqs/hacker-howto.html That's by Eric Raymond, who at that time was a respected programmer (he's now a disrespected far-right-wing blogger).
To summarise his advice, first get an open-source UNIX on your computer (e.g. Debian GNU/Linux, which can be downloaded from http://debian.org ). UNIX is a much better programming platform than Windows, and you can install it so your system can switch between it and Windows (though personally I'd just drop Windows altogether).
Then start with Python. http://www.pythonlearn.com/ seems a very good resource (I found that yesterday via ciphergoth's twitter feed).
I second the recommendation of Project Euler. The problems there are simple enough that you can probably solve them very quickly, but still tricky enough to stretch your programming muscles.
Once you've learned Python, you really need to look at at least one of C or C++. These are the standard languages for low-level systems programming, but they're also the basis for a huge number of other languages - if you know even a little bit of C, then Java, C#, Perl and so on will all be trivial to pick up.
If you really don't want to switch operating systems (though I really, really urge you to do so if you ever want to do serious work), I recommend trying to learn one of Microsoft's proprietary languages using Visual Studio Express ( http://www.microsoft.com/express/Windows/ ). Visual Studio lets you knock together quick-and-dirty GUI apps for Windows in a matter of (sometimes literally) seconds. If you're sure you don't want to use another OS, then it's the only way forward, really. I'd recommend starting with Visual C# (which is very similar to Java, so you can switch to that with relative ease) - C++ is a bit hard as a beginner's language, and while I quite liked Visual Basic when I played with it, there's a consensus among programmers that learning Basic rots your brain.
Hope that helps.
I'd recommend against installing Unix/Linux unless you're already familiar with it. Learning programming and learning Unix are both non-trivial tasks. While I agree that Unix is generally a better environment for programming, I think it's better to focus on one thing at a time. Optimizing your programming environment is secondary to using an environment you're comfortable with.