In an attempt to make helping beginners with questions about how to start programming, I have created this post. It will discuss some of my favorite books, with a quick explanation about the book. Also, I will include some highly recommended books which I have not gotten around to reading just yet. This post will contain not just java specific books, but c++, and other languages as well, including one non language related book(although it does use java for examples). The post will cover the tutorials which are widely recommended and thought to be a great source of information.
To start, The Oracle Tutorials, these are probably one of the best places to learn java. Everything in the language is covered, including the most advanced topics. The people writing these tutorials are extremely experienced with the language, which makes sense, since the company they work for were involved in the languages design and are responsible for the huge class library which makes java so nice. Each topic in the tutorials are covered with fairly good detail, and include a few runnable examples. Typing the code, compiling it, and running it can be very helpful for a beginner. It will get you familiar with the syntax and will get you learning to debug almost automatically. Let’s face it, as a beginner you will make lots of small mistakes and you will be pulling your hair out trying to fix it. I tend to use these tutorials and I am actually coding something that I am not entirely familiar with. The examples and explanations can be quite helpful. For an absolute beginner, the tutorials may seem like an alien language, however; if you stick with it, you will begin to understand them. The Java API is also another good page to have bookmarked. To help you can generally get away with the following google statement to find any class “Java 6 ClassName”.
I am going to start with java books and move onto c++, and then books on other languages.
My absolute favorite book is Head First Java, the book is thorough, funny, and an easy read. It covers most topics very well, and some of the more advanced topics briefly. This is one of my favorite books to recommend. It taught me many things about java, many of it I still remember well. It is a great book for beginners and could be one of the best books to start your learning process.
Thinking in Java— This book is something that I don’t easily recommend, but looking back at all I learned from it, I can’t not recommend it. At times it seems like Bruce is a very good programmer who doesn’t take the time to break down the topics to beginners. Instead it feels like you are expected to know the content already. If you are reading this book with another it can be helpful. A beginner book can help you learn the basics, while this book teaches you the details. The explanations are very thorough, and offers lots of insight. You will learn lots of good things, as well as read some incredible chapters. One thing I like to note having learned, is the reason why using this to compare two ints is bad
class X{ int x; public int compareTo(Object o) X item = (X)o; return x - item.x; } }
The main reason this is bad has to do with underflow/overflow producing incorrect results in some examples. If one class has Integer.MAX_VALUE, and the other has -10, it will underflow to Integer.MAX_VALUE – 10, which is not what you wanted. This is one of the good things the book teaches, it also teaches a good chapter on exceptions, strings, collections, and a few others. The HashCode is another thing that is explained very well in this book. It is definitely worth reading.
Java Software Solutions— This is the book I am currently reading, it seems to do a good job explaining the topics. My favorite thing about this book is the incredible amount of exercises the book contains. For a beginner, it is invaluable to have plenty of challenging exercises. This book does a fairly good job, I may update this with more when I finish the book, but for now, I definitely recommend it.
C++ Without Fear— This book is very good for a beginner, it explains the most basic concepts of programming; if you are unfamiliar with loops and other very basic concepts this book is helpful. It also teaches some more complicated c++ topics, when finished you should have a better understanding of programming, and a decent c++ understanding. I read this book before any java books and it helped me a lot in the transition.
Accelerated C++— This book expects you to already know some programming, the more you understand going into this book, the easier it will be to learn. The book covers the STL a lot and it’s quite an interesting read. The authors are very knowledgeable. While I am not done with this book, I am about 2/3 of the way through it and have learned a lot of good c++ topics. Before this book I knew nothings about c++ iterators, with this book I have learned what they are, why they are important, and how to use them. This is a great book, definitely consider it as well.
Practical C++ Programming — Just finished this book the other day. It really covers pointers, and other complicated topics. The book gives you a lot of explanations of the c++ language, when you finish this you will have a fairly good understanding of c++, however; with a language like c++ you will still have plenty to learn.
C++ Primer— I have not read all of this book, I am recommending it because of the reviews I have read, it seems to be a very well written, thorough book. The quick preliminary scan definitely leads me to believe that the book will be a good book for learning.
How to Design Programs— Great book, this is the first book I ever read about programming. It uses a dialect of lisp called Dr.Scheme and does a great job explaining how to program. The language uses an incredible amount of recursion and when you finish the book you will really understand recursion. It offers lots of very challenging exercises, which are very rewarding when you solve them.
SICP— I have not read this book yet, I purchased it recently, however; I have heard it is a great book, I mainly include this book here for the recommendations I have seen on it. I have read a large part of the first chapter and like what I have read. Definitely worth reading.
These are some of the books I would like to suggest right now, I will be including more information as I continue reading books, and I will also include some more advanced books soon as well. I hope this post helps you get started on your programming journey.