C++ Programming Essentials: A Comprehensive Guide

Are you eager to dive into books? The C++ books recommended in this article are the most comprehensive and classic. Although the article is somewhat old, classic books are continuously updated in versions, which does not affect the recommendations made in this article.

Main Content:

C++ is a large language widely used in industrial software development. Its complexity and ability to solve real-world problems make it extremely valuable for academic research and industrial applications. Like C, C++ has achieved great success in many important fields.

However, an undeniable reality is that in the low-level programming domain, C++ is squeezing C while also facing a strong backlash from it. In high-level programming, Java and C# are continuously encroaching on C++’s territory. Perhaps the integration of C++ and C will always be a dream, or maybe the tide of Java and C# will eventually force C++ to return to its fundamental development domains: low-level system programming, high-level large-scale high-performance application design, embedded programming, and numerical scientific computing. If that is the case, I believe it might not be a bad thing.

C++ attracts so much intellectual investment that the excellent works in this field, including heavyweight software products, libraries, and books, are countless. The title “C++ Programming Essentials” has a somewhat loose meaning: the four books of C++ programming x the five classics. Yes, in this article (and its sequel), I will categorize and recommend more than 20 excellent C++ books for you to choose from based on your needs.

TCPL and D&E

TCPL and D&E are abbreviations for “The C++ Programming Language” and “The Design and Evolution of C++”, both written by Bjarne Stroustrup. I list them separately, firstly because Bjarne is the creator of the C++ language, and secondly, and more importantly, because these two books are undoubtedly masterpieces in the C++ field. It is not an exaggeration to call them the “bibles” of the C++ language.

Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)

“The C++ Programming Language (Special Edition)” published by the Machinery Industry Press.

“The C++ Programming Language (Special Edition) (English Reprint)” published by the Higher Education Press.

So far, TCPL is the most authoritative C++ reference manual aside from the C++ standard literature. Contrary to most people’s views, I believe Bjarne’s prose is as excellent as the programming language he created; at least, I enjoy this academically rich work. The book describes the C++ language in a clear and straightforward manner. It observes C++ from the perspective of its creator, which no other author or book can do — no one knows better how to use C++ than Bjarne himself.

This is a serious work aimed at intermediate and advanced C++ developers. If you are an experienced C++ programmer who needs to understand more essential C++ knowledge, this book is written for you. It is not the kind of book that will make you smile constantly; it requires careful consideration and repeated chewing over. During your reading, pay special attention to what Bjarne emphasizes and what he glosses over. Personally, I particularly like the fourth part of this book, “Designing with C++”, a topic that is hard to find in similar programming language books — I even think Bjarne should have written a separate book on this part.

Bjarne Stroustrup, The Design and Evolution of C++

“The Design and Evolution of C++” published by the Machinery Industry Press.

“The Design and Evolution of C++ (English Version)” published by the Machinery Industry Press.

D&E is a monograph on the design principles, design decisions, and design philosophy of the C++ language. It clearly answers why C++ has become what it is today and has not evolved into another language. As the creator of the C++ language, Bjarne vividly showcases his unique and profound insights. In addition to widely praised language features, Bjarne does not shy away from controversial or even rejected C++ features, providing logically sound and convincing explanations for each. The content covers the prehistory of C++, C with classes, C++ design rules, standardization, libraries, memory management, multiple inheritance, templates, etc., with in-depth discussions on important new features, including exception mechanisms, runtime type information, and namespaces. Every C++ programmer should deepen their understanding of this language through Bjarne’s explanations.

It is worth reminding again that these two books are knowledge-dense, and the information is vast; please do not miss any of Bjarne’s seemingly casual remarks.

Introductory Tutorials

Learning any language requires a gradual process from beginner to expert. However, for a so-called beginner, it is hard to generalize whether they are a complete novice or a “newbie” familiar with other languages, or even a highly skilled expert in a certain language programming domain. Different C++ beginners need different introductory books.

Andrew Koenig, Barbara E. Moo, Accelerated C++: Practical Programming by Example

“Accelerated C++ (Chinese Version)” published by the China Electric Power Press.

Unlike most C++ tutorials on the market, this book does not start with “C in C++” but begins with authentic C++ features. It uses the standard library to write programs from the very beginning, gradually explaining the foundational concepts that these standard library components rely on as the narration deepens. Additionally, unlike other C++ textbooks, this book uses examples to drive the explanation of the language and standard library, wherein the latter is provided to support the example programs rather than merely serving as auxiliary tools to demonstrate language features and standard library usage.

The authors are world-class in programming practice, education, and technical writing in the C++ field. I appreciate this refreshing writing style that extensively utilizes the standard library and native C++ features. In front of this textbook, almost all previous C++ textbooks seem dim or outdated. Although this textbook may be a bit avant-garde for domestic higher education, I still strongly recommend it to my peers. By the way, in a recent correspondence with Bjarne, he commented on this book: for experienced programmers learning C++, this might be the best book in the world.

Stanley B. Lippman, Josee Lajoie, C++ Primer (3rd Edition)

“C++ Primer (3rd Edition) (Chinese Version)” published by the China Electric Power Press.

This book’s title can be somewhat misleading. Although the authors claim it is written for C++ beginners, both its thickness and depth of explanation suggest otherwise. Perhaps it would be more appropriate to describe it as a “from beginner to expert” C++ tutorial. Personally, I do not think it is suitable for complete beginners who do not understand C++; before reading this book, you should at least have some background knowledge of C or C++ or have some programming experience in other languages.

Despite omitting discussions on some advanced C++ features, it can still be considered the most comprehensive C++ learning tutorial to date. In fact, if a C++ beginner can thoroughly read this book and complete all exercises with the “C++ Primer Answer Book”, they will surely be able to enter the ranks of professional C++ programmers. I personally believe that even if you already own TCPL, this book is still worth having because, in many ways, it is more detailed and easier to understand than TCPL.

Stanley B. Lippman, Essential C++

“Essential C++ (Chinese Version)” published by Huazhong University of Science and Technology Press.

“Essential C++ (Reprint Version)” published by the China Electric Power Press.

This book can be loosely considered a condensed version of “C++ Primer”. It discusses the most representative themes in C++, including procedural programming, generic programming, object-based programming, object-oriented programming, template programming, and exception handling. Stanley lowers the threshold to the most basic level acceptable for C++ beginners with programming experience in other languages, allowing them to quickly start programming in C++ without having to read the bulky “C++ Primer”. It guides learning through examples, aiming to help readers grasp the essence of C++ in the shortest time possible.

Perhaps it would take several hundred pages for someone else to summarize all aspects of C++ programming paradigms, but this small book accomplishes that remarkably. I personally enjoy this book for being technical, concise, and straightforward. This book also has a clear style: all program examples use standard library components, which is refreshing.

The above three books are not written for complete programming novices. Complete C++ programming novices can read Francis Glassborow’s new book (not yet published): “A Beginner’s Introduction to Computer Programming: You Can Do It!” This is also Bjarne’s recommendation. Francis Glassborow is the chairman of ACCU and has commented on almost every classic C++ book over the years; his own book will naturally attract great interest from the C++ community.

Efficient and Robust Programming

Two years ago, while I was in charge of a provincial-level power dispatch system project, I wrote a gateway program that obtained real-time power information from the SCADA system. The communication interface used an uncommon direct database connection method (this gateway program connected SQL Server 6.5 on one end and Oracle 8.1.6 on the other). Since there were nearly ten thousand real-time measurement points, it was clearly inefficient to update or insert all samples at once. I built an in-memory library in the gateway program, where the obtained data was first compared, and then it was decided whether to update the physical database (while also doing some other more complex tasks…), thus achieving the expected results in both efficiency and resource utilization.

This program has been running well, but one day after I left the site, the system administrator called to say that due to network issues, the gateway program sometimes crashes — it crashes itself, which is fine, but the problem is it also causes the Windows 2000 Advanced Server to go “blue screen”! To be honest, I have never seen a non-malicious program have this “ability”. Since I was busy with another large project at the time and could not debug on-site, I had to carefully wrap the in-memory library code with exception handling code (while also making some other modifications…). Although this did not completely solve the problem, the program ultimately did not crash as badly.

What is the point of telling this anecdote (I certainly did not think of it as an “anecdote” when I was obsessively thinking about that horrible bug)? I want to say that for any software, without robustness, efficiency is out of the question. And for C++ programmers, while it may not be difficult to write an efficient program, writing a server-side software that needs to run 24/7 is not so easy; many factors need to be considered, some of which may far exceed C++ language and development tools themselves. As a programmer developing actual project software, you don’t have to bump into nails to accumulate experience; as long as we are humble enough, others’ experiences can often serve as good references. In this regard, I recommend the following books for you to read, as they can benefit you in terms of robustness and efficiency (of course, their content is not limited to exception handling).

Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Design (2nd Edition)

Scott Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Designs

“Effective C++ (Chinese Version)” published by Huazhong University of Science and Technology Press.

“More Effective C++ (Chinese Version)” published by the China Electric Power Press.

“Effective C++ (Reprint Version)” published by the China Electric Power Press.

If “Effective C++” mainly discusses some relatively basic concepts and techniques in C++, then “More Effective C++” focuses on a series of advanced techniques, including exception handling. Compared to the former, the latter has two main differences: first, it contains many new standard C++ contents; second, the topics discussed tend to be more “strategic” rather than “tactical”, and the discussions are deeper and more thorough. Especially the depth of discussion on virtual destructors, smart pointers, reference counting, and proxy classes is hard to imagine in such a small book.

With effortless techniques and superb writing skills, Scott is undoubtedly one of the best C++ technical writers in the world. In terms of clarity, readability, and conciseness, both of these books stand out. In summary, the 85 methods provided by Scott to improve programming techniques and design thinking are essential skills for intermediate and advanced C++ programmers. I highly recommend these two books (and there is actually one more, which will be seen shortly).

Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions

Herb Sutter, More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions

“Exceptional C++ (Chinese Version)” published by the China Electric Power Press.

“More Exceptional C++ (Chinese Version)” published by Huazhong University of Science and Technology Press.

Do you consider yourself an expert in C++? Read these two books by the Secretary of the ISO C++ Standards Committee and then answer. In these two books, Herb adopts a “Q&A” approach to guide you in learning C++ language features. For each topic, Herb first reasonably anticipates your questions and confusions, then guesses that you are likely to have the wrong answers, and finally provides guidance and presents the best solutions, summarizing universal principles for solving similar problems.

These two books are typical works that delve into the details of the C++ language; they are thin but dense in content, far exceeding Scott’s two books, and reading them is quite mentally taxing — I personally find them much harder to understand than Scott’s books. To study the knowledge contained in these two thin books, you would need to spend several months! (In Scott’s preface, he admitted to falling into the GotW problems’ traps more than once; you should know what that means.) What is the benefit of delving into language details? Although in most cases, we do not need to care about what happens behind the scenes in C++ code, when we do need to, these two books can provide us with excellent clues, as they reveal the subtle yet crucial aspects of the C++ language.

Stephen C. Dewhurst, C++ Gotchas: Avoiding Common Problems in Coding and Design

“C++ Programming Traps” published by China Youth Press.

Stephen’s theoretical literacy and practical experience ensure that this is a book worth reading. Stephen was one of the first C++ users at Bell Labs. He has successfully used C++ to solve problems in various fields, including compilers, securities trading, e-commerce, and embedded systems. This book gathers 99 insights from the author’s frontline development experiences, and by understanding them, you can avoid almost all common C++ design and programming issues.

I even believe that for C++ programming novices, reading this book can lead to more immediate and significant improvements than reading Scott’s and Herb’s books. I personally appreciate this book’s writing style — many of Stephen’s viewpoints seem extreme yet are irrefutable. Of course, this confidence (and dry humor) comes from the author’s profound technical literacy rather than arrogant obstinacy.

In addition to the books recommended above, “Efficient C++: Performance Programming Techniques” co-authored by Dov Bulka and David Mayhew (published by Tsinghua University Press) is also worth a look. This ultra-thin book focuses on high-performance C++ application development. Both authors are IBM software experts who work in fields requiring high performance, and this book is their shared experience. Some people do not like this book because it spends a lot of time discussing topics unrelated to C++, but I actually appreciate this aspect because it broadens my perspective.

Templates and Generic Programming

Templates and template-based generic programming are undoubtedly the most actively developed C++ programming techniques today. The first revolutionary application of templates is STL, which showcases the use of template technology in generic containers and algorithms. Modern libraries like Boost and Loki continuously push the potential of template technology to the extreme. In the field of templates and generic programming, I recommend the following heavyweight works:

David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide

“C++ Templates: The Complete Guide (Traditional Version)” published by Qiufeng Information Co., Ltd.

“C++ Templates: The Complete Guide (Simplified Version)” published by People’s Posts and Telecommunications Press.

There is a cliché way to praise a book, roughly stating that “if you haven’t read this book, then you…”; this often contains exaggerated elements. However, if one says, “If you haven’t read ‘C++ Templates: The Complete Guide’, you cannot master C++ template programming”, then that statement holds true for the vast majority of C++ programmers in the world.

This book fills a long-standing gap in the field of C++ template literature. Previously, there were books like “Modern C++ Design” focusing on advanced programming techniques and generic patterns using templates, and there were also guides for using specific template frameworks and components like “The C++ Standard Library”. However, if you lack a deep understanding of template mechanisms, it is challenging to navigate both realms. Therefore, I recommend this book to anyone eager to thoroughly understand C++ template technology.

This book has one translation in mainland China and another in Taiwan, each by different translators. By the time you read this article, both translations should be available, providing readers with more options. Mr. Hou Jie has made most chapters of the traditional translation available on his personal website; feel free to take a look.

Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied

“Modern C++ Design: Generic Programming and Design Patterns Applied” published by Huazhong University of Science and Technology Press.

“Modern C++ Design (Reprint Version)” published by the China Electric Power Press.

Do you consider yourself a master of C++ template programming? Please read this book and then answer 🙂 This is a masterpiece from a genius that is awe-inspiring. Generic patterns broaden your horizons and challenge any C++ programmer’s thinking limits.

This book is divided into two main parts: the first part discusses the foundational technologies and some advanced language features used in the Loki library, including policy-based class design, template specialization, compile-time assertions, Typelist, and small object allocation techniques. The second part focuses on important components and generic pattern techniques in Loki, including generalized functors, singletons, smart pointers, object factories, abstract factories, visitors, and multimethods. Each technique is eye-opening and astonishing.

In terms of learning C++, excess often becomes an excuse for not seeking deeper understanding. However, object-oriented programming is not all that C++ encompasses; templates and generic programming also occupy half of the landscape. For “serious” C++ programmers, keeping up with this proven successful technology is undoubtedly a wise move.

Conclusion

These works are so renowned that they likely do not require my recommendation. However, even though the development and growth of the C++ programmer community are not as rapid as other trendier languages, newcomers continuously outnumber those leaving. Beyond warmly welcoming newcomers, I personally believe it is time to take stock of C++ books and hope that such a “stock-taking” will benefit interested readers. Please remain patient and generous. In the next article, I will continue to introduce excellent C++ books on the standard library, network programming, and other areas. With good books accompanying us, this winter will not be cold.

C++ Programming Essentials (Part Two)

In the previous article, I “stock-took” a dozen excellent C++ books covering TCPL, D&E, introductory tutorials, efficient and robust programming, templates, and generic programming. As winter turns to spring, let us continue the exciting journey of C++ books 🙂

Standard Library

When I was still working at a research institute, I collaborated with two other research institutes to develop a large-scale hydraulic scheduling integrated project. Our three software systems needed to communicate with each other. During the debugging of the communication module, a meticulous client (a studious system administrator) discovered that my code for the same communication protocol did not exceed 30 lines, while the other party’s exceeded 150 lines and was hard to understand. The system administrator was puzzled; I said that everyone has different programming styles and habits; I used the standard library, while he used traditional C programming style and some other techniques he was accustomed to.

Don’t get me wrong! I have no intention of belittling this partner. In fact, I often admire those who have a solid foundation in C programming. After all, C++’s success today is largely due to its deep roots in C. As a C++ programmer, if I am not familiar with C in C++, I often think that their fundamentals are not solid, and their technical confidence is insufficient.

However, that being said, C++ is a multi-paradigm programming language, and the specific programming style adopted should depend on the situation. As a project leader who often needs to do impromptu development on-site, I habitually try to use existing libraries (and components) to solve urgent problems quickly. The efficiency (and robustness) of the well-validated C++ standard library is right there; why not take advantage of it?

Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference

“The C++ Standard Library: A Tutorial and Reference” published by Huazhong University of Science and Technology Press.

This is an encyclopedia-style book on the C++ standard library, a reference book that needs to be consulted repeatedly. Its completeness, detail, and accuracy are unparalleled. This book provides detailed specifications and usage for every standard library component, covering the entire standard library, including streams and localization, not just STL. As the subtitle of the book suggests, it is first suitable for reading as a tutorial and can later be used as a reference manual.

The clear and understandable writing style makes this book very readable. If you want to learn how to use the standard library and maximize its potential, you must have this book. As stated online, this book should not just sit on your bookshelf but should be on your desktop. I strongly recommend it to every professional C++ programmer.

Angelika Langer, Klaus Kreft, Standard C++ IOStreams and Locales: Advanced Programmer’s Guide and Reference

“Standard C++ IOStreams and Locales” published by People’s Posts and Telecommunications Press.

The C++ standard library consists of STL, streams, and localization. While there are many books on STL on the market, there are few dedicated to streams and localization. This book is the best in these two areas, and to date, no other book has discussed streams and localization as comprehensively as this one. If you are not satisfied with just “using” the stream library, you must not miss it.

In the summer of 2001, I briefly flipped through the Chinese version of this book, and both the content and packaging left a relatively deep impression on me — although mostly negative. In the fall of 2003, I learned by chance that a certain online bookstore was selling the Chinese version of this book at an extremely low price, and I couldn’t help but sigh.

Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library

“Effective STL (Reprint Version)” published by the China Electric Power Press.

After reading the Chinese versions of Scott’s “Effective C++” and “More Effective C++”, I have been looking forward to the Chinese version of this book. From Mr. Pan Aimin’s personal homepage, I learned that he and his partners seem to have completed the translation of this book long ago, but unfortunately, it is still not seen on the market. Fortunately, we can see the original version.

This book is a must-read for programmers using STL. In this book, Scott tells us about how STL containers and algorithms work and how to use them in the best way. Like Scott’s other works, this book features clear, precise writing with excellent readability. After reading this book, you might share my thoughts and those of other C++ programmers: when will Scott write a “More Effective STL”?

Regarding STL, I also remind you to pay attention to Matthew H. Austern’s “Generic Programming and the STL: Using and Extending the C++ Standard Template Library” (published by the China Electric Power Press). This book exudes a strong academic atmosphere. Andrew Koenig and Barbara Moo seriously recommend two other advanced books at the end of “Accelerated C++: Practical Programming by Example” (besides their own “Ruminations on C++”), one of which is TCPL, and the other is this book!

Network Programming

In the era of network programming, what role should C++ play? Let ACE (Adaptive Communications Environment) tell you.

Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns

Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks

“C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns” published by Huazhong University of Science and Technology Press.

“C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks” published by the Electronics Industry Press.

Using C++ for enterprise-level network programming, ACE (and these two books) is a choice worth considering. ACE is an object-oriented, cross-platform, open-source network programming framework aimed at building high-performance network applications and middleware. Douglas is the founder of ACE, and Stephen has provided technical support and consulting services for ACE for several years; both are experts in the ACE community (yes, the influence and practical application of ACE have formed a community).

ACE is not only favored by universities and research institutes; it has been successfully applied in thousands of commercial applications worldwide. In telecommunications, aerospace, pharmaceuticals, and finance, ACE has played and continues to play an important role in network systems. If you are preparing to develop high-performance communication systems, you should consider this achievement that gathers the wisdom of world-class experts.

In addition to using C++ object-oriented design techniques and advanced language features like templates, ACE also employs numerous patterns. “C++ Network Programming” Volumes 1 and 2 do not only teach you everything about ACE; they will also teach you advanced techniques such as patterns and generic framework design. Therefore, as an intermediate or advanced C++ programmer, even if you seldom engage in serious C++ network programming, you can still benefit from reading these two books.

Yes, not all network applications need to use web servers (and other application servers) and heavyweight component models; thinking outside the box, they might also benefit from lightweight ACE components.

Miscellaneous

The following books are included in the “Miscellaneous” section simply because I could not think of a more suitable classification method; they are, like the above books, worth reading.

Bruce Eckel, Thinking in C++, Volume 1: Introduction to Standard C++ (2nd Edition)

Bruce Eckel, Thinking in C++, Volume 2: Practical Programming (Second Edition)

“Thinking in C++ (2nd Edition) Volume 1: Introduction to Standard C++” published by the Machinery Industry Press.

“Thinking in C++ (English Version 2nd Edition)” published by the Machinery Industry Press.

The first edition of “Thinking in C++” won the “Software Development” magazine’s Book Shock Award in 1996. The newly released second edition has undergone significant rewriting and adjustments to reflect the impact of C++ standardization and the latest research and practical achievements in the field of object-oriented programming in recent years. Advanced topics such as “input and output streams”, “multiple inheritance”, “exception handling”, and “runtime type identification” have been included in the second volume, along with some newly added content after C++ standardization. Bruce is an experienced C++ instructor and consultant, with training and writing experience that is world-class; his works are more appealing than those written by many “hobbyist” technical personnel. In fact, among similar books, this book’s readability is likely to surpass that of TCPL and “C++ Primer” for most readers. By the way, visit the author’s site to preview the second volume.

Andrew Koenig, Barbara E. Moo, Ruminations on C++: A Decade of Programming Insight and Experience

“C++ Ruminations” published by the People’s Posts and Telecommunications Press.

Andrew is one of the few C++ experts in the world. This book is about C++ programming thoughts and design techniques rather than language details. If you already have a certain foundation, this book will teach you how to think when programming in C++ and how to express solutions. The technical expressions throughout the book are thorough, and the writing is easy to understand. Bjarne has commented on this book: it is filled with insights about “what C++ is and what C++ can do”.

Stanley B. Lippman, Inside The C++ Object Model

“Deep Exploration of the C++ Object Model” published by Huazhong University of Science and Technology Press.

“Deep Exploration of the C++ Object Model (Reprint Version)” published by the China Electric Power Press.

Observing C++ from the compiler’s perspective allows you to understand not only how it works but also why it works that way. This book explores many underlying mechanisms of C++ object-oriented programming, including constructors, functions, temporary objects, inheritance, virtual functions, template instantiation, exception handling, runtime type identification, etc. It also discusses some trade-offs made during the implementation of the C++ object model. C++ programmers who enjoy digging deep should not miss this book.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software

“Design Patterns: Elements of Reusable Object-Oriented Software” published by the Machinery Industry Press.

“Design Patterns: Elements of Reusable Object-Oriented Software (English Version)” published by the Machinery Industry Press.

To design reusable object-oriented software, you need to master design patterns. This book is not specifically written for C++ programmers, but it uses C++ (and Smalltalk) as the primary example languages, making it especially beneficial for C++ programmers. The four authors are internationally recognized experts in the field of object-oriented software, and they have meticulously recorded their design experiences as design patterns. This book has had such a profound impact that the four authors and the book itself have been nicknamed GoF (Gang of Four). The book has a strong academic flavor and a rigorous, concise writing style; although it is not as easy to read as some other books explaining patterns, it is the ultimate authority for accurately understanding design patterns. When learning design patterns, this book requires repeated reading and deep reflection. By the way, please make design patterns the key to unlocking your thinking rather than a shackle of closed-mindedness.

There are also several other excellent C++ books worth reading that I cannot list one by one here. For example, John Lakos’s “Large-Scale C++ Software Design” (published by the China Electric Power Press) and Mr. Hou Jie’s “STL Source Analysis” (published by Huazhong University of Science and Technology Press), among others.

“STL Source Analysis” is a very distinctive book, but I believe it could be better. Personally, I look forward to Mr. Hou Jie writing a more in-depth, thorough, and comprehensive “second edition” after reflecting on template technology since the first edition was published. Unfortunately, after completing the translation of “C++ Templates: The Complete Guide”, Mr. Hou Jie seems to have decided to temporarily bid farewell to the fields of templates, generic programming, and STL.

Supplement on March 31, 2004: The two reference books I consult most frequently are “The C++ Standard Library” and “STL Source Analysis”. Of course, this is largely related to my writing plans for the year.

Successfully developing large-scale software systems in C++ requires not only a good understanding of the logical design issues discussed in most C++ books but also mastery of the physical design techniques discussed in “Large-Scale C++ Software Design”. Of course, this book is indeed a bit outdated, but if your energy and finances are relatively ample, buying one to take a look is not a bad idea.

At this point, I feel it is necessary to clarify that there are some (good) books that have not been recommended, mainly for the following reasons:

The above books are already numerous and excellent enough.

I will not recommend books that are difficult to purchase through normal channels — whether in Chinese or English.

The fame of the author(s) does not affect my recommendations. We are looking at books, not people.

I will not recommend books that I have never read. I must have read at least one version of them (including electronic versions). This “reading” generally refers to “serious reading”, although some may only count as “browsing”.

Conclusion

As an ordinary technical writer and translator, I understand the hardships (and joys) of technical creation and translation, and I know a bit about the details behind the creation, translation, production, publication, and marketing of technical books. Today, I will no longer speak casually about a book that seems mediocre. Listing various versions of the same book is merely to provide you with more information and more choices.

In the later stages of writing this article, I wrote a letter to Bjarne, asking how he would write this article. He gave me concise suggestions. While affirming that the vast majority of the listed books are world-class C++ works, Bjarne reminded me not to forget to recommend “The C++ Standard: Incorporating Technical Corrigendum No. 1” to expert-level programmers. This book is the printed version of the C++ standard specification, with a preface written by Bjarne himself.

Bjarne also kindly reminded me that there was no book in my recommendation list that helps C++ programmers with Windows programming — this was precisely my intention. In this article, I only recommend and comment on platform-neutral C++ works (except for network programming) — independent of operating systems, integrated development environments, and I even fantasize that they are unrelated to compilers. You can choose to read C++ books related to your preferred fields based on your business development needs.

Speaking of “platform-neutral and system-independent”, I cannot help but think of the concept of “abstraction layer”. C++ programmers developing actual applications usually work within specific operating systems, specific development environments, and specific business domains, and a solid and deep grasp of standard C++ and the C++ standard library is undoubtedly the “abstract” currency that allows you to navigate across different operating systems, development environments, and business domains.

Honorably, January 2004, Nanjing Normal University

Leave a Comment