Newbie: The C / C++ Issue

Scott W wegster at mindcore.net
Tue Nov 11 19:06:01 PST 2003


Alex Kelly wrote:

>Thanks for all of the great suggestions to my previous question!
>
>Yet, the responses have led me to another question. If C++ is newer and more advanced than C, will it replace C? If so, should I learn C++ and forget C?
>
>Alex
>  
>
Again, it depends on WHAT you'd like to program.  That isn't to say you 
CAN'T program a specific type of application in language X, but some 
languages lend themselves to different tasks better.

C++ was supposed to 'replace C' since the 80s or so.  It's become more 
predominant for applications than C in _most_ cases, but the core OS of 
*bsd, Solaris, HP-UX, AIX, etc etc are all C.  Device drivers are 
written in C.  A large number of system daemons/services are written in 
C.  And yeah, because C lets you 'do as you want,' there are also some 
buggy C programs out there ;-) 

C++ may be a bit much if it's your first programming language.  There 
are things in CC++ that are ambiguous, moreso than in C- like the number 
of possible uses for the keyword 'const' among others (&$^#*&), and STL 
can be a _handful_ if you've never learned how to 'roll your own' data 
structures.  C pointers are at the same time a wonderful thing and a 
PITA to deal with at times.  C++ is generally MUCH fmore suited to GUI 
programming, and a few other tasks...but:

If you learn C first, and become competent at it, when/if you move on to 
another language, you'll have a better understanding of what's going on 
even if the 'next language' hides significantly more from you and makes 
your life easer (less coding, more use of libraries, foundation classes, 
STL, etc).

It's also not a terrible thing to learn C, and then ease into C++ simply 
as a 'better C'- stronger type checking, warnings that are now errors, 
and if pointers freaked you out TOO badly in C, you can then breathe a 
sign of relief and 'cheat' and use some of the functionality of C++ like 
references..

If you DO go that route (C first), it's likely you'll be a better 
programmer in the end, seriously- starting with C++ can be like trying 
to run before you realize you have feet, and can result in 'knowing' 
C++, but writing code that no one in their right mind wants to touch.. 
starting in Java is akin to someone being shown how to fly, but not 
knowing how to land, or turn, or much else ;-)  Possibly not the best 
phrasing, but I've met MANY programmers that are very good at one 
specific thing, but put them even slightly out of their element (like 
umm, take Java away from them and make them use a 'real' language!) and 
they're extremely confused- mention POSIX system calls and they go blank...

The best thing I can suggest, which I do myself when I try to _force_ 
myself to get Java more solidly into my skillset, is to first learn 'a 
bit.'  Go through one of the recommended books (and BTW, whoever said 
Eckel's TIC++, yep, good call, missed that one although it's on all of 
my systems HDs :-)  and DO the excercises.  Pace yourself, especially 
while learning, and don't think 'you know that already' and skip over 
excercises and questions, no matter how inane some of them may seem ;-)  
Then, pick a 'real' project you'd like to do, starting reasonably small, 
maybe a small part of a larger project...or pick up Steven's APUE and 
write a talk daemon and client or something similar....you'll find 
things that you thought you knew that you realize you have no idea 
about.  One of the niceties of *nix are the man pages- if you're looking 
for a specific function (in the standard C library or system calls), try:

man -k <subject> where <subject> is a single word, like:
man -k open

will return a LOT of summaries of man pages with their headers including 
the word 'open.'  man man or man intro to get info on limiting them 
further, but you'll find youself using man pages a LOT while you go 
through your project, whatever it is.  Complete the first one, whatever 
it is, and then pick up the next book, then go a bit more ambitious, and 
use what you've got so far along with what should now be more 
'reference' books than 'teaching books' and keep going....use the force, 
Luke ;-)

Ok, I'll shaddup now... Did you catch the subtle hint in there to start 
with C? ;-)

Scott



More information about the freebsd-questions mailing list