Re: Visual C++ vs Visual C#
Ben Voigt wrote:
"Bo Persson" <email@example.com> wrote in message
Pierre Asselin wrote:
Victor Bazarov <v.Abazarov@comacast.net> wrote:
According to my 10 years exp in C++, my advice is start C -> C++
-> VC++. If you want to do some real development and most
optimized, it's always recommended to go for C++.
Totally disagree on the beginning of the sequence. DO NOT start
with C. A huge waste of time.
I know that's what people likeStroustrup recommend, but... I
watched one guy try to learn C++ directly and that was a mistake.
I think he would have done better by learning C first.
Any experience counter to mine ? It might be off-topic in this ng
but I would be interested.
So that's one guy. Not a lot of statistics. :-)
One problem is that there are lots of things in C that you really
don't need much, once you have learned C++. Why bother learing
that first, just to have to unlearn it later?
Things like malloc, printf, strcpy, fgets, that << is a shift
operator, how to simulate pass by reference using pointers, why
you can't have both f(int) and f(long), etc.
Can we come to a consensus that it's best to first learn the common
elements of C/C++, then move on to more object-oriented C++
Some of us, having perhaps worked hard to unlearn C-isms, belive that you
can and should learn C++ as a language of its own.
My favourite "Accelerated C++" starts with std::string and iostream in
chapter 1. It then goes on with vector, list, iterators, algorithms,
classes, overloaded functions, and templates. It doesn't say anything about
pointers and C-style arrays until chapter 10, and the mostly to be able to
explain what a string literal is.
The it continues with abstract data types, value classes, inheritance,
polymorphism and virtual functions.
Not a word about why you need at least half a dozen C library functions, for
what std::abs does by itself. Or how you handle printf formatting for a
typedef'ed value. Who cares?
Sure it's fine to use new/delete when you start dynamic memory
management, but this whole idea of defining a custom class in a
hello world program is just ridiculous. Frankly, using puts to
print a couple strings and avoid hitting namespaces in a first
example is fine, std::cout can be introduced when you would start
using printf and format specifiers (admittedly still very early,
but not immediately). First learn algorithms with plain structs,
then learn encapsulation. Without passing some pointers around,
how can people ever learn how a this pointer really works?
And I've never "unlearned" strcpy, << as shift operator, etc.
Do you use it often? Should we start by teaching this, or rather leave it in
an appendix "C++ trivia - some exotic C stuff"?
any C++ programmer should recognize printf just so they don't freak
when their pair programmer does printf debugging.
A good time for his friend to unlearn a bit too? :-)
Just tell him about operator<< that works for any type worth displaying.