I have read some related questions on this site, including:

What language should I seek to learn if I would like to develop for Windows
and How to start programming in Windows

but feel that my situation is slightly different and I have a few other questions that I would like some opinions on.

I'm a mature student doing an undergraduate degree in Computer Science. I have to choose an idea for my final year project pretty soon. I have my mind set on producing a specific Windows software product (desktop application - web enabled) when I leave uni, and see my final year project as an opportunity to get a head start on this. In particular I want to tackle all the hard parts such as networking and security.

I'm not really concerned at the moment with cross-platform compatability, because the market for this product all use Windows, but I need to choose the language and framework that I should use pretty soon.

I'm certified in Java (OCPJP (used to be SCJP)) and at uni we've been using Java, C and Occam (uurrghh). However, I was thinking of learning C++ so that I could use the Qt framework which looks pretty good.

I do have some concerns though. Would it be quicker to use C#, rather than C++ and Qt? What would the advantages be of using Qt? I'm hoping it will make development quick and will make my software secure and difficult to crack. I am aware that I have to pay for the privilege (I do not want to use the option which is free, as I would have to make my source code available).

If I use C#, then I will learn the .NET framework which is basically a lot of helper classes to speed Windows development, is that correct? I understand that I can use quite a few different languages with .NET and they'll all get compiled into the same intermediate language.

What's the difference between the Microsoft Foundation Class Library and the Windows Presentation Foundation? Does anyone know the advantages of using either one?

I don't think the software will be uber complex. I have professionally used 4 different products of the type that I want to make (I'm a mature student) and the actual processing part does not have to be cutting edge because the demand is never that great for even pretty low powered modern computers (obviously I will still try to be efficient), but the overall design and usability was suprising lacking in most of them and I'm hoping to do better. I just want to make sure that it looks good and that I can develop it quickly.

Should I continue reading Ivor Horton's Visual C++ which covers C++, basics of Windows programming, Windows Forms and the Microsoft Foundation Classes? Or does someone have a better suggestion. Limited time available so I need to decide on the tools I'm going to use for the finished product now.

I'm very sorry that this post is so long, but it's very important to me to get some good advice on this.

Many thanks :)


Good article on StackOverflow

Another Edit:

Is memory management something which is automatic when developing with C++/Qt? I understand that if you're using .NET with C++, then it's all garbage collected.

  • "Best" questions are normally considered unsuitable here, since we get into unsupported personal preferences, as opposed to subjective opinions with reasons. You could ask for good environments, or you could ask for opinions on some environments (MFC is usually considered outdated now, for example, although it's still usable). Commented Apr 29, 2011 at 16:53
  • Thanks David. I've changed the title. I'm definitely just interested in finding out peoples experiences with different environments (especially if they've used a few).
    – Joe
    Commented Apr 29, 2011 at 16:57
  • What's the difference between the Microsoft Foundation Class Library and the Windows Presentation Foundation? About fourteen years. Commented Apr 29, 2011 at 22:25

2 Answers 2


As a .NET developer, and primarily a WPF developer, I would say that WPF is a drastic change to the way desktop applications are written these days. I came from WinForms using C# and was skeptical but it was definitely worth the transition. You can create amazing UI's that totally separate the display side of the application from the "logic" side of the application. It's actually a lot more like web development than Desktop programnming and you can use cool things like the Model-View-View-Model design pattern which can really help to keep your project from turning into a mess. I've never done any QT programming with C++ before, or with any language for that matter. I've spent the last 5 years of my life doing .NET and I have to say it has been great.

Once you learn the .NET framework you can really branch out into any of the various realms of the environment (ASP.NET, WCF, WPF, etc.) It truly offers a full stack. I don't see why you don't at least give it a shot. I am pretty sure you can get Visual Studio Express and work through a few tutorials to get a feel for it. As for C#, it's a great language and is getting better all the time, and it couldn't hurt to get some experience in it at least for the resume. And learning XAML is pretty easy if you have any XML experience whatsoever and the bonus is you can leverage that knowledge later if you want to do anything with Silverlight.


Best, Steve


Depends on what you're trying to get out of writing the project:

If you want to be productive, use Java as it sounds like you're most familiar with it. As you must know, learning the nuances of a new language takes time and you may find yourself in a whack of "oh sh*$" scenarios that require you to re-think and re-write things based on your new found knowledge.

If you want to learn a new language and still be productive, use C#. I honestly can't think of a reasonable business reason why you'd want to write a Windows-specific application in C++, other than for purely academic reasons (i.e. you want to brush up on memory usage, pointers, references, etc - having said that, you can always use unsafe in C# applications). From what I've read (and have been told), C# is somewhat close to Java, so it would most likely be quite a bit easier to catch onto than C++.

Qt's a good package and nice that it's cross platform (I know that's not one of your concerns here), but in itself won't make your software more secure. The only thing that will help your software be more secure is your own implementation. There are quite a few good books out there on writing secure code, but as your time is limited, you most likely won't be able to learn everything that is required.

TL;DR: As you have time constraints, write your application in the language that you're most comfortable with. If you have a little bit of buffer time, then you might consider C#. Developing in C++ however, is a fair jump from either language and I'd only suggest it purely as an academic excercise and only if you didn't have time constraints.


MFC is definitely considered outdated :)

  • A well-written C++ application is still (at the time I write this) likely to be faster than the corresponding C# application. This has, I believe, been getting less true over time, and very few applications need all the speed they can get. It can be a legitimate business reason, though. Commented Apr 29, 2011 at 20:17
  • @David: It can be true if you're dealing with performance-driven applications, such as games. Having said that, my post is directed at the requirements specified in the OP. Given that it's a small(ish) Windows-specific GUI app, I can't see him being concerned with saving a couple milliseconds (if that) here and there, especially when you factor in the amount of extra time that would have to be spent writing a C++ application compared to one in C#. Commented Apr 29, 2011 at 20:24
  • Thanks for your post Demian. You mention that I should use Java as that's what I'm most familiar with. How do I use Java for Windows programming? Would I have to use Swing?
    – Joe
    Commented Apr 30, 2011 at 9:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.