I'm a long-time C++ programmer developing on Windows, and have been using Visual Studio for developing unmanaged C++.
In the past 2-3 months, for the first time, I have been exposed to the world of C# and Java. Man, I'm astounded by the productivity gain!
In particular:
- C# and Java have so many cool
tools (TestDriven.NET, NetBeans
IDE). Personally, the tools feel much more
modern than the C++ tools that I've
been using. - All the libraries are
there for me to use right away,
without me having to download extras
(Boost, Qt, etc) - Blazingly-fast
compile time. C# compilation is
super fast. Each time I make changes
to Java code on my Netbeans IDE, I
never have to wait for the usual
compile/link. It's just done right
there. No waiting! (People who have used Boost probably agree with me on the slow compile time such as Asio library) - Simple deployment scheme. I really like the fact that I can just write the code once and it can be run on different machines (OS) without me having to recompile it.
Having said all that, here's my real question: are C# and Java good technology to learn the most modern tools and libraries? Are these the two technologies that have the best tools available? I want to be exposed to new tools to broaden my perspective. This way I can learn from it, and try to find equivalent tools in C++.
Disclaimer: My intention is not to dis C++ as a language at all. After I have used the tools available for Java and C#, I just feel like the tools that I have available for C++ are quite limited (especially refactoring).
I use the following for my C++ dev:
- VS.NET 08
- Visual Assist X
- Intel Parallel Studio (profiler)
- TeamCity
- I plan to use Bullseye and PC-Lint + Visual Lint for code checking
Clarification
When I asked for tools, I meant tools as in IDE, Unit testing tools, refactoring tools, and the likes. TestDriven.NET is probably the most perfect example. I just love the fact I can start coding my unit tests, and right click to run those tests inside my IDE! It's so sad that I cant have the same convenience in unmanaged C++!
Best Solution
I agree, too. No matter if it is C# or Java. Both are very modern languages and have a huge community contributing new Technologie implementation and Frameworks. Depending on the field you worked in with C++ moving to e.g. C# can be a big productivity boost. The choice of the language also depends on your field. Java is huge among Enterprise Webapplications and for a beginner the amount of different Frameworks, Shortcuts and Technologies seems to be bone crushing (and some indeed tend to overspecify and therefore oftentimes overcomplicate things). For Java Eclipse is probably the best IDE (I used Visual Studio for a while and maybe it is my lack of experience there, but I really missed some features there that Eclipse has especially when it comes to Code Generation).
C# on the other hand is very .NET Framework and - of course - Microsoft oriented. If you used to program in C++ for windows trying C# is probably really easy (because switching from C++ to C# is exactly what Microsoft wants C++ developers to do) and definitely the better choice for Desktop Applications (the Linux Ports of the .NET runtime environment are constantly getting better, too).
I had to work on a C++ compatibility project and I tried to adapt some of the technologies I was used to working with from Java e.g. the versatile Logging Frameworks or Test Driven development to C++ but it turned out to be way more complex and time consuming than I expected it to be. My personal conclusion was, that some Technologies are not adaptable to C++ (or just with disproportional effort) the way they fit in the languages mentioned above.