by Doug Lea.
Probably the best way to think about C++ is as a collection of smaller, simpler languages:
Each aspect of the language has its minor quirks, mostly stemming from the language design goals of
Interactions among these modes and goals lead to some major complexities. Normally, the best way to cope with these complexities is to adhere to a small number of idiomatic design and programming strategies. These notes lay out some of the more common and useful ones. One of the chief goals is to stay away from dark corners of the language that are easier to avoid that to cope with.