There are thousands books about programming / software development around(Amazon says 106,471 just for ‘programming’ keyword), but a human could reads only few. So it’s crucial decision to choose best of them. Here is the bunch of well-known books, each is the Bible in a whole industry or some subindustry disregarding language a developer use.
The Art of Computer Programming (Donald Knuth) [Topic: Algorithms] - This Bible of all fundamental computer science algorithms. The must-have book for any computer-science student and for any serious software developer too. Examples written in pseudocode.
Introduction to Algorithms (Cormen,Leiserson ,Rivest,Stein) [Topic: Algorithms] - Another Bible for fundamental algorithms. Examples written in pseudocode.
“There are books on algorithms that are rigorous but incomplete and others that cover masses of material but lack rigor. Introduction to Algorithms combines rigor and comprehensiveness.”
C Programming Language (Kernighan, Ritchie) [Topic: C language, Procedural programming] - Not only C language reference from the godfathers, but also nice and clean book for studying procedural programming.
Algorithms + Data Structures = Programs (Wirth) [Topic: Procedural programming, Pascal] - Bible of procedural programming from Pascal/Modula2/Oberon godfather professor Niklaus Wirth. Examples are written in the Pascal programming language.
Object-Oriented Analysis and Design with Applications (Booch et al) [Topic: OOD/OOA/OOP] - Going further from procedural programming we dive into object-oriented world. Grady Booch’s essential book let us not to sink in new concepts. You should not to miss this masterpiece studying object-oriented software design and analysis.
Design Patterns: Elements of Reusable Object-Oriented Software (Gamma,Helm,ohnson,Vlissides ) [Topic: OOD/OOA/OOP/Design patterns]- Also widely known as Gang of Four(GoF)’s Design Patterns. Must-have jewel for any OO software developer. Source fo many concepts, such as “Program to an ‘interface’, not an ‘implementation’.” and “Favor ‘object composition’ over ‘class inheritance’.” . Also the design patterns dictionary OO developers use pattern names from.
“It has been highly influential to the field of software engineering and is regarded as an important source for object-oriented design theory and practice.”
Refactoring: Improving the Design of Existing Code (Fowler,Beck et al.) [Topic: OOA/OOP/Refactoring] While developing big object-oriented systems refactoring is technique to not let code quality goes down the line. This is refactoring cookbook with recipes to improve code quality. The book is written using Java, but the ideas are applicable to any OO language. From Martin Fowler’s site:
“Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. Its heart is a series of small behavior preserving transformations. Each transformation (called a ‘refactoring’) does little, but a sequence of transformations can produce a significant restructuring. Since each refactoring is small, it’s less likely to go wrong. The system is also kept fully working after each small refactoring, reducing the chances that a system can get seriously broken during the restructuring.”
Structure and Interpretation of Computer Programs (Abelson/Sussman) [Topic: Functional programming] Away from OO programming is the land of functional theory and programming. This book is #1 enlightening functional programming concepts. From wikipedia:
“Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming.”
An Introduction to Database Systems (Date) [Topic: Databases] - Software development is not only logic design and implementation but also data storing. The book written by C.J. Date already has 8 editions and more than 700,000 copies sold! It’s comprehensive introduction to database theory, relational databases, non-relational databases, SQL.
Modern Operating Systems (Tanenbaum) [Topic: OS] contains solid conceptual overview of operating system design, then detailed case studies of Unix/Linux and Windows. Very useful guide even for those who are not dreaming about own OS to be implemented. Professor Andrew Tanenbaum is known as developer of Minix operating system Linux arisen from.
Structured Computer Organization (Tanenbaum) [Topic: Hardware/OS] - another essential book from Andrew Tanenbaum. An introduction to those aspects of computer hardware and architecture that affect programming. It gives detailed coverage at the different logical levels of computer systems(scheme, micro-architecture, instruction set, OS / Java Virtual Machine) and parallel computer architecture.
The Mythical Man-Month: Essays on Software Engineering (Brooks) [Topic: Software engineering/Project management] - presenting famous Brooks' law (“adding manpower to a late software project makes it later”) extracted from experience at IBM where the author managed the development of OS/360 in mid-70’s. Probably the most useful story of failure in software development written in breath-taking style.
Extreme Programming Explained: Embrace Change (Beck) [Topic: Software engineering/Project management] - a clear description of XP methodology. Topics covered: Extreme Programming (XP) software methodology, principles, XP team roles, facilities design, testing, refactoring, the XP software lifecycle, and adopting XP.
Web Data Mining: Exploring Hyperlinks, Contents, and Usage Data (Data-Centric Systems and Applications) (Liu) [Topic: Data mining/Web scraping/Crawlers/Web mining] - complete guide on data mining, information retrieval, crawlers, opinion mining, (un)structured information analysis etc. Each chapter has references for further reading so use this book as start point to explore most of topics regarding information retrieval and analysis in the Web.
Model Checking (Clarke, Grumberg, Peled) [Topic: Formal verification] - Model checking is the most popular technique for formal software verification(way to exclude errors in software by using some formal math methods). The book covers well-known formal models, algorithms, tools. The best introductional book for those who are interested in the topic.
Here are only books I’ve read. Many fields remains uncovered(Agile, soft computing, embedded systems, testing etc), so your suggestions are highly appreciated. Use comments.