Amazon.com: C++ Common Knowledge: Essential Intermediate Programming (9780321321923): Stephen C. Dewhurst: Books
C++ Common Knowledge: Essential Intermediate Programming and over one million other books are available for Amazon Kindle. Learn more

Buy New

or
Sign in to turn on 1-Click ordering.
or
Amazon Prime Free Trial required. Sign up when you check out. Learn More
Buy Used
Used - Good See details
$15.82 & eligible for FREE Super Saver Shipping on orders over $25. Details

or
Sign in to turn on 1-Click ordering.
 
   
Kindle Edition
 
   
Sell Back Your Copy
For a $4.20 Gift Card
Trade in
More Buying Choices
Have one to sell? Sell yours here
C++ Common Knowledge: Essential Intermediate Programming
 
 
Start reading C++ Common Knowledge: Essential Intermediate Programming on your Kindle in under a minute.

Don't have a Kindle? Get your Kindle here, or download a FREE Kindle Reading App.

C++ Common Knowledge: Essential Intermediate Programming [Paperback]

Stephen C. Dewhurst (Author)
4.6 out of 5 stars  See all reviews (19 customer reviews)

List Price: $39.99
Price: $27.49 & this item ships for FREE with Super Saver Shipping. Details
You Save: $12.50 (31%)
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
In Stock.
Ships from and sold by Amazon.com. Gift-wrap available.
Only 6 left in stock--order soon (more on the way).
Want it delivered Tuesday, February 28? Choose One-Day Shipping at checkout. Details
Textbook Student FREE Two-Day Shipping for students on millions of items. Learn more

Formats

Amazon Price New from Used from
Kindle Edition $12.38  
Paperback $27.49  
Sell Back Your Copy for $4.20
Whether you buy it used on Amazon for $14.91 or somewhere else, you can sell it back through our Book Trade-In Program at the current price of $4.20.
Used Price$14.91
Trade-in Price$4.20
Price after
Trade-in
$10.71

Book Description

March 10, 2005 0321321928 978-0321321923 1

“We live in a time when, perhaps surprisingly, the best printed works on C++ are just now emerging. This is one of those works. Although C++ has been at the forefront of innovation and productivity in software development for more than two decades, it is only now being fully understood and utilized. This book is one of those rare contributions that can bear repeated study by practitioners and experts alike. It is not a treatise on the arcane or academic—rather it completes your understanding of things you think you know but will bite you sooner or later until you really learn them. Few people have mastered C++ and software design as well as Steve has; almost no one has such a level head as he when it comes to software development. He knows what you need to know, believe me. When he speaks, I always listen—closely. I invite you to do the same. You (and your customers) will be glad you did.”

—Chuck Allison, editor, The C++ Source
“Steve taught me C++. This was back in 1982 or 1983, I think—he had just returned from an internship sitting with Bjarne Stroustrup inventor of C++ at Bell Labs. Steve is one of the unsung heroes of the early days, and anything Steve writes is on my A-list of things to read. This book is an easy read and collects a great deal of Steve’s extensive knowledge and experience. It is highly recommended.”

—Stan Lippman, coauthor of C++ Primer, Fourth Edition
“I welcome the self-consciously non-Dummies approach of a short, smart book.”

—Matthew P. Johnson, Columbia University
“I agree with the author’s assessment of the types of programmers. I have encountered the same types in my experience as a developer and a book like this will go far to help bridge their knowledge gap.... I think this book complements other books, like Effective C++ by Scott Meyers. It presents everything in a concise and easy-to-read style.”

—Moataz Kamel, senior software designer, Motorola Canada
“Dewhurst has written yet another very good book. This book should be required reading for people who are using C++ (and think that they already know everything in C++).”

—Clovis Tondo, coauthor of C++ Primer Answer Book
What Every Professional C++ Programmer Needs to Know—Pared to Its Essentials So It Can Be Efficiently and Accurately Absorbed

C++ is a large, complex language, and learning it is never entirely easy. But some concepts and techniques must be thoroughly mastered if programmers are ever to do professional-quality work. This book cuts through the technical details to reveal what is commonly understood to be absolutely essential. In one slim volume, Steve Dewhurst distills what he and other experienced managers, trainers, and authors have found to be the most critical knowledge required for successful C++ programming. It doesn’t matter where or when you first learned C++. Before you take another step, use this book as your guide to make sure you’ve got it right!

This book is for you if

  • You’re no “dummy,” and you need to get quickly up to speed in intermediate to advanced C++
  • You’ve had some experience in C++ programming, but reading intermediate and advanced C++ books is slow-going
  • You’ve had an introductory C++ course, but you’ve found that you still can’t follow your colleagues when they’re describing their C++ designs and code
  • You’re an experienced C or Java programmer, but you don’t yet have the experience to develop nuanced C++ code and designs
  • You’re a C++ expert, and you’re looking for an alternative to answering the same questions from your less-experienced colleagues over and over again

C++ Common Knowledge covers essential but commonly misunderstood topics in C++ programming and design while filtering out needless complexity in the discussion of each topic. What remains is a clear distillation of the essentials required for production C++ programming, presented in the author’s trademark incisive, engaging style.




Frequently Bought Together

C++ Common Knowledge: Essential Intermediate Programming + Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition) + More Effective C++: 35 New Ways to Improve Your Programs and Designs
Price For All Three: $97.85

Show availability and shipping details

Buy the selected items together


Editorial Reviews

About the Author

Stephen C. Dewhurst was among the first users of C++ at Bell Labs. He has more than twenty years of experience in applying C++ to problem areas such as compiler design, securities trading, e-commerce, and embedded telecommunications. He is the author and coauthor of several books on C++ and is a member of the advisory board for The C++ Source, a contributing editor for C/C++ Users Journal, and a former columnist for C++ Report. He is also the author of two C++ compilers and numerous articles on compiler design and C++ programming techniques.



0321321928AB02022005

Excerpt. © Reprinted by permission. All rights reserved.

A successful book is not made of what is in it, but what is left out of it.
—Mark Twain
...as simple as possible, but no simpler.
—Albert Einstein
...a writer who questions the capacity of the person at the other end of the line is not a writer at all, merely a schemer.
—E.B. White

When he took over the editorship of the late C++ Report, the quick Herb Sutter asked me to write a column on a topic of my choosing. I agreed, and I chose to call the column “Common Knowledge.” It was supposed to be, in Herb’s words, “a regular summary of basic lore that every working C++ programmer should know—but can’t always.” After a couple of columns in that vein, however, I became interested in template metaprogramming techniques, and the topics treated in “Common Knowledge” from that point on were far from common.

However, the problem in the C++ programming industry that motivated my original choice of column remains. I commonly encounter the following types of individuals in my training and consulting work:

  • Domain experts who are expert C programmers but who have only basic knowledge of (and perhaps some animosity toward) C++
  • Talented new hires direct from university who have an academic appreciation for the C++ language but little production C++ experience
  • Expert Java programmers who have little C++ experience and who have a tendency to program in C++ the way one would program in Java
  • C++ programmers with several years of experience maintaining existing C++ applications but who have not been challenged to learn anything beyond the basics required for maintenance

I want to be immediately productive, but many of the people with whom I’m working or who I’m training require preliminary education in various C++ language features, patterns, and coding techniques before we can get down to business. Worse, I suspect that most C++ code is written in ignorance of at least some of these basics and is therefore not what most C++ experts would consider to be production quality.

This book addresses this pervasive problem by providing essential, common knowledge that every professional C++ programmer needs to know, in a form that is pared to its essentials and that can be efficiently and accurately absorbed. Much of the information is already available from other sources or is part of that compendium of unwritten information that all expert C++ programmers know. The advantage is that this material resides in one place and was selected according to what my training and consulting experience over many years has shown are the most commonly misunderstood and most useful language features, concepts, and techniques.

Perhaps the most important aspect of the sixty-three short items that make up this book is what they leave out, rather than what they contain. Many of these topics have the potential to become complex. An author’s ignorance of these complexities could result in an uninformed description that could mislead the reader, but an expert discussion of a topic in its full complexity could inundate the reader. The approach used here is to filter out needless complexity in the discussion of each topic. What remains, I hope, is a clear distillation of the essentials required for production C++ programming. C++ language wonks will recognize, therefore, that I’ve left out discussion of some issues that are interesting and even important from a theoretical perspective, but the ignorance of which does not commonly affect one’s ability to read and write production C++ code.

Another motivation for this book came as I was engaged in conversation with a group of well-known C++ experts at a conference. There was a general pall or depression among these experts that modern C++ is so complex that the “average” programmer can no longer understand it. (The specific issue was name binding in the context of templates and namespaces. Yes, getting worked up about such a topic does imply the need for more play with normal children.) On reflection, I’d have to say our attitude was pretentious and our gloom unwarranted. We “experts” have no such problems, and it’s as easy to program in C++ as it is to speak a (vastly more complex) natural language, even if you can’t diagram the deep structure of your every utterance. A recurring theme of this book is that while the full description of the minutia of a particular language feature may be daunting, day-to-day use of the feature is straightforward and natural.

Consider function overloading. A full description occupies a large chunk of the standard and whole or multiple chapters in many C++ texts. And yet, when faced with

void f( int );
void f( const char * );
//...
f( "Hello" );

not a single practicing C++ programmer will be unable to determine which f is called. Full knowledge of the rules by which a call to an overloaded function is resolved is useful but only rarely necessary. The same applies to many other ostensibly complex areas of C++ language and idiom.

This is not to say that all the material presented here is easy; it’s “as simple as possible, but no simpler.” In C++ programming, as in any other worthwhile intellectual activity, many important details can’t be written on an index card. Moreover, this is not a book for “dummies.” I feel a great deal of responsibility to those who grant a portion of their valuable time to reading my books. I respect these readers and try to communicate with them as I would in person to any of my colleagues. Writing at an eighth-grade level to a professional isn’t writing. It’s pandering.

Many of the book’s items treat simple misunderstandings that I’ve seen over and over again, which just need to be pointed out (for example, scope order for member function lookup and the difference between overriding and overloading). Others deal with topics that are in the process of becoming essential knowledge for C++ professionals but are often incorrectly assumed to be difficult and are avoided (for example, class template partial specialization and template template parameters). I’ve received some criticism from the expert reviewers of the manuscript that I’ve spent too much space (approximately one third of the book) on template issues that are not really common knowledge. However, each of these experts pointed out one, two, or several of the template topics they thought did belong in the book. The telling observation is, I think, that there was little overlap among these suggestions, and every template-related item had at least one supporter.

This is the crux of the issue with the items that make up this book. I don’t expect any reader to be ignorant of every item’s topic, and it’s likely that some readers will be familiar with all of them. Obviously, if a reader is not familiar with a particular topic, there would be (I presume) some benefit in reading about it. However, even if a reader is already familiar with a topic, I’d hope that reading about it from a new perspective might clear up a slight misunderstanding or lead to a deeper understanding. This book may also have a role in saving the more experienced C++ programmer precious time. Competent C++ programmers often find themselves (as described previously) answering the same questions over and over again to the detriment of their own work. I’d suggest that the approach of “read this first, and then let’s talk” would save these C++ gurus countless hours and direct their expertise instead to the complex problems for which it’s really needed.

I initially tried to group these sixty-three items into neat chapters, but the items had other ideas. They instead tended to clump themselves together in ways that ranged from the obvious to the unexpected. For example, the items related to exceptions and resource management form a rather natural group. Less obviously, the items Capability Queries, Meaning of Pointer Comparison, Virtual Constructors and Prototype, Factory Method, and Covariant Return Types are strongly and somewhat surprisingly interrelated and are best grouped in close proximity to each other. Pointer Arithmetic decided to hang with Smart Pointers rather than with the pointer and array material earlier in the book. Rather than attempt to impose an arbitrary chapter structure on these natural groupings, I decided to grant the individual items freedom of association. Of course, many other interrelationships exist among the topics treated by the items than can be represented in a simple linear ordering, so the items make frequent internal references among themselves. It’s a clumped but connected community.

While the main idea is to be brief, discussion of a topic sometimes includes ancillary details that are not directly related to the subject at hand. These details are never necessary to follow the discussion, but the reader is put on notice that a particular facility or technique exists. For instance, the Heap template example that appears in several items informs the reader in passing about the existence of the useful but rarely discussed STL heap algorithms, and the discussion of placement new outlines the technical basis of the sophisticated buffer management techniques employed by much of the standard library. I also try to take the opportunity, whenever it seems natural to do so, to fold the discussion of subsidiary topics into the discussion of a particular, named item. Therefore, RAII contains a short discussion of the order of constructor and destructor activation, Template Argument Deduction discusses the use of helper functions for specializing class templates, and Assignment and Initialization Are Different folds in a discussion of computation...


Product Details

  • Paperback: 272 pages
  • Publisher: Addison-Wesley Professional; 1 edition (March 10, 2005)
  • Language: English
  • ISBN-10: 0321321928
  • ISBN-13: 978-0321321923
  • Product Dimensions: 9.5 x 6.9 x 0.5 inches
  • Shipping Weight: 13.6 ounces (View shipping rates and policies)
  • Average Customer Review: 4.6 out of 5 stars  See all reviews (19 customer reviews)
  • Amazon Best Sellers Rank: #149,755 in Books (See Top 100 in Books)

More About the Author

Discover books, learn about writers, read author blogs, and more.

 

Customer Reviews

19 Reviews
5 star:
 (13)
4 star:
 (5)
3 star:
 (1)
2 star:    (0)
1 star:    (0)
 
 
 
 
 
Average Customer Review
4.6 out of 5 stars (19 customer reviews)
 
 
 
 
Share your thoughts with other customers:
Most Helpful Customer Reviews

30 of 33 people found the following review helpful:
5.0 out of 5 stars Excellent !, March 26, 2005
This review is from: C++ Common Knowledge: Essential Intermediate Programming (Paperback)
This book extracts the most important and widely used modern C++ concepts and organizes them into bite-sized chunks. Very succinct (it could be too short if you are an expert, you may prefer more exhaustive in-depth analyses). The language style is delight and some confusing concepts are presented in an accessible way, you will not feel dry. I finished reading it without any break in 8 hours, it's quite a pleasant experience.

The interesting feature of this book is that it emphasizes proper use of design patterns in C++ way (prototype, command, factory method, template method..., and item 3 gives an excellent reasoning why you should familiarize yourself with design patterns) and some C++ template techniques (explicit specialization, partial specialization, member templates, functors, embedded type info/typedefs, traits, policies..., and several simple template metaprogramming techniques: such as item 59 "SFINAE" and item 52 "Specializing for Type Information"). This is not a single incident, for example, the whole book "Modern C++ Design" by Andrei Alexandrescu is totally focusing on applying C++ template techniques to solve several design pattern issues.

No matter in which level are you, I believe you will deepen your understanding and sharpen your skills from another angle. If you are serious about improving your C++ skills, it's better to have this book in your reading list.
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


17 of 18 people found the following review helpful:
4.0 out of 5 stars Good introduction to some critical subjects, August 18, 2005
By 
This review is from: C++ Common Knowledge: Essential Intermediate Programming (Paperback)
In this book, Stephen Dewhurst explains 63 individual issues that every intermediate and senior C++ programmer should understand. The topics range from the basic material that anyone programming in C++ should know ("Data Abstraction" and "Polymophism") to more advanced topics that a junior programmer might not grasp ("Template Argument Deduction" and "Generic Algorithms"). Along the way, he covers initialization vs. assignment, exception safety, class layout, and many more.

The only complaint I have about the book is a lack of depth on individual issues. In all fairness, Dewhurst explicitly states that this is his intent. He wanted the material to be short enough to bring someone up to a basic level of understanding quickly. With that in mind, This book serves as a good starter for familiarizing a junior programmer with more advanced topics. To really learn these issues well, the programmer will need supplemental material.

Most junior and intermediate C++ programmers would benefit from reading this book. Any item that you don't fully understand is an area where you need improvement. Senior-level C++ programmers might find this book interesting for reminding themselves where more junior programmers are likely to slip. It would also serve as a good reference to hand to a junior programmer to bring him or her up to speed quickly without spending a lot of time in explanation.

Despite my one complaint, I would recommend this book to most C++ programmers.
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


21 of 24 people found the following review helpful:
5.0 out of 5 stars Excellent Intermediate Text and Reference, September 23, 2005
By 
Paul M. Dubuc (Columbus, OH USA) - See all my reviews
(REAL NAME)   
This review is from: C++ Common Knowledge: Essential Intermediate Programming (Paperback)
I didn't enjoy reading Stephen Dewhurst's earlier book, C++ Gotchas, very much because the approach of teaching by showing you what can go wrong bothers me. If you didn't know about some these particular gotchas before (by experience), does the vague understanding (that you get from reading about them) that they exist help protect you from them? Maybe. But trying to be aware of them all can just make you a more confused programmer; losing sight of your objective of good software design by trying to avoid all the pitfalls. We can learn form others' mistakes occasionally, but I think we can learn a lot more by being taught with examples of how to do it right in the first place. This second approach is taken by Dewhurst in C++ Common Knowledge. It was very enjoyable to read.

This is a great intermediate level text and reference for C++ programmers. It deals with many of the concepts of C++ programming that C++ programmers must understand on the way from being a beginner to making effective use of the language. It covers these concepts with clear examples and explanations in an increasing order of difficulty. This book belongs on almost every C++ programmer's bookshelf because, even if you know the material, the way it is presented in this book makes it easier to remember and review when needed. Highly recommended.
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No

Share your thoughts with other customers: Create your own review
 
 
 
Most Recent Customer Reviews











Only search this product's reviews




Tags Customers Associate with This Product

 (What's this?)
Click on a tag to find related items, discussions, and people.
 
(8)
(1)
(1)
(1)

Your tags: Add your first tag
 

Customer Discussions

This product's forum
Discussion Replies Latest Post
No discussions yet

Ask questions, Share opinions, Gain insight
Start a new discussion
Topic:
First post:
Prompts for sign-in
 


Active discussions in related forums
Search Customer Discussions
Search all Amazon discussions
   
Related forums





Look for Similar Items by Category


Look for Similar Items by Subject