It seems like the first ObjectOrientedProgramming project (particularly those using CeePlusPlus) done by most companies turns out to be a disaster, leaving bad tastes in the mouths of managers and some programmers for years to come.
It is too late to change history, but what can we do about removing that bad taste?
-- KeithRay
Such disasters often are due to bad planning (and no or insufficient education/tutoring), and these people often cannot be enlightened, mostly because they don't care. -- JuergenHermann
(I agree with the first half of Juergen's sentence and disagree with the second half, but CeePlusPlus has left an ongoing and growing bad taste in my mouth for 13 years, and I won't get very close to a C++ project even now. For object projects using other languages, there are, however some cures. -- AlistairCockburn)
This is not an ObjectOriented problem, but a RiskManagement problem and a CeePlusPlus problem. Many first-OO projects were done with too many new things, which is bad risk management. Many first-OO projects were done with C++, a dangerous language which increases risk.
Any project using a new anything, be it a language, ProblemDomain, or platform, has increased risk. If you are doing just one new thing, you can succeed, although you are almost certain to not meet a constraint (budget, time, quality). The disasters comes from doing two new things at once ("Let's do our new product using C++"). These projects fail, or if they succeed, it's with everyone feeling like they failed.
C++ is such a dangerous machine that it counts as two unknowns unless you have an experienced machinist on the team. The problems with learning C++ are not so much with OO itself, but with gritty realities such as MemoryManagement in the presence of exceptions. Objects are easy by comparison. The first time, I read 'machinist' as 'masochist'. That might help or might hurt.
Things may be improving now that programmers are trying some ObjectOrientedLanguages which don't have C++'s exposed programmer-mangling gears. Languages such as JavaLanguage and PythonLanguage only count as one unknown because they have guards on the machinery.
Can you reduce one of the unknowns with C++ by not using exceptions?
I don't think so. You can chose not to throw exceptions, but libraries you call may throw them, and operator new throws an exception if it runs out of memory.
You know you can turn that behavior off, right?
Here is a recipe for disaster:
CategoryObjectOrientation, CategoryStory, CategoryOopDiscomfort