473,756 Members | 4,863 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

The Future of C++ ?

If you had asked me 5 years ago about the future of C++, I would have
told you that its future was assured for many years to come. Recently,
I have been starting to wonder.

I have been teaching C++ at a local polytechnical school here in
Vancouver, Canada for approximately 8 years. Six years ago, at the
height (or should I say volume?) of the internet bubble, I had 80+
students per semester in my C++ course. Now I am fortunate to have 15
students per semester. What has changed? I believe that students are
no longer interested in learning C++. They would rather learn .NET
languages or Java (my colleages who teach these courses seem to be very
busy!). I believe it is because these other languages are easier to
learn and/or are perceived to be more relevant today.

I do believe that C++ is more difficult to learn than many of these
other languages. Despite my best efforts to make them exciting, I see
the eyes of my students start to glaze over when I start explaining
pointers. When I ask them to tokenize an english sentence (using the
strtok() function) and print the token in reverse order (they need to
declare an array of type char * and save the addresses of the tokens in
this array), I experience near panic from many of my students. But
these concepts need to be taught in a responsible C++ course. As was
pointed out to me recently, Microsoft still requires applicants to
demonstrate a very good knowledge of string manipulation using C-style
strings (none of these fancy string class objects!) when recruiting C++
programmers.

The ironic part is there is still a large demand for C++ developers
here in Vancouver. In fact, the company that I believe employs the
most developers here in Vancouver, employs almost entirely C++
programmers. This company, Electronic Arts (if you have not heard of
them, I guarantee that your kids have -- they create video games) is
only one of several gaming companies here in Vancouver that employ
primarily C++ programmers. Other companies like Kodak, MDSA, Nokia,
MDSI, etc. also employ large numbers of C++ programmers. Not
surprisingly, I have talked to several companies here in Vancouver who
are complaining that they are having difficulty finding C++ developers
and are looking at trying to recruit from abroad (eastern Europe
primarily).

I believe that many of these companies will be forced to migrate away
from C++ in the near future, simply because they will not be able to
find C++ programmers in the future. Soon the baby boomer C++
programmers will begin to retire, then the proverbial @@@@ will really
start to hit the fan!

Please tell me I am wrong, and paint me a view of the future which
includes C++.

Nov 18 '06
190 8158

Greg wrote:
Frederick Gotham wrote:
blangela:
What has changed? I believe that students are
no longer interested in learning C++. They would rather learn .NET
languages or Java (my colleages who teach these courses seem to be very
busy!). I believe it is because these other languages are easier to
learn and/or are perceived to be more relevant today.

I think that a prerequisite to being a decent programmer is to have above
average intelligence. A minority of people have above average intelligence,
and so a minorty of people aspire to be an actual bonafide programmer
programming in languages such as C and C++.

There is no question that programming in C++ requires above average
intelligence. What is very much open to question, however, is whether
that intelligence is needed for programming per se, or whether the
additional intelligence is needed solely to master the complexities of
C++ itself.
What exactly is so damn tough and complex about C++?? Unless you're
writing a parser for it I just don't see the problem.

Nov 27 '06 #101
Mirek Fidler wrote:
>In terms of language advocacy, C++ gives you the tools to build
whatever
quasi-GC system you want (including a true GC). It doesn't bend you
over
and
Actually, I got impression that you suggest that you can build true GC
a library solution for C++. I argue that you cannot (at least not
without special C++ compiler, but that would be equal to adding GC to
language definition).
You can build many quasi-GC systems in C++ (for C++), such as smart
reference-counting pointers. You can also build a few "true" GCs, meaning
"transparen t, and operating directly on raw C++ pointers".

You cannot build every conceivable kind of true GC in C++.

The distinction is Java exposes less plumbing, while C++ makes some exposed
plumbing harder to cover-up.

--
Phlip
http://www.greencheese.us/ZeekLand <-- NOT a blog!!!
Nov 27 '06 #102

Earl Purple wrote:
Greg wrote:

It may be instructive to draw some parallels between programming
languages and car transmissions. Programming in C++ is a lot like
driving a car with a manual transmission - both require "above average"
skill than the alternative available technology requires: be it
programming in a managed language or driving a car with an automatic
transmission.
Greg

A better analogy would be between building a car in Java or building
one in C++.

In Java, you would get all the components and put them together,
including the wheels.

In C++ though there is no standard for a wheel because there are some
vehicles, i.e .boats, don't have wheels so there is no need for a
standard. So you have to "reinvent the wheel" or fit one from a 3rd
party manufacturer,
Just like you do for a car.

the only problem with that being that getting their
wheels to fit your vehicle is not always an simple matter, at least not
as straightforward as it is to fitting a standard one, because the
diagnostics of the wheels are such that they have side effects on the
rest of the manufacture of your car.
Actually, wheels are very standardized for various independent and
*incompatible* requirements and always made by third parties. Car
manufacturers buy their wheels and tires from some other source, that
sells cars and/or tires made for automobiles and not for wheelbarrows
or boat trailers (and certainly don't try to be "all of the above"),
and that source is not the same as the people that made the injector
components or the brain.

If we used your analogy it would be more akin to using Java you would
buy all the parts to your new car from the same person. This person
would specify not only the standards to your parts at a whim all their
own that you have to live with, they would also specify, and enforce
every detail of their use and limit your car's design even to the point
of the count of threads on each and every bolt (even for those parts
you did design and manufacturer yourself). In the end, by the time you
where done fighting with the people you bought your wheel from (and
every other part in your car), and ending up with a design totally
different than what you originally intended so that now it's this gas
guzzling monolith with 100's of reduntant but technically flashy
components, you could have designed, manufactured, and sold 10
independent car designs using the modular setup provided by using
several independent third parties using parts you need that are
designed specifically for your needs and not those of some acedemic
designer who has only ever worked on cars on paper that also has to
account for boat trailers, wheelbarrows, bicycles, and every other damn
thing that might have a wheel.

Nov 27 '06 #103

Alf P. Steinbach wrote:
* Earl Purple:
blangela wrote:
I notice that I have not seen a single post in this thread from an
instructor stating that their C++ classes are increasing in size
or even maintaining their size.
Ah, they are getting cleverer at not writing monolithic classes
anymore. Better refactoring
I know that I get students from UBC (one
of the 2 large local uniiversites, the other being SFU) who want to
learn C++. They complain that it is no longer available at UBC. Also,
when I first started teaching C++, there were several other local
colleges doing the same. Now I believe only BCIT (where I teach) is
still doing so.
Course in Java: Here is a computer. We will learn to write applications
that use all the modern features: GUI, hey we can run even in a
browser. Networking - no problem. And we can process concurrently...
Java is very useful because a lot of companies are writing brand new
software in it.

Course in C++: Here is a computer. Now let's get a DOS shell up and
write a console app. And even when you ask the user to type in a
number, there is no method to intercept the key as the user hits it, so
if the user types in "Blah" you have to go back and say "sorry that's
not a number". If we're lucky we might even write our source with the
vi editor where you have to carefully switch between modes because
there's no such thing as Ctrl or Alt so characters mean different
things at different times. C++ is very useful because there's lots of
legacy code out there written in it, usually very badly, and you can
get a job maintaining it.

Now if you are student which do you choose?

On the subject of maintaining a legacy app, yes it makes economic sense
to do so rather than go for the rewrite. You could say the same for the
language itself. Better to maintain it and even add some new features
rather than go back and write a new one from scratch which is simply
much better.

Now everyone in the C++ market seems to be claiming that the language
is used for device drivers or the "embedded" world. Now where is the
university course saying "here is a robot, now we are going to program
some C++ into its microchip". Might just be the way to make it a bit
more exciting. People would like to learn how to program robots. They
look modern. Instead of writing "hello world" and some horrible console
app with cin, we could program it to make us a cup of tea.

Except -- for robots specialized control languages are better than
C++. And in the embedded world one uses restricted dialects of C++ that
aren't really C++. For example, when you remove exceptions from the
language you also remove the whole point of constructors, and what's
left isn't much more than a simple syntactical device (writing p->foo()
rather than p->vt->foo( p ) or CALL( p, foo, () )).
A little off topic here, but I just recently was introduced to a
product called LabView. It provides for a graphical form of
programming. Every program has 2 windows. One window shows the GUI
components which you can drag and size at will. The other window shows
a "flowchart like" or "circuit like" description of the program logic (
a while loop for example, is depicted by a rectangular shape, with
every program step in the loop depicted by a "component" ). If you add
a graphical component to the "circuit like" window, it shows up
automatically in the GUI window.

This LabView product has been evolving for many years (20+ perhaps?)
and has just recently (version 8.2 I think) added the ability to create
classes and other OOP constructs. It might actually be a good tool for
introducing programming, becuase of it's graphical nature (easier for
students to picture the logic of a program.). I also found out that
the Lego Mindstorms products (a form of robotic toy that users can
program) uses a version of LabView to program the robots. I suspect it
may not include the version of LabView that supports a form of OOP,
since this is a very recent release. The reference to robotic
programming above brought this to mind.
>
If I were to teach C++ today (I did many years ago) I'd focus on Windows
applications.

E.g., I imagine it's slightly difficult to do a Windows system tray icon
in Java, unless someone has made a C++ library for that for Java.

I think Windows applications comprise the last bastion of C++.

And it's crumbling: most new Windows applications will be .NET based,
and then better written in C#. That leaves C++ as a "glue" language,
e.g. writing those Java platform libraries. Oh well.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Nov 27 '06 #104

blangela wrote:
I agree with you on this point. I know of a Java instructor at my
school who feels it is a waste of time to teach students data
structures or sorting algorthms -- Java provides different container
classes and sorting algorthms to select from, so why should the student
need to learn these topics. I disagree. I feel that there is still
room for the "science" in "computer science".
Well, teaching students how to implement ADT's isn't exactly the
"science" in computer science unless at the same time they analyze each
algorithm's speed and space requirements. Most data structures courses
I have seen don't spend much time on this later aspect and simply skim
over O() notation and spend the rest of the time implementing sort and
search methods on lists and binary trees.

Really, the science part of computer science is rarely used in the
workplace. There is almost no real world situations when you need to
use finite automita for instance but I know of no CS degree that
doesn't have a course, at least, on this kind of thing alone. Most of
these "science" parts have to be looked up every time you need them
because they simply aren't used enough to recall in detail. On the ADT
end, once you have programming techniques in general down it is really
quite trivial to implement a linked list, for example, so spending as
much time on implementing them at college might be time better spent
learning to use them well...somethin g you actually can use.

Really, implementing a tree or list...once you've done it once that's
probably the last time you will. Maybe if you work in C you'll
implement an ADT once every 5 years or something but most other places
have them already and there's simply no need to. Knowing how they are
sometimes implemented is a good thing but I don't think it's the end of
the world if you don't learn it at school.

In all honesty, the best thing to come out of courses that implement
data structures from scratch is general programming and problem solving
skills. If the teacher feels that can be better taught using other
aids then it's rather hard to argue with that.

Nov 27 '06 #105
gn

Noah Roberts schrieb:
Frederick Gotham wrote:
blangela:
What has changed? I believe that students are
no longer interested in learning C++. They would rather learn .NET
languages or Java (my colleages who teach these courses seem to be very
busy!). I believe it is because these other languages are easier to
learn and/or are perceived to be more relevant today.

I think that a prerequisite to being a decent programmer is to have above
average intelligence. A minority of people have above average intelligence,
and so a minorty of people aspire to be an actual bonafide programmer
programming in languages such as C and C++.

No. Programming requires a certain thinking type, that is all. There
are plenty of brilliant people out there that can't program and will
never be able to program beyond the very basics.

For the less bright among us, there's Java.

Actually, for the less bright among us there's language bigotry.

Java programmers are not stupid. If you want to call people stupid you
should have a look at people that purposfully use the least productive
and secure components of a language when not necissary. Those that do
not make use of the tools at their disposal to make themselves more
productive and better programmers.

Well - you're right. Perhaps the best post until now. As I said in my
posts before I prefer C++, but I also think that it depends on the
specific task and at least on the specific preferences of each
programmer! I think a real programmer is generally no stupid person.

Let's have a look on what is learning to program:
1.) You need to learn the syntax and semantics of a specific language
2.) You need to learn thinking like a programmer: conceive a problem /
reduce it to it's basics / develop solutions and translate them to a
good (today mostly object oriented) design / ...

The first point is the easy part, the second is what seperates a high
level programmer from a
I-programmed-my-own-little-game-hobby-programmer.
So if the distribution of the total programming skill is
1.) 5% and 2.) 95% for java it may be
2.) 7% and 2.) 93% for C++

But you will never be good at point 2 if you don't know anything about
the underlying mechanisms of a language. Also for people programming in
higher languages it is therefore also useful to learn a "low-level"
language (that must not be C or C++). For example I have seen many
errors in python programs of people who started with that language
because they just did not realize the concept of having only references
(the typical beginners errors because they don't know when and why
references are copy on write and when not...).

Best regards,
gn

Nov 27 '06 #106

gn wrote:
Let's have a look on what is learning to program:
1.) You need to learn the syntax and semantics of a specific language
2.) You need to learn thinking like a programmer: conceive a problem /
reduce it to it's basics / develop solutions and translate them to a
good (today mostly object oriented) design / ...

The first point is the easy part, the second is what seperates a high
level programmer from a
I-programmed-my-own-little-game-hobby-programmer.
So if the distribution of the total programming skill is
1.) 5% and 2.) 95% for java it may be
2.) 7% and 2.) 93% for C++
I'm not sure what these invented statistics are supposed to even mean
but whatever. Really, someone good at 2 can work on anything in any
language. Everyone has their preferences but a programmer that is only
able to work in their prefered language isn't very good.

Nov 27 '06 #107
* Earl Purple:
>
So you are admitting that C++ is effectively dying as an application
programming language but will probably remain for the low-level systems
program for a non-embedded platform.
No, I'm speculating. Of course those speculations aren't worth more
than you've paid for them... On the other hand, speculating again, yes,
that's about the way I see it.

We have a little window right now where introductory languages like
Javascript are in practice too limited, so that there's no Real Easy
path into programming, and C and C++ score points on that (no big
problem being complex when it's all complex no matter the path). E.g.
no common script host environment provides decent graphics capability,
while in the old days any decent Basic except perhaps Bill Gates' own
version would give you graphics capability, and that was the first the
young programmer was exposed to. And languages especially geared
towards learning, like Logo and Alice, while providing simple graphics,
are just too limited in other ways, they're not "real" languages.

However, that's changing fast, with the serious functionality migrating
upwards to simpler languages. Then there will be very few reasons for a
student to dip into C or C++, because almost whatever one wants to do,
there will then be a much easier path. And so very few programmers will
know anything more about C++ than that its syntax is curly braces, and
that it's associated with some vague notion of very complex dark magic.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Nov 28 '06 #108

"kwikius" <an**@servocomm .freeserve.co.u kwrote in message
news:11******** **************@ j44g2000cwa.goo glegroups.com.. .
>
Tony wrote:
>"kwikius" <an**@servocomm .freeserve.co.u kwrote in message
news:11******* *************** @l39g2000cwd.go oglegroups.com. ..
A big problem is the libraries. There are often questions on
comp.lang.c++ regarding Graphics and a GUI on the one hand and also
vehement responses on the other that C++ doesnt need a standard GUI or
graphics libraries There seems to be powerful interests at work. It is
surely in some peoples interests that C++ does become ever more
complicated with out any actual usability features (e.g libraries for
common tasks) and more and more newcomers will simply stick with Java
and C# and so on, where they can get the libraies off the nearest
shelf.

Someone else please chime in on the availability of C++ libraries. There
is
a lot of them available. I think what you are saying is that you don't
want
to shop/evaluate/choose from a number of them (?).

I don't and more to the point beginners to the language don't or rather
won't. They will and do already use another language where those
libraries are available. Supermarkets are more successful than
specialists. Why, because people havent got the time to go around all
the specialist shops individually. Most things people want in a
supermarket are similar and 'good enough', and there is nothing
stopping them going to a speciailist if they wish. Further in the
supermarket everything is compatible "generic" (e.g barcodes), feedback
on one product can be used for others. cross fertilisation occurs
formally and informally The supermarket is also a meeting place for
people who want different products, so you can usually get advice from
someone in there as to whether some product is good or not.

Go ask in the specialist shop and their particular product is bound to
be marvellous of course.
I consider having a choice of many an asset, but agree that most people
are cognitively lazy.

Tony
Nov 28 '06 #109

"Earl Purple" <ea********@gma il.comwrote in message
news:11******** **************@ j72g2000cwa.goo glegroups.com.. .
>
Tony wrote:
>>
If I was an instructor at a university, I would NOT put templates into a
first semester class. That's an advanced and additional paradigm and
requires choice to "buy into" IMO. I view C++ as a smorgasbord: I'll
eat what I want and like (no sushi for me!).

I would. Collections would be one of the first subjects I would teach.

One of the least important features of C++ is cin. I do not have a
single cin in any of my C++ production code. Yet it seems to be the
first thing programmers seem to learn.
>Actually, even before C++, it would probably be better to take a
general studies course on programming paradigms! Then students can
take C++ as an course tailored to their needs. (No, that won't work,
cuz students by definition can't make that choice). Oh well, something
like that then.

Surely paradigms though must include handling collections.
A good way for students to learn would be to create some of their
own containers. That would lead naturally to templates. I wouldn't
consider "containers " a paradigm like template programming is.

Tony
Nov 28 '06 #110

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

47
3663
by: David Eng | last post by:
> For many years now enterprise business application development has > been the core area for the use of C++. > Today a significant share to this segment has already been lost to > SUN's Java technology and with MS now abandoning C++ in favour if its > proprietery .NET and C# technology, how long can we except C++ to hold > on against these might competitors? > Has C++ become a dying language? > What is the future of C++? As I posted...
35
3340
by: GTO | last post by:
I do not believe that C# is the future of C++. I also do not believe that adding two thousand new library functions to the standard library is the future of C++. But what is the future of C++? Is it as good as a programming language can get? Like so many of you, I programmed speech recognizers, image recognition systems, a portion of a chess program, lots of numeric code using STL, and tons of other applications in C++, (even firmware...
9
2367
by: Lyle Fairfield | last post by:
It's confusing. Many people here and elsewhere make many different predictions: There's an introduction mentioning some aspects of this at http://msdn.microsoft.com/data/mdac/techinfo/default.aspx? pull=/library/en-us/dnmdac/html/data_mdacroadmap.asp revised Sep 2005 (upper case conversions are mine)
2
2163
by: | last post by:
Everything seems to be moving to .NET and VC++ seems to be adding a lot of managed code support every new release. The questions: is unmanaged code in VC++ beeing phased out in favour of managed code? And suppose I still program in VC++ 6.0, can I safely assume that the code I use in VC++ 6.0 will still be available in future VC++ versions. Finally will VC++ 6.0 generated executables be still be able to run on futur Windows versions and...
0
1854
by: Fuzzyman | last post by:
Hello all, The following is a copy of a blog entry. It's asking a question about future statements and the built in compile function. I'd appreciate any pointers or comments about possible approaches. `Movable Python <http://www.voidspace.org.uk/python/movpy/>`_ supports running both Python scripts and ``.pyc`` bytecode files. It does this by compiling scripts to bytecode, or extracting the code object from bytecode files, and then...
29
3130
by: Zootal | last post by:
My apologies if this gets asked/discussed a lot. With c# rampaging through corporate USA (and other countries), what impact will this have on the usage and future of c++? I've used both of them a bit. I'm in school, and our CS program does not use c#, but uses mostly c++ and a bit of java. C# is relegated ot the CIS programs. Out there in the real world, what kind of a future does c++ have?
6
14452
by: rohayre | last post by:
Im a long time java developer and actually have never done anything with java scripting. I'd like to write a short simple script for calculating a date in the future based on today's date and a letter. Can I use javascripting to create a webpage to allow a user to enter a letter and then click a button to find a future calendar date? I'm just not sure how much user interaction scripting allows. Does java scripting allow buttons, textfields...
5
3593
by: KimmoA | last post by:
Does C have a future? I'd like to think so, but nobody seems to agree with me. Of course, I don't use C in my profession, and maybe I wouldn't be using it if I had the pressure to actually produce things with deadlines and stuff. Hmm. That's a depressing thought. I can't stand OOP. Yes, it is beautiful in theory, and it might make sense for huge projects with many people involved, but I don't want anything to do with it. (I switched to C...
51
3430
by: Jon Harrop | last post by:
If Microsoft turn F# into a product and place it alongside C# and VB, will many people migrate from C# to F#? -- Dr Jon D Harrop, Flying Frog Consultancy http://www.ffconsultancy.com/products/?u
0
9152
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9930
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
9716
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9716
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8569
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7116
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6410
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5180
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3676
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.