Buy new:
$46.02$46.02
FREE delivery:
Friday, March 31
Ships from: Amazon.com Sold by: Amazon.com
Buy used: $24.91

Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required. Learn more
Read instantly on your browser with Kindle for Web.
Using your mobile phone camera - scan the code below and download the Kindle app.


Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers (C++ In-Depth Series) 1st Edition
There is a newer edition of this item:
Enhance your purchase
As scientific and engineering projects grow larger and more complex, it is increasingly likely that those projects will be written in C++. With embedded hardware growing more powerful, much of its software is moving to C++, too. Mastering C++ gives you strong skills for programming at nearly every level, from “close to the hardware” to the highest-level abstractions. In short, C++ is a language that scientific and technical practitioners need to know.
Peter Gottschling’s Discovering Modern C++ is an intensive introduction that guides you smoothly to sophisticated approaches based on advanced features. Gottschling introduces key concepts using examples from many technical problem domains, drawing on his extensive experience training professionals and teaching C++ to students of physics, math, and engineering.
This book is designed to help you get started rapidly and then master increasingly robust features, from lambdas to expression templates. You’ll also learn how to take advantage of the powerful libraries available to C++ programmers: both the Standard Template Library (STL) and scientific libraries for arithmetic, linear algebra, differential equations, and graphs.
Throughout, Gottschling demonstrates how to write clear and expressive software using object orientation, generics, metaprogramming, and procedural techniques. By the time you’re finished, you’ll have mastered all the abstractions you need to write C++ programs with exceptional quality and performance.
- ISBN-100134383583
- ISBN-13978-0134383583
- Edition1st
- PublisherAddison-Wesley Professional
- Publication dateDecember 17, 2015
- LanguageEnglish
- Dimensions7.4 x 0.95 x 9.1 inches
- Print length480 pages
Frequently bought together
- +
What other items do customers buy after viewing this item?
Editorial Reviews
About the Author
Peter Gottschling is founder of SimuNova, a company that works on developing the Matrix Template Library (MTL4) and offers C++ training. He is a member of the ISO C++ standards committee, vice-chair of Germany’s programming language standards committee, and founder of the C++ User Group in Dresden. He earned his Ph.D. in computer science at Technische Universität Dresden in 2002.
Product details
- Publisher : Addison-Wesley Professional; 1st edition (December 17, 2015)
- Language : English
- Paperback : 480 pages
- ISBN-10 : 0134383583
- ISBN-13 : 978-0134383583
- Item Weight : 1.59 pounds
- Dimensions : 7.4 x 0.95 x 9.1 inches
- Best Sellers Rank: #932,818 in Books (See Top 100 in Books)
- #296 in C++ Programming Language
- #646 in Computer Programming Languages
- #1,186 in Microsoft Programming (Books)
- Customer Reviews:
About the author

Peter Gottschling is founder of SimuNova, a company that works on developing the Matrix Template Library (MTL4&5) and offers C++ training. He is a member of the ISO C++ standards committee, chair of Germany's programming language standards committee, and founder of the C++ User Group in Dresden. He earned his Ph.D. in computer science at Technische Universität Dresden in 2002. Some years ago he returned to his beloved hometown Leipzig, just in time for its 1000th anniversary.
Customer reviews
Customer Reviews, including Product Star Ratings help customers to learn more about the product and decide whether it is the right product for them.
To calculate the overall star rating and percentage breakdown by star, we don’t use a simple average. Instead, our system considers things like how recent a review is and if the reviewer bought the item on Amazon. It also analyzed reviews to verify trustworthiness.
Learn more how customers reviews work on Amazon-
Top reviews
Top reviews from the United States
There was a problem filtering reviews right now. Please try again later.
There are just too many keywords, concepts, constructs and syntax used without being properly introduced. An example would be on page 83 where he uses "self &" in the definition of operator= member function. He never introduces this keyword nor does he discuss it while in this section. The reader would have to go google it to give himself context and meaning of the presented code.
On page 52 while discussing "C11 Unique Pointers" the code makes use of templates but he has not yet introduced or even mentioned what templates are. This type of writing leaves the reader with gaps in understanding the fundamental aspects of the key concepts the author is trying to convey. You can't thoroughly understand the whole without understanding the component parts. I understand one will come away with a partial understanding but in order to FULLY understand the example the reader should be afforded the opportunity to have all the composite knowledge required. Otherwise, you come away with thinking you know about some language feature or concept and only really know it on a more superficial level.
Another major complaint I have is that the text surroundings the sample code is simply not detailed enough for a thorough grasp of the language examples the author is presenting. For example, the discussion of Constructors and Assignment Operators does not go into sufficient detail for the reader to gain the insight required to be able to write these member functions in a knowledgeable way. For example, on page 79 he mentions C++ distinguishes between implicit and explicit constructors and then proceeds to provide some sample code but fails to mention which ones are considered implicit and which ones are explicit. In addition, he does not instruct the reader as to when an implicit one is called vs when an explicit one is called. He states "implicit constructors enable implicit conversion" but then fails to show some code that would illustrate contrasting calls for explicit and implicit constructor invocation. And what is implicit conversion vs explicit conversion?
In the end I gave up since I was, to some extent, already familiar with the aforementioned concepts and knew enough to know I was not getting enough of an understanding to ensure I knew the concepts well enough to write meaningful code without shooting myself in the foot. I could not remember all the details of these concepts from 8 years ago but could remember enough to know the material was leaving out too much important detail. I felt the explanations were just too rushed and not coherent nor comprehensive enough.
C++ is a nuanced language and this requires building on a solid and thorough understanding of the fundamentals of the language if you want to really use it in a powerful and bug free way. In the end I knew enough to know I wasn't learning enough of those details with this book.
The author uses numerous technical algorithms for examples. See his matrix inversion library at [...] as an example.
This is the book to bring your C++ knowledge up to date (mid 2016) with C++11 and C++14 modern development practice. The book has been tested in academia and real world development for three years and covers everything from the tool chain and build process to templates, lambdas and scientific libraries.
This is one of the very few C++ books that properly includes material on how C++ is done today by its master practitioners (i.e., generic programming).
Top reviews from other countries


However some parts are not very well written especially ideas that are important to understand such as l and r values. The author also provides advice throughout the book that he does not follow himself in his own examples. References to examples are also something incomplete making it difficult to follow.

Gottschling's middle section of the book is fascinating. He examines the use of C++ templates to make efficient math libraries. It gives a glimpse of the way in which C++ can continue to provide performance benefits over other languages for compute-intensive tasks.

The book is a crash course on C++11 features and it does that somewhat well. But it's not in depth as the series would suggest. It's OK if you're coming from a different language and want a quick overview of modern C++.
If you know C++ and its modern variations you won't miss this book.

Gottschling formuliert jedes Problem möglichst abstrakt. Auch wenn es dafür keinen ersichtlichen inhaltlichen Grund gibt. Er erhält damit - wie er selbst betont - einen Abstraction Overhead, weil sich der Compiler bei der Optimierung schwerer tut. Er wirft dann mit viel Aufwand die Metaprogramming Maschine an um dem Compiler Ezzes zu geben. Das Ergebnis ist ziemlich ernüchternd:
"The examples in this section demonstrated that meta-tuning is quite eloborate, and to our disappointment, the benefit of the transformations is not as pronounced as it used to be when we first investigated them in 2006"
Die Konzepte einer guten Sprache sollten möglichst orthogonal sein. Das ist bei C++ sicher nicht der Fall. Gottschling meint z.B. im Kapitel über OO-Programming und Vererbung "Eigentlich lässt sich das Problem mit Templates weit eleganter lösen".
Das Buch wird dem Titel 'for Scientists, Engineers, and Programmers" nicht gerecht. Scientists und Engineers wollen ein Problem lösen (Programmierer meistens auch). Das Buch ist in dieser Hinsicht keine Hilfestellung. Es zeigt nur, was man im C++ Maschinenraum alles anstellen kann, wenn man dafür Zeit und Lust hat.
Es ist ein Jammer, dass man um dieses Monster bei numerischer Software aber auch in vielen anderen Bereichen nicht herumkommt (okay Fortran und Cobol sind auch um nix besser). Noch schlimmer ist, dass Leute wie Gottschling, denen es nicht um praktische Lösungen sondern um möglichst komplexe Konzepte geht, den weiteren Kurs mitbestimmen können. Wobei das Gottschling gänzlich anders sieht und eine möglichst abstrakte Formulierung eines Problems als elegant empfindet. Wenn es auch dem Compiler zu abstract wird, kann man ja immer noch die Metamaschine anwerfen.
Nachtrag: 2019-09-15. Ich arbeite im Moment an einem Design für meinen Twitter-Bot Vanellus. Vanellus lädt alle Deutschen Tweets herunter und analysiert die Daten. Vanellus 1.0 ist in Java. Die Java String-Klasse verwendet - idiotischer Weise - für Characters eine 2-Byte Darstellung. UTF-8 ist für westliche Sprachen wesentlich effektiver. Javas UTF-16 ist the worst of all worlds. UTF-8 ist auch in C++ kein Teil der Standard-Library und nur für C++ 2020 angedacht. Während man die Sprache in absurder Weise aufbläst und eine Reihe obskurrer Features einbaut, werden solche praktisch relevanten Fragen ignoriert. Aber wahrscheinlich wird einem der Autor erklären, wie man das Problem durch Abstract- und Metaprogramming lösen könnte.
Es gibt eine saubere, elegante Sprache die UTF-8 von Anfang an unterstützt hat: Go. Vanellus 2.0 wird daher in Go geschrieben. Für numerische Anwendungen ist Go auf Grund fehlender Native-Libraries aber bisher (leider) keine Alternative zum C++ Monster.