Sunday, December 14, 2008

Freely Available Programming Books

In an earlier post, I listed some frequently recommended computer programming books. I got some good feedback from that post, so I thought I'd go a step further and provide some links to programming books that I've found for free online.

Please note that I'm going against my own previous advice here, as I haven't finished reading every one of these books from cover to cover (I haven't even started SICP, I admit), so don't take these as endorsements from someone who has read the books.

NOTE: One Anonymous poster pointed out that there's more material missing from the Google Book Search selections than at first appeared. I've had to remove those books, but you can search their selection through the link provided.

Without further ado, I present to you the 7 best free programming books that I could find online. Enjoy.
  1. Structure and Interpretation of Computer Programs
  2. Thinking in Java (3rd ed.)
  3. Thinking in C++ (2nd ed.)
  4. Algorithms and Complexity
  5. How to Think Like a Computer Scientist(Learning with C++)
  6. Programming Ruby (1st ed.)
  7. Dive Into Python
Please let me know if you find any of these links useful. I'm particularly interested to learn what people think of SICP, since it's been on my "to read" queue for quite awhile. If you decide to read it, be sure to check out the SICP companion video lectures. (Update: I've started reading SICP since this was first published, and I'm keeping track of my progress starting with The SICP Challenge.)

I'd also certainly be interested to learn of any other free online book resources that anyone can recommend.

Related posts:

Even More Free Programming Books


Andy Lester said...

MJD's fantastic Higher-Order Perl was recently made available for free download, too.

Bill the Lizard said...

Thanks for the link to Higher-Order Perl. I learned Perl exclusively from O'Reilley books, and I'd never heard of it before. If you've read the O'Reilley Perl series, can you give me a rough estimate of where Higher-Order Perl fits on the Learning-Programming-Mastering Perl scale?

mhd said...

I'd say HOP is on the 'Advanced Perl' level, slightly lower if you've got previous experience in functional programming.

It's basically the functional programming equivalent to Damian Conways OOP Perl book (Manning, also recommended).

Bill the Lizard said...

Thanks for the perspective on HOP.

jkff said...

Trust me, SICP is the best programming book in existence. To no book and no man do I owe more of my programming skills and inclinations than I do to SICP.

You should also have a look at the corresponding video lectures: they differ from the book in the sense that they are more understandable and cover some topics that the book doesn't. On the other hand, the book covers some topics that the lectures don't. In any case, Abelson and Sussman are both very good speakers and it is a joy to listen to them.

Bill the Lizard said...

Thanks for that endorsement of SICP, jkff. I'll certainly take it into consideration.

Brian said...

I have to agree that SICP is a great book. Well worth your time. I especially recommend working through the exercises.

Bill the Lizard said...

Thanks for the tip. I've heard that SICP is a Lisp book. Can the exercises be done in any language, or would I need to stick to Lisp? Is Scheme a suitable substitute?

wtanksley said...

SICP is good, all right. I don't know if I'd say it's the best ever, but it's very good. Two other excellent online books (again, not "best ever") are:

Paul Graham's On Lisp, about using Lisp's syntactic flexibility to improve your code; and Leo Brodie's Thinking Forth, about using the simplicity behind Forth's designs in your own designs. (You may also want to read Brodie's Starting Forth, also online, if you're not the type that can just skim over programming languages you don't know yet.)

If you really want to get "out there", check out Iverson's Calculus (link includes other books he's posted online), RIP. This is an opportunity to learn a unique and useful programming language, J, while at the same time reviewing/learning calculus. The two most amazing things about this book is that first, it teaches calc without using limits (cool, less boring); and second, it teaches aspects of calc that are normally considered very advanced, like fractional integrals, and makes the completely reasonable for beginners.

wtanksley said...

Bill, Scheme is a Lisp dialect; SICP actually uses Scheme rather than (say) Common Lisp for its examples. The translation is mostly trivial, except for a missing feature on one side or the other (macros aren't trivial to translate, nor is call/cc).

Bill the Lizard said...

Thanks for the recommendations. I'm a long time reader of Paul Graham, so I'm surprised at myself for not knowing that On Lisp was available. I'll be sure to add the Forth books to my ever-growing book queue as well.

Thanks also for clearing up my question about using Scheme with the SICP examples. I've always wanted to learn Scheme, so it looks like I should definitely give SICP a try.

Bill the Lizard said...

I also just found .NET Book Zero by Charles Petzold for free online. It's an introduction to C# and the .NET Framework for programmers who have experience with C or C++.

Bill the Lizard said...

...and for CS math I found Basics of Algebra and Analysis for Computer Science.

dandrew said...

"Concepts, Techniques, and Models of Computer Programming" is often viewed as a followup to SICP. Eraly drafts of the book were available free before it was published by MIT. For example, at

Info on the printed edition is at:

Bill the Lizard said...

Thanks for the information about "Concepts, Techniques, and Models of Computer Programming". I hadn't heard of it before. I'm having a little trouble with the URL to the early draft, and can't seem to get it to open (I get a blank page). Google and Wikipedia seem to link to the same URL. Anyone else having this problem? I'll check a different computer when I go home.

Anonymous said...

SICP is really worth reading. I am "only" at the middle of the 2nd chapter but it is a solid material. I try to take 20 minutes before i start my work every day to read it.

You can find SICP in other languages than Scheme.

I don't have read through one of them but if you are interested...

Last but not least, you can follow the path of Eli Bendersky to complete SICP... Or just read his conclusion to gain enough motivation to start it!

Bill the Lizard said...

Thanks for the recommendation and the links. I'm glad you mentioned the approach of taking 20 minutes a day to work through a book. I've used that method to get through several programming books, and I find that those 20 minute sessions really add up over time.

Ala'a [cmo-0] said...


check this also:
Foundations of Computer Science (Al Aho and Jeff Ullman)

Bill the Lizard said...

Ala'a [cmo-0],
Thanks for the link. I think it's almost time to post another list of free books. I just found some good PDFs at the Numerical Recipes web site. They're older versions of the books, but much of the content is still relevant (particularly the C book, since C syntax seems like it will never go away).

sam said...

hi bill
could u recommend be a good begginer book on algorithms? our college is followin CLRS but i am finding it very dense.

Bill the Lizard said...

Hi sam,

My two favorite beginner-level algorithm books are Algorithms in a Nutshell and Skiena's The Algorithm Design Manual. If you're a Java programmer, you might also like Sedgewick & Wayne's Algorithm's 4th edition. It has a really great companion Web site, and the authors are currently using it to teach a free algorithms course on Coursera.

Ala'a [cmo-0] said...

I'd like to suggest having a look on this book also since it takes different approach.

Introduction to the Design and Analysis of Algorithms

Anonymous said...

Dive into html 5 is available for free. I'm most of the way through it and finding it a good fast read.

Varun Agrawal said...

I am self taught student who likes to read books cover to cover and now I am realizing purchasing CLRS was a very bad choice for me.

Its very hard for beginners to understand without any help, too advance and I don't think I will be able to ever finish this book

Bill the Lizard said...


I can't say I blame you. I really like that book, but I had a professor available to answer questions the first time I was introduced to it. It is a hard read if it's your first exposure to that material. I'd still keep it around as a reference, though. You may want to check out a more accessible introductory book, like *Algorithms in a Nutshell*.

Jaxsonharry said...
This comment has been removed by the author.