I have a long background in assembler, C, and a little FORTRAN from years in real-time flight simulation. I also took a beginning course in C++ at a local Jr College but that course stopped RIGHT BEFORE they introduced classes.
I started last year, intending to learn as soon as possible but willing to take time to let it sink in. The book that really started the "ride" was the traditional K & B 5.0. I started learning the basic syntax of the language and that came pretty easily. I was able to comprehend the basic function and use of objects but, being a long-standing procedural programmer, the object oriented paradigm escaped me for a long time. My coding examples tending to look like I was forcing an object oriented language to BE procedural.
I traveled off in search of good explanations of the basic object oriented "characteristics" (inheritance,
polymorphism, composition,... ) just trying to understand the idea of "what they were" first. Then I found a book that I have enjoyed having, Java Objects (Jacquie Barker). It starts with a brush up on Java, then goes through a simplified presentation of basic object oriented analysis and design). Coupled WITH that, I was working a contract job where I got to "tear in" to an existing Java page display manager program. There is no better way to learn that to pick someone else's design apart looking for problems. You develop a real eye for what looks right and what doesn't, why certain choices were made, and what choices might have been better.
Recently I have decided that I have hidden from "design patterns" long enough. I'm too old to believe that they are magic, but I can see that they could certainly suggest structuring that might be of assistance in object oriented design, but, alas, I have never understood what they were. I am really enjoying reading "Head First Design Patterns" right now. They take practical (if not comical) examples of programming situations and DRAG you in the direction of specific patterns that they intend to teach. The way it is written it just seems so clear as you go from step to step WHY you end up with that particular pattern in that particular case.
I have more books on
Servlets,
JSP, Hibernate, and Spring and I will get to them all in good time.
I came back to add one more thing: I think that a valuable part of learning also is to come here to the forums at JavaRanch and "jump in" and truy to answer a few questions that you think that you can handle. You never learn quite so well until you try to teach to someone else. One of two things happen: your answer is correct? Fine! You learn that you are grabbing the concepts and feel more confidence going forward. your answer is wrong? Fine! You have an opportunity to learn where the holes are in your knowledge, correct them, and build the confidence to go forward. It is a "win-win". Add to that, I have yet personally to run into anyone who got "nasty" about an answer of mine that was later proven to be wrong. It is more like everyone really is trying to help "nurture" the whole gang along in the right direction. It's a neat place.
[ August 22, 2008: Message edited by: Bob Ruth ]