Should I learn C before Java ?
I assume that you are interested in web development since you know
what you want to do in the long run.
I personally feel that it is harder to learn C/C++ after having learned
Java than the other way around (for the same reason as blu4899, "Java
will spoil you rotten compared to the awkwardness of C/C++"). So, if
you think you will want/need to learn C/C++ at a later time, learn that
Seriously think about...
1) Do you plan to go to school for computer science in the future?
Learn C/C++. Most schools will make you take a class or two in C or C++
before you take any other programming courses (and don't think you can
get out of it by explaining that you know Java).
2) Do you want to learn "core programming concepts"?
C++, I think, is better for this. C has a lot of awkward syntax that in
many more recent programming languages has been removed (not that C++
doesn't have it's own problems, since it is based on C, but I think
there are less). Java "takes care" of many things it doesn't think
people should be bothered with (i.e. pointers). So, you may miss some
concepts that would have come in handy learning other languages.
3) Do you want to get into application programming at some point,
Toss up. Java is a full blown programming language which can be used on
or off the web, so you don't have to choose what you want to do right
off. On the other hand, if you are seriously considering it... you may
want/need C/C++ at a later date.
4) Do you want to continue web development to server side languages at
Probably learn C/C++. Many server side languages are based off of C/C++
(php is a good example), so if you know C/C++ it makes learning those a
LOT easier. I don't think the same applies to Java as it is so fiercely
OO and many server side languages are not.
5) Do you just want to learn Java for web development and have no other
Java. C and C++ are helpful if you already know them, but if you want
to learn Java, just learn it! Palaste is right, no need to backtrack to
quantum physics just to learn a single language.
If you decide to learn C/C++ first, for any of the above reasons, there
is no need to become an expert in it. Get the core concepts (up to
advanced pointers for C and, for C++, perhaps up to templates or just
before), apply them in a few programs, that should be enough. You are
no longer spoiled at that point and can probably safely move on to Java.