Hi Folks,
I'd like to apologize for this long post in advance
. Let me give you a little background about myself:
I've loved programming since I was a kid playing around with GWBasic and Logo. Unfortunately, due to various circumstances, I wasn't able to pursue programming as my major in undergrad, but I have a strong background in Algebra and Physics, and have done a fair bit of procedural programming, most recently in MATLAB over the last 4-5 years while I was in grad school. I've also hacked around with PHP and Javascript, but without any deep understanding of either language.
I really miss programming and I've decided to get back into it in my free time. One of my regrets was never having picked up OOP when I was younger (I'm 28 now...so not all that old yet :-) ). So I picked
Java as my starting language, and I decided to read the Head First Java book by Bert Bates and Kathy Sierra. I thought it was a great read for gaining an introduction to various concepts and to get my feet wet in the world of Java programming. However, my only complaint about the book was the lack of programming exercises. I'm a firm believer that writing short programs to
test out various concepts you learn about, really helps you with your understanding, and to pick out on concepts that you might easily gloss over when reading a book. While I did write some programs on the side, I felt that the book didn't help me as much in developing an OOP mindset that helps me think in an object oriented manner.
So now I want to move ahead and get a more in-depth understanding of Java. I'm a little overwhelmed by all the choices of good books, and I'd appreciate some suggestions from more experienced folk.
I am looking for a book:
- That will help me develop an OOP mindset
- That is more in-depth than some of the beginner books, and it doesn't have to assume little to no prior programming knowledge
- That has good example code snippets and some suggested exercises to help you test your understanding of the subject matter
- That will hopefully teach me best practices, and hopefully give me an idea of how to approach bigger projects
I understand that not all of the above might be possible to get from a single book, but I just wanted some advice, given that you know what my background is and what I am hoping to get out of the next book that I read.
Here are some of the books that I have narrowed down:
- Core Java Vol 1 & 2 (Looks great, except no suggested exercises for any of the chapters)
- Introduction to Java, Comprehensive - 8th Edition by Daniel Liang (Seems to have great reviews on Amazon, lots of topics covered, lots of exercises. Is a textbook unlike some of the other books. Not sure if that is better/worse)
- The Java Programming Language by Ken Arnold (Steers clear of things like Swing, but I've heard good things about it)
- Thinking in Java - 4th Ed. by Bruce Eckel (Is it up to date? I've heard some criticism of the GUI section, not sure if unfounded)
I would really appreciate if someone could advise me on which of these books (or perhaps some other) they feel might be a good next step for me. There are some other great books that I plan to read eventually (I've listed them below), but I will hold off on reading them till I have some more experience under my belt and have tried to code a few bigger projects with whatever I learn from my next book. Thanks a lot for reading this long post and I appreciate all your responses!
Java Concurrency in Practice by Brian Goetz
Effective Java by Joshua Bloch
Design
Patterns (Head First or/and GOF)
Java puzzlers... by Joshua Bloch