And there are plenty of us that also use it daily, and don't find it to be utter crap. Though I am not aware of your situation, so you may have a job that requires you to use C++ in areas where it's not the best option. In that case, I can understand why it would be painful. I get to decide which tools I use, and lately, I tend to prefer C++ for the low level bits, C# for the application level, and Python/Lua for scripting on top of that. This makes the easy things simple and the hard things possible. Taking C++ out of that mix would only cause me more trouble, so I find it to be a useful tool.

Linked list with pointers? is this 19th century or what?

No, but I would expect that anyone graduating with a degree in Computer Science would have some familiarity with the fundamentals of programming, and those would include pointers and basic data structures and algorithms. Unfortunately, this doesn't seem to be the case for a good portion of graduates anymore.

No, but I would expect that anyone graduating with a degree in Computer Science would have some familiarity with the fundamentals of programming, and those would include pointers and basic data structures and algorithms. Unfortunately, this doesn't seem to be the case for a good portion of graduates anymore. "

You're right. Take into mind the word "algorithm" - it's much older than the 19th century, but it's essential to understand what is meant by it when you're doing serious programming work. As well as concepts - linked list, stacks, trees, enumerations, arrays, even pointers and memory addresses - that are important, it may be possible that a programmer never has to implement something such basic on his own, but it's neccessary that he understands what's going on "under the hood", so if problems occur (and they usually will), he has a clue about how to solve them. Surely, this is often considered "old-fashioned" or "unmodern" by many novice programmers who know how to click in "Visual BASIC" and consider themselves geniuses. But when you need to optimize code, you're thinking in "old-fashioned" categories like exponential complexity, iteration loops or memory layout.

Furthermore, I agree with your consideration that today's educational concepts in computer science don't seem to put much emphasize on teaching basic concepts. But finally, it's these basics that enable you to understand how things work. But if you're just keen on a BA, MA, Dipl.-Inf. or some other degree that you can show around, while treating your PC as a worse typewriter, it should be sufficient. :-)

it may be possible that a programmer never has to implement something such basic on his own, but it's neccessary that he understands what's going on "under the hood", so if problems occur (and they usually will), he has a clue about how to solve them.

Right. The higher level abstractions provided by languages like Java and C# are useful, but you still need an understanding of what's going on underneath. Otherwise, how do you choose between structures like HashMap and TreeMap or ArrayList and LinkedList?

Surely, this is often considered "old-fashioned" or "unmodern" by many novice programmers who know how to click in "Visual BASIC" and consider themselves geniuses.

Except that today, the "disease" is carried by Java, and it's even worse because the whole thing has been institutionalized by the educational system. I don't blame Java itself-- it's a perfectly fine language if that's your cup of tea, but it is the current tool being used to train an army of programmers who are completely unable to see behind the abstraction.

But if you're just keen on a BA, MA, Dipl.-Inf. or some other degree that you can show around, while treating your PC as a worse typewriter, it should be sufficient. :-)

The only problem with this is that a Computer Science degree has become completely irrelevant as an indicator of someone's level of knowledge in the subject. Not that it was ever perfect, but it did, at one point, suggest some minimal training and understanding of the basic concepts.

See that's funny, because if you asked Stroustrup, only using C++ to replace what you'd otherwise be using C for is a huge waste of the immense featureset that C++ provides.

You know what's worse than a Java programmer who doesn't know how to program? A C++ programmer who doesn't know how to program. The usual assumption is that bad programmers won't cut it in C++, but personal experience has taught me that bad C++ programmers are quite plentiful. The sheer destructive power of the bad C++ programmer is unmatched in the world of software engineering.

The other dirty little secret is that unless you're a bonafide expert with years of experience, you're probably a bad C++ programmer.

See that's funny, because if you asked Stroustrup, only using C++ to replace what you'd otherwise be using C for is a huge waste of the immense featureset that C++ provides.

Indeed, it is. There is no reason not to take advantage of function and operator overloading, classes, templates, RAII, the STL, and even the fantastic Boost libraries. In fact, Stroustrup even suggests that the only reason to use C over C++ is when you're faced with the lack of a good C++ compiler.

You know what's worse than a Java programmer who doesn't know how to program? A C++ programmer who doesn't know how to program. The usual assumption is that bad programmers won't cut it in C++, but personal experience has taught me that bad C++ programmers are quite plentiful. The sheer destructive power of the bad C++ programmer is unmatched in the world of software engineering.

Bad programmers are plentiful in every language. That is unavoidable. What I find disturbing is that universities, due mainly to retention and budget problems, have institutionalized the act of creating bad programmers.

The other dirty little secret is that unless you're a bonafide expert with years of experience, you're probably a bad C++ programmer.

It is a large and complex language. I'd say it takes at least a decade of experience with C++, working with it full time on a variety of different projects at different technical levels before you can call yourself a good C++ programmer. And of course, any good C++ programmer has copies of the Scott Meyers books and D&E on their bookshelf.