Levi Pearson wrote:
C++ is hugely complex and has a myriad of ways to do things, so it's really a 
tool that requires deep knowledge of the language, available libraries, and 
best practices to use well.

I disagree with 2 of your 3 statements and only partially agree with the other. Let me respectfully address them below, in the interest of an edifying discussion. Please set me straight where I err.

First, you contend that you must have a deep knowledge of the C++ language to use it well. Let me address that point last, because I partially agree with you on that one.

Second, you contend that you need deep knowledge of available libraries to use C++ well. Is that not also true of all languages? Those who are ignorant of the useful libraries in their language of choice are doomed to reimplement them. This surely applies to all languages. Are you perhaps inferring that C++'s standard library is so lacking that you have to go to outside sources to make it usable? If so, I agree, but Google can help. However, I still contend that in order to make good use of any language, you have got to be familiar with the available libraries. This is especially true of Java, which alone isn't much of a tool, but when coupled with the myriad of outside libraries, it's pretty capable.

Third, you contend that you must know C++ best practices to use it well. Are you saying that there are languages that *don't* require developers to employ best practices to use the them well? I think this is common to all languages. Perhaps you are inferring that because there are so many ways to do an individual task that it is too hard to guess the best one without a deeper knowledge?

Now back to your first argument, that you must have a deep knowledge of the language to use it well. I don't think this is entirely true. You certainly have to know some things, on which topic I have two pieces of advice:

1. You should find some well-written C++ to pattern after (which might prove difficult because so few people seem to follow my next point).

2. You need to read a few entries in the C++ Super FAQ and a few pages from the beginning of Josuttis's book, The C++ Standard Library (which pages incidentally have nothing to do with the C++ Standard Library but cover basic C++ language features).

If you do those two things, you'll be in good shape to code lots of awesome C++.

You certainly don't have to understand some of the language's cobweb filled corners like virtual inheritance and the unfavorable diamond or recursive template meta-programming to be a good C++ developer.

Here are a couple other examples of why C++ is a great programming language.

1. Qt's foreach macro. The language designers did not write a sane foreach. In fact, the one that ships with the standard library is a steaming pile of unusable poo (unlike most poo which is not steaming and at least somewhat usable), but Qt managed to use cool language features to make a nifty, useful, and type-safe foreach macro that *feels* like part of the language despite being added many years after the most recent language revision.

2. Macro-based debugging. Using the macro system, you can remove and insert entire chunks of code just by flipping a flag in your makefile. In other languages (like Java and Python), you'd have to do some serious magic to actually *remove* debug code from your software at release time, rather than just wrap them in false conditionals, to get the same kind of performance as C++.

3. A linker! Why don't other languages have linkers these days? It's such a pain to kludge together jar files that you hope have all the classes you need to ship in one bundle. I know the Mono team is working feverishly to finally write a linker after how many years? Using a C++ linker, I can create a single binary that will run on just about every Linux distro (even spanning kernel versions).

4. Templates. Templates are cool when used properly, and type safe. Of course, templates can be abused, so use with caution. This is one of those areas that requires a little bit of "deep knowledge." :)

5. Speed. For most user-interactive desktop applications, you still can't JIT fast enough to match C++'s raw speed.

Anyway, I'll get off the C++ pedestal. Sometimes I feel like I'm still rooting for the losing team, but for certain applications C++ is just great, even if your last name isn't Stroustrup.

--Dave

P.S. I had to add "poo" to Thunderbird's spell checker. How poopy is that? (I had to add poopy too)

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to