I just wanted to tell you that what you've learn in other languages are usually usable in many languages, even if it's not standard procedure. For instance, with C++, you can use Boost and use foreach with a (kind-of) lambda. It's not a real closure, but still, my point is that don't dismiss things of your favorite language when you need to use other ones.
I remember implementing a genetic algorithm in C++.. I used a functional way of doing it and it turned out to be a real pleasure. I even made it multi-threaded using a STL-like threading library which encouraged a functionnal style.
And also, don't forget, by learning new language, it will make you a better programmer, period. There are also way more than "programming" in a software job.
Communication between developpers, Communication with the client, designing a robust system, etc. Implementing in your not-so-favorite language might only be a small pourcent of the real job.
Okay, this comment will sound trollish, but that's not my intent. I am not an C++ advocate by any stretch of imagination and I presently program in Java for living (and certainly like my job). Note, however, I am also speaking of in the context of professional programming, not open source projects/communities.
I tend to find that C++ jobs and the C++ developer community is usually (key word being usually, not always or even "almost always") more pleasant than the Java and even dynamic language jobs and communities.
I'd guess first reason is that C++ isn't very useful when you're doing simple work (such as data base driven websites, although it's certainly possible e.g., okcupid).
The sort of projects where only C or C++ make sense tend to just be more interesting (embedded, systems programming, high performance/low latency computing).
As it isn't an easy language, it takes more motivation than just money to learn it when there are other choices on the market. It's difficult for all the wrong reasons: not because it introduces powerful concepts like Lisp and ML-family languages do (which take time and effort to learn and understand), but because of complexities of manual memory management (especially if your dev organization doesn't like boost::shared_ptr and boost::scoped_ptr), inadequate standard libraries (stl and boost are nice -- again, if your dev organization allows you to use them -- but you almost always have to go beyond them and build your own data structures), etc... However as a result of the difficulty barrier, people who program in it tend to be smart and passionate and are more likely to write tools in Python and Perl and learn Haskell in their free time.
Additionally, when the PHB mandates C++, he can appeal to the developers' favourite (and most dangerous) indulgence: premature optimization instead of telling the truth ("I don't want to get fired if I screw up, so I am going with Industry Best Practices"). I've seen organizations go Perl to C++ and OCaml+Scheme to C++. There would be discontent, but there usually wouldn't be an exodus. I've never seen companies go Perl to Java or C++ to Java without an exodus of developers (either before the switch, allowing the switch to happen, or after, caused by the switch).
Comments
I just wanted to tell you that what you've learn in other languages are usually usable in many languages, even if it's not standard procedure. For instance, with C++, you can use Boost and use foreach with a (kind-of) lambda. It's not a real closure, but still, my point is that don't dismiss things of your favorite language when you need to use other ones.
I remember implementing a genetic algorithm in C++.. I used a functional way of doing it and it turned out to be a real pleasure. I even made it multi-threaded using a STL-like threading library which encouraged a functionnal style.
And also, don't forget, by learning new language, it will make you a better programmer, period. There are also way more than "programming" in a software job.
Communication between developpers, Communication with the client, designing a robust system, etc. Implementing in your not-so-favorite language might only be a small pourcent of the real job.
That was my 5 cents on the subject :p
Okay, this comment will sound trollish, but that's not my intent. I am not an C++ advocate by any stretch of imagination and I presently program in Java for living (and certainly like my job). Note, however, I am also speaking of in the context of professional programming, not open source projects/communities.
I tend to find that C++ jobs and the C++ developer community is usually (key word being usually, not always or even "almost always") more pleasant than the Java and even dynamic language jobs and communities.
I'd guess first reason is that C++ isn't very useful when you're doing simple work (such as data base driven websites, although it's certainly possible e.g., okcupid). The sort of projects where only C or C++ make sense tend to just be more interesting (embedded, systems programming, high performance/low latency computing).
As it isn't an easy language, it takes more motivation than just money to learn it when there are other choices on the market. It's difficult for all the wrong reasons: not because it introduces powerful concepts like Lisp and ML-family languages do (which take time and effort to learn and understand), but because of complexities of manual memory management (especially if your dev organization doesn't like boost::shared_ptr and boost::scoped_ptr), inadequate standard libraries (stl and boost are nice -- again, if your dev organization allows you to use them -- but you almost always have to go beyond them and build your own data structures), etc... However as a result of the difficulty barrier, people who program in it tend to be smart and passionate and are more likely to write tools in Python and Perl and learn Haskell in their free time.
Additionally, when the PHB mandates C++, he can appeal to the developers' favourite (and most dangerous) indulgence: premature optimization instead of telling the truth ("I don't want to get fired if I screw up, so I am going with Industry Best Practices"). I've seen organizations go Perl to C++ and OCaml+Scheme to C++. There would be discontent, but there usually wouldn't be an exodus. I've never seen companies go Perl to Java or C++ to Java without an exodus of developers (either before the switch, allowing the switch to happen, or after, caused by the switch).