|
Will Chelsea win the cup? Will my nephew win "Britain's Got Talent"? Will Hell freeze over? This forum is for technical questions, we cannot foretell the future any more than you can.
Veni, vidi, abiit domum
|
|
|
|
|
It has a future - I was first told in 1995 that I wouldn't have a job next year writing C++ applications and I'm still at it. Sun couldn't sell Java stations in the 1990s and even though I use a Chromebook [1] almost exclusively at home high performance apps on them usually have a chunk written in C++.
I can't see anything replacing C++ (apart perhaps for C) in the embedded or OS spheres either.
|
|
|
|
|
I would have added "also high performance graphics" too, but that is not true anymore with CUDA/OpenCL having language binding to Java/Python etc.
But yeah, OS, device drivers, embedded markets are still the domains for C/C++.
|
|
|
|
|
My opinion is that C++ looks ahead for a long future. C/C++ has probably the largest opensource codebase and set of libraries available (this is very important!!!) and most of the popular operating systems has been written in this language. (I'm a bit sad that some things can't be changed in C/C++ because of backward compatibility problems...) C/C++ is probably the "most portable" language across current popular platforms (Windows,Linux,Android,iOS,MacOSX,...) - try to run java on iOS... Even the android based java is a nonstandard one. Java and C/C++ are very different in many aspects, there are fields where they are simply not competing because either only Java or only C/C++ is the good choice. A serious programmer has to know C/C++ because currently "half of the world" has been written in this language and besides this you have to know many other languages anyway even if you don't actively using them.
Your question is often the concern of newbies. They are afraid of investing their time in learning something because they are afraid of "putting up everything on learning a specific language". It is not the knowledge of a language that is valuable in a programmer. You can learn programming, program design and/or a paradigm by learning any of todays langauges. Being a good valuable programmer has nothing to do with knowing a specific programming language.
|
|
|
|
|
You hit the point Sir.
I'm not exactly a newbie, I'd say I'm intermediate in C++.
Yet I had hard times finding a job as a C++ developer in Quebec, so I became very hesitant, is it because of the difference in mentality or is it because C++ is becoming unwanted or more like a "niche".
Hence I wanted to know whether it still is a viable option and worth my time and efforts, otherwise I'd switch to something else be it Java, .NET, Android, whatever.
Thank you for your response.
|
|
|
|
|
You don't have to "switch", you can learn both. Try java too. Currently I'm working with C++ but worked with java for many years. The java language is extremely simple, not comparable to the complexity of C/C++. In case of java the hard work is rather learning the standard library and optionally j2ee related libs and a few opensource frameworks used by companies.
|
|
|
|
|
30 years ago I started working with C, then C++, then Pascal (Delphi, actually), then back to C++, a bit of Java, and in the meantime I'm back to C++ again.
C++, while old, is not going to be replaced or retired any time soon. It may however be less prominently presented in press, or job offers, because fluctuation tends to be lower with developers in older, established languages - at least that is my experience.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
|
|
|
|
|
What I've found is that a lot of companies will build things that they think their customers want... so this includes using all of the new technologies so that they could look like they're on the bleeding edge of technology. Did they HAVE to use the new technologies, no, but they chose to do so because they think that's what will attract new customers.
I remember when the "cloud" term became first popular, people were asking us if our applications were available on the "cloud". Well, it doesn't make sense because of what our company does, but somehow people want buzz terms. It's sad really, people would rather get buzz terms than results.
|
|
|
|
|
C++ will never go away. It is still the best choice when performance and/or determinism matter. However, having been on the job market twice in the last two years (was working for highly unstable companies) finding C++ jobs is getting more difficult. I've also observed that Java is primarily holding on because of Android. The big boy is .NET and for most programming--which is Web and database front ends--it makes a lot of sense. That said, you'll still find that C++ is used heavily for server back ends.
I plan on holding onto C++ for the rest of my career, which is hopefully no more than a decade. Were I ten years younger, I probably wouldn't bother--the big bucks are now in web services.
|
|
|
|
|
Actually I was wondering, should I learn JEE or .NET.
.NET is attractive for its simplicity and the lesser steep learning curve than JEE, but what if suddenly Windows stops being relevant?
Microsoft has problems at the moment and Google is trying to replace the whole Desktop thing with thin clients connected to the cloud.
Maybe open source platforms are just safer.
|
|
|
|
|
The market share of Windows is beyond gargantuan. There is a reason the Server and Tools Division at Microsoft makes so much money. Many people don't respect how important Windows is in the corporate environment. Even if Microsoft went away tomorrow, the need for Windows developers would continue to ten, if not twenty, years.
Microsoft is having problems in an entirely relative manner. Most companies would love to "suffer" Microsoft's problems.
Ask yourself what kind of applications you want to write. What kind of company do you want to work for? Personally, I don't like working on applications where .NET or Java are genuinely the best choices. This is a decision you have to make for yourself. But don't worry about Microsoft going bankrupt any more than worrying about Oracle or IBM going bankrupt.
|
|
|
|
|
Hadi wrote: I wanted to hear your opinion whether C++ has a future.
Your other responses illustrates some confusion.
Regardless of whether a language is used or not it doesn't reflect what a relatively limited marke tplace needs. There will be places that you can go where there will be NO jobs for developers. Doesn't matter what language you know.
It is possible that some market places can become saturated and/or change significantly over time. And market places always are influenced by limited local events. For example if a consulting firm goes out of business in a relatively small town and dumps a lot of C++ developers into the market then finding a job in that language is going to be difficult for a while.
The following is the best objective data that I have seen for a long time as a representative indication of language popularity.
[^]
|
|
|
|
|
Hi ,all ,
I am now using Visual studio to build code on Windows OS .
I am going to learn C on Fedora and write a small project about hooking file system but I don't know that compiler is good on Linux ( To inject dll file ). and I want to run code on other machines .
I installed codeblocks but i don't make sure codebloks will help me .
please help me .
Thanks
Thong LT
modified 8-Nov-13 22:58pm.
|
|
|
|
|
|
gcc is pretty much the most popular Linux compiler (only one you really need to use in Linux, also available for Windows[^]). CodeBlocks is not a compiler at all, it's an Integrated Development Environment (IDE). The difference is that while the compiler compiles the code, the IDE is simply making your collection of tools easily accessible to the developer (edit your code and control the compiler, linker, and debugger all from one place).
|
|
|
|
|
Thank Albert and Richard .
I am now reading "advanced-linux-programming" book and compile by gcc .
Thanks
Thong LT .
|
|
|
|
|
Hi, I read an old program, the programmer wrote some function like the following block, I am wonder if the volatile is necessary with a local variable.
As I know, local variable is in stack, every time enter the function, local variable get a new stack address.
void logRealClock(void)
{
volatile int second;
volatile int minute;
volatile int hour;
second = globalDate->second;
minute = globalDate->minute;
hour = globalDate->hour;
....
checkTime(second,minute,hour);
...
globalRTC_REG.second = second;
globalRTC_REG.minute = minute;
globalRTC_REG.hour = hour;
}
|
|
|
|
|
|
Thanks,I read the Wiki article, but I still can't see the need of volatile for local variable.
The example code only cause size of generated assembly code bigger, but useless.
int main() {
volatile int a = 10, b = 100, c = 0, d = 0;
printf("%d", a + b);
a = b;
c = b;
d = b;
printf("%d", c + d);
return 0;
}
|
|
|
|
|
If you pass a pointer to your variable outside the function (for example to an interrupt handler) and then you guarantee the lifetime of that variable (for example by blocking on an event with this thread) and you want to use the variable in the function after finishing the block operation on the event then it could be useful (because the value of the variable might have been changed by other threads) but what I've described previously sounds quite pervert and awfully designed code. I don't think volatile local vars to be useful.
|
|
|
|
|
thanks, what you said like:
volatile int* aPtr = aSharedMem;
right? then in another thread,
aSharedMem = aNewValue;
then in the current thread, stalled before aSharedMem=aNewValue, then resume, *aPtr get the aNewValue.
if local variable just copy a global's value, like:
volatile int aLocal = aGlobal;
then in another thread, aGlobal = aNewValue;
in current thread, stalled before aGlobal = aNewValue, then resume, aLocal will get aNewValue?
|
|
|
|
|
int* globalptr;
void myfunc()
{
volatile int localvar = 0;
globalptr = &localvar;
printf("localvar: %d\n", localvar);
}
|
|
|
|
|
is the following scenario, the volatile is useful?
int globalVar;
void task1SetGlobal(void)
{
if (xyz == 100)
globalPtr = 100;
}
...
void task2GetGlobal(void)
{
volatile int localVar = 0;
localVar = globalVar;
if (localVar < 100 ) doSth;
else if (localVar == 100) do100Thing;
}
|
|
|
|
|
Not really. In order to understand volatile you should first understand some other concepts like multithreading and caching and all the related problems that can cause problems along with the optimizations done by the compiler.
|
|
|
|
|
It's not necessarily bad design to pass a reference to a local variable to another thread for processing. One example of where it might come in handy is splitting up an array into chunks and processing each chunk in separate threads. However using volatile as a synchronisation mechanism is not the sort of thing I'd recommend to try and avoid a proper synchronisation mechanism (i.e. a condition variable).
|
|
|
|