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.
A sensible piece of general advice: How to be a Programmer by Robert L. Read.
Practice contest programming (e.g. Project Euler to start, but look for other options) while/after studying Introduction to algorithms (CLRS). This will teach you basic "just do it" skills and give ability to solve deep algorithmic problems and feel the outline of computational complexity of any given solution.
After you get a bit of experience with getting things done, read Structure and Interpretation of Computer Programs (SICP). It will teach you to represent complicated ideas in code and not get lost (which includes skills that subsume a lot of what's referred to by OOP, design patterns, etc., although it's useful to know that language as well). Together with CLRS it'll form the basis of theoretical side of your technical competence.
In the beginning, don't worry about programming languages or APIs. Don't waste time learning all the tiny details or system-specific coding advice, there is too much of low-hanging fruit in general flexible skills that would apply to any language or system. Just know enough to express whatever you want to express (but do look for standard ways of doing things before reinventing specific wheels), and get a lot of practice.
Work on a big project you didn't write, using APIs you didn't know. It'll teach you to figure out your way around originally unknown territory, and to modify the code in the way that doesn't disrupt its (always less than optimal) structure and conventions.
In time (but don't rush it), pick up more things from, for example, books on this list. Getting to that too early is a bit dangerous, since you won't be able to tell good advice from bad, will waste time and attention developing worthless skills, and the good advice can be over your head, impossible to correctly interpret and benefit from the way you'd be able to after having enough experience.
The video lectures for both of the books recommended by Vladimir are available on MIT's OpenCourseWare:
Introduction to Algorithms
Structure and Interpretation of Computer Programs