I recently read Russ Olsen's Eloquent Ruby and I loved it.<p>It is incredibly readable; the code and the stories mixing amazingly with real world examples and what not.<p>What are some of yours?
Some love for - The C Programming Language - Kerninghan & Ritchie -<p><a href="http://www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131103628" rel="nofollow">http://www.amazon.com/The-Programming-Language-Brian-Kernigh...</a>
Any book written by Charles Petzold is an enjoyable read, though particularly the non-MS specific titles Code and The Annotated Turing.<p>Java Concurrency in Practice (2006) is older but relevant and clearly describes concurrency on the JVM. A must read for any Java, Scala, Clojure, etc. software engineer; well-written, enjoyable, concise.<p>Practical Object Oriented Design in Ruby by Sandi Metz is a fun read packed with good principles for working in Ruby that are applicable in general to object oriented programming.<p>Smalltalk Best Practice Patterns by Kent Beck is worth a read because the general principles are applicable to any OOP language.<p>Clean Code by Robert Martin is excellent but a time commitment. (If you had to pick between SICP and Clean Code because time is at a premium I'd err on the side of Clean Code for practicality. Writing maintainable code is paramount.)<p>The Joy of Clojure (Fogus/Houser) is excellent and mentally digestable even if you have no Lisp or Clojure background.
The Little Schemer By Daniel P. Friedman and Matthias Felleisen - <a href="https://mitpress.mit.edu/index.php?q=books/little-schemer" rel="nofollow">https://mitpress.mit.edu/index.php?q=books/little-schemer</a><p>Why's poignant guide to Ruby - <a href="http://mislav.uniqpath.com/poignant-guide/book/" rel="nofollow">http://mislav.uniqpath.com/poignant-guide/book/</a>
Knuth: he's an excellent writer with a sense of humor.<p>Anything coauthored by Kernighan is a good bet, though the material is not quite so ageless. Similar remarks for P.J. Plauger.<p>Norvig doesn't just write exquisite code, but good prose too.<p>I always liked Abelson & Sussman's style, even though it's more textbookish. Abelson also co-wrote Turtle Geometry, which is almost unknown these days and still eye-opening. (It's more of a math book than a programming one, but its point is to be both.)<p>Daniel Hillis: The Pattern on the Stone, The Connection Machine.<p>Richard O'Keefe, The Craft of Prolog.<p>Jon Bentley.<p>I remember pg's On Lisp as good.
Check out the Stealing The Network series if you're into security -<p>it's a bunch of short stories about network security usually written from the POV of a hacker who's trying to gain access to a system. The stories are very tech-heavy to the point that parts of the stories are non-fiction, with huge excerpts from console sessions and the like.
My favorite is Javascript: The Good Parts by Douglas Crockford. It's clear, concise, the railroad diagrams are super helpful, and from what I've seen of Crockford's lectures on YouTube, it also really captures his voice.
My favorite one is Paradigms or Artificial Intelligence Programming: <a href="http://norvig.com/paip.html" rel="nofollow">http://norvig.com/paip.html</a>
Programming in Lua by Roberto Ierusalimschy is one of the best introductions to any programming language. Hw writes the new version along with each language release now, on the grounds that if you cannot explain it right then the language feature probably needs fixing.
I like The Little Book of Semaphores: <a href="http://greenteapress.com/semaphores/" rel="nofollow">http://greenteapress.com/semaphores/</a>
Common Lisp: A Gentle Introduction to Symbolic Computation by David S. Touretzky is solid for learning the fundamentals of thinking in and writing lisp.<p><a href="http://www.cs.cmu.edu/~dst/LispBook/" rel="nofollow">http://www.cs.cmu.edu/~dst/LispBook/</a><p>Bump for the K&R as well, great book, helped me get my feet wet with C quickly and effectively.
My favourites are more about the general craft of software development than specifics e.g.<p>The Pragmatic Programmer: Hunt and Thomas<p>The Mythical Man Month: Frederick Brooks
Functional Programing in Scala (<a href="http://www.manning.com/bjarnason/" rel="nofollow">http://www.manning.com/bjarnason/</a>)<p>More recent than most books mentioned here, but I found it remarkably well-written. Irrespective of what happens to Scala, this book has a good chance to be useful 10 years from now.
Computer Systems: A Programmer's Perspective
by Randal E. Bryant, David R. O'Hallaron<p><a href="http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/013409266X" rel="nofollow">http://www.amazon.com/Computer-Systems-Programmers-Perspecti...</a>
A curated PLT (Programming language theory) list : <a href="http://steshaw.org/plt/" rel="nofollow">http://steshaw.org/plt/</a><p>A Github hosted list of free programming books (merging SO and other sources):
<a href="https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md" rel="nofollow">https://github.com/vhf/free-programming-books/blob/master/fr...</a>
It's not even published yet, but based on the 7 of 11 chapters available I can say the book gonna be really fundamental.<p>Designing Data-Intensive Applications<p>The Big Ideas Behind Reliable, Scalable, and Maintainable Systems<p>By Martin Kleppmann<p><a href="http://shop.oreilly.com/product/0636920032175.do" rel="nofollow">http://shop.oreilly.com/product/0636920032175.do</a><p><a href="http://dataintensive.net/" rel="nofollow">http://dataintensive.net/</a><p>The author has great sense of humor.
This gem is too often left out:<p>How to Design Programs - An Introduction to Programming and Computing<p><a href="http://www.htdp.org/" rel="nofollow">http://www.htdp.org/</a>
In addition to those already mentioned:<p>- Stevens: Advanced Programming in the Unix Environment<p>and more recently,<p>- Kerrisk: The Linux Programming Interface.<p>Also, almost anything by Kernighan (with several different co-authors).
For both entertainment value and incisive exploration of dark corners in the language, "Expert C Programming: Deep C Secrets" is a fantastic book.
Accelerated C++ by Andrew Koenig and Barbara Moo (<a href="http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X" rel="nofollow">http://www.amazon.com/Accelerated-C-Practical-Programming-Ex...</a>). One of the best introductory programming books, and one of the best introductory books in general, that I've ever read.
Taming text <a href="http://www.amazon.com/Taming-Text-Find-Organize-Manipulate/dp/193398838X" rel="nofollow">http://www.amazon.com/Taming-Text-Find-Organize-Manipulate/d...</a>
Natural Language Processing with Python <a href="http://www.nltk.org/book/" rel="nofollow">http://www.nltk.org/book/</a>
C# in Depth by Jon Skeet is amazing and is great to brush up your C# skills!
A word of warning though: it's excellent for developers with experience in .NET, but does not serve as an introduction to the language/framework. The knowledge is not easily applicable to other languages either. That aside - it is still the best programming book I've read thus far.
Eloquent Ruby is one of my favorite books, too. That book really motivated me to learn how programming languages work. Here are a few other books I found to be enjoyable and well-written:<p>Programming Erlang by Joe Armstrong<p>Programming Elixir by Dave Thomas<p>Seven (more) Languages In Seven Weeks by Bruce Tate<p>Think Bayes, Think OS, How To Think Like A Functional Programmer (Think OCaml) and The Little Book of Semaphores by Allen B. Downey
The Elements of Computing Systems: <a href="http://www.nand2tetris.org" rel="nofollow">http://www.nand2tetris.org</a>. A great, fun, do it yourself projects with subtle hints to move forward. Helps you lay a good foundation for programming.<p>Helped me a lot when I ventured into 3D graphics and game programming.
Geek Sublime by Vikram Chandra. The connections between the worlds of art and technology.<p><a href="http://www.amazon.com/Geek-Sublime-The-Beauty-Code/dp/1555976859" rel="nofollow">http://www.amazon.com/Geek-Sublime-The-Beauty-Code/dp/155597...</a>
"Large Scale C++ Software Design" by John Lakos<p>This book made me understand that writing software is not just about creating opaque binaries with _stuff_ inside. It's also about what does this binary depends on, which symbols does it exports, how is it built, etc.
While on this subject, would anybody recommend a book in french? It would be for my nephew who is quite smart, high-school age, and knows java an python. I would like to expose him to something different: lisp, or functional programming.
Any suggestions on theory books (not exclusively on a language) that isn't too dense? Not looking for a textbook, but something that is a lighter read that can help me with the logical parts of programming.
Fortran/ClearWin+ simple and to the point<p><a href="http://www.silverfrost.com/manuals/clearwin.pdf" rel="nofollow">http://www.silverfrost.com/manuals/clearwin.pdf</a>
Design Patterns: Elements of Reusable Object-Oriented Software <a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/" rel="nofollow">http://www.amazon.com/Design-Patterns-Elements-Reusable-Obje...</a><p>Practical Object-Oriented Design in Ruby by Sandi Metz. <a href="http://www.poodr.com/" rel="nofollow">http://www.poodr.com/</a>
Yo progg'n books — I'm really happy for you, I'll let you finish, but The Poignant Guide is one of the best books on programming of all time. One of the best of all time!<p><a href="http://mislav.uniqpath.com/poignant-guide/book/chapter-1.html" rel="nofollow">http://mislav.uniqpath.com/poignant-guide/book/chapter-1.htm...</a>