C++ --> Java --> C#
Python and Ruby move that responsibility onto tests -- you run the code to find errors.
I think C++/Java/C# fit onto a line, each taking away accidental complexity and adding higher level features. C# iterators and lambdas are a good example the OP mentions, of a high-level feature that makes possible styles not available in Java and C++. (we use C# iterators and lambdas to write in a more functional style than we could in Java)
If I were in your shoes, I would start with Python and Django. It's a good framework on a good language, and most importantly, Django has a very good community and almost peerless documentation that's available for free online.
Ruby on Rails is also quite nice, I'm just not a big Ruby fan. There is no reason for this other than personal preference. Scala seems very interesting, but I personally don't see a gain in learning it (since I have C# in my toolbox). Your mileage may vary.
For whatever it's worth, everyone I've dealt with seems to have had a pretty painless transition from C++ to C#. I am not a Java person, so I can't really speak to that.
>>Indeed C# borrowed a considerable portion of its syntax and keywords from C and C++. I suppose the same is true for Java as well.
It seems really weird to me when you sound like C# was an independent development? I'm not an expert on either, but...
Didn't Microsoft even try some (/a few?) Java-clone before C#? And then we have that "embrace and extend Java" thing Microsoft tried first.
Is the ... hrm, inspiration... from Java in C# "the love that dare not speak its name"? :-)
J#[1]? J++[2]?
http://www.ecis.eu/documents/Finalversion_Consumerchoicepape...
Page 16: Kill cross-platform Java by grow[ing] the polluted Java market. (Microsoft internal document.)
Etc etc, with references.
This document could be posted as a story on HN, if anyone wants lots of karma. :-)
We can say one thing for certain -- the "love" here is criminal and violent...
C++ being a multi-paradigm language it does however have more than the OO stuff, and that “more” wasn’t inherited by Java.
This “more” is things like operator overloading, templates, compile-time types (allowing implicit type construction and user type conversion operators), well-defined rules for automatic storage, etc.
I rely heavily on these things and so does the IMHO elegant standard template library. I rarely use the OO features of C++ (if we define OO as inheritance and polymorphism, I do of course use data abstraction).
I assume the parent is doing something similar, which is what makes him say that Java/C# has nothing to do with C++, as there was a crossroad a decade ago where a lot of C++ users moved away from object oriented programming and instead embraced generic programming.
http://en.wikipedia.org/wiki/Java_%28software_platform%29#Hi...
My statement was probably poorly phrased, but what I meant is that a modern C++ program is nothing like a modern Java program. The approach are radically different. I'm thinking about what the heavy usage of templates in C++ allows, what you can accomplish in terms of generic programming.
You can write in C++ like you would do in Java/C# but that would be pointless IMHO (complex hierarchy, virtual methods, etc. : exactly what I try to avoid).
It's like saying lizards an birds are similar because they share a common ancestor (dinosaurs).