The Top 9½ In a Hacker’s Bookshelf
Every hacker should have a good solid dead tree library to draw ideas from and use as reference material. This list has a bit of everything – textbooks you will encounter at top tier computer science universities, books giving insight into the industry, and references you shouldn’t be caught without. It is a list of hackers’ classics.
The Mythical Man Month: Essays on Software Engineering – Anniversary Edition
by Fredrick P. Brooks
This is a classic on the human elements of software engineering first published in 1975. The technology has changed a lot in this time, but the human elements of software engineering have remained the same. It is a wealth of insight, often quoted, and very well known in the industry. “The Mythical Man Month” describes many commonly occurring problems in large and mid-scale development projects and breaks them down. Here are a two of the book’s important principles:
The Mythical Man-Month: Adding manpower to a late software project makes it later.
No silver bullet: There is not a single strategy, technique, or trick that can exponentially raise the productivity of programmers.
I recommend this book not only for programmers, but for anyone managing a software project. Project managers and programmers alike will appreciate Brooks’ clear, well-thought out points.
The C Programming Language (2nd Edition)
by Brian W. Kernighan and Dennis M. Ritchie
Commonly referred to as just K&R, this is the canonical C reference book. It’s to the point without being too terse; it is detailed enough for a beginner to understand without being bloated. K&R tells you exactly what you need. Nothing more, nothing less. At 274 pages this is one of the most compact languages references you will find. I dare a Java author to come up with something so sweetly concise.
This book is recommended for anyone learning C, and for anyone looking for a C reference book. K&R is a must read for anyone who is writing a language reference or technical literature.
If you have never programmed before, K&R might not be the best place to start out, but still doable if you are motivated. Beginners might also consider getting a copy of “The C Answer Book,” which gives detailed explanations of solutions to the K&R exercises.
Structure and Interpretation of Computer Programs (2nd Edition)
by Harold Abelson and Gerald Jay Sussman
SICP is used in entry level computer science classes at many top tier universities including the University of California – Berkeley and the Massachusetts Institute of Technology. It uses the Scheme language to introduce many powerful paradigms like recursion, lambda notation, abstraction, and interpreted languages.
I found this book incredibly dense when I first read it for an introductory CS class, and there was still much to learn from a reread several years later after I had a better grasp of the ideas presented here. If you didn’t have the opportunity to use this book in the classroom, I would recommend picking it up to see what you missed, especially if you haven’t used any of the Lisp dialects extensively.
Code Complete 2: A Practical Handbook of Software Construction
by Steve McConnell
“Code Complete 2” is a highly regarded book about software construction, where McConnell defines construction as mainly programming and debugging, along with some elements of construction planning, detailed design, unit testing, integration, and integration testing. The book’s focus is on writing better code. McConnell touches on a wide variety of topics including managing complexity, refactoring, coding style, and writing good comments.
This book is recommended for anyone who wants to write good solid code. It will save beginners time when learning good coding practices, and is a great refresher for programmers with years of experience who may find that over time they have developed habits that are holding them back.
Introduction to Algorithms, Third Edition
by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
This is another textbook. “Introduction to Algorithms,” is probably the most popular university-level text for algorithms classes. It also serves as an excellent reference book.
Even though practically speaking most programmers shouldn’t be writing their own implementation of, say, quicksort, in a production environment, algorithms knowledge is essential for understanding what kind of asymptotic performance you can expect from libraries and your own code.
“Introduction to Algorithms,” is recommended as a reference for any developer looking to brush up on their algorithm skills. It is also recommended if you are interested in topics like NP-Completeness, randomized algorithms, or Fast Fourier Transformation. Good math skills are essential if you want to grok all parts of this book.
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides
This is a catalog of different object-oriented design patterns. For each of the 23 patterns that are presented, the authors give an in-depth analysis including a motivating example for the pattern, common pitfalls and trade-offs, related patterns, and sample code in either C++ or Smalltalk. Some of the patterns covered are Singleton, Observer, Template Method, Iterator, and Proxy.
This book is a must read for intermediate or advanced developers working on object-oriented code. Coders that are new to object-oriented design would be best served by mastering the basics of an object-oriented language and digging in to non-trivial project before attempting to learn all of the patterns presented here, otherwise the patterns aren’t likely to “stick.”
Programming Pearls (2nd Edition)
by Jon Bentley
This is a great book for learning how to approach problems. Each of the 15 chapters presents a different task, such as sorting phone numbers, creating anagrams, or doing text searches. The problem is defined, and then Bentley walks through different solutions, providing a discussion and clear analysis of each solution, with a breakdown of programming principles at the end.
“Programming Pearls,” contains some very clever ideas, and would be of some use as an algorithm reference for a small class of problems, but the take away of the book is something much bigger and more general: how to approach and solve problems from the perspective of an engineer.
I recommend this book to anyone who enjoys working though programming brain teasers.
Compilers: Principles, Techniques, and Tools, 2nd Edition
by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman
“Compilers: Principles, Techniques, and Tools,” is commonly known simply as the “dragon book.” This is the standard textbook in a theoretical compilers class. It covers everything you would expect to find in a compilers text: language syntax, parsers, lexical analysis, grammars, intermediate code generation, runtime environments, optimization, etc. If you haven’t done a lot of work with these topics, be prepared to learn a whole slew of new terminology and concepts: deterministic finite automata, finite state automata, LR parsing, and more.
I particularly enjoyed parts of the dragon book that get down and dirty into the mathematical notation and theory – and this is large theme throughout the book. If you find regular expressions and state machines fascinating you will really enjoy the book. On the other hand, if you are looking for a text that will introduce modern, practical compiler implementation details you may find the dragon book a bit lacking. In those respects the dragon book is starting to show its age (this version was copyrighted in 1986).the 2nd edition of this book includes new sections covering modern techniques.
Unix Power Tools, Third Edition
by Shelley Powers, Jerry Peek, Tim O’Reilly, and Mike Loukides
This is one of the many great books from the O’Reilly collection. “Unix Power Tools,” weighs in at a hefty 1200 pages, and is full of descriptions of Unix command line tools, usage cases, and shell script syntax examples for all of the major shells.
“Unix Power Tools,” is a great reference book and is fairly well organized into self-contained chapters. If you find yourself reading this book from cover to cover you are an amazing specimen of geekdom.
Much of the information contained within this book can be found more quickly with a Google search, but sometimes its nice to have a dead tree reference as well.
This is one of the few books that is valuable for beginners and experts alike. Everyone from a complete Unix newbie to a seasoned Systems Administrator has something to gain from “Unix Power Tools.”
The Ultimate Hitchhiker’s Guide: Five Complete Novels and One Story
by Douglas Adams
Well this book isn’t technically about hacking, but your geek card is hereby revoked if you haven’t at least read this “increasingly inaccurately named,” Hitchhiker’s Trilogy. It contains all 5 books in the Trilogy: “The Hitchhiker’s Guide to the Galaxy,” “The Restaurant at the End of the Universe,” “Life, The Universe and Everything,” “So Long, and Thanks for All the Fish,” and “Mostly Harmless,” plus the short “Young Zaphod Plays it Safe.”
Be entertained. Discover the answer to life, the universe, and everything. Learn how to make a Pan Galactic Gargle Blaster. And most of all don’t panic!
This edition is bound in beautiful black leather and has a silk ribbon bookmark sewn into it. It’s like reading a very nice Bible, only more believable. (Mandatory disclaimer before any trolls find me: That was a joke.)
That’s it for my top 9½. What would you put in yours?
[Update: Have a look at the follow-up list, 5½ more books in a hacker’s bookshelf.]
[Disclaimer: The links above are affiliate links, which means if you buy something from Amazon after following a link from GrokCode, you pay the same amount and I will get a percentage of the sale to help support this site (which would make me smile).]
Discussion on
The Top 9½ In a Hacker’s Bookshelf
by Jess Johnson in Books & Tools
43 Comments
Leave a reply