

Why You Should Know C++ - ArturSoler
http://www.unknownprogrammer.com/2009/10-reasons-you-should-know-cpp/

======
cousin_it
I'll go for a point-by-point critique.

Point 1 tacitly assumes that learning C++ not only teaches you a common subset
of many other popular languages, but also is the easiest way to learn said
subset. This is wrong: a lot of simpler languages can teach you the same, e.g.
JavaScript or pre-1.5 Java.

Point 3 says a given code sample in the wild has higher probability of being
in C++ than any other language. This clashes with my impressions.

Point 4 assumes that the main difficulty of C++ is due to pointers and manual
memory management, and that knowing your way around those issues will help you
in other programming areas anyway. This sounds wrong to me: C shares those
"difficulties" with C++ and isn't generally regarded as a hard language. The
difficulty of C++ mostly stems from design decisions unique to C++ and useless
elsewhere, like template metaprogramming or the dangerous combination of
manual memory management with exception handling.

Point 5 implies that C++ invented parametric polymorphism and that this
facility is essential to make algorithms work on a variety of data types.
Wrong on both counts: ML and Ada generics predate C++, and Smalltalk-like
dynamically typed languages solve the same problem without type
parameterization.

Point 6 assumes more libraries have C++ interfaces than C interfaces, which is
wrong by an order of magnitude at least.

Point 9 assumes most programmers are more interested in performance-oriented
and algorithmically complex projects. Can't give statistics here, but I'm a
data point to the contrary: I love UI and frontend work.

Point 10 is valid.

My own reasons for knowing C++ are a combination of point 10 and the need to
muck around with <http://mapnik.org> \- the only C++ library I ever found
useful. And its code sucks, I'd kill for a C/Python alternative.

------
kristiandupont
Wow, I like C++ (at least, more than most), but I don't agree on any of those
points.

In fact, I am sad to say that unless your job requires it, I can't really
think of any reason to learn the language. It relies on a mixture of paradigms
that are easier learned from other languages where they are isolated. And for
lolevel stuff, you are better off learning C.

~~~
markessien
What's the point of using C when most modern programs on modern operating
systems are written using frameworks that are a form of objectified C?

All serious development frameworks nowadays for desktop applications are
either C++ or Objective C. Most native libraries are one of the two. Even the
driver SDKs are mostly build on an object oriented approach.

And learning C++, you will know C. Your opinion is a popular opinion among web
developers and people who do not do desktop development, but in the real
world, it has a lot more advantages to learn C++ instead of C.

~~~
DrJokepu
Windows API is pure C. GTK is pure C. And these are quite serious (and not
exactly obscure) development frameworks.

~~~
chancho
Have you subclassed any GObjects lately? Or otherwise implemented custom GTK
widgets? If so, you might know why GTKmm exists (nevermind that PyGTK, GTK#
etc are arguably the intended ways to use GTK.) There is a good reason
everyone in the Linux world screamed with glee when Nokia LGPLed Qt, and C++
(even the basic stuff) is a big part of that reason.

~~~
vorador
No qt is the reason. qt is well designed and thought, contrary to gtk. And
it's not because qt was written in C++.

------
joezydeco
No discussion of C++ should go without mentioning the C++ FQA (Frequently
Questioned Answers). It carefully explains every single thing wrong with the
language, and there's a LOT to explain.

<http://yosefk.com/c++fqa/>

Skip to <http://yosefk.com/c++fqa/defective.html> for a great overview. And if
anyone ever mentions "templates" again I'm gonna smack them hard.

------
sprachspiel
My reason not to learn C++: There are so many things one should know, that it
is not rational to learn all the arcane details of C++. Every decision to
learn something is an implicit decision not learn everything else.

~~~
tptacek
If you know any other object-oriented language, it's easy to make the case
that you should learn C and skip C++.

------
mooism2
3\. Code samples in books are more likely to be in Java or Python than C++.

6\. Libraries are more likely to have native C bindings than native C++
bindings.

~~~
pieter
I agree, most of the points seem to apply more on C than on C++.

Also this:

    
    
        10. You will hardly be seen as a hacker if you don’t know C++
    

there are enough kernel hackers that are excellent C programmers, but don't
know C++ that well.

and this:

    
    
        8. There will always (or, at least, for a very long time) be a niche for C++
    
    

There will also be a niche for COBOL programmers. That doesn't mean you should
learn COBOL.

~~~
silentbicycle
Just keep in mind that making a career out of maintaining other peoples' C++
legacy code is a highly optimized way to become the bitterest person in the
world.

------
tocomment
Life is too short for c++. That's what I always say (even at job interviews..)

~~~
dryicerx
There are indeed so many things to learn, but as a developer or someone who
would be in the development world (be it building tech startups, developing
software, etc) there is a must-know set of tools. C/C++ happens to be very
high on the list. And learning more really doesn't hurt.

Not just C++, but also learn C, Java, Perl, Python, Erlang, Lisp, PHP, Shell
Scripting, Assembly, Ruby, along with their most used libraries/frameworks.
The more diversify your skillets, the better you can use the right tool for
the moment, improving performance of that, lower development time. (Eg. A
spoon can be used to build a house, but it's hardly the best tool out there).

This way, want to hack up a quick content management or low computational
front end system, whip out your php/python/ruby with your favourite framework
out. Got a bottleneck at high cpu or memory bound place, rewrite that piece in
C/C++. Need to deploy a cross platform app really quickly, Java. Want to bind
or write a test for a bunch of tools, use Python or Perl. The list goes on.

Summary: Learn More, use the right tool, do less, get more accomplished.

~~~
DougBTX
"C/C++" is not a single language, by all means learn C.

~~~
dryicerx
One should learn both. If you spend the time to learn C, might as well spend a
tiny bit more and learn the C++ concepts as well. There are ton of pure C
libraries, but a lot of algorithmic stuff in C++ STL/Boost kinds, knowing both
C and C++ is essential, each by them selves wouldn't necessarily help one too
much.

------
tptacek
I agree with everything but (1), (5), and (10).

(1) Other languages may be influenced by C++ (especially at a syntactic level,
and, superficially, in their object models). But those other languages are far
easier to learn and become facile with than C++ is. Point (1) advocates for
learning languages in the wrong order.

(5) Templates and generic programming are just tools to mitigate the badness
of C++.

(10) Though a majority of the smartest hackers I've worked with know C, a
minority of them are C++ developers. And that still leaves plenty of room for
smart people who know neither language.

------
plinkplonk
"You will hardly be seen as a hacker if you don’t know C++"

Yeah right! You are "seen as a hacker" if you write code that is useful to
others and/or is brilliant in some respect. Nothing to do with knowing a
particular language.

If knowledge of a specific language _is_ a criterion, I'd rather have someone
be an expert in C/lisp/smalltalk/haskell/prolog.... C++ originates or embodies
no concepts that weren't discovered or done better elsewhere.

e.g: An expert smalltalker is more likely to understand OO than a C++
programmer.

------
jcromartie
> your reputation as a programmer will be lower if you don’t know it

I _could_ learn C++, or I could learn Smalltalk, Scheme and Haskell in the
same time and mental space.

------
dhotson
I like to use C++ just as a better C.

Things like single line // comments and not having to declare all your
variables at the top of your functions is really useful.

STL is also really useful in that you don't have to (badly) reinvent basic
data structures like vectors and maps. Of course, STL also means reading
compiler errors that are pages long... :-/

~~~
silentbicycle
C99 has single line // comments. It also has the restrict tag.

About the idea of C++ as a better C, See "C++ - The Forgotten Trojan Horse".
([http://ejohnson.blogs.com/software/2004/11/i_find_c_intere.h...](http://ejohnson.blogs.com/software/2004/11/i_find_c_intere.html))

If you're using C++ for the STL, keep in mind that the ML languages (OCaml,
SML) also have compile-time parametric data structures, and they infer and
check their usage for you.

They also have a _proper_ module system, so when you change a private
variable, you don't have to choose between linking errors or recompiling damn
near every piece of C++ code in your source tree.

They're also pretty fast.

~~~
chancho
The ML family of languages is my favorite (second only to C++, natch.) but
their brand of parametric polymorphism is equivalent in C++ to MyTemplate<T*>
(or, if you like boost, MyTemplate<reference_wrapper<T> > would be more
accurate.) They are not the same as MyTemplate<T>. This is by choice of ML
language implementors, as they see it as a defect of C++ that every template
instantiation has to be compiled independently. Instead, they turn static
compile-time polymorphism into run-time dynamism using indirection and
function pointers. (Maybe MLton doesn't do this, but I know GHC does.)

It's the difference between C's qsort and C++'s std::sort. The latter blows
the former out of the water when sorting small things. This brand of
polymorphism is unique to C++ and until someone does it better (which no one
seems to have any interest in, except maybe Walter Bright) then C++ will
always be "the best C."

~~~
silentbicycle
This is why I said "pretty fast", not necessarily faster than C++. Using ML
means trading a small percentage of C++'s raw speed for code that can be
debugged, adapted, etc. with much less trouble. I have found this to be a more
than reasonable trade-off in virtually all cases.

------
kwamenum86
In the context of code sampled, the difference between Java and C++ (and PHP
and Javascript and a few others) is trivial and will hardly affect your
understanding of the code. These are all part of a family of languages with
C-style syntax.

------
bigsassy
When I first started programming, people would say the same kind of things for
learning some form of assembly. 10 years from now people will probably be
making an article like this for Java and C#.

------
utx00
really? with python/ruby/clojure/erlang/lua/js coming up in the world? ... i
thought this was going to be a 1991 article.

------
screwperman
I feel the most compelling reason to use C++ is that it is one of the de facto
programming languages in competitions.

~~~
silentbicycle
This is the same reason I drive a NASCAR stock car to work.

Seriously, the defining aspect of most programming competitions is that you're
making a program as fast as possible, _whatever it takes_. C++ rewards this:
if you keep sinking an order of magnitude more effort into it, you can
seemingly always shave off another tenth of a percent of the time. There are
some cases in which this is actually relevant (many involving graphic
rendering, a niche I work in, PS), but they're really a _tiny_ part of
programming.

It makes sense to code them in C++ (or C), but it's really not the best fit
for more general development, which usually places a higher priority on being
able to deliver an adaptable and correct solution.

------
swolchok
Didn't we do this discussion already when the last C++ article was posted?

------
known
Wall Street runs on C++.

------
sectorzero
If you want to be a master of the machine use C/C++; if you want to be a slave
use Java; If you want to be a slave of a slave then its C# for you. Simple :)

( Disclaimer : My comments are limited to only the above 'popular' languages
in discussion. Also I program purely on *nix, so I am not aware of your other
dark or better worlds out there )

