View RSS Feed


Book Recommendations

Rating: 2 votes, 4.50 average.
by , 06-20-2011 at 10:34 PM (12791 Views)
In this article I plan to create a quick, easy to locate post about good books that I have encountered. Feel free to comment and add your book recommendations. I plan to include more than just Java books in this post. I will start with Java, moving onto c++, and other languages. The end of the post with books I have on my short list. These books will be finished shortly and I will put them here, and update my thoughts as the books are finished.

Starting out - Which book to get?

Beginning to learn java, or any programming language could seem difficult. Without a good book to start you may be asking "How can anyone learn this stuff?" It's true that a bad book will make learning the language very challenging. Sometimes even a good book that is above your skill level could make it very challenging. Hopefully with this book list you will more easily begin to program in Java. Knowing one language well also greatly helps learning other languages. I believe one of the first steps to learning to program is to set everything up. I find this to be one of the most challenging things for a beginner. What to download? How to use it? What should I use to edit my programs? Should I get an IDE, or use command line?

For java, you want to download the JDK from the sun website. It's free, and fairly easy to install, I will also provide a great link for setting this up and running your very first program. Editing your programs will always be based on personal opinions. I personally enjoy using notepad++, and command line compiling, but you should decide what to use on your own.

First, the link to setting everything up - - You can find many more interesting video tutorials at this links website, but the first is invaluable when it comes to setting up the JDK properly.

Next, where to download an editor, some popular IDE's are Eclipse, and Netbeans. I will not cover how to install them since I use neither. I prefer notepad++, available here -

You may be asking "When are you going to get into the actual books?" Well now is the time to get into my recommendations.

Java Books:

There are a lot of truly great books out there -- possibly too many to know where to start. One of the highly recommended places to start, is the Oracle java tutorials. These tutorials are quite well written(since they are written by the java creators). The tutorials have simple examples which do a good job explaining the material. Sometimes the tutorials can be a bit challenging for beginners, but sticking with them will help you learn the language from the tutorials.

Head First Java:
One of my absolute favorite books out there for learning java. The book is a smooth read, with light hearted talk and comedy mixed in. This book aims to teach you in a way that is simple to learn. They don't want to over complicate the already complicated process. This book covers a wide variety of topics very well. It doesn't get too in depth when it comes to the more challenging topics(threading, generics, networking), but it gives you a base from which to expand on. The book has thinking exercises for you to do, but not like you may be looking for. In this respect, the book could have improved, otherwise, the book is truly excellent. -- I recommend buying all books on amazon, it's quite cheap to get used books in great condition.

Thinking in Java:
A good book, but it definitely requires you to understand the language a bit. I read this book as a complete beginner and was able to really learn a lot, but also, I had complaints. The author at times seems like he is writing for himself, not for beginners. If you stick with this book you will get a lot out of it. It covers many topics in depth, even many advanced topics(nio, threading, etc). The chapter on Strings in the book was excellent, as was the one on exceptions.

The book also did a great job explaining some interesting things. One big thing is when making the compare, or compareTo method. Many people take a naive approach and do something like
Java Code:
public class Ex implements Comparable<Ex>{
  private int x;
  public int compareTo(Ex e){
    return x - e.x;
This may look like a good enough approach, if the numbers are equal, it returns 0, if this is < e, it returns a negative number, otherwise it returns a positive number. But what if you have one number that is really small, and one that is really large? For example, (-10000 and Integer.MAX_VALUE), if you subtract the numbers you will get a weird result. Wouldn't you expect -10000 to be less than Integer.MAX_VALUE? You would, but this will return that the negative number is actually larger. This error arises due to overflow.

This is just one of many things Thinking in Java will teach you. It's a good book and well worth reading.

Effective Java:
This book is a bit more complex and shouldn't be a starting book, but should definitely be read. This is one of the best books I have read, it truly teaches you a lot and allows you to really think when designing your classes. The book is filled with items that you should try to adhere to. Each chapter covers a different type of items, one chapter works with object creating, things like using static factory methods rather than constructors, or using a builder when a class has a constructor with many different optional parameters.

The book has a great chapter on Generics, which can really teach you a lot about generics and it shows you some good tips to keep in mind. This book is great in every way and I highly recommend it to anyone. This book should not be passed up.

Java Concurrency in Practice:
Another great book, but very challenging to understand at times. This is a book you need to really pay attention to and should not be your first book on programming. If you have a decent understanding of most of the basics and you are interested in threading, I suggest this book greatly. It teaches a complex topic very well with good examples.

C++ Books:

This section deals with some good beginner books on C++, my experience with C++ isn't as great as it is with java so this section will be brief.

C++ Without Fear
This is the second programming book I ever read. I read this book before any java books and it made my java life much easier. The book teaches you all the basics and really helps you understand how stuff happens. Consider reading this book if you are very new to programming and would like to learn C++.

Accelerated C++
This book is a bit more challenging and teaches many more advanced concepts in c++. It taught me some things I didn't even know exists. Looping through data structure with iterators, rather than a loop counter, and many other things. This is a great, short, easy to read book which covers a lot of topics in C++ very well. It does however; expect you to already have some familiarity with another similar language.

Practical C++ Programming
This book, like the other c++ books are very good and truly cover the language well. It emphasizes the importance of good programming style, it covers pointers, building classes, array, and many other things. It even covers how to use the preprocessor a bit. It has fairly good exercises at the end of each chapter and it is definitely well worth a read.

There are many other C++ books that are great, but I am not going to cover them right now.

Other Books:

These books are just good books I like, some programming, some just interesting other books.

This book is brilliant. It teaches you how to build a computer. It starts with the most basic concepts in computers, the binary system. With this system, everything in a computer can be done. It teaches you about logic gates and builds them up gradually. It shows you how the current flows through each different logic gate to produce either a 1 or 0 based on the correct inputs. It builds these logic gates up to form many things, like adders. It eventually talks about how to build ram, and then moves onto transistors. In the book they explain very clearly how to build an entire computer, how to program it, how everything is executed in machine code, and many other topics. This book is a fun, mostly easy read, well worth buying.

How to Design Programs:
This book uses Dr. Scheme and a very good teaching approach. Dr. Scheme is a lisp like language and as such, uses lots of recursion. The book is truly amazing. It has many exercises, from simple, to excruciatingly difficult for a beginner. In this book you learn how to write programs to make fractals, like Sierpinski triangles, to some other advanced Generative recursion problems. One of the exercises is to write an AI search to solve the Missionaries and Cannibals problem. It also allows you to find all the permutations of some word. This book had some amazing feeling moments(those moments when you never expect to solve a problem and finally do).

Great Book, and it's freely available at the following website:

Surely you're joking Mr. Feynman
This is not a programming book, it is instead a great book about Richard Feynman's life. It has funny stories from his life and shows how curious he was. It's a fun read and definitely interesting. Worth reading, and it's chap at amazon.

Now a book I haven't read in entirety but I must recommend. It's a bit challenging, but I feel this book would be extraordinarily influential learning some very advanced topics. The book is from MIT and is named "Structures and Interpretation of Computer Programs," and it uses Scheme, which is a lisp like language. A challenging read for sure, from the first chapter I have read, but well worth the challenge.
Also, freely available here:

I hope this article is helpful to people, since this is not the first revision of the post I will provide a link to a previous post I have written, which will be similar to this, but different. Here is the link to that page:

Another good link I have found some books that I am reading/going to read soon can be found at the following link to Stack Overflow.

As stated in the beginning, if you have anything that you feel should be added that I left out, please add a comment.

Submit "Book Recommendations" to Facebook Submit "Book Recommendations" to Digg Submit "Book Recommendations" to Submit "Book Recommendations" to StumbleUpon Submit "Book Recommendations" to Google

Tags: None Add / Edit Tags


  1. sunde887's Avatar
    • |
    • permalink
    Newer version of HTDP(which is still being worked on) is available here: How to Design Programs, Second Edition