Previous section  

Imperfect C++ Practical Solutions for Real-Life Programming
By Matthew Wilson
Table of Contents


Bibliography

Naturally, when writing a book that adopts such strong stances on a variety of issues, it'd be foolish not to have any giants on whose shoulders to stand. The books, articles, and online resources referenced here represent a partial but representative sample of many of the authoritative sources in the industry.

Books

Devour Whole

As I think I've mentioned occasionally throughout the book, I'm a doer rather than a reader. I also tend to think in pictures rather than in words; kinetic, more than visual or auditory, if you like. I was the irritating kid in school who did well in exams, but always seemed to be a dunce in class by virtue of always asking the teacher all the what-if? questions every lesson. Very few things get through my cranium from words alone.

As such, I consider that the books in this section, which are the only ones I've managed to read whole, have been written by authors who not only know a huge amount about their subjects, but are also extremely good communicators. The fact that most of these chaps represent some of the most famous thinkers in the business cannot be a coincidence.

[Asim1972] Isaac Asimov, The Gods Themselves, Granada. From the master of science fiction, this book is top-notch, thought-provoking science fiction, pleasingly unabashed by its own gently absurd concepts. Time-kettles, indeed! It also has a compelling analysis of time-travel cause and effect.

[Broo1995] Frederick P. Brooks, The Mythical Man-Month, Addison-Wesley. Someone talking sense, for a change. (I just love realists.)

[Dewh2003] Steve Dewhurst, C++ Gotchas, Addison-Wesley. I was reviewing this great book for Addison-Wesley during the early phases of planning Imperfect C++. Thankfully, Steve and I disagree on enough things that no one can reasonably suggest that I've stolen any of his ideas. In fact, I was able to take a counterpoint to Steve on several issues. No doubt the truth will lie somewhere between our positions.

[Glas2003] Robert L. Glass, Facts and Fallacies of Software Engineering, Addison-Wesley. This is the first book I ever read that truly said to me: "It's ok, you're not mad." The author takes to task much of the nonsense to which we are subject in our industry, and against which we often have nothing more than an instinctive recoil.[1] I'd advise anyone going for an interview for any software engineering post to ask their prospective managers whether they've read this book, and make the decision as to whether to accept the role accordingly.

[1] Wouldn't you love to share a carriage on a long rail-journey with Robert L. Glass and Fred P. Brooks?

[Hunt2000] Andrew Hunt and David Thomas, The Pragmatic Programmer, Addison-Wesley. More sense. (I also love pragmatists.)

[Kern1999] Kernighan and Pike, The Practice of Programming, Addison-Wesley. An effective and unpretentious guide to effective and unpretentious programming: brilliant!

[Krug1995] David J. Kruglinski, Inside Visual C++, Volume 4, Microsoft Press. This may seem a strange book to include, but it's just really well written, and helped me master the heaving leviathan that is MFC, in the days when people thought that was still a useful thing to have on one's CV.

[Lind1994] Peter van der Linden, Deep C Secrets, Prentice Hall. This is a great and funny book. It's the only book I've found that truly explains what's going on with pointers and arrays. The opinions on C++ are hopelessly out of date, if indeed they ever were valid, but it's a book on C, and as such it's the best one I've read. It's also very amusing, and contains a number of highly entertaining asides, along with a worthy tribute to Theakstone's Old Peculiar. Despite its age, I would recommend you buy it.

[Lipp1996] Stanley Lippman, Inside the C++ Object Model. This is the book from which to learn about multiple inheritance. And when you've done that, make sure you give it a wide berth henceforth.

[Meye1996] Scott Meyers, More Effective C++, Addison-Wesley; [Meye1998] Scott Meyers, Effective C++, 2nd edition, Addison-Wesley. These books are must-reads for any C++ practitioner, and rightly so. They may skip or skim over the gnarlier issues of C++ (e.g. threads, dynamic libraries, etc.) but they manage to cover so many other fundamental issues that one can forgive that. You won't get a job in most development teams if you've not read these two books, and for good reason.

[Stro1994] Bjarne Stroustrup, The Design and Evolution of C++, Addison-Wesley. I bought this on a shopping trip with my wife, and I'd read a third of it by the time we got home. My lack of forthcoming opinion failed to affect any of my wife's purchasing decisions, so there was no harm done. If you ever wondered Why? about C++, this book's probably got the answers. Let's hope he's planning a second edition soon, so we can find out what happened with vector<bool>!

[Sutt2000] Herb Sutter, Exceptional C++, Addison-Wesley. This is my favorite C++ book ever! It explains very complicated things in simple terms, and it's really short, as all good books should be. If I were as didactically efficient as Herb, Imperfect C++ would probably be the size of a pocket street directory.

Help Yourself to Generous Portions

The books in this category may not have been read cover to cover by little old me, but I have digested them in large parts, and they are still good books, both technically and in terms of their ability to communicate their concepts.

[Aust1999] Matthew Austern, Generic Programming and the STL, Addison-Wesley. This was one of the first books on the STL, and is still one of the best. It explains everything in simple and accessible language, and is a pleasure to read. It could be more substantial, and it probably needs updating in light of changes over the last five years, but it's still well worth the price.

[Beck2000] Kent Beck, Extreme Programming Explained. There are many interesting ideas in this book. I've done pair programming on several occasions in the past and, with the right partner, it can be an incredibly productive thing. I'm not as convinced about some other aspects of XP, but it still makes for a stimulating read.

[Box1998] Don Box, Essential COM, Addison-Wesley. This is the definitive guide to COM, in all its naked splendor (without all those obfuscatory wrapper frameworks).

[Broc1995] Kraig Brockschmidt, Inside OLE, 2nd edition, Microsoft Press. Probably caused the biggest brain strain I ever had. Only a couple of years into C++ programming, I swallowed this beastie almost whole, and barely recovered. A useful, though incredibly hard to read, book.

[Bute1997] David R. Butenhof, Programming with POSIX Threads, Addison-Wesley. A great source of PTHREADS information, and surprisingly digestible, too.

[Gamm1995] Gamma, Helm, Johnson, Vlissides, Design Patterns, Addison-Wesley. If you ever want to be cruel to an experiential learner, give them this book and tell them there's a test at the end of the week. Despite my personal pain, I cannot but recommend this book heartily to you.

[Gerb2002] Richard Gerber, The Software Optimization Cookbook, Intel Press. If you ever wondered about the weird and wonderful goings-on inside processors, caches, pipelines, and the like, this book provides an excellent insight, from the perspective of the Intel architecture.

[Lako1996] John Lakos, Large Scale C++ Software Design, Addison Wesley. Despite being written before dynamic libraries, templates and threading achieved their current importance in the industry, this book contains a wealth of still-relevant information regarding physical coupling and large system design and production.

[Larm2000] Larman and Guthrie, Java 2 Performance and Idiom Guide, Prentice Hall. Whatever you feel about Java as a language/technology, this is a good book containing a great amount of information in a small size. If only the same could be said of … [snip].

[Lian1999] Sheng Liang, The Java Native Interface, Addison-Wesley. A great little book, describing the mechanism by which Java connects to C, and thereby to the outside world. It's the only bit of Java I like, although only a mother could love its syntax and performance characteristics.

[Meye1997] Bertrand Meyer, Object-Oriented Software Construction, Prentice Hall. The origin of Design by Contract (DbC) and a whole lot more. He may censure one of my friends, but I'd still recommend it to you. Like The C++ Programming Language, I can't imagine digesting it whole,[2] but it's a great reference.

[2] If you've done so, please let me know, and I'll take my hat off to you (though not while descending the French Alps on the holiday I'm hoping to pay for with my first year's royalties...).

[Raym2003] Eric Raymod, The Art of UNIX Programming, Addison-Wesley. With contributions from thirteen UNIX pioneers, this is a grand tour of UNIX programming philosophy and practice. An absolute must read for anyone, whatever operating system they inhabit.

[Rect1999] Brent Rector and Chris Sells, ATL Internals, Addison-Wesley. The definitive guide to ATL. Sure, it fails to make any real criticism of a many-flawed technology, but does a fair job of showing ATL's good sides, which are also many.

[Rich1997] Jeffrey Richter, Advanced Windows, Microsoft Press. This is a great source of Win32 system programming information. It's conspicuously silent about security, but addresses just about any other area of core Win32 you can think of.

[Stev1993] W. Richard Stevens, Advanced Programming in the UNIX Environment, Addison-Wesley. This is a great reference book that presents heaps of useful information in an outrageously readable style.

[Stev1998] W. Richard Stevens, UNIX Network Programming, Volume 1, 2nd edition, Addison-Wesley. Another must-have from the UNIX expert, just as readable and useful as Advanced Programming in the UNIX Environment.

[Stro1997] Bjarne Stroustrup, The C++ Programming Language, Special Edition, Addison-Wesley. As I mentioned in Chapter 25, this book contains an enormous number of important issues, nonchalantly suffused within the workaday progression through the vast areas of the language. Buy it; keep it in your bathroom; derive regular inspiration for new designs.

[Sutt2002] Herb Sutter, More Exceptional C++, Addison-Wesley. Maybe not quite as enjoyable as its predecessor, but it's still a must-have, must-read book.

Sprinkle Lightly

These books provide stimulating content and/or are clear and accessible references. Even if you agree with me that they're a little hard on the gums, they are well worth the investment, and contain information that is invaluable in anyone's quest to become an Imperfect Practitioner. Get your manager to buy them; you can tell him I said it was ok.

[Alex2001] Andrei Alexandrescu, Modern C++ Design, Addison-Wesley.

[Bulk1999] Dov Bulka and David Mayhew, Efficient C++, Addison-Wesley.

[Eddo1998] Guy Eddon and Henry Eddon, Inside Distributed COM, Microsoft Press.

[Hans1997] David R. Hanson, C Interfaces and Implementations, Addison-Wesley.

[Knut1997] Donald E. Knuth, The Art of Computer Programming, Volume 1: Fundamental Algorithms, Addison-Wesley.

[Lang2000] Angelika Langer and Klaus Kreft, Standard C++ IOStreams and Locales, Addison-Wesley.

[Lipp1998] Stanley Lippman (ed.), C++ Gems, Cambridge University Press.

[Joss1999] Nicolai Josuttis, The C++ Standard Library, Addison-Wesley.

[Kern1988] Brian Kernighan and Dennis Ritchie, The C Programming Language, Prentice Hall.

[Meye2001] Scott Meyers, Effective STL, Addison-Wesley.

[Muss2001] David R. Musser, Gillmer J. Derge, Atul Saini, STL Tutorial and Reference Guide, 2nd edition, Addison-Wesley.

[Rich2002] Jeffrey Richter, Applied Microsoft .NET Framework Programming, Microsoft Press.

[Robb2003] John Robbins, Debugging Applications for .NET and Windows, Microsoft Press.

[Rubi2001] Allessandro Rubini and Jonathon Corbet, Linux Device Drivers, 2nd edition, O'Reilly.

[Schm2000] Douglas Schmidt, Michael Stal, Hans Rohnert and Frank Buschmann, Pattern-Oriented Software Architecture, Volume 2, Wiley

[Sedg1998a] Robert Sedgewick, Algorithms in C, Parts 1-4, 3rd edition, Addison-Wesley.

[Sedg1998b] Robert Sedgewick, Algorithms in C++, Parts 1-4, 3rd edition, Addison-Wesley.

[Sedg2002] Robert Sedgewick, Algorithms in C++, Part 5, 3rd edition, Addison-Wesley.

[Vand2003] Daveed Vandevoorde and Nicolai Josuttis, C++ Templates: The Comprehensive Guide, Addison-Wesley.

Articles

Journal Articles

These are articles from in-print magazines, some of which are also available online via the given URLs.

[Alli1993] Chuck Allison, Bit Handling in C++, Part 1, C/C++ Users Journal, Volume 11 Number 12, December 1993; http://www.freshsources.com/19930352.HTM

[Alli1994] Chuck Allison, Bit Handling in C++, Part 2, C/C++ Users Journal, Volume 12 Number 5, May 1994; http://www.freshsources.com/19930352.HTM

[Brig2002] Walter Bright, The D Programming Language, Dr Dobb's Journal, #332, February 2002; http://www.ddj.com/documents/s=2287/ddj0202c/

[Meye2001b] Randy Meyers, The New C: Why Variable Length Arrays?, C/C++ Users Journal, Volume 19 Number 10, October 2001.

[Henn2002] Kevlin Henney, String Things Along, Application Development Advisor, Volume 6 Number 6, July/August 2002; http://www.two-sdg.demon.co.uk/curbralan/papers/StringingThingsAlong.pdf

[Jagg1999] Jon Jagger, Compile Time Assertions in C, CVu, Volume 11 Number 3, March 1999; http://www.jaggersoft.com/pubs/CVu11_3.html

[Lang2002] Angelika Langer and Klaus Kreft, Secrets of Equals, Java Solution, C/C++ Users Journal Supplement, April 2002.

[Same2003] Miro Samek, An Exception or a Bug?, C/C++ Users Journal, Volume 21 Number 8, August 2003; http://www.quantum-leaps.com/writings.cuj/samek0308.pdf

[Saks1996] Dan Saks, C++ Theory and Practice: Mixing const with Type Names, C/C++ Users Journal, Volume 14 Number 12, December 1996.

[Saks1999] Dan Saks, Programming Pointers: const T vs. T const, Embedded Systems Programming, Volume 12 Number 2, February 1999.

[Meye2000] Scott Meyers, How Non-member Functions Improve Encapsulation, C/C++ Users Journal, Volume 18 Number 2, February 2000; http://www.cuj.com/documents/s=8042/cuj0002meyers/

[Wils2001] Matthew Wilson, Generating Out-of-Memory Exceptions, Windows Developer's Journal, Volume 12 Number 5, May 2001.

[Wils2003a] Matthew Wilson, Win32 Performance Measurement Options, Windows Developer Network, Volume 2 Number 5, May 2003; http://www.windevnet.com/documents/win0305a/

[Wils2003b] Matthew Wilson, Open-source Flexibility via Namespace Aliasing, C/C++ Users Journal, Volume 21 Number 7, July 2003.

[Wils2003c] Matthew Wilson, Generalized String Manipulation: Access Shims and Type Tunnelling, C/C++ Users Journal, Volume 21 Number 8, July 2004; http://www.cuj.com/documents/s=8681/cuj0308wilson/

[Wils2003g] Matthew Wilson, Inserter Function Objects for Windows Controls, Windows Developer Network, Volume 2 Number 11, November 2003; http://www.windevnet.com/wdn/issues/

[Wils2004a] Matthew Wilson, C/C++ Compiler Optimization, Dr Dobb's Journal, #360, May 2004.

Online Articles and Other Material

These are articles and specifications available via the given URLs.

[Como-POD] http://www.comeaucomputing.com/techtalk/#pod

[Como-SOC] http://www.comeaucomputing.com/faqs/genfaq.html#betterCgeneral

[Como-SOP] http://www.comeaucomputing.com/faqs/genfaq.html#whatcando

[Itan-ABI] Itanium C++ ABI; http://www.codesourcery.com/cxx-abi

[Kaha1998] Kahan and Darcy, How Java's Floating-point Hurts Everybody Everywhere, http://http.cs.berkeley.edu/~wkahan/JAVAhurt.pdf

[Otto2004] Thorsten Ottosen, Proposal to Add Design by Contract to C++, 2004; http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2004/n1613.pdf

[Schm1997] Schmidt, Harrison and Pryce, Thread Specific Storage: An Object Behavioral Pattern for Accessing per-Thread State Efficiently, 1997, http://www.cs.wustl.edu/~schmidt/PDF/TSS-pattern.pdf

[Stro2003] Bill Venners, The C++ Style Sweet Spot: A Conversation with Bjarne Stroustrup, Part 1, Artima Developer; http://www.artima.com/intv/goldilocks.html

[Stro-Web] Bjarne Stroustrup's FAQ; http://www.research.att.com/~bs/bs_faq.html#really-say-that

[Torj2003] John Torjo and Andrei Alexandrescu, Enhancing Assertions, C/C++ Users Journal Experts Forum, August 2003; http://www.cuj.com/documents/s=8464/cujcexp0308alexandr/

[WB-Email] Walter Bright, private email communication, 2003.

[Wils2003d] Matthew Wilson, Flexible C++ #1: Efficient Integer To String Conversions, Part 2, C/C++ Users Journal Experts Forum, September 2003; http://www.cuj.com/documents/s=8840/cujexp0309wilson/

[Wils2003e] Matthew Wilson, C# Performance: Comparison with C, C++, D and Java, Parts 1 & 2, Windows Developer Network, Special Online Supplement, Fall 2003; http://www.windevnet.com/wdn/webextra/2003/0313/

[Wils2003f] Matthew Wilson, Flexible C++ #2: Efficient Integer To String Conversions, Part 3, C/C++ Users Journal Experts Forum, November 2003; http://www.cuj.com/documents/s=8906/cujexp0311wilson/

[Wils2004b] Matthew Wilson, Flexible C++ #3: Efficient Integer To String Conversions, Part 4, C/C++ Users Journal Experts Forum, January 2004; http://www.cuj.com/documents/s=8943/cujexp0312wilson/


      Previous section