C is not really good for beginners, IMO.
First off, learn a scripting language. I learned Auto It. Nice little abstract GUI and, well, automation tool.
Python might also be a good choice. I don't use it, personally, but I've heard it's sleek and simple.
The reason I say this is programming - big projects, are not function-line things; they require a deep understanding of core programming concepts and, really, how things work. Without knowledge of basic concepts: types, variables, how integers are handled, methods/functions/commands, running things, et cetera, then you'll have an extremely hard time getting a foothold in a language.
Then I suggest Java, it's easy, fast (No, really, fast. Look it up. It being slow is a myth), it is extendable into a nigh any sized project, and it shows the concepts quite well. It's low level enough to give the programmer control over what happens (Or nigh all of it. Nothing is technically restricted), but high level enough to give a wide array (pun?) of tools to solve problems or execute common tasks that arise.
@ bezmolvie:
Java is slower, on modern machines, however, the difference is completely unnoticeable. But I just need to add that Java is not an ideal language to learn as a first-timer, when you learn a programming language you should learn how to make your own tools and not just fish them out of a "using" statement without understanding how it works.
@ bezmolvie:
Java is slower, on modern machines, however, the difference is completely unnoticeable.
Not completely right. It might be slower in some situations, but my prof compared the speed of some important algorithms in java and in C. They were faster in Java.
The Java VM actually grew pretty sophisticated within the past decade. From what I've learned, the VM looks for possible loops within the control flow (this is actually a nontrivial task) and marks their head node for local "hot path" compilation, a procedure where branches marked as potential loops during the static code analysis is "execution counted" so that the "hot", or the most significantly visited, branches and the ensuing most dominant loop (nested loops will usually compile the inner loop first, and then the outer loop) will be compiled down to machine code and cached so that subsequent and similar program flows with the right typing/environmental conditions will execute the machine code rather than going through the actual VM. So a lot of more sophisticated code will only have a slight finite as opposed to linear in code size overhead over the equivalent program produced by an optimizing C compiler.
Java is slower. At starting. An extra five seconds when running a .jar. Everything else that's comparable language to language and not programmer to programmer, is either equivalent, or so nigh so that the difference is completely unnoticeable.
Also, the reason I like Java more, is because it rather forces you to realize or figure out how said statement works. The Java default library is coded in Java. In a scripting language, or something with 'commands', it is programmed in the language the scripting language was programmed in.