I would love to take a look
Into the bright and shiny book
Into the open scheme of things
Book of brilliant things.
The list off books presented here are, in my experience, highly regarded in the programming community. I do not present them in any order of merit, but I will try to keep them in some logical order, by subject covered and experience level.
The Text about the books is cribbed from either the back cover of the book or Amazon's description. I hope this does not cause a problem with copyright.
Programming: Principles and Practice Using C++
by Bjarne Stroustrup
An Introduction to Programming by the Inventor of C++
Preparation for Programming in the Real World
The book assumes that you aim eventually to write non-trivial programs, whether for work in software development or in some other technical field.
Focus on Fundamental Concepts and Techniques
The book explains fundamental concepts and techniques in greater depth than traditional introductions. This approach will give you a solid foundation for writing useful, correct, maintainable, and efficient code.
Programming with Todayâ€™s C++
The book is an introduction to programming in general, including object-oriented programming and generic programming. It is also a solid introduction to the C++ programming language, one of the most widely used languages for real-world software. The book presents modern C++ programming techniques from the start, introducing the C++ standard library to simplify programming tasks.
For Beginnersâ€“And Anyone Who Wants to Learn Something New
The book is primarily designed for people who have never programmed before, and it has been tested with more than 1,000 first-year university students. However, practitioners and advanced students will gain new insight and guidance by seeing how a recognized master approaches the elements of his art.
Provides a Broad View
The first half of the book covers a wide range of essential concepts, design and programming techniques, language features, and libraries. Those will enable you to write programs involving input, output, computation, and simple graphics. The second half explores more specialized topics, such as text processing and testing, and provides abundant reference material. Source code and support supplements are available from the authorâ€™s website.
Intermediate and expert books
The C++ Programming Language: Third Edition
by Bjarne Stroustrup
Written by the inventor of the language, the book is the defining, classic text on the language that has become central to software development over the past five years. This third edition incorporates additions and changes on a major scale. In particular, the new edition is based on the ANSI/ISO C++ final draft with its many new language features - templates, exceptions, namespaces, and run-time type identification, to name a few - in addition to the C++ Standard Template Library that has revolutionized C++ development.
Throughout, the book does far more than merely describe every element of the language. The focus is on showing how the language is used as a tool for design and programming, and teaching the basic concepts programmers need to master C++. With this third edition, Stroustrup has made the book even more accessible to those new to the language while adding information and techniques that even expert C++ programmers will find invaluable.
by Herb Sutter
Aimed at the experienced C++ programmer, Herb Sutter's ExceptionalC++ tests any reader's knowledge of advanced C++ language features and idioms with several dozen programming puzzles and explanations. This is a book that can definitely help bring your C++ class design skills to the next level.
Based on the author's Guru of the Week Internet column, this book poses a series of challenging questions on the inner workings of C++, centring around generic programming with the Standard Template Library(STL), exception handling, memory management and class design. Even if you think you know C++ well, most of these problems will teach you something more about the language and how to write more robust classes that are "exception safe". Don't think this is just "language lawyering" though. The author's explanations stress sound programming principles (favouring simplicity) and idioms (such as the Pimpl idiom for class design that promotes faster compile times and better maintainability, or using "smart" auto_ptr's with STL.) Judging from the range and depth of these examples, Sutter's command of the inner workings of C++ is impressive and he does an excellent job at conveying this expertise without jargon or a lot of theory.
After reading this book, C++ designers will learn several "best practices" at how to write robust, efficient classes that are "exception safe" (meaning they don't throw any handled exceptions and don't leak resources). Chances are you'll gain a better understanding of memory management techniques and working with STL too. For the experienced developer seeking leading-edge knowledge of some of the best ways to use C++, ExceptionalC++ is both a challenging and truly worthwhile source of information. --Richard Dragan, Amazon.com
More Exceptional C++:
40 More Engineering Puzzles, Programming Problems, and Solutions
By Herb Sutter
More Exceptional C++ continues where Herb Sutter's best-selling Exceptional C++ left off, delivering 40 puzzles that illuminate the most challenging -- and most powerful -- aspects of C++. More Exceptional C++ offers many new puzzles focused on generic programming and the C++ Standard Template Library, including important techniques such as traits and predicates, as well as key considerations in using standard containers and algorithms -- many of them never covered elsewhere. More Exceptional C++ contains a detailed new section (and two appendices) on optimization in single- and multithreaded environments. It also provides important new insights on crucial topics first introduced in Exceptional C++, including exception safety, generic programming, and memory management. For all C++ programmers.
Exceptional C++ Style:
40 New Engineering Puzzles, Programming Problems and Solutions
by Herb Sutter
Software "style" is about finding the perfect balance between overhead and functionality... elegance and maintainability... flexibility and excess. In Exceptional C++ Style, legendary C++ guru Herb Sutter presents 40 new programming scenarios designed to analyze not only the what but the why and help you find just the right balance in your software.
Organized around practical problems and solutions, this book offers new insight into crucial C++ details and interrelationships, and new strategies for today's key C++ programming techniques--including generic programming, STL, exception safety, and more. You'll find answers to questions like:
- What can you learn about library design from the STL itself?
- How do you avoid making templated code needlessly non-generic?
- Why shouldn't you specialize function templates? What should you do instead?
- How does exception safety go beyond try and catch statements?
- Should you use exception specifications, or not?
- When and how should you "leak" the private parts of a class?
- How do you make classes safer for versioning?
- What's the real memory cost of using standard containers?
- How can using const really optimize your code?
- How does writing inline affect performance?
- When does code that looks wrong actually compile and run perfectly, and why should you care?
- What's wrong with the design of std::string?
Exceptional C++ Style will help you design, architect, and code with style--and achieve greater robustness and performance in all your C++ software.
C++ Coding Standards:
Rules, Guidelines, and Best Practices
by Herb Sutter
Consistent, high-quality coding standards improve software quality, reduce time-to-market, promote teamwork, eliminate time wasted on inconsequential matters, and simplify maintenance. Now, two of the world's most respected C++ experts distill the rich collective experience of the global C++ community into a set of coding standards that every developer and development team can understand and use as a basis for their own coding standards.
The authors cover virtually every facet of C++ programming: design and coding style, functions, operators, class design, inheritance, construction/destruction, copying, assignment, namespaces, modules, templates, genericity, exceptions, STL containers and algorithms, and more. Each standard is described concisely, with practical examples. From type definition to error handling, this book presents C++ best practices, including some that have only recently been identified and standardized-techniques you may not know even if you've used C++ for years. Along the way, you'll find answers to questions like
- What's worth standardizing--and what isn't?
- What are the best ways to code for scalability?
- What are the elements of a rational error handling policy?
- How (and why) do you avoid unnecessary initialization, cyclic, and definitional dependencies?
- When (and how) should you use static and dynamic polymorphism together?
- How do you practice "safe" overriding?
- When should you provide a no-fail swap?
- Why and how should you prevent exceptions from propagating across module boundaries?
- Why shouldn't you write namespace declarations or directives in a header file?
- Why should you use STL vector and string instead of arrays?
- How do you choose the right STL search or sort algorithm?
- What rules should you follow to ensure type-safe code?
Whether you're working alone or with others, C++ Coding Standards will help you write cleaner code--and write it faster, with fewer hassles and less frustration.
C++ in a Nutshell: A Language & Library Reference
by Ray Lischner
C++ is a powerful, highly flexible, and adaptable programming language that allows software engineers to organize and process information quickly and effectively. This is a complete reference to C++ which is organized first by topic, then followed by an alphabetical reference to the language's keywords, complete with syntax summaries and pointers to the topic references. The library reference is organized by header file, and each library chapter and class declaration presents the classes and types in alphabetical order, for easy lookup. Cross-references link related methods, classes, and other key features. This resource should be useful for students as well as professional programmers. When you're programming, you need answers to questions about language syntax or parameters required by library routines quickly. What, for example, is the C++ syntax to define an alias for a namespace? Just how do you create and use an iterator to work with the contents of a standard library container? This book is a concise desktop reference that answers these questions, putting the full power of this flexible, adaptable (but somewhat difficult to master) language at every C++ programmer's fingertips.
The C++ Standard Library: A Tutorial and Reference
by Nicolai M. Josuttis
The C++ Standard Library provides a set of common classes and interfaces that greatly extend the core C++ language. Josuttis' book not only provides comprehensive documentation of each library component, it also offers clearly written explanations of complex concepts, describes the practical programming details needed for effective use, and gives example after example of working code. This thoroughly up-to-date book reflects the newest elements of the C++ standard library incorporated into the full ANSI/ISO C++ language standard. In particular, the text focuses on the Standard Template Library (STL), examining containers, iterators, function objects, and STL algorithms.
C++ Templates: The Complete Guide
by David Vandevoorde, Nicolai M. Josuttis
Templates are among the most powerful features of C++, but they are too often neglected, misunderstood, and misused. C++ Templates: The Complete Guide provides software architects and engineers with a clear understanding of why, when, and how to use templates to build and maintain cleaner, faster, and smarter software more efficiently.
C++ Templates begins with an insightful tutorial on basic concepts and language features. The remainder of the book serves as a comprehensive reference, focusing first on language details, then on a wide range of coding techniques, and finally on advanced applications for templates. Examples used throughout the book illustrate abstract concepts and demonstrate best practices.
- The exact behaviors of templates
- How to avoid the pitfalls associated with templates
- Idioms and techniques, from the basic to the previously undocumented
- How to reuse source code without threatening performance or safety
- How to increase the efficiency of C++ programs
- How to produce more flexible and maintainable software
- This practical guide shows programmers how to exploit the full power of the template features in C++.
The companion Web site at http://www.josuttis.com/tmplbook/ contains sample code and additional updates.
Subject: Algorithms and Data Structures
Introduction to Algorithms
by TH Cormen
This title covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor. This second edition features new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming, as well as extensive revisions to virtually every section of the book. In a subtle but important change, loop invariants are introduced early and used throughout the text to prove algorithm correctness. Without changing the mathematical and analytic focus, the authors have moved much of the mathematical foundations material from Part I to an appendix and have included additional motivational material at the beginning.
Intermediate and expert books
The Art of Computer Programming
by Donald E. Knuth
This multivolume work is widely recognized as the definitive description of classical computer science. The first three volumes have for decades been an invaluable resource in programming theory and practice for students, researchers, and practitioners alike.
The bible of all fundamental algorithms and the work that taught many of today's software developers most of what they know about computer programming. --Byte, September 1995
Countless readers have spoken about the profound personal influence of Knuth's work. Scientists have marveled at the beauty and elegance of his analysis, while ordinary programmers have successfully applied his "cookbook" solutions to their day-to-day problems. All have admired Knuth for the breadth, clarity, accuracy, and good humor found in his books.
I can't begin to tell you how many pleasurable hours of study and recreation they have afforded me! I have pored over them in cars, restaurants, at work, at home! and even at a Little League game when my son wasn't in the line-up. --Charles Long
Primarily written as a reference, some people have nevertheless found it possible and interesting to read each volume from beginning to end.A programmer in China even compared the experience to reading a poem.
If you think you're a really good programmer! read [Knuth's] Art of Computer Programming! You should definitely send me a resume if you can read the whole thing. --Bill Gates
Whatever your background, if you need to do any serious computer programming, you will find your own good reason to make each volume in this series a readily accessible part of your scholarly or professional library.
It's always a pleasure when a problem is hard enough that you have to get the Knuths off the shelf. I find that merely opening one has a very useful terrorizing effect on computers. --Jonathan Laventhol
For the first time in more than 20 years, Knuth has revised all three books to reflect more recent developments in the field. His revisions focus specifically on those areas where knowledge has converged since publication of the last editions, on problems that have been solved, on problems that have changed. In keeping with the authoritative character of these books, all historical information about previous work in the field has been updated where necessary.Consistent with the author's reputation for painstaking perfection, the rare technical errors in his work, discovered by perceptive and demanding readers, have all been corrected. Hundreds of new exercises have been added to raise new challenges.