Some time ago I came across Josh Kaufmann's Personal MBA progam which is basically a list of books and blogs that are kind of a substitute of an MBA program, and you don't have to spent so much money on it.
Inspired by this list I decided to gather a list of most important books in Software Engineering and Computer Science. Almost all of these books I either read at whole or heavily used as a reference material. I studied mathematics with books by russian authors, so I tried to find kind of a substitute book for each subject. Many books in this list are "THE" books on its subject matter, "classic" I would say.
So, here is the list with very short abstracts.
- Donald Knuth: The Art of Computer Programming. Sort of a "Bible" for the field of algorithms. Three big volumes cover foundations of computer algorithms.
- Dan Gusfield: Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology Advanced algorithms tailored specifically for a hot area of biocomputing. Don't be misguided though, applications of these algorithms are much broader. For example, book describes suffix trees and arrays - data structures used by all advanced search engines
- Frederick P. Brooks: The Mythical Man-Month: Essays on Software EngineeringMost famous book about project management in high-tech. Written decades ago it is still red-hot.
- Edward Yourdon: Death March: The Complete Software Developer's Guide to Surviving 'Mission Impossible' Projects Pinpoints problems that lead to the fact that vast majority of high-tech projects never suceed. Must-read not just for managers wannabes, but for all involved in hight-tech projects. One of my favourite chapters: "How to recognize death march project".
- Bjarne Stroustrup: The C++ Programming Language. Even on the wake of Java, .NET, and dynamic languages, C++ remains language of choice fo system programming for unparalleled balance of power and performance. One of the major disadvantages of C++ is the fact that it is damn too complex. If you think otherwise, try this short quiz: (1) What is Koenig lookup? (2) What do 'mutable' and 'explicit' keywords mean? (3) What are the rules of type coercion for ternary operation?
- Steve Maguire: Writing Solid Code: Microsoft's Techniques for Developing Bug-Free C Programs. Title says it all.
- Steve McConnel: Code Complete Code complete is a comprehensivce book on software consturction process. It covers many areas: tools, processes, techniques.
- Joel Spolsky: Joel on Software. Joel is probably the most popular software engineer in the world, brilliant writer and speaker. His essays on "Painless software management" are like a fresh breeze, you read them with a though: "Oh boy, he really gets it".
- Thomas H. Cormen et al: Introduction to algorithms. Another book on algorithms. It's not a substitute for Knuth's and Gusfield's books but a great complement. Contains a big compendium of graph-related algorithms, string algorithms, randomized algorithms and much more. One of the authors of this book is one of inventors of RSA encryption algorithm.
- Bruce Schneier: Applied Cryptography. Comprehensive book on modern cryptography written by one of the most influential scientists in the field
- Bryan W. Kernigan: The UNIX Programming Environment. While contents of this book may look little bit antique, this is must-read book if you want to understand ideas and concepts behind "mother of all modern operating systems".
- Alfred V. Aho: Compilers: Principles, Techniques, and Tools. Also called "dragon" book (because of the cover design, I guess) - a comprehensive book about compilers, covering all stages from lexical analysis to code generation and optimization
- Steven Muchnik: Advanced Compiler Design and Implementation. Another book about compiler construction concentrates on final stages of compilation - code generation and optimization. Contains lots of advanced and mind numbing algorithms
- Kent Beck: Extreme Programming Explained: Embrace Change. An alternative software project management approach, which quickly becomes mainstream though.
- Scott Meyers: Effective C++. Also More Effective C++ and Effective STL from the same author. These books contain rules and guidelines which help you to minimize number of defects in your C++ programs
- Larry Wall: Programming Perl. As a software engineer, I know for sure from hard experience: besides main language for you work, you must know at least one scripting language. Perl is still the best choice, in my opinion.
- Jeffrey E. F. Frield: Mastering Regular Expressions. Regular expressions are powerful instrument wich will definitely help you in you career. Besides, creating complex regular expressions is a great mind excercise.
- Kenneth H. Rosen: Discrete Mathematics and its applications. Mathematical foundations of computer science.
This is not a final version, though. I hope to add some books in future. Stay tuned and subscribe to RSS feed if you are interested.
Posted in Software engineering frolov's blog | add new comment
Submitted by frolov on Sun, 2005-04-10 17:32.



