The writing style and presentation of C++ in this book are outstanding. The explanations of key C++ concepts, from basic language features to class design to advanced C++ whistles and bells, are by turns colloquial, garrulous, and almost always enjoyable and understandable. While it's not uncommon for today's computer book to weigh in at over 1,000 pages, the raw word count here is quite exceptional. You're challenged repeatedly to think for yourself, and the intricacies of C++ are exposed thoroughly, from language features that are indispensable to what to avoid in your code.
You'll get pretty much everything that you need to learn C++ effectively, starting with basic keywords, data types, flow-control statements, and arrays. The guide to understanding object-oriented concepts, like coupling and cohesion, will help you design better classes. Even experienced programmers will appreciate the thorough coverage of memory-management techniques in C++ (including the five kinds of scopes for variables).
An important middle section provides a blueprint for the methods and functions that most C++ code should offer, including such methods as default and copy constructors, destructors, and overloaded assignment operators. (By following this idiom, you'll be able to write reusable C++ classes.) The book also illustrates class design with basic UML notation, excels at presenting the details of how to overload C++ operators to provide easier syntax for custom C++ classes, and provides excellent explanations of the pros and cons of composition and inheritance for getting classes to work together. A look at more advanced C++ features, like templates and exception handling, wraps things up. Along the way, you get a taste of UML notation and a thorough introduction to some of the best practices for writing C++ code effectively.
Core C++ is certainly no quick read, and, if you're in a rush to learn quickly, there are plenty of more concise treatments that are available. But, if you're ambitious and want to master the intricacies of C++ class design with some of its underlying design principles, this is an original and thorough package that offers unique strengths. --Richard Dragan
Topics covered:
Congratulations! You have opened one of the most useful C++ books on the market! It will teach you the strengths and weaknesses of C++, and it will do this better than any other book I have seen. And I have seen a lot of C++ books. How Is This Different from Other C++ Books?
Of course, any author can claim that his or her book is one of the best on the market. What sets this book apart is its software engineering and maintenance perspective on writing C++ code. Very few C++ books (if any) do that.
Why is the software engineering and maintenance approach important? The point is that C++ changed not only the way we write computer programs, it also changed the way we learn programming languages. In the "good old days," you would spend a day or two looking at the basic syntax of the language, then you would try your hand at simple programming problems. Then you would learn more-complex syntax and would tackle more-complex problems. In a week or two (or in three or four weeks for a really complex language), you would have seen it "all" and could pose as an "expert."
It's different with C++; a very large and very complex language. Granted, it is a superset of C, and you can learn to write simple C programs (and, hence, C++ programs) very quickly. But things are different for complex programs. If the programmer does not know C++ well, a complex C++ program will not be portable; its code will be difficult to reuse, and it will be difficult to maintain.
C++ is a great languageit was created as a general-purpose engineering language, and its design is a clear success. Today, C++ is a language of choice for business, engineering, and even real-time applications. Significant effort was spent on the design of the language, to ensure that C++ programs provide great performance, that they support dynamic memory management, and that different parts of programs could be made relatively independent. Yet in all three areas, things can potentially go wrong even with a syntactically correct and thoroughly tested C++ program:
It can be slowmuch slowerthan a comparable C program.
It can contain memory management errors that affect the program only when memory usage changes (e.g., another program is installed); these errors might crash the program or quietly produce incorrect results.
It can contain dependencies between different parts of the program so that the maintainer has a hard time understanding the intent of the designer; a poorly written C++ program can be harder to maintain and reuse than a non-object-oriented program.
How important is this? If you are writing a small program that will be used only for a short time, then execution speed, memory management, maintainability, and reusability may not be of great importance. All that counts is your ability to quickly produce a solution. If this solution is not satisfactory, you can cut your losses by throwing the program away and writing another one. For this, any C++ book would do (but hey, you can still buy this one and enjoy its informal style and original insights into the language and its usage).
However, if you are working in a group, creating large applications that cannot be easily discarded and will be maintained for a long time, everything matters. The software engineering and maintenance approach I am advancing in this book is very useful and quite unique. Most books on the market do not mention these issues at all. (Just check their indexes and see for yourself.) When they do, they fail to spell out the techniques that can remedy a tough situation.
Another important characteristic of this book is its approach to the presentation of the material. There are many books on the market that do a good job enumerating the features of the language but do a mediocre job teaching you how to use the language. This is similar to learning a natural language. If you read a French grammar book, will it enable you to speak French? I did not study French, but I did study English, and I knowreading grammar books does not help to develop language fluency. In this book, I will show you how to use and how not to use the language, especially from the point of view of reusability and future maintenance.
Another teaching issue is that C++ features are so intertwined that it is hard to present C++ in a linear fashion, from simple to more complex. Many C++ authors do not even try. They say that these efforts "offend the intelligence of the reader." As a result, they might mention in Chapter 3 a concept that is explained only in Chapter 8, leaving the reader intimidated and frustrated.
My approach to teaching C++ is different. I introduce topics cyclically, first as a general overview and then again at a greater depth, with bells and whistles, and nowhere will your understanding depend on material in later chapters.
I developed my approach through years of teaching working software professionals. At Boston University Metropolitan College, most of my students hold professional jobs and come to classes in the evening in search of professional growth. I also taught numerous professional development seminars and on-site training courses. I developed great empathy for the students and their struggle with language concepts and programming techniques, and I translated this experience into a well-thought-out sequence of topics, examples, counterexamples, and recommendations. I think that my approach to teaching C++ is fairly unique, and you will benefit from it.Who This Book Is For
This book is written for professionals who are looking for a no-nonsense presentation of practical details combined with a deep understanding of C++ subtleties.
This book is written for you if you are looking for practical details of new technologies with a thorough discussion of their use.
It is written for you if you have experience in other languages and are moving to C++. If you are an experienced C++ programmer, you will find this book useful and sometimes an eye-opener. If this is your first programming book (and this is perfectly all right if it is), you will be well rewarded for the effort spent on reading it.How This Book Is Organized
I decided not to follow other authors who give you a detailed tour of their books, explaining what is covered and where. Unfamiliar terms, concepts and techniques will not make much sense to you now and will probably be quite boring. This is why I put the summary of the book into its final chapter, Chapter 19, "What We Have Learned," and you can read it if you are interested. It makes more sense there.
Instead, let me tell you what parts of the book might be of interest to you, depending on your background and experience.
If you are experienced in C++, Parts 3 and 4 will be most useful to you with their coverage of C++ power and programming pitfalls. If, in your initial study of C++, you were rushed to objects without building your muscle in procedural programming, memory management, and creating maintainable code, a review of Parts 1 and 2 will also be helpful (and interesting).
If you are an experienced C programmer who wants to move on to C++, Parts 2, 3, and 4 are written for you. If you briefly review Part 1, you might find the discussion of C from the software engineering and maintenance perspective interesting.
If you a programmer with experience in high-level languages other than C, C++, or Java, you should probably start with Part 1.
If you are looking for an introduction to programming, you should skip Chapter 1, "Object-Oriented Approach: What's So Good About It?": It will be too abstract for you at this stage. Study the other chapters of Part 1 first, then go back to Chapter 1, and then continue with Parts 2, 3, and 4.Accessing the Source Code
It is important to practice when you learn a language. Studying C++ without practicing it is as effective as taking a driver education course without driving: You'll learn a lot of useful things about driving, but you will not be able to drive. I strongly recommend that you experiment with the programs discussed in this book. The source code for all the listings can be found at the following site: ftp://ftp.prenhall/pub/ptr/c++_programming.w-050/core_c++Feedback
This book was thoroughly reviewed, carefully edited, and meticulously proofread. Still, some errors might remain.
In my drive to produce a unique book, I might have made statements that are groundless, unjustified, or plain erroneous. Or, they could be controversial and you might want to debate them.
Please do not hesitate to contact me at the following e-mail address: shtern@bu
For each typo or error that is pointed out to me or for each valid point regarding a discussion in the book, I promise to mention the names of the first two people who do so in the next edition of this book.
Product Details
Would you like to update product info or give feedback on images?
|
|
Share your thoughts with other customers:
|
||||||||||||||||||||||
|
Most Helpful Customer Reviews
54 of 57 people found the following review helpful:
5.0 out of 5 stars
This book is written is for those who are willing to learn,
This review is from: Core C++: A Software Engineering Approach (Paperback)
I am the author of this book, and I would like to answer the review below. The reviewer "doer" complains that the book promises "Engineering Approach" but does not describe "compiler domain and code optimization." But the book never promised "compiler domain and code optimization." It promised what EVERY programmer and technical manager needs - software engineering. It teaches how to use C++ to build maintainable programs, avoiding unnecessary complexity. Few other C++ books aim at this. The reviewer charges that the book could be "half the size it is." Yes, it could. But then, Core C++ would be like hundreds of other books that quickly enumerate C++ features but do not teach coding skills. Many years of teaching and training experience taught me how to teach. I use SIMPLE language and numerous examples to explain COMPLEX things. And if it takes 1200 pages to explain things well, let it be 1200 pages and not 600. The reviewer complains that he did not find "finer points of the language and exquisite uses of it (e.g. idioms)" in the book. He read the book too quickly - finer points and idioms are there. In addition, the book explains techniques that are not covered in other books, such as pushing tasks from client classes to server classes, moving tasks among classes to minimize coordination, and other UNIQUE methods. They are EYE OPENERS for most programmers and managers. The reviewer concedes that it is "a good book" and that "it covers a lot of ground," but it gives it only two stars. This misleads those for whom the book is written - those who have patience and interest to learn this complex language and to master software engineering methods of using it.
11 of 12 people found the following review helpful:
4.0 out of 5 stars
Become a serious C++ programmer,
By
This review is from: Core C++: A Software Engineering Approach (Paperback)
I've been coding in C for about 10 years professionally and C++ for about 4 years. C++ is far more complex than C and it is clear that it is also far more difficult to write sensible, readable, maintainable code in C++ than in C. The value in this book is in it's mantra of good design principles that it uniformly teaches from the very first chapter onward. And please understand that you MUST use some design principles to produce effective, professional-quality C++ code. I'm quite sure that if you adopt and practice the methodology in this book, you will be a superior C++ developer. You might be surprised from what I've said that Core C++ could be a good choice for beginners as well as intermediates, but I believe it is, since it promotes good habits and starts at the beginning. For beginners, your head may start to swim when you hit the middle chapters... C++ is complex and the concepts must simmer in most heads for quite a time before they're cooked. This is a book that'll get you a high paying job.
7 of 7 people found the following review helpful:
5.0 out of 5 stars
Attn: To Anyone Interested in Writing Code the Right Way,
By "brannon5" (Houston, TX) - See all my reviews
This review is from: Core C++: A Software Engineering Approach (Paperback)
Mr. Shtern has written an excellent book which not only teaches the syntax and semantics of the language but also emphasizes writing quality, reusable code. After all, that's what OOP is about.I work in industry as a System Engineer working mostly on low level design that I manage using C and Assembly. Working on big projects with other programmers I get to see a lot of programming styles some are excellent and some not so good. There is much value in writing quality code. You can make life much easier on your self and others when it comes time to maintain or reuse previously written code. Until recently, I haven't had much incentive in learning object oriented methods (or so I thought). "Core C++" was an excellent introduction to the topic giving marvelous detail on how to use the language correctly and proficiently. The author spent a great deal of time making sure every aspect of the language is covered. Whether you are an experienced programmer or just starting out Core C++ gets my highest recommendation as a learning tool. However, be prepared to invest some time in reading "Core C++". I can't say that I didn't get a little frustrated with the vast amount of detail, but I knew reading through each section would be an investment in knowledge that would pay handsomely when maintaining and debugging future code. 90% of my knowledge about programming comes from the many mistakes I've made in my career. I could have used a book like this when I began writing code. "Core C++" does not go into specifics of the C++ standard library, so it will not be the only book you need. However, there are many pitfalls in the details of C++, and one who has no experience with C++ will be doing himself a favor by beginning with "Core C++". In short, I would just like to express my gratitude for a well written, well thought out book on programming.
Share your thoughts with other customers: Create your own review
|
|
Tags Customers Associate with This Product(What's this?)Click on a tag to find related items, discussions, and people.
|