jacob said:
A recent article on CNN described the problem that phone makers
are facing.
(
http://www.cnn.com/2006/TECH/biztech/05/29/cellphone.usability.ap/index.html)
Most people are rejecting the new "supercharged"
cell phones because they just do not want to learn the
incredible complex menus and stuff that you need to use them.
The new phones are just too complicated to use.
The same thing is happening with programming languages too.
Perhaps for guys who program as a hobby.
But a *professional* has to know things deeply, and use the best tools.
For instance, I deem that any professional programmer (independently of
his job), must know several programming languages (for instance, one or
two assembly languages, C, C++, python, perl and php).
Similarly, if I would not want that physic engineers chose to not learn
physics because it is "too complex".
Yeah, I think that it is necessary to learn several languages... Even
assembly, even if you'll never ever write a single line of assembly...
For the same reason a doctor (even a general practicionner) has to
learn biology and biochemestry, even if he will never really "use"
biochemestry.
Learning assembly is at least useful for debugging (and learning
biochemestry can be useful for understanding diseases).
A professional programmer must be a specialist.
And, for becoming a specialist, several years are required... Learning
C++ features (even deeply, reading the C++03 standard) can be done in a
few weeks.
Of course, once you have finished to read the C++ standard, if you want
to be a professional, you'll have to program things during several
years, in order to really learn programming paradigms.
I deem that a professional C programmer which programs large
applications, should learn C++ paradigms (and paradigms from other
languages too), perhaps by first learning other languages, and then,
come back to C, and write code in C using these paradigms (because C
allows them, even if it is error-prone and painful for the fingers
typing on the keyboard).
Unfortunately, there are not many *professionals* in developers team
nowadays, which explains that most desktop applications s**ks nowadays
(for instance, they use 100 times more memory and CPU than they
should).
Extremey complicated languages like C++ are loosing ground to more
simpler languages. People get tired of trying to learn a
monster language where learning the language gets in the way
of the basic needs of the user. You use a language to do something,
and when you have to learn too much stuff or the learning curve
is too steep, a simpler language wins.
This means for C, that C (contrary to what many people think)
has a good opportunity to attract new users. Being a much
simpler language it is the language of choice when you want something
that works without a lot of effort.
First having a simplier refence manual, doesn't mean that the code will
be simplier : If you really want to program correctly with C:
You'll have to dynamically allocate a lot (all) of resources, and check
*all* allocation failures, and handle them properly without *any*
memory leak...
For doing that C++ is much easier to use (thanks to RAII and
exceptions).
Furthermore RAII and exceptions are far easier to handle without bugs
in C++.
If simplier was always better, BCPL or B would be a better language
than C.
Note also that : "Simpler on the paper" doesn't mean "simpler for the
programmer".
For instance, smalltalk has no operator precedences... It is far
simpiler for the implementation, and seems to be simplier in the
reference manual...
But, the reality is that it is a pain for programmers... And that it is
really error prone.
In what sense, malloc/realloc/free is simplier than std::string for
string handling?