views:

1029

answers:

16

Greetings,

With all the existing development towards web development and emerging technologies in that area, I'm left wondering; what is a state of the art way to implement desktop applications in this day and age? If you were to start a new application of considerable size from scratch what technology would you invest your efforts in (focusing on cross platform portability, decent performance and interoperability with existing standards)? I've looked into the Adobe Air platform which appears quite impressive but seems rather limited to support a large application. Would something like Java/SWT still be the sensible choice? Do things like GWT fit the bill?

Thanks

P.S. I'm leaving my question a bit open-ended in an effort to gather diverse answers. Surely this a subjective matter and there is no right and wrong answer.

+10  A: 

I like Qt. It has excellent GUI tools, and the framework abstracts OS operations such as threads and timers.

Fletcher Moore
+1 for Qt (nice cross-platform (the usual suspects), mature toolkit, LGPL, bindings for a lot of languages).
ChristopheD
+44  A: 

Apart for the Cross-platform part which is not yet fulfilled, I would seriously recommend looking at Delphi.

For Win32 native development, I don't think there is better than that, including latest trend in UI (touch support) and in generics, anonymous methods on the code side.

Mac OSX cross-compiler is due this fall, Linux a little bit later.

François
The rumors are that Delphi cross platform will use QT, but that isn't confirmed. However it is confirmed that the cross platform applications will look completely native on their target platforms, and not like some alien hybrid of platforms as is common with Java/SWT, GWT and other cross platform tool sets.
Jim McKeeth
The problem is Qt doesn't look *completely* native. It's a good approximation, but not the same as using native widgets directly. They could have subtle (and no so subtle) differences in behaviour.
ldsandon
@Jim: Where do you hear that rumors... QT is the choice with the Kilyx effort and I think now they're trying to do something different.
jachguate
@jachguate: Listen to the podcast around 30 minutes in http://www.delphi.org/2010/02/michael-rozlog/
Jim McKeeth
+3  A: 

I vote for Eclipse. Eclipse RCP is a very complete framework for desktop application, cross-platform, focusing on user interface, and full of resources.

kabado
Eclipse is a really nice IDE, but not really qualifies as the full language/technology stack the OP is looking for (you could use Eclipse to develop Java, C/C++, Python, PHP, ...)
ChristopheD
@ChristopheD Eclipse Platform: http://www.eclipse.org/platform/ Certainly capable as a framework for desktop applications, though not my first choice.
Pindatjuh
@Pindatjuh: isn't that just the API for developing Eclipse plugins? You theoretically could develop full-blown desktop applications in it (far stretch ;-)
ChristopheD
@ChristopheD: Not exclusively. "Eclipse RCP provides the same modular concept for stand-alone applications." from a nice tutorial: http://www.vogella.de/articles/RichClientPlatform/article.html
Pindatjuh
@Pindatjuh: I must stand corrected: good point! I've been using Eclipse regularly as an IDE for the last year yet I had no idea about this functionality ;-)
ChristopheD
+2  A: 

For desktop gui app development, I use java, namely Swing.

Ok you can stop laughing now. :-)

mdma
How do you find GUI performance? My impression is that it would be slow, but this might be based on old information.
Bruce McGee
I use a java IDE during my day job and performance is more than adequate. In raw performance figures, you might find java to be behind the curve, (e.g. I have an old delphi 2 app that is faster than anything I can code in java, but it looks atrocious) but generally in my experience the performance difference is not significant, and the strengths of java development make up for this. 2D and 3D in java uses the native platform API, so it is typically comparable to performance in any other language/VM.
mdma
I also use Swing for desktop and Delphi 2010 with Raize library. Mostly do database apps, and I find both technologies performing well.
Greener
+1  A: 

I'm going to throw this out there as an alternative to "Web development" as alot of people who are dis-satisfied with the Web as an application medium have conveyed hope in this arena. Silverlight allows you to distribute your applications over the Web without worrying about HTML, CSS, and JavaScript.

Don't get me wrong - I'm not a fan of Silverlight - but I will certainly acknowledge that it is a viable alternative to Web development.

Before someone downvotes because it isn't a desktop technology, consider that it does put much of the processing in the hands of the client AND the OP specifically requested diverse answers.

Mayo
+1, I agree that silverlight can well fit the need of the OP. With elevated privileges, it can access the local file system and also run out of the browser. However, besides Windows, only the Mac is fully supported. Linux is served by Moonlight, but this is not mature yet.
Marcel
+3  A: 

The Cappuccino project, which aims to let developers "build desktop-caliber applications that run in a web browser" recently announced NativeHost.

It's a desktop client for Cappuccino-based web applications that provides APIs (like filesystem access) that aren't usually available in the browser. It's a lot like Adobe Air, but open source and without the Flash.

Sidnicious
+1 since Cappucino (by word of mouth) recently also catched my interest (honestly don't know if it's ready for production use atm though). May be interesting to note that its desktop deployment is currently only OSX iirc.
ChristopheD
A: 

At the company I work for, we use C# with the Smart Client Software Factory, a module based application architecture for Desktop apps.. It is a bit restricted to windows, as .NET is not fully supported on Linux. Don't know about the Mac in this regard however.

Marcel
+4  A: 

I have seen this "cross platform compatibility for native apps" buzz going on for the last 2 decades.

Maybe I sound skeptic:
No solution actually really worked: giving the native user experience for each supported platform.

There have been similar buzzs going around for mobile; but you see the first cracks there too: the largest Dutch broadcaster is stopping to develop native mobile apps because supporting that many platforms and giving the user the real native experience on all platforms is too costly.

So: you have to cut corners, and divide your apps into two categories: - apps for occasional users that don't mind a full native user experience - apps for regular users that need the full native experience

The former can be built with anything (web tools come to mind);
the latter must be built by the best tools you can get for that particular platform.

--jeroen

Jeroen Pluimers
+1  A: 

For me Qt is the best cross platform framework, Qt applications run at native speed, provides safe pointers, and provides some of the most amazing approaches, which I haven't seen in other frameworks. It is primarily a C++ framework, with bindings available for Python, C# and Java. But there isn't any garbage collector available on most platforms, so in some cases you'll have to take care of memory management yourself, but this is a bit rare and can be learnt. If you are comfortable with C++, you'll love Qt, if not, you might find language bindings for your language.

Anjum Kaiser
+1  A: 

From my feeling QT has good ideas bulit in and a very interesting vision. Have a look at it. I personally go via XXScene on Freepascal or Delphi at the moment.

I want to have the same look and feel everywhere it runs. btw. Freepascal on Linux is really an alternative also the Lazarus IDE - the LCL is still little problem. But if the evolution moves on this way for tiny to average sized projects it can really turn out as an alternative also on the desktop. For Linux let me say - Lazarus FPC is currently my choice.

For me it is very unrealistic to have all in web apps, maybe a webfrontend or elements integrated into desktop apps.

There are so many good alternatives now also Java GUI ...

For a real end customer application for users used to a system it makes definitly sense to go what with comes on board. Then this step pays.

Michael Thuma
+2  A: 

If you are not keen on C/C++, do not want the speed penalty, complexity and bloat of a Java/DotNet/Mono platform and cannot wait for Delphi to be released with cross-platform compilers then "write once, compile anywhere" Lazarus is definitely worth a look. http://www.linuxjournal.com/article/10502 I would go straight for the development snapshots, but pick the one with the release version of the FP Compiler for commercial work.

Les Kaye
+1  A: 

I'd vote for Silverlight.

  1. It's lightweight and easy to distribute
  2. The tools are the best in the business (VS & Blend) ;)
  3. It's supported on PC, Mac, WP7 & Symbian
  4. It's currently available partially on Linux through Moonlight
  5. Full Linux support will supppossedly be delivered through Meego/Intel
  6. It supports multiple languages including C#, VB, IronRuby and IronPython

But to be upfront I'm an MS Dev so it's a natural fit. AIR I guess would be comparable, but (I've never worked in AIR) from what I've heard Silverlight is a lot easier to work with.

Doobi
I wonder what the wrath of Steve Jobs will do to AIR. Will it hurt Adobe enough to also hurt AIR? Or will Adobe focus more on AIR than flash now? Or will Google save flash and therefore Adobe and AIR?
Mike Two
I have a sneaky feeling Flash/AIR may be the undoing of Apple, their "Jump the shark" moment if you will. They're about to be blitzed by Android FroYo on the left and WP7 on the right, they've got a fight on their hands.
Doobi
+4  A: 

I would recommend using Delphi Datasnap. It will allow you to develop a N-Tier solution. You could then use the Datasnap data in thin clients Win32 or .NET clients or web clients via PHP , APS.NET.

AJ
+2  A: 

There is no one best tool, for everyone. I believe that the best way to quickly write very high quality Windows Win32 applications, if that is your number one goal, is Delphi. However, more users use Visual Studio (probably using C#, or VisualBasic.net) by a large margin.

If you care about 64 bit support, however, or cross-platform, you'll have to wait a little whie, because the team that builds Delphi is working on all those things, but they have not shipped yet.

If you choose C++ and QT, you will get a very powerful cross platform framework (QT), but it is rather expensive for single-developers. You will then be stuck with all the many problems of learning C++. C++ is a vast language specification, and each compiler implements a hopefully-mostly-compatible subset of those ANSI specification features, plus its own vendor-specific extensions. If you are looking to spend a thousand hours or more just learning the vagaries of the syntax, C++ is your language.

If you want a simpler orthogonal language, that has fewer ways to shoot yourself in the foot, you can choose Pascal/Delphi (native/Win32), Java (portable), Managed languages (like C#) available both on Microsoft.net and on the cross-platform open source Mono project, or you could choose a very high level language like Python, Ruby, Perl, etc. For most of these very high level languages, a variety of GUI toolkits make it possible to write desktop applications, and do it quickly, and make it portable, but you will pay a performance penalty.

Managed code, and Virtual Machine code (.Net and .Java) also come at a distinct performance penalty. Nothing can touch native compilation on pure speed. However, for most compiled environments, you should factor in compilation time.

Because of Delphi's rediculously fast compilation speeds, and powerful IDE RAD "form building" and component-based development features, I find am more productive in that environment than any other one. However, if you do not get to make this decision on your own, and you have to go to the Pointy Haired Boss on this one, he's going to tell you to pick the most commonly used technology out there. It's a "sheep effect" thing.

Java has a big corporate backing, and is heavily used in the financial sector. These days, it seems most "in house development" for Windows, of the usual kind of "CRUD-screen" apps (database-centric applications) are done in C#.

There is no free lunch.

Warren P
+2  A: 

It must be Delphi with its poweful VCL library, supporting all the latest technologies including multitouch, gesturing, ribbon, taskdialog and others. Delphi is great not only for UI, but also is strong in database access and multitier development with new DBX4 and DataSnap frameworks.

Just my 5 cents. GO DELPHI!!!

Paweł Głowacki
A: 

Delphi is the best tool.

Andrei K.