Wednesday, November 10, 2004

New Open-Enrollment Seminars Scheduled

After I announced the existence of my new training course, "What's New in
Effective C++?", several people wrote to ask when it would be available for
enrollment. One thing led to another, and now I've scheduled two new
open-enrollement seminars at OGI (in Beaverton, Oregon) in January:

18 Jan 2005: Better Software -- No Matter What
19 Jan 2005: What's New in Effective C++?

You'll find links to all the details on these seminars (as well as to the 15
December offering of "Effective C++ in an Embedded Environment") at my "Upcoming
Talks" page,

I hope to see you at one or more of these seminars.


Monday, November 8, 2004

Wanted: Candidate reviewers for EC++/3E

I'm making decent headway on the next edition of Effective C++, but I have
a problem: I need to find a few good pre-publication reviewers to read my
draft and tell me how I can improve it. Now, I know all kinds of C++
experts, but the target audience for my book isn't experts, it's practicing
programmers who are at roughly an intermediate level of knowledge and
experience with the language. As somebody who subscribes to this mailing
list, it is highly likely that you do NOT qualify; you already know too
much. However, perhaps you know somebody who might qualify, somebody who
is comfortable with the basics of C++, but who is interested in knowing
more. If you do, and if that person would be willing to undertake the hard
work of reading 250-300 pages of not-fully-refined prose and offer detailed
suggestions on how the book could be improved (without regard for whether
they will hurt my feelings -- I *need* to know the bad stuff), and if that
person would be available for the task beginning sometime in January and
ending no more than about a month later, I'd appreciate it if you'd have
them contact me.

I don't need very many people for this -- maybe 2 or 3. My preference is
to have a small number of high-quality reviewers rather than a large number
of poorer-quality reviewers. But my need for this small number of
high-quality reviewers is great, because I can't produce a book that's
truly useful to its target audience if I don't get advance feedback from
people in that audience. Experts can help me identify subtle coding or
reasoning errors, but non-experts can tell me "I have no idea what you are
talking about in this paragraph," and that's the kind of thing I really
need to know.

There's no monetary compensation for this work. Rather, people who do it
get (1) a chance to make a real impact on the final version of the book,
(2) an autographed copy of the final book, possibly with a custom cover
that only a few people will get (I'm not sure about that last part, I have
to work it out with my publisher), and (3) my sincere gratitude.

People who are interested should contact me directly.

Thanks very much for your help with this.


Wednesday, November 3, 2004

New Training Course; Updated Projects List

I've added a new course to my "Training" page
( It's a much more
detailed description of the "What's New in Effective C++?" seminar, which I
debuted last month in Germany. Good course, in my opinion, but I can't
claim to be fully objective :-)

BTW, if you took a look at my "Project Ideas" page
( immediately after I sent out
the announcement about it, you may have missed the "Lint with autofix" and
"Detailed Exhibit Information" ideas that I added a few hours later. If
so, I encourage you to check out those projects now, as I'm especially
eager to see somebody pursue them.


Monday, November 1, 2004

New "Project Ideas" Page

From time to time, I come up with ideas for projects or articles that I'd
like to pursue, but which I know in my heart of hearts I'll never find time
for. Rather than let the ideas wither and die in my "Stuff I'd like to do
but never will" folder, I decided to put them at my web site, with the hope
that somebody else will pursue them and write up the results. You can find
the initial list of project ideas at Have at it!


Wednesday, October 27, 2004

"Double-Checked Locking" Article now online

The DDJ article that Andrei Alexandrescu and I wrote for DDJ is now
available at my web site. It's the first entry listed at I recommend the
"slightly updated" version, because it's, um, slightly updated, but you'll
definitely want to print it to read it, because the LaTeX-derived PDF is
really ugly on-screen.


Monday, September 20, 2004

New Series Book, "Effective Enterprise Java"

The latest book in my "Effective Software Development Series" is now out:
Effective Enterprise Java, by Ted Neward. I don't pretend to be a
hard-core Java or Enterprise guy, but I really enjoyed watching this book
unfold as it was being written. It's filled with pragmatic advice from a
guy with lots of experience who knows how to explain what he is talking
about. If you're a Java developer in an enterprise environment, or if you
just like a well-written book that's filled with useful insights about
programming enterprise systems, I encourage you to give this book a look.
Right now, it's on sale at Amazon for about 1/3 off
and no, I don't get a kick-back if you buy via that link :-)

As long as I have your attention, let me remind you about my upcoming talks
in Germany (Stuttgart and Berlin) and Canada (Vancouver at OOPSLA). There
are links to all the talks at,
but at the time I wrote those descriptions, the talks existed only in my
head. I'm now done with two of them ("Better Software -- No Matter What"
and the revamped "Design Patterns, Templates, and Policy-Based Design"),
and I have to say that I'm very pleased with the way they came out. If
you'd like to see a description of one or both of these talks that was
written after the talk was done (so I *really* knew what would be in it),
let me know, and I'll happily send you an updated description. One of
these days the new descriptions will make it to my web site, but I'm
holding off on that until I finish the last new talk I'm working on for
Germany, "What's New in Effective C++?"


Sunday, August 15, 2004

Minor update to EC++ Errata

In response to the latest reprint request from Addison-Wesley, I updated
the errata list for EC++. Below are the latest changes (in my usual "sort
of HTML" format).


-------- --- ----- ------------------------------------------------ --------
5/16/04 md 77 "an intuitive semantics" ==> "intuitive

5/16/04 md 83 "minimalness" ==> "minimality"

7/ 7/04 al 205 valueDelimOpen and valueDelimClose should be
declared private in MyPerson, because clients
should not be able to call them. They're just an
implementation detail of the class.

Interesting Comments:

-------- --- ------- ----------------------------------------------------------
7/21/04 am 179-180 Another way to deal with the need to downcast if you can't
redefine allAccounts or BankAccount is to declare
something like NewBankAccount as a sibling class to
SavingsAccount and CheckingAccount, then adopt a policy of
deriving new classes only from NewBankAccount. You'll
still have to downcast from BankAccount to Savings-,
Checking-, or NewBankAccount, but once you're in
NewBankAcount, you can use a virtual creditInterest.

Friday, August 13, 2004

Request for comments on extended "Easy to use correctly, hard to use incorrectly"

I'm working on materials for my upcoming full-day seminar, "Better Software --
No Matter What," (see for scheduled
offerings) and I've put together a draft of the portion of the seminar on the
guideline, "Make Interfaces Easy to Use Correctly and Hard to Use Incorrectly."
This is essentially an extended version of the arguments I advance in my recent
IEEE Software article (

The materials include a number of examples of interfaces that violate the
guideline, but I'm interested in other examples, because too many of mine are
drawn from C++ and Windows. (The talk is language- and platform-independent.)
If you have time and interest, I'd appreciate it if you'd take a look at the
materials at and let me know if
you have any other examples that would reinforce my points. If you have other
comments on the materials in general, I'd welcome those, too.

Thanks very much for your help in my campaign to identify ways for programmers
to improve software quality.


Monday, July 26, 2004

ESTL Errata Updates

It turns out that ESTL is ready for a reprint, too, so I've updated the
ESTL errata page at The new
additions (not all of which I fixed for the upcoming printing -- the errata
page shows which ones I did) are as follows:


-------- --- ----- ------------------------------------------------
6/ 4/04 tb Item 7 Item title should make clear that this applies
only when the container owns the pointers.
Containers of pointers not owned by the
containers should of course not use delete on

6/28/04 he 197 The statement in the 2nd prose paragraph that
"equal_range not only does the job of find for
sorted ranges, it also replaces count" is
incorrect, because this part of the Item is
discussing STL algorithms, and the equal_range
algorithm is based on equivalence, while the
find and count algorithms are based on equality.

7/20/04 gc 228 Regarding reference [24], the article appeared in
December 2000 (not November), and the URL for that
article is now

2/28/04 mp 257 Add an index entry under "set" pointing to page
199 for "idiomatic test for membership."

Interesting Comments:

-------- --- ----- -----------------------------------------------------------
3/29/04 df 74 An alternative to "&v[0]" is "&v.front()". df argues
that this is "the most explict way to do it." To me,
"&v[0]" is equally explicit, but both work.

1/ 4/04 or Item 24 Another advantage to a function like efficientAddOrUpdate
vis-a-vis operator[] is that use of operator[] requires
that the value type of the pair (i.e., the mapped_type)
support default construction for insertion, but
efficientAddOrUpdate does not.


Saturday, July 24, 2004

MEC++ Errata Updates

I just got word that MEC++ is up for another reprint, so I took the
opportunity to update the errata list. There are only three new entries:

-------- --- ----- ------------------------------------------------ --------
! 4/19/04 cc 50 The para after the first code fragment says that 7/24/04
the window will always be destroyed, even if an
exception is thrown, but this this true only if
the exception is caught. If it's never caught,
there is no guarantee that local objects will be

! 6/ 9/04 jw 70 In 3rd para, bad_typeid isn't thrown when a null 7/24/04
pointer is used with dynamic_cast, it's thrown
when a null pointer is dereferenced in a call to

Interesting Comments:

-------- --- ----- -----------------------------------------------------------
1/18/04 sdm Item 34 A topic related to this Item is how to link object code
generated from different C++ compilers. For one take on
that topic, consult Karsten Hoof's February 2004
CUJ article, "GNU & Native Compilers." For another,
see Joe Goodman's March 2004 CUJ article,
"Interoperability & C++ Compilers."


Saturday, July 3, 2004

DDJ Article Conclusion; Seminars in Germany and at OOPSLA

Part 2 of the article by Andrei Alexandrescu and me on double-checked locking is
now out in the current (August) issue of Dr. Dobbs Journal. If you're not a DDJ
subscriber, I believe that you can download a PDF copy of the magazine from If not, the full article (both parts) will be available at my web site
in mid-October. Check in with
at that time for links.

During the first week of October, I'll be giving seminars in Stuttgart and
Berlin. The Stuttgart seminars should be especially fun, because they're either
new and improved or just plain new. Briefly, here are the topics for Stuttgart:

- DESIGN PATTERNS, TEMPLATES, AND PBD. This will be a revision of my current
course on this topic to focus more on variations of well-known patterns instead
of on GOF patterns themselves.

- WHAT'S NEW IN EFFECTIVE C++? I'm working on the third edition of the book
now (a significant rewrite), and this brand new seminar will cover material new
to the third edition.

- BETTER SOFTWARE -- NO MATTER WHAT. A language-independent seminar on things
programmers can do to improve software quality. This includes my keyholes work
as well as a lot more. This will be a full-day version of a seminar that has
never been longer than a half-day before.

In Berlin, I'll be presenting my two-day STL seminar based on Effective STL.

At OOPSLA in late October, I'll be reprising BETTER SOFTWARE--NO MATTER WHAT.
OOPSLA attendees should benefit from the feedback I get from the world premiere
in Stuttgart :-)

For details on all my upcoming seminars, consult my Upcoming Talks Page,


Tuesday, June 22, 2004

Guest Column in current IEEE Software

Some 18 months ago, Martin Fowler asked me if I'd be interested in
guest-writing his "Design" column in IEEE Software. I said that I would
once I figured out what I wanted to write about. I finally did, and you
can find the result in the July/August issue of the magazine. Thanks to
the kind people at IEEE Software, you can also view a PDF copy at:


Monday, June 7, 2004

EC++ Errata Page Updated

I just got word that Effective C++ is due for another reprint, so I've
updated the book's errata page with the latest changes. None of the bugs
I fixed is technical in nature, but there they are, anyway:

-------- --- ----- ------------------------------------------------ --------
4/ 4/04 sdm xiii Bad line break in URL in footnote. 6/ 7/04

5/20/04 md 107 At end of 3rd para, "SHRT" is in wrong font. 6/ 7/04

6/ 1/04 md 203 In last line, "theName" ==> "name". 6/ 7/04

6/ 7/04 sdm 203 Bad line break in 2nd-to-last para in 6/ 7/04

6/ 2/04 md 218 In 2nd to last line, "accidently" ==> 6/ 7/04
"accidentally". Both spellings are correct but
I use the "ally" form everywhere else in the
book, so I should use it here, too.

1/19/04 jyt 231 Arrow tail protrudes slightly into the oval 6/ 7/04
surrounding "overflow_error".

For those of you who like to keep track of such things, this will be the
book's 16th printing.

I also added this observation to the "Interesting Comments" part of the
book's web page:

-------- --- ------- ----------------------------------------------------------
1/19/04 jyt Items There are several example base classes in the book that
16, declare nonvirtual destructors or that declare no
22, destructor at all, a violation of Item 14.


Thursday, June 3, 2004

Recent Bogus Message and What I've Done About It

As many of you noticed, somebody recently spoofed my email address and sent out
a message with a subject of "Re: Hello" and a worm-laden attachment. Sigh.
I've since deleted the bogus message from the web site archives, and I've
reconfigured the mailing list so that all postings not only have to come from
me, they also have to be approved by me before they are propagated. I hope that
this will prevent further abuse of the mailing list.

As an aside, when I poked around the administrative portion of the mailing list,
I found that since starting the mailing list four years ago, I've sent out only
68 messages, but 2300 unauthorized messages have been automatically rejected.
In retrospect, I suppose I'm lucky that only one bogus message has been
propagated, but I still feel badly for wasting your time.

While I was housecleaning at Yahoo, I also deleted two bogus files in the
download area.

With luck, I won't need to bother you about this for another four years. I
apologize for the inconvenience of what has already happened.


Wednesday, June 2, 2004

New article in the current DDJ

Over the course of several months, Andrei Alexandrescu and I wrote what we
think is a nice article on why double-checked locking can't be made to work
portably in C++. Dr. Dobb's Journal agreed to publish it, but they decided
it was too long for a single article, so they broke it into two pieces.
The first piece just came out in the July issue. The second part will be
published in the August issue (which, in classic magazine publishing logic,
will be available around the beginning of July).

We hope you enjoy the article. If not, it'll clearly be Andrei's fault :-)


Monday, April 5, 2004

Upcoming Talks Update

Two talk-related items:

- My seminar on using C++ in embedded systems, originally scheduled for
May 6 at OGI CPD (the Oregon Graduate Institute Center for Professional
Development), has been postponed due to some newly-cropped-up
scheduling conflicts. It will be rescheduled for sometime this summer.

- My talk next Wednesday on "Double-Checked Locking, Threads, Compiler
Optimizations, and More" at the Northwest C++ Users Group in Redmond,
WA, is still on. This is just a reminder. I gave this talk at the
Software Development Conference a couple of weeks ago, and I really do
think you'll find it interesting. There's just a lot going on under
the hood in a C++ program.

For details on all my upcoming talks (including those above), visit my
talks page:


Wednesday, March 10, 2004

New talks scheduled in Redmond, WA, and Beaverton, OR

In addition to the four talks I'll be giving at the Software Development
(SD) Conference in Santa Clara, CA, next week, I've scheduled two new

April 14 in Redmond, WA: Double-Checked Locking, Threads, Compiler
Optimizations, and More

May 6 in Beaverton, OR: Effective C++ in an Embedded Environment

The April 14 talk (which is the same as my first SD talk next Wednesday) is
the result of joint work with Andrei Alexandrescu over the course of
several months as we struggled to figure out the interaction of threads,
volatile, lazy initialization, instruction reordering, cache coherency, and
other topics. I think the material is quite interesting.

The May 6 talk on using C++ for the development of embedded systems is one
I've given for a year or so, but I keep tweaking the material in response
to insights from embedded developers. The May 6 presentation should be the
best one yet.

As always, you'll find a summary of my upcoming public appearances at, including links to full
descriptions of each talk.

I hope to see you at one or more of my talks in Santa Clara, Redmond, or