tags:

views:

332

answers:

6

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:

  1. 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.
  2. All the libraries are there for me to use right away, without me having to download extras (Boost, Qt, etc)
  3. 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)
  4. 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++!

A: 

I'd say yes. C# is is used in many applications and can provide quite a powerful platform from everything to console applicaitons to game development (XNA). Java can be used on the web and is also fairly powerful.

RCIX
+1  A: 

Well I think you answered your own question. Given your background in C++/Windows, there's no question that exposure to two of the richest languages/toolsets/communities on the market - .NET and Java - will be a win. And the cleanliness of managed language tools vis a vis their native counterparts really allows those tools to focus on problem solving rather than the minutiae of dealing with DLL exports and 7 flavors of native string types.

James D
+4  A: 

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.

Daff
+1  A: 

I disagree. I had to develop desktop applications in Java, C++, and C#. And the best language depends on the software that you have to develop! If you need a fast software with real time and 3D problem to solve, the best choice is C++. If the application is more in Administration or Management field, you can choose between Java and C#. Moreover, you have already develop with C++/ Qt ?? this framework is now under LGPL license! KDE, TortoiseSVN, Skype, GoogleEarth.. some example of softs developed with Qt... With this framework you are as or more productive than with Java or C# AND your code is multi-platform, too!!!

Matthieu
Qt alone can't make up for everything offered by Java/C#.
Geo
Where did you get the info that TortoiseSVN is "developed with Qt"? I've checked the trunk and only one tiny secondary module libsvn_auth_kwallet #includes a QtCore/QString.h. The rest of application is built on standard Microsoft GUI libs.
Constantin
yes, i have been using many "cool" C++ libraries such as Intel TBB, Qt, Boost, Intel MKL, etc. Granted, my industry is in high-performance computing, but when I was exposed to the cool tools that C# and Java have, I can only wish I had the same in C++! Also, when I say tools, I really mean IDE, TestDriven.NET, code generator kind of tools...not software libraries like Qt--just wanted to clarify.
ShaChris23
+4  A: 

My dad has a garage filled with tools, and a lot of them I've never seen him use. But they're all there for a purpose. I believe it a worthy endeavor to make my programming repertoire as robust. There will be times when I need the big guns of C++, but for many things, I've been having a good time with C#, Java, and Ruby or Python if I can get away with it. The more we know, the less we're at the mercy of a language.

Casey K.
I like the way you put it. I agree.
Geo
+2  A: 

The tools reflect the programming language.

C++ is a mature programming language with excellent tool support, but due to the way that the language is designed, those tools might not be as fast or offer as many options as the equivalent Java/C# tools.

  • Unit testing: the C++ community is not as interested in automated unit testing as the Java/C# communities. Still, UnitTest++ is a good, lightweight testing library.
  • IDE: You are already using the best C++ IDE, but you might want to try out QtCreator too.
  • Libraries: you're probably only going to set these up once, so it is not such a big deal. I think that Qt is at least as good as the Java and .NET standard libraries.
  • Compile time: better physical design, precompiled headers and better hardware. Other that that, C++ compiles will probably never be as fast as Java/C#'s.
  • Simple deployment scheme: .NET and Java are not simple to deploy, even though it may appear so. See the paint.net blog for some .NET horror stories. I am deploying a Java project on Linux and I'm packing a JRE in the installer to avoid conflicts. Cross-platform development is hard and WORA is a myth. ;-)
rpg