Knowing the basics of a programming language doesn't make you a great programmer. If you want to become an expert Java developer and stand out of the crowd, you should take a step further and gradually learn about topics like generics, collections, concurrency, design patterns, coding best practices, testing, algorithms, etc.
In this page I keep an updated collection of recommended books and other resources related to the Java language and Programming in general. They cover different knowledge areas and levels, from beginner to advanced, and they can help you reach that goal of become a better Java developer. I recommend these resources from my own experience and because I know them and truly believe they are useful.
Come back here from time to time to check what’s new!
It seems that Herbert Schildt have been out there forever. I still remember learning Pascal and Turbo C with some of his books in the nineties, when I was studying my Computer Science degree. This Java guide for beginners keeps the same simple, direct and very clear style of those good books. It's probably the best book to begin with if you want to start with Java, understandable even for someone without previous programming experience.
The last available edition is updated for Java 8 and covers from the language basics (creating Java programs, keywords, syntax, constructs, etc) to the more advanced features like threads, generics, and lambda expressions. It also includes chapters for creating user interfaces with Swing and JavaFX. Every chapter is full with well commented code examples, including extra explanations that help you understand them.
If after reading this book, you're still hungry for more and want to go to the next level, take a look below at the same author's book: Java: The Complete Reference.
This book is probably the most complete and up-to-date Java resource out there. It covers the entire Java language and its most important APIs, is very comprehensive and well-organized and so very suitable as a reference manual for looking up individual subjects.
It can also be read through with ease, since as the same author's Java: A Beginner's Guide, this book is written in a clear and concise manner, and there are plenty of examples throughout each chapter for better understanding.
Definitely a must have desk reference for every programmer.
Do you use factories or builders to create objects? Do you usually override the
hashCode method of your classes? Do you still use
double when precision is required? What about using bounded wildcards in your generics? The answers to these and many other similar questions are waiting for you inside this great book, which main goal is to provide a deeper understanding of the Java language and its subtleties.
The last available edition covers up to Java 6 and while all of its contents is still highly valuable and valid, it would be great if a new version updated for Java 8 was released (sadly there are still no news of something like that being in the works). The author (Joshua Bloch, well known for his contributions to the Java Specification) has organized the content into items, which are short and standalone sections providing best practices, specific advice, and excellent code examples about specific topics similar to the questions stated above.
This book for the intermediate and advanced levels is definitely one of the most practical and useful Java books I've ever read, and a perfect complement to the two Herbert Schildt's books above.
This is another classic book that shouldn't be missing in every proud of himself Java programmer's bookshelf. Recently updated for the Java 8 version, it teaches you how to write easily maintainable unit tests using JUnit.
The book is full of helpful examples and covers from the basics (how unit testing works and how to get started) to the trickier testing aspects like code refactoring (where and how to change your code and tests to make everything more testable and maintainable), mocks (when and how to use them, including an introduction to the Mockito framework) and how to test persistence and multi-threading. It also includes a good introduction to the Test Driven Development (TDD) paradigm.
This book is undoubtedly the perfect icing on the cake for your Java training. It will give you a notable advantage over average programmers, since testing is usually a forgotten area for most of us, while at the same time testing skills are one of the most demanded skills due to the unstoppable adoption of automation tools, continuous integration processes and the DevOps paradigm.
This book from the renowned publisher O'Reilly celebrates its 10th anniversary with an updated Java 8 edition. The fact that it has been selling so successfully for an entire decade says more than enough about this fun and easy-to-read book. It's probably the best resource out there about design patterns, an area of knowledge every Java programmer should be good at.
While reading this book, keep in mind the following important advice I took from Jeff Atwood at coding horror (weirdly, the book only lets you know this by the end of it): «First of all, when you design, solve things in the simplest way possible. Your goal should be simplicity, not "how can I apply a pattern to this problem." Don't feel like you aren't a sophisticated developer if you don't use a pattern to solve a problem. Other developers will appreciate and admire the simplicity of your design. That said, sometimes the best way to keep your design simple and flexible is to use a pattern. ... Resist the temptation. If you have a practical need to support change in a design today, go ahead and employ a pattern to handle that change. However, if the reason is only hypothetical, don't add the pattern. It's only going to add complexity to your system, and you might never need it.»
Interested in creating better, cleaner and easier to maintain code? Then this book from the great Uncle Bob is for you. He did a great educational job here. Although this book is from 2008, all of its content it's still valid (same as the Getting Real book below), because it's focused on coding best practices more than in any specific programming language aspects.
You'll learn about the art of good software development: design principles, how to structure and comment your code better, detect bad code and transform it into good code, improve your error handling, dealing with concurrency the right way, etc.
The chapter I enjoyed most was the one about Smells and Heuristics, that lists short and to-the-point examples of real problems (code that smells) and suggests ways to fix it.
This book is a classic and definitely a must for anyone involved in the software development world. It is old (for a programming book, in this case, old means 2006) but I would say all of its content is still valid and, in most cases, eye-opening. Why? Because this book is not about any specific programming language or technical stuff, but instead about how to design, build and market successful software products using some simple and unconventional principles and approaches. The ideas you'll find in this book will sure inspire you in some way.
In case you already know the also indispensable book Rework from the same authors: Getting Real is to building software products what Rework is to building a successful business the right way.
You can get a free PDF version of the Getting Real if you subscribe to the 37signals newsletter. In case you are a collector (like me) and feel like having a real copy of this classic on your bookshelf, you can order it at Amazon by clicking the button below.
This book is a valuable asset for programmers of all levels. It contains a collection of wisdom pearls from experienced and respected practitioners in the software development world, including useful tips, practical knowledge, best practices and principles to apply to your projects, no matter the programming language.
The book doesn't provide code examples, but instead make you think deeper about how you code and how to make better choices. It's like having a mentor (or better: 97 experts guys in technology) always available: you will expand your skills and become a better professional. While it is perfect for entry-level programmers, it can also be extremely valuable for senior developers and technical managers, given the kind of discussions and debates it encourages and promotes.
John Z. Sonmez is the guy behind simpleprogrammer.com. He's a hyperproductive man on the Internet: programming podcasts, videos, courses... and he also wrote this real world book. It's a fun-to-read book for programmers, but you won't find in it anything you can expect from a programming book, and that's what makes it special. The topics are arranged as a collection of short and easy-to-read chapters speaking about productivity, personal finance, investing, fitness, relationships, etc.
The goal of this book is help you become a more rounded and so happier programmer. In Robert (uncle Bob) Martin words: «Conveys a message that every software developer (and everybody else, for that matter) ought to hear».
Looking for a Software Engineer/Developer/Programmer job at a tech company? If the answer is yes, you should really consider this book as part of your preparation. Its main value lies in all the technical and programming questions that are provided (topics ranging from data structures and algorithms to concurrency and scalability), along with their answers and very clear explanations. It also includes useful advice about the whole interview process and how to prepare for it, including the before (networking, resumes, rehearsal) and the after (negotiation and handling offers).
By reading this book I learnt a lot of new and interesting things that definitely improved my work as a Software Engineer, so it's worth reading it even if you're not looking for a new job. While I did read the 5th edition of the book in 2014, a new edition (6th edition, July 2015) is now available.
Java Certification Resources
This book is meant for programmers with some Java experience who want to improve and update their knowledge of the Java language while at the same time getting it validated by obtaining the valuable and recognized Oracle Java Certification.
The book is the result of compiling and presenting in a helpful an organized way all the materials I had to create to prepare for my own Java Certification exam. I’ve written it like the one I’d have loved to have found back then.
Getting a Java certification doesn’t happen overnight. You need motivation and you still have to study and practice with an exam simulator. It takes some hard work, but this book will help keep the process less overwhelming and much less time consuming.
This is the simulator I used to prepare for my exam so it’s the one I can recommend and the perfect complement to the JCR book. There are other simulators out there (ePractize Labs, WhizLabs) in case you want to try them, but they are more expensive and probably won’t match the content of the JCR book so well.
In my opinion the guys at Enthuware have done a great job. The simulator is considered to be the best Java Certification exam simulator and they even give full money back guarantee if you fail the exam!
In Enthuware's own words: «We have been guiding students for Java Certification Exams for more than ten years and our tools contain every bit of our experience that we gain while doing so. Our products are the best in terms of Quality of Content, Number of Questions, Features, and Support. You don't have to take our word for it though. Do your research on the net, read reviews from our users, and compare our mock exams, questions, and explanations with offerings from other companies. We are sure that you will find enough reasons to go with Enthuware.»