There's something about a book, whether physical or digital, that's attractive to both programming newbies and seasoned experts. Maybe it's how books function as snapshots of the truth, a fixed moment in time of what one needs to know about a topic and how to know it.
That said, programming books can be costly. The copy of Mark Lutz's "Learning Python" on my desk carries a list price of $59.99. But free e-books and PDFs for several languages, frameworks, applications, systems, and disciplines are available.
Here are 19 titles that have caught our eye over time, ranging in difficulty and appropriateness from absolute beginner to seasoned expert, and organized by general topic or language.
Python: "Dive Into Python 3"
With Python's developers and various Linux distributions pushing Python 3 as the better long-term choice over Python 2, programmers need guidance on what's new in the language and how to make the most of it. "Dive into Python" covers the topic, and it works as a good general introduction to the Python language. It even includes a set of sections on converting Python 2 code to Python 3.
C++/Java/Python: "Think Python/C++/Java: How to Think Like a Computer Scientist"
Another introduction to Python comes via "Think Python," a far more granular and detailed introduction to the language in its manifold detail. The same publisher, Green Tea Press, also offers tomes for C++ and Java, all by Allen B. Downey. And thanks to the open source nature of the books, readers have prepared non-English translations for many of the titles.
Open source isn't only a coding style, and the explosive popularity of GitHub (and the open source tool it's based on, Git) has put source code and version control of same into the hands of millions. But using Git can be tricky, so this book walks the beginner (including the nonprogrammer/project manager) through the essentials of how Git lets programmers take (version) control of their code. It includes illustrations for both Mac OS X and command-line users; Windows users are restricted to the command line for now.
C/Python/Ruby: "The Hard Way"
Zed Shaw's "The Hard Way" series of programming books have developed a devoted following. They insist on having the prospective student of the language get their hands as dirty as possible with it -- hence the title. Shaw covers C, Python, and Ruby in separate books. His extremely granular approach can be off-putting, but few other books put use of the language, not merely discussion of it, front and center.
Clojure, a LISP-like language that runs in the Java Virtual Machine, has become a hot ticket due to the ways it implements functional programming (itself a hot subject) and allows programmers to leverage the existing Java ecosystem. But wrapping one's head around Clojure can be tough for those not reared on LISP syntax, so this book walks newcomers through the basics of Clojure's syntax, concepts, and approach. Next-level Clojure programmers may want to check out "The Clojure Cookbook," loaded with recipes for making good use of the language in a production environment.
Linux: "Linux from Scratch"
The best way to learn is by doing, so they say, and "Linux from Scratch" teaches by walking you through how to build a Linux system from nothing. Few books take as detailed, inside-out, and complete a view of Linux, and while not everyone will want to craft their own Linux to use in production, knowing the purpose and function of all the pieces is indispensable. "Hardened Linux from Scratch" and "Automated Linux from Scratch" continue the odyssey for the stalwart.
This book offers a straightforward, multiplatform introduction to Go (or Golang), Google's C-like language that's enjoying growing attention and interest. It devotes an entire section to one of Go's key points -- its concurrency features -- and it covers the core packages for Go in fair detail. For another approach to learning Go, check out "Go by Example," which is short on explanation but long on demonstration.
Hadoop: "Hadoop Illuminated"
This book on Hadoop isn't only for technical audiences, but rather for all those interested in big data as a topic. "Hadoop Illuminated" could stand to go into more detail about some of the newer elements in the Hadoop ecosystem -- for example, Spark; also, YARN doesn't get the discussion it deserves -- but as a general top-down overview, it's useful.
Programming theory: "Structure and Interpretation of Computer Programs"
One of the great-granddaddies of modern computing textbooks, SICP (for short) was a standard text used at MIT to teach programming. It's not easy going, and it uses a LISP-centric view of programming (a potential point of criticism), but many programmers have their thinking forever changed by reading it. It's also available in a cleaned-up PDF format version and an HTML5 port.