In addition to the above posts, here's some things to consider.
- What sort of programming do you want to do? Large systems, data bases, general text manipulation, scientific and technical, graphics (and so on)?
- If you're starting out with Linux/Unix programming, you might want to consider shell programming. You can do a great deal of work with the shell in a few lines of code than you can with C wherein you might be programming with a few hundred lines of code to accomplish the same goal.
- Which Shell? Well, most systems come with Bourne shell (the original Unix shell -- actually an emulator of it). There is also BASH (Bourne Again Shell) which is the kinda-sorta standard in Linux systems and there is KornShell which functionality was used to develop BASH (BASH grammar and syntax, in most cases, is identical -- exceptions are BASH extensions). There are other shell programs; you don't want to get too far from the mainstream, though, so treat them with care.
- Another good one is AWK. You can do a heck of a lot of work with a one-liner. It's worth your time to learn it.
There are quite a few programming languages supported in Linux, but learn the basics first.
I suggest the shell to start simply because the shell is your point of interaction with the system. That means learning the basic utilities that will be most useful over time.
So where do you learn it? Try O'Reilly (http://www.oreilly.com/
) for books and materials. Consider your interests and your abilities, read the reviews of the materials and decide which may fit your needs. I would suggest, however, that you buy The AWK Programming Language
(from Amazon). It was written by the authors of AWK and is really the one you want (full of working examples for doing useful work).
And I'd really suggest that you learn C (O'Reilly has good materials for that).
Hope this helps some.