Choosing a development ‘stack’ for Windows desktop applications

beauty_parade.jpgI have have heard plenty of people saying that desktop software is dead and that all future development will be done for the web. From my perspective, as both a buyer and seller of software, I think they are wrong. In fact, of the thousands of pounds I have spent on software in the last three years, I would guess that well over 90% of it was spent on software that runs outside the browser. The capabilities of web based applications have improved a lot in recent years, but they still have a long way to go to match a custom built native application once you move beyond CRUD applications. I don’t expect to be running Visual Studio, PhotoShop or VMWare (amongst others) inside the browser any time soon. The only way I see web apps approaching the flexibility and performance of desktop apps is for the browser to become as complicated as an OS, negating the key reason for having a browser in the first place. To me it seems more likely that desktop apps will embed a browser and use more and more web protocols, resulting in hybrid native+web apps that offer the best of both worlds.

So, if Windows desktop apps aren’t going away any time soon, what language/libraries/tools should we use to develop them? It is clear that Microsoft would like us to use a .Net development environment, such as C#. But I question the wisdom of anyone selling downloadable off-the-shelf software based on .Net [1]. The penetration of .Net is less than impressive, especially for the more recent versions. From stats published by SteG on a recent BOS post (only IE users counted):

No .Net: 28.12%
>= .Net 1.0: 71.88%
>= .Net 1.1: 69.29%
>= .Net 2.0: 46.07%
>= .Net 3.0: 18.66%
>= .Net 3.5: 0.99%

Consequently deploying your app may require a framework update. The new .Net 3.5 framework comes with a 2.7 MB installer, but this is only a stub that downloads the frameworks required. The full set of frameworks weighs in at eye watering 197 MB. To find out how much the stub really downloads Giorgio installed .Net 3.5 onto a Windows 2003 VM with only .Net 1.0 & 1.1. The result: 67 MB. That is still a large download for most people, especially if your .Net 3.5 software is only a small utility. It is out of the question if you don’t have broadband. Microsoft no doubt justify this by saying that the majority of PCs will have .Net 3.5 pre-installed by the year X. Unfortunately by the year X Microsoft will probably be pushing .Net 5.5 and I dread to think how big that will be.

I have heard a lot of people touting the productivity benefits of C# and .Net, but the huge framework downloads can only be a major hurdle for customers, especially for B2C apps. You also have issues protecting your byte code from prying eyes, and you can pretty much forget cross-platform development. So I think I will stick to writing native apps in C++ for Windows for the foreseeable future.

There is no clear leader amongst the development ‘stacks’ (languages+libraries+tools) for native Win32 development at present. Those that spring to mind include:

  • Delphi – Lots of devoted fans, but will CodeGear even be here tomorrow?
  • VB6 – Abandoned and unloved by Microsoft.
  • Java – You have to have a Java Run Time installed, and questions still remain about the native look and feel of Java GUIs.
  • C++/MFC – Ugly ugly ugly. There is also the worry that it will be ‘deprecated’ by Microsoft.
  • C++/Qt – My personal favourite, but expensive and C++ is hardly an easy-to-use language. The future of Qt is also less certain after the Nokia acquisition.

Plus some others I know even less about, including: RealBasic and C++/WxWidgets. They all have their down sides. It is a tough choice. Perhaps that is why some Windows developers are defecting to Mac, where there is really only one game in town (Objective-C/Cocoa).

I don’t even claim that the opinions I express here are accurate or up-to-date. How could they be? If I kept up-to-date on all the leading Win32 development stacks I wouldn’t have any time left to write software. Of the stacks listed I have only used C++/MFC and C++/Qt in anger and my MFC experience (shudder) was quite a few years ago.

Given that one person can’t realistically hope to evaluate all the alternatives in any depth, we have to rely on our particular requirements (do we need to support cross platform?), hearsay, prejudice and which language we are most familiar with to narrow it down to a realistic number to evaluate. Two perhaps. And once we have chosen a stack and become familiar with it we are going to be loathe to start anew with another stack. Certainly it would take a lot for me to move away from C++/Qt, in which I have a huge amount of time invested, to a completely new stack.

Which Windows development stack are you using? Why? Have I maligned it unfairly above?

[1] Bespoke software is a different story. If you have limited deployment of the software and can dictate the end-user environment then the big download is much less of an issue.

103 thoughts on “Choosing a development ‘stack’ for Windows desktop applications

  1. Noble D. Bell

    Thanks for the insight. I am looking into C++ and wxWidgets but right now I am using PowerBASIC for Win development. It is an SDK-style BASIC programming language. I have to use C# at work. It’s alright and I like the language, just don’t like the framework.

    I suppose Smalltalk might be an option for some???

  2. Philipp Schumann

    The irony is this: you very accurately highlight how every Desktop dev framework has major drawbacks. Yet, given that most people DON’T want to create the next Photoshop / Visual Studio / “VWWare” (VM?), those are the chief reasons for developers ending up evaluating whether an app could be made for the browser when embarking on a new development… :)

  3. Rik Hemsley

    I write B2B apps in .NET for a living. Unfortunately for me, they’re web-based (we install onto IIS on a server at the customer). Microsoft don’t seem to care about this sort of application, so the support for getting IIS up and running, your app installed onto it, the correct version of .NET under it, etc. is, well, almost entirely absent. InstallShield is horrifically expensive and doesn’t even help much.

    The situation with ‘smart client’ (Microsoft term for ‘desktop’) apps is much better, however. You can provide a bootstrapper with your app which will install the .NET framework either from a copy bundled with your release or directly from Microsoft over the intertubes.

    Obviously this isn’t ideal, but it’s actually not so bad – thanks to companies like Adobe and the fact so many people have ‘broadband’, downloading 80MB instead of 8MB isn’t seen as so painful except by those who remember how painful it used to be on dialup and moan anyway.

    The best case scenario, though, is that the user will already have the correct version of .NET installed. Yes, there are many, many people whose Windows isn’t up to date, but for a decent proportion (and depending on your target market, that might be higher) .NET might already be ready and waiting on their machine by the time your app’s installer runs.

    As an ex-C++/Qt developer myself, I would say I’m almost ecstatically happy about the .NET platform in general. Obviously it has its faults, like any other, but to me it combines the benefits of a decent framework (better than Qt’s in many areas, especially networking) with great languages (C# and VB.NET are almost identical apart from syntax and both are amazing compared to C++).

    Protecting byte code? Use an obfuscator. They’re Good Enough(tm) and there’s one ‘free’ with VS.NET. Cross platform? Well, Windows.Forms isn’t, and I’d rather not use Gtk#.

    If you really do want to write desktop apps that have one code base over Windows, X11 and OS X, though, I’d say C++/Qt is still the ideal.

  4. Tim

    I use C++ with boost for app logic. I try to keep the GUI layer as thin as possible, and use WTL or MFC based on the type of UI I need to provide.

  5. Rob Uttley

    I’m using Delphi, versions 7 and 2007, and for me it’s easily the best ‘all rounder’ development tool for Windows desktop. Previously I’ve worked in MSVC, VB, Visual FoxPro(!) and more recently I have dabbled in C# via Visual Studio.

    With Delphi, you get a stable tool, a good IDE, a huge library of well-respected components, a lot of code (and coders) still out there, and when it comes to writing easy-to-deploy native, self-contained apps that can run on anything from Win98 to Vista, it’s pretty-much untouchable.

    Sure, the management of Borland/Inprise/CodeGear (etc) as a company might be considered something of a liability, but even today I’m maintaining projects written in Delphi 5 (2000?) for some clients. If CodeGear went out of business tomorrow, sure I’d have to think about the /very/ long term, but in the next couple of years (at least) the tools will keep working.

    If my own experience is anything to go by, there’s a lot more Delphi code out there running businesses right now than the job websites might have you believe. :-)

    Just to add a twist to it though, I develop for it whilst on the Mac (I used Parallels and more recently VMWare Fusion to run Windows 2003 and XP machines).

    And if I could find the time, I’d be yet another Windows developer who spends his evenings finding his feet on the Mac, because as a piece of equipment, the Apple machine/os platform is a delight to use; also, as a small businessman I rather suspect that the Mac will start to wriggle into more homes/small-offices and it would be nice to develop apps for a growing/emerging market full of enthusiastic customers. :-)

  6. joske vermeulen

    I prefer c++/stl/boost with WTL for the GUI. MFC only if I have to. Biggest problem is the lack of controls for WTL but I’ve written a bunch of them myself, now I get by (although my GUIs are not as flashy as most .Net apps. Then again, most of those are not great to use.)

    I really like C++ with boost. There is a lot to learn but once you do, the power of C++ is great.

  7. Andy Brice Post author

    Philipp,

    No doubt all the web development frameworks have downsides as well, whether it is lack of expressive power in the language, poor performance, lack of tool support, lack of documentation or something else.

  8. Phil

    I use C#… I’m surprised to see a .NET trolling article here Andy! My Chimney Sweep software customers are perhaps the least computer literate software buyers in the country, half are on dial-up, they need phone conversations, want to mail physical checks, etc… and pretty much the only thing I’ve never heard a complaint about is the size of the download or installing the .NET framework.

    Part of the reason for this is you have to be smart… don’t use .NET 3.5 for your app. Use 1.1 or 2.0 which most people have. Because so many developers use .NET, if a customer is the type to download software, a customer has probably already bitten this bullet at one time or another. Now-a-days even QuickBooks and TurboTax require .NET to be installed.

    I challenge you to write a small app in C# and not tell me the productivity gains are well worth the potential hassle for a customer :). I got a Java man to use C# once and he couldn’t believe how great it was.

  9. Andy Brice Post author

    >I’m surprised to see a .NET trolling article here

    I have tried to stick to the facts as I understand them. I will leave the deliberately controversial articles to Paul Graham.

    >Use 1.1 or 2.0 which most people have

    Less than 50% according to the stats above.

    >I challenge you to write a small app in C# and not tell me the productivity gains are well worth the potential hassle for a customer

    I am quite prepared to put up with some hassle so that my customer doesn’t have to. Anyway I think I am pretty productive with C++/Qt and I like being able to work cross-platform.

  10. ken

    The last app I wrote for win32 was in Python, using PyQt. It’s not *quite* “native”, but then, neither is Java — and both do a passable imitation, these days.

    If I had to do it again, I might not pick PyQt, but I’d certainly pick a high-level language with an open-source implementation (like Python or Ruby) and an open-source toolkit (like wx, GTK+, or Qt). If you find you need more speed than they can provide, it’s not hard to write a function or two in C, though I’ve never actually needed to.

    I’m not sure what you mean by “issues protecting your byte code from prying eyes”. As a developer, do I care if people can read my bytecode, any more than if they read my machine code? If the program is good, they’ll be putting unlicensed copies on BT next week anyway — look at how many unlicensed copies of Photoshop and Office and Windows there are floating around.

  11. Andy Brice Post author

    >I’m not sure what you mean by “issues protecting your byte code from prying eyes”.

    I understand that .Net byte code is much easier to crack than machine code, hence the need for obfuscation. I haven’t tried it myself though.

  12. Patrick

    I really like Java, for many reasons, although I am starting to like the web development more just for simple questions of business models. (It is much easier to get away with charging $9 a month rather than $25~50 once, it immediately poofs your biggest customer support hurdles — registration keys and interference from other software, yadda yadda.)

    Anyhow:

    1) Java can look native with effort applied to it. Pick the right LookAndFeel and/or don’t use Swing.

    2) Reports of customers caring that their apps look non-native as opposed to looking pretty are greatly exaggerated. Take a look at iTunes on Windows, for example. It doesn’t look like a Windows app, it just looks *good*, and it is mega-popular. (For that matter, most extraordinarily popular B2C apps not published by Microsoft don’t look like native windows applications!)

    3) Your customer already has Java installed. (I’d target 1.3 or 1.4 for maximum compatibility.)

  13. gooli

    I completely agree that desktop applications aren’t going anywhere and if you do the installation and automatic updates painless enough, and the experience good enough, people will be willing to give you the benefit of the doubt. Some hope might come from the direction of Apollo and Silverlight, but I think those things still have quite a while to go.

    As for my stack of choice, I’ve been working with Python and wxPython almost exclusively for two years now and I can’t work with anything else anymore. I’ve done quite a bit of C++/MFC and a lot of .NET 1.1 back in the day and it wasn’t pretty. Maybe things have improved in .NET, but they keep changing so rapidly I don’t think a real business can really keep up.

    As opposed to other frameworks mentioned in the comments, wxPython has absolutely native look on all supported platforms (Windows, Linux and OS/X) although I personally like to stretch the boundaries of what the standard controls for a platform provide with some ideas from the web and some animation.

    Best of all, wxPython applications can usually be packed into a 4-5Mb install file and have absolutely no external dependencies. No frameworks, no libraries, nothing.

    We’ve built Testuff with wxPython. It’s a 6Mb download and should give you a pretty good idea of what can be done with it.

  14. Richard

    I’m using .Net 2.0 and began questioning my own wisdom pretty soon after that decision! It doesn’t get many complaints (1 in the last few months) that I’m aware of but I’m sure it’s has an effect.

    I write so many custom controls that using the framework hasn’t really helped and I need to dive into the Win32 API to do the most arb stuff. The “not running directly on iron” mirrors that of Java somewhat and I keep finding gotchas in new Vista protection “features”.

    Still, the result I’m happy with and I’ll find a way to manage the 3.5 etc never-ending hassle. I’ll likely release a “Vista” version with 3.5 requirement. I feel a bit more secure knowing that memory management is easier (still there, but you have some help).

  15. Gautam Jain

    >> C++/MFC – Ugly ugly ugly.
    >> There is also the worry that
    >> it will be ‘deprecated’ by Microsoft.

    I don’t agree that it is an ugly combination. I have been developing C++/MFC programs for more than 8 years. It really helps in speeding up your development.

    Microsoft recently added new classes to MFC. I think that it will remain for at least a decade.

  16. Nancy

    Hi,

    Excellent article – I really appreciate your knowledge about C++ from where i have able to solve my lots problems of C++, I have bookmarked it for later viewing and forwarded it on.

    Cheers.

  17. Andy Brice Post author

    >I don’t agree that it (C++/MFC) is an ugly combination.

    Obviously some of this comes down to personal taste.

    MFC apps look fine (especially with some third party controls and skins). But I found the implementation of MFC totally lacking in elegance, especially the way events are connected to methods. The Qt signals and slots mechanism is much cleaner and more elegant IMHO.

    I like C++. But I have had about 12 years to get used to its many foibles. I think it is quite telling that Scott Meyers has made a living selling books that help you work around it’s many failings. It is just too easy to make nasty mistakes. Also C++ has no support in the language for concurrency. This is going to become more and more of an issue as the number of processor cores increases.

  18. Gunter

    As a developer and end-user too, I can tell you that I’m not very pleased with .Net as a user. The other day I wanted to try a software on a clean Windows XP without .Net 2.0. I downloaded the software (a freeware) and it never mentioned it needed to download .Net 2.0. When it was such a pain to download .Net 2.0 (machine getting very slow during the install-it was a Core Duo PC, so no reason to be so slow), I decided to stop the install and didn’t event try the software.

  19. NirD

    I sell a program based on .net 3.0, the last time I checked the number of first time visitors to my web site with .net 3.0 installed was somewhere around 0.

    But I spent about two days integrating the .net installer into my setup program and that’s it – I only had two complaints about it since I started selling this software (about a year ago), one from someone who eventually bought a copy and one from someone who was also very upset about the memory usage and disk usage of the program.

    .net 3 (specifically WPF) let’s me create programs with better user experience then what I could do without it (in reasonable time, obviously you can do anything you like with native code, it’s just a lot of work) also the productivity gains of using a modern stack like .net are huge, even for me with years of C++ experience.

    Almost everyone who visits my site had broadband, if I expected a significant part of my customers to use dialup I wouldn’t use a something that requires such a huge download – but in most cases today it’s just not an issue.

  20. Ian Chamberlain

    I must admit to be really surprised by this article and the responses.

    I think that you have to be very careful with the penetration stats. Quoting one arbitary comment in a discussion thread is not exactly authoritive. To put it in perspective at Tech-Ed in 2005 Ballmer was citing .Net framework penetration of over 90%. .Net is now included as standard in all new windows distros. You can’t buy a new Windows machine without it.

    I also think what constitutes a large download has changed significantly with the advent of ADSL. Two years ago 67Mb was big. Now its not. An awful lot of software is still distributed via CD and DVD. The size doesn’t matter there. I think a lot of developers worry about the size of downloads because they remember what it used to be like. I’m not sure that is still true today where people seem to be quite happy downloading movies and other large files.

    If you are developing primarily for the typical Microsoft Home Consumer type of user or for the Windows Desktop Corporate User then not using .Net just makes your job that much harder. A typical .Net app is at least 80% framework so you just have to produce the 20%. The IDE and associated productivity tools are immense.

    If you are developing cross platform then you need to decide whether you want one codebase or not. On the surface you might think the answer 1 is obvious and that would typically be C++. With the advent of Mono .Net again comes into play, and for me the benefits of .Net on Windows outweighs the cost of mutliple code bases. Harsh as it may seem that small percentage of non-windows users doesn’t justify the cost of my developing for them. They will cost me more to develop for than I will generate in revenue, and I’ll get enough revenue from the Windows users anyway. If I’m paid to develop for Windows and Non-Windows and Mono isn’t an option I’ll have 2 codebases and 2 development streams.

    The new features included in later versions of the .Net framework are very impressive. In my opinion if you are developing applications primarily for Windows and are not looking to migrate them to .Net you are running the risk of becoming obsolete. Microsoft is committed to .Net. They have a long term strategy that is delivering big time. Any Windows developer should try it for a least one decent-sized project.

    WPF, WCF, WWF, LINQ, Silverlight, Parallel Extensions, etc. This stuff is too powerful to ignore. If you want to stick to C++ try managed C++. I guarantee though, that if you spend any significant amount of time with C# you’ll wonder why you didn’t switch earlier.

  21. Andy Brice Post author

    >Quoting one arbitary comment in a discussion thread is not exactly authoritive.

    Here are some more stats, this time from Nov-2007:

    no .net 66%
    .net 1.0 5%
    .net 1.1 29%
    .net 2.0 16%
    .net 3.0 6%
    ( http://discuss.joelonsoftware.com/default.asp?biz.5.569923.18 ).

    There is a big disparity between the 2 sets of figures I have quoted, from ISVs, and the Microsoft figure you quote. You decide which ones you trust as most representative.

  22. Jivlain

    My in-progress application is in C++/MFC. A lot of third-party libraries out there definitely do seem very ugly (to me, anyway), as does the wizard-generated code. But I think you *can* write neat code with MFC, if you try hard enough anyway.

  23. Andy Brice Post author

    No matter how neat your MFC code is, you are still going to have blocks of macros like this:

    BEGIN_MESSAGE_MAP(CTextBox, CEdit)
    ON_WM_MOUSEMOVE()
    ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
    ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
    END_MESSAGE_MAP()

    It works fine. But I find its fugliness offensive. I guess it is in keeping with the rest of the Win32 API though ( “pass in a struct with 23 members, 12 or which are NULL..” ).

  24. Jivlain

    Oh, and I didn’t mention: I’m going for a thin GUI (and other platform-specific details) layer, so a Mac or Linux port shouldn’t be out of the question if I feel so inclined later on.

  25. Jivlain

    To be honest, I don’t have a problem with that. Of all the things wrong with the world’s GUI frameworks, those MFC macros are not one of my primary concerns. And I have such a fun time creating nicer wrappers around those annoying 23-parameter functions (I’m weird, I actually do enjoy that).

  26. Mark

    Its is so good to hear a voice of reason in the insanity! I’m old enough to remember why people wanted personal computers. Going to SaaS is a throwback to the good old days of mainframes and the priesthood where the information was controlled “for your own good”

    C# is a marketing invention designed to squash the perceived threat by Sun and Java. I know, I know, the same guy who developed Delphi developed C# and .Net, that is the only reason it is as good as it is. We have seen the zenith of Java, and I believe we are going to see the zenith of C# within the next couple of years. Neither is good for creating distributable desktop apps in the way traditional development tools are.

    If any of you disagree, then name me ONE major, commercial, off-the-shelf desktop application that is written MOSTLY in C# or Java. Just one, that is all I ask.

    You also have to ask yourself: If C# is the future of programming, then why hasn’t Microsoft re-written its flagship software product, Office, in C#? It has had two opportunities (Office 2003 and 2007) and neither has taken “advantage” of C#’s and .Net’s “superiority” over the traditional Win32 framework.

    I’ll stick with Delphi, thank you. I still use Delphi 7 (2002) and Delphi 2007 for most work. I know a software business which own’s its market with an application developed using Delphi 5. It’s some of the slickest gui programming I’ve ever seen and it works on Vista. Considering that Delphi 5 came out 2 years before XP, It shows that Delphi is a great tool with good longevity.

  27. joe

    There are third-party linkers available that will link in just the parts of the .net framework you’re using, compile all to native code, and eliminate the need for the big framework download.

    There’s mono for cross-platform development. It even implements WinForms.

    C# is ok but I think the smart money will be moving to F# in the near future…way more productive for a lot of tasks, just as fast. If you want an opensource language, Boo is making big inroads on the Linux side, should work just as well on Windows.

  28. Andy Brice Post author

    >There’s mono for cross-platform development. It even implements WinForms.

    Are there any successful shrinkwrap apps using mono on Mac? It sounds unlikely.

  29. Filip Borkowski

    I am using Delphi 7 and Delphi2007.
    I have used also C#. At start it was nice language and platform (many similiarity with Delphi).
    Now with mass of new functions and complicated libraries its start unreadable (and 90% time you read code, not write it). It looks more and more like c++ with win32 API or MFC.

    Language and libraries should be simple and powerful and this is where Delphi is champion.

    About future. History about Borland/CodeGear bancrut has about 12 years. In this time Borland/CodeGear produce: Delphi2 to 8,Delphi2005,Delphi2006 and Delphi2007.

  30. Justin

    The only people that care about what technology you are using are those who can not see beyond there own editors, users, do not care how an application was built only that it works.

    IF you like C++ then look at MFC / wxWidget / QT / U++, find something you like and use that.

    FWIW, I have use three of the four and its much of a muchness as to which I prefer. There is nothing inherently wrong with MFC, but if you prefer to avoid MACRO MAGIC, look at QT, wx always feels more like MFC than anything else, but is a worthy tool kit especially if you feel like branching into other languages, there seem to be bindings for wx from many of the languages du jour.

    Above all have fun.

  31. Vladimir Radmilovic

    IMHO, Delphi is currently best development solution for Win32 and currently I can’t see valid reason to abandon it. I certainly hope CodeGear will succeed to at least keep its share of the market in the future, but I’m afraid that MS will win again thanks to its powerful marketing capacity.

    In the future, if I’m forced to choose another environment, it would probably be something cross-platform, such is Java or Python.

  32. Sean

    “If any of you disagree, then name me ONE major, commercial, off-the-shelf desktop application that is written MOSTLY in C# or Java. Just one, that is all I ask.”

    The horror that is Lotus notes is Java through-and-through. Trust me, it sucks. 250megs of RAM just to launch, but it IS Java. :)

    And I don’t ‘really’ disagree with you, just wanted play devil’s advocate for a second.

  33. Wouter Dhondt

    “The Qt signals and slots mechanism is much cleaner and more elegant IMHO.”

    It looks cleaner, but it’s basically the same thing. And I hate the fact that each Qt function doesn’t start with a capital. Each time I ask the size of a QByteArray, I wonder why on earth they return an int instead of an unsigned int. Will I ever get a negative size? Little things like this really bother me. I’m also in love with STL so I’m reluctant to use QList and stuff like that. But yes, the signal-slot mechanism is great, no argument there.

    Also, Qt is quite expensive. I’ll stick with MFC/C++ for now. The code is ugly and some of the classes (CListCtrl anyone?) are not the most elegant. But I don’t have a better solution at the moment.

  34. Joshua Volz

    My program is in .NET 2.0. I was concerned about the installation of the framework bothering my customers, so I acquired the RemoteSoft linker, which I have found to be an excellent tool, albeit more expensive than a normal microISV could afford in the beginning. I’ve never had a complaint about the program not working.

    I offer a download which does not include the .NET framework rolled in so that people who have the .NET Framework can just download that. The non-.NET download represents ~30% of my total downloads.

    The download for a medium sized C# program as translated through the linker and including all the stuff from the framework is 13.4 megabytes (yes, less than the v2.0 install). That’s the size for a program with ~25,000 lines of code (admittedly a poor measure, but it gives a general size estimate).

    It works on XP and Vista. I do have some trouble with Vista getting in the way sometimes with its security measures even though I have followed the iron clad Vista program installation instructions. Mostly these things are taken care of with the install (Inno Setup).

    I chose C# because it is what I have the most experience in, and with some $$ I can mostly overcome the “install the framework” and “.NET is easy to reverse engineer” problems.

    I am planning several new products (not backup software!!!) and I am in the process of evaluating my options. One of the projects has to be cross platform compatible so I am investigating things like Python/Ruby + GTK/QT/Shoes. I like Ruby and Python more than I like C#, even if I have to hand code the user interface (instead of WYSIWYG Visual Studio).

    _why’s Shoes has caught my attention for writing UIs for all platforms (I believe I read it was built on top of QT? – don’t quote me) in Ruby. Since _why is awesome, I am giving him the benefit of the doubt that his framework, while young, is going to be worthwhile. _why’s blog (http://whytheluckystiff.net/) and Shoes (http://code.whytheluckystiff.net/shoes/).

    I am also looking into Boo, which is a language that has great potential and I believe runs well on Mono (giving us a chance at cross platform). Boo, to me, is the fixed version of Python. It has a lot of things I care about that Python hasn’t implemented (for example: macros and multi-line anonymous functions).

    I’m likely to write up what I find in the various platforms I am investigating, stay tuned.

    In short, yes, every stack you could choose has issues. Your job as the programmer is to make those things invisible to your customer. That’s why they call it work.

  35. Anthony Williams

    I prefer C++/WTL for Windows stuff, but I’d probably go for Qt if I had to be cross platform. I happen to like C++, and all its foibles: I believe it’s the language I’m most productive in, as well as avoiding the hassle of installing a rather large runtime.

    I like Delphi, and use it on occasion, but it doesn’t quite have the expressive power of C++ in my opinion. Templates are a big win.

    @Andy: Concurrency support isn’t the only improvement coming in C++0x. See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2565.html for a full list of papers. From my point of view, big things are: concurrency support, lambda functions, type deduction with auto, move semantics, variadic templates, template aliases, and concepts. There’s plenty more than that, though.

  36. Vasudev Ram

    Interesting post.

    I’m currently checking out Delphi – specifically, Turbo Delphi Explorer for .NET. (Had used some older Delphi versions earlier but not for a lot of work.) It looks good so far. The Object Pascal language on which Delphi is based, is very readable and hence results in maintainable code, though fans of brevity (alone) might not like having to type “begin” and “end” for each code block instead of the C- or C++-style braces.

    – Vasudev

  37. Scott

    “If any of you disagree, then name me ONE major, commercial, off-the-shelf desktop application that is written MOSTLY in C# or Java. Just one, that is all I ask.”

    While I’ve coded in Delphi since Ver 1 (and Turbo Pascal and Turbo C++ before that) I’ll play devils advocate here. Sony Acid Pro and similar Sony media products require the .Net 2 runtime to operate. I’ve not checked which part of these tools are using it (they do incorporate MS SQL Server Lite) they are two major applications used in what is termed “pro-sumer” environments and “pro”.

  38. Pavol Stugel

    I’m using Delphi 6 for years. I have no problem run my applications from Windows 98 to native Vista look and functions. So this is software from 2001 and still works perfectly with modern technologies.

    Next upgrade will be only for Delphi with 64bits support, or if CodeGears fall, then there is Free Pascal with Lazarus with great muliplatform support.

    In our company we are creating both Windows applications and web based. But web applications can’t be used for fast objects manipulation with huge data (for ex. we have web based e-shop system, but if you have more than 100 products, it’s very hard to manage it without using drag&drop, multiply windows open or tree views). We can spend lot of time for simple implementation drag&drop with Ajax, but why? We can do this in Win32 for seconds.

    I think, that best combination is local applications with “web” data storage.

  39. Scott Gerold

    I have to say that I struggled with this decision for prior to starting development on ELMS. I was able to determine that .Net 2.0 and C# was the answer for me because my product is not exactly off the shelf and is targeted at a specific user base. I bit the bullet and used SQL Express as the backend. My software is currently a single user desktop and soon to expand to multi-user with central database.

    I continue to struggle with this decision after putting together the installation package and working with customers to make sure they have the framework and SQL installed.

    I did not consider the thought of eventually having a MAC version of ELMS and if this would make a difference in my initial decision to use .Net. I have not explored this yet and am wondering if anyone has any thoughts?

  40. Mike Petry

    An unbelievable coincidence! I also need to choose a C++ development stack for Windows desktop applications.

    I like some of the suggestions I have read.

    1. MFC – Its not dead yet – just ugly.
    2. WTL – Not as full-featured as we might hope – but then again its not MFC.
    3. Qt – Expensive but a better MFC? How is Qt’s look and feel on Windows?

    It is true that C# is pretty sweet. But I need to be able to provide solutions on multiple platforms.

    What about the Adaptive Communications Environment (ACE) for concurrency and networking? ACE also has an alternative event processor that would increase portability by getting Win32 people out of using Windows messages for application-specific messages (WM_USER + ).

    I wonder if ACE plays well with MFC with MFC being as strange as it is (heck MFC doesn’t even play well with ATL).

  41. Nick Hodges

    CodeGear is going strong — we’ve been profitable for four straight quarters since our creationg — we’ve never lost money.

    We aren’t going anywhere.

    Delphi is the tool for native desktop development.

    But I’m biased. ;-)

    Nick Hodges
    Delphi Product Manager
    CodeGear

  42. Pete Goodwin

    I’ve used Delphi for a long time but they’re latest releases have been plagued by buginess and broken help. Also, the language is stagnant – there’s no solution to the circular uses issue (you cannot put class A in one module that refers to class B and vice versa, they have to be in the same module, forcing you to write large modules to cope with this language restriction).

    C# has a lot of nice features that make it so much nicer than C++ – not having to use #include’s, only defining things once. Until you come to read binary files, where you cannot read a struct from a file, but have to read it byte by byte. Eveb Delphi can do this one!

    wxWidgets is a nice cross platform system for Windows, Mac and Linux I’ve been using for a while. It is a little ugly like MFC (same style of macros for message passing).

    MFC isn’t available with the Express versions of Visual C++, and isn’t cross platform. Earlier versions forces you into the Document/View model that was fundamentally broken – they did fix this with later versions.

    Qt signal/slot mechanism is interesting but string based – I descovered a small but noticeable amount of latency introduced by using it (the time taken to parse the strings). Also very expensive.

  43. DelphiFreak

    I belive that the operating system does not play that big role anymore within the next 5 years.

    The virtualization is rapid evolving.
    The concept of VM’s e.g. JAVA/.NET has already been surpassed by
    complete operating system virtualization.
    And to have a VM inside a VM does not make much sense.

    I have switched to PCLinuxOS and running xp in a virtualbox to have my favorite Development Environment (Delphi) available.

    I also noticed that a lot of people are changing now to Mac.

  44. smt

    for small, simple self containing tools with GUI, my choice was and still is delphi. for the long term i hope python or free pascal will be reliable.

  45. Andy Brice Post author

    >CodeGear is going strong

    I am glad to hear that. If you could convince everyone else about its long term viability I think you could really clean up amongst the people who aren’t interested in cross-platform solutions.

  46. Chris M

    Hi Andy,
    We did a big Delphi App in 1995 and have been constantly building on it ever since, with only minor changes (if any) required for newer versions of Delphi as they came along. 13+ years is pretty good long term viability in my book!

    Delphi 2007 is the best version for a few years. Try writing a small app on it and see for yourself! We could’ve used Qt but 99.9% of out customers want Windows because they are familiar with that, so cross-platform has never been an issue for us, so why compromise on OS UI features and look and feel?

    I am about to start a new smaller app and I’m going to evaluate VS2008 to see how its come on, wasn’t that impressed with VS2003 which I use occasionally. .Net seems a lot of extra bloat for not much extra benefit in our applications (instrumentation).

  47. Jim Cooper

    DelphiPhreak said:

    > The concept of VM’s e.g. JAVA/.NET has already been surpassed by
    > complete operating system virtualization.

    Well, IMO they are completely different sorts of things, and to call them both VMs is misleading. When I was taught about these things. .NET would not have been called a VM at all. Since a .NET app compiles to native code, it is a different beast from the JVM as well.

    Mark said:

    > You also have to ask yourself: If C# is the future of programming,
    > then why hasn’t Microsoft re-written its flagship software product,
    > Office, in C#?

    This is a tired old argument that never held water. The reason is that even MS are not that stupid. They have millions of lines of code that is, at least in part, cross-platform. Why would they rewrite it? They do use .NET for new code when it is appropriate.

  48. Andy Brice Post author

    >Since a .NET app compiles to native code

    .Net apps are not native Win32 apps. They compile to a byte code which runs in the MS CLR (Common Language Runtime). Similar to the way that Java apps run in the JVM.

  49. Chris Miller

    We have been using Delphi since 1.0 and we are now on Delphi 2007 and for RAD development on the desktop, we haven’t found anything better. Your mileage may vary, but it’s worked for us.

    The VCL (Delphi’s visual framework) is mature and not about to deprecated by CodeGear. We consider doing some of our desktop apps in .NET, using WinForms, but it was just God-awful to work with, compared to doing VCL in Delphi. MS has basically stopped development of WinForms in favor of WPF and Silverlight, so it was a smart move to ignore WinForms.

    The .NET runtime is very good and that’s what we use for web development, but for the desktop, I’ll stay with Delphi. I’ve been reading about the impending demise of CodeGear/Borland for at least 10 years. Frankly, I don’t see that happening. As Nick replied earlier, they are profitable and they have enough of an installed user base to keep them going.

  50. Kirby Turner

    I’m currently using Delphi 2007 for my Windows-based products. I find the VCL to be a very robust framework and when combined with 3rd party VCL components such as those from DevExpress and TMS Software, there’s not an application I can’t develop for the Windows platform. I also find I can develop applications faster using Delphi compared to other languages and environments that I have used in the past.

    Delphi has been around for 12+ years and I’m not worried about its future. I remember doing contract work with companies in the 90 who insisted on VB over Delphi, and look at what happen to many of them. They have been forced to move to .NET, stick with the abandoned VB6, or move to another language completely. Meanwhile I’m still using code I wrote over 10 years ago and plan to get at least another 10 years out of the code. That said, I would like to see CodeGear completely separate from Borland because I feel bad press about Borland is hurting CodeGear’s rep. But that’s a different story.

    Before starting my company I did corporate development using C#. I really like C# and the .NET Framework so I considered using .NET for my products. But I quickly decided native was the right way to go. I looked at other alternatives but decided on Delphi. The fact that I did Pascal development during the 80s and was a Delphi developer off and on during the 90s helped influence my decision to use Delphi today.

    I do have a complaint about Delphi, its lack of cross platform support. Like some other indie developers I’m considering targeting Mac OS X for my next product and or possibly porting my existing products to OS X. A Mac version of Delphi would be awesome, but it looks like I might be doing the Xcode/Objective-C approach. I’ve looked at Free Pascal but support for Cocoa Framework seems to be limited at best. Regardless of the direction I go on OS X, Delphi will remain my development stack of choice for Windows.

  51. Rob Uttley

    @Kirby Turner – totally agree with your last para – I would pay good money for Delphi on the Macintosh. Looking at XCode/Objective C myself.

    Nick Hodges, are you still reading? Any chance of a poll? :-)

    And yeah, I was told by several clients in the late 90s that Delphi was dead and I should switch to VB, and they went elsewhere. Some of those companies have come back since and asked for help moving ‘dead’ VB projects…

  52. filip

    I have to second Delphi. I still use version 6 (released just before the .NET era) and it’s very fast. Later versions tend to be very slow on limited hardware. Alternatives: Lazarus (a free alternative to Delphi, a bit rough but very usable) and Morfik (an IDE for AJAX-and desktop application, also “version 1”). The hint about third-part linkers for .NET-applications is very interesting too!

  53. John Cooper

    .NET compiles to Byte Code ., It used to be called p-code (precompiled code). Remember dBaseIII and FoxPro. They had their own Virtual Environment where you could test your code before writing your program. Yes, the memory was managed – many other software have adopted the .NET features much earlier – like the Borland memory manager which is replaceable by FastMM.

    When you look closely – your learning a new language like C# and getting very little new in return
    when compared to Delphi. However if you have been using something else… the jump is probably good for you.

    Delphi is already considering creating thread like structures to use Dual-Core etc., and Free Pascal is not far behind. Third parties have already developed more than one cross compiling option and for the record there is also Delphi for PHP., that is rapidly developing into a fine platform.

    Much of the development (free code) is coming form great individuals that do not work for Codegear or Borland., and there is a great repository of free components called JEDI.,

    What is there not to like ? So many options for every taste and every environment

  54. Steve Grundell

    I would like to develop my software using Delphi, but I’m reluctant to invest my time learning a language that is commercially worthless (few jobs). I’ve already wasted years of experience with VB. Twice shy.

    I think this is the case with a lot of Windows developers now. There is a lot of uncertainty about what dev environment to use, especially since .NET has emerged… and the advantages of it are out-weighed by the disadvantages.
    On top of that, there is constant claims that the desktop is dying (and just wait for HTML5 with the ‘canvas’ element, ending your PhotoShop argument!).

    While there is no clear leader, in terms of development stack… we all know what’s going to ‘win’ by default (.NET).

  55. Roddyp

    One choice you missed : Codegear C++Builder.

    You get the advantages of the Delphi VCL framework, the Delphi IDE, and a language that’s more powerful and better known, and that can more easily be used with third-party libraries.

    Re .NET “nativeness”: The .NET CLR does a just-in-time compile of the MSIL code into native code, so it’s not unreasonable to say it ‘compiles to native code’. The important aspect is that it’s not interpreted. Most JVMs do this as well, according to Wikipedia…

  56. Stephane Wierzbicki

    I’m usind Delphi 2007 (started with v5) and I’m really pleased with it for developping win32 database awre application !

  57. Oleg

    Andy,
    Congratulations,
    looks like your new topic brought a lot of new visitors and gives your blog a lot of attention.
    I was using C++(Visual C++ since version6), C# and Java (eclipse). I was using Delphi and C++ Builder in 90s (mainly Builder). At the time Delphi and C++ Builder were 5x productive at building of GUI based applications than Visual C++ and the same time and give you a flexibility almost like Visual C++.
    I believe that the reason why Delphi did not win the race is the language that was used there. Pascal is good language for learning IMHO but when you know C++ you never will use Pascal again. C++ Builder looks strange because they have VCL written in Delphi and compiler that had many problems.
    (the last version I was using Builder 5).
    I guess they would have chance to win if they rewrote VCL library in C++ for Builder.
    I have two applications written almost entirely in C++/MFC.
    MFC is not dead and last events show that it never will. Though it is not very productive and it is true.
    I start looking at QT about 1 year ago as potential replacement for MFC though the last Nokia purchase scares me.

  58. Jim Cooper

    > .Net apps are not native Win32 apps. They compile to a byte code
    > which runs in the MS CLR (Common Language Runtime). Similar to the
    > way that Java apps run in the JVM.

    Not so. The just-in-time compiler compiles IL to native machine code. IL is not interpreted in any fashion. You can use tools like NetGen to go straight to native if you want.

  59. Pedant

    Are there any really active delphi forums that are busy in the way that, for example, http://www.xtremevbtalk.com/ is for vb6?
    Partly what puts me off delphi is that loads of the web sites don’t seem to have been updated for years and loads of the links on them are dead. Lots of the forums are very quiet too.
    It was sites like the vb one above that helped me a lot learning vb6. I’d be worried that I’d be on my own a lot learning delphi.

  60. Andy Brice Post author

    I wasn’t aware that .Net byte code compiled to native code. Thanks for the correction. That still doesn’t mean that a .Net app is a native app in my book, but I may be splitting semantic hairs.

  61. Andy Brice Post author

    Are .Net apps converted to native using NetGen similar in size to apps created with Delphi/MFC/Qt? Or does do they have a lot of extra bloat?

  62. Rob Uttley

    @Pedant – to be fair, I don’t know of any particularly lively ones – although there’s always been a reasonable Delphi presence on Usenet :-)

    I’d be quite interested to hear from anyone else about Delphi communities.

    I learnt a lot from the Borland community on Cix, which did (and still does) have a reasonably active membership of professional Delphi developers. Cix is great for this kind of thing, because you have to pay to be part of it (it’s not much, but it’s not free) so the signal to noise ratio is just right. But it’s strength is also a key weakness in a way – because it’s walled-off, over time there are fewer and fewer new people joining and it slowly stagnates. It’s a system from a bygone age, really. :-)

    The guys who run CodeGear now are certainly making a fair effort at trying to get a community moving again – I’ve seen more activity from CodeGear in the last 2 years than I think I saw from Borland/Inprise in almost a decade – at least as far as Delphi is concerned.

  63. Roddyp

    @Pedant: Borland/Codegear have their own ‘peer-supported’ newsgroups via nntp, at news.borland.com

    “borland.public.delpih.non-technical” is as active as it gets, but you’ll get good answers on pretty much all of the tech forums.

    – Roddy

  64. Vasudev Ram

    Yes, Andy’s original post seems to have sparked off quite an interesting thread of comments … good stuff.

    @ Pedant and Robb Uttley: I just saw this site today – http://www.delphifeeds.com – its more of a collection of feeds of Delphi blogs than a forum itself – but interestingly, it seems to have web interfaces to some of those Borland/Codegear newsgroups that Roddyp mentions – including borland.public.delphi.non-technical – right on the main page.

    The site and blog of Marco Cantu – prominent Delphi author – at http://www.marcocantu.com and blog.marcocantu.com – seem to be useful resources too.

    About wxPython: its fairly easy to pick up at least for simple apps – I could write simple GUI wrappers for my xtopdf toolkit in a short time, just by looking at the docs and cut-pasting from a few examples that come with it.

    – Vasudev

  65. Rob Uttley

    Thanks Roddy, Vasudev – I have those already but I sincerely appreciate your suggestions, maybe Pedant will find them useful too.

    The borland usenet groups are good, and generally (if you follow the guidelines regarding what you post and where you post it) they present a friendly, helpful community.

  66. Cleveland Custom Programmer

    I have been using Borland (aka CodeGear) Delphi to develop all my custom applications except for web UI’s (where I use C# ASP DotNet 2.0). I have been a Delphi user since version 2 of the product, back in 1995 or 1996. And, I have yet to find ANYTHING that can rival the productivity and simplicity for building Win32 Executables.

    I have tried quite a few other solutions – C++ (Visual Studio as well as Linux/QT), Java, C#, Python, and a few others. In the end, I always come back to Delphi, since nothing else can give me the same RAD experience. The Borland VCL is phenomenal, and the widely available custom components just extend on that. Nearly all code I have used from the mid-1990s still works fine a dozen years later. That’s an amazing feat! The executables produced are quite fast and reasonably compact.

    Like some others here, I have encountered many a corporate development shop over the years that resisted Delphi and preached VB or whatever more “mainstream” development tool of the day… and, in the end, I just sit back and laugh as they waste countless hours upgrading and rewriting code to keep up-to-date when my software products take nearly zero maintenance. Ahhhh. But, perhaps this is Borland’s downfall – Delphi may just be TOO good of a product and not produce enough “work” for IT people?

  67. Richard

    What is netgen? Google produced nothing, but if you mean “ngen” then that’s not quite compiling a Win32 app for distribution. AFAIK it is something that runs on the client computer and still needs the framework to be present. “Is a tool that improves the performance of managed applications”:
    http://msdn2.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx

    I hope I’m wrong and someone has produced something that creates Win32 apps from C#.

  68. Vladimir Radmilovic

    Wow, I’m so pleasantly surprised to see that Delphi still has a strong (and well-earned) support among developers. Actually, I suppose that microISVs are just lucky to have a possibility to choose tool for themselves, as opposed to those who are searching for a job when someone else makes this decision. Now I’m even more firm in my belief that I’m not going anywhere.

    @Nick Hodges: Please continue with great work!

  69. Pedant

    The delphi feeds site is very useful and easy to use.

    The same can not be said for some of the other sites.

    RB has a better forum set up imo. Delphi seems not to cater too well for beginners.

    Contrast the following sites for ease of use and activity:

    1:

    http://dev.newswhat.com/gr/borland.delphi.html

    On each thread you have clink on a link to view each successive message and the threads are not in chronological order. It’s a pain to use.
    It seems like there are far too many categories, especially considering how quiet it is.
    It seems like the design conspires to make the place quiet.

    2:

    http://forums.realbasic.com/

    Maybe it’s just a reflection of my experience but RB’s forum is much more user friendly.
    It also gives the impression of being busier even though I’m sure RB’s user base is tiny compared to Delphi.

    I think Delphi desperately needs a lively easy to use forum.
    Surely if RB can do it Delphi can too.
    It or eg. http://www.xtremevbtalk.com/ should be the model.

  70. Pingback: warpedvisions.org » Blog Archive » The pain of Windows development

  71. Med

    delphi.about.com

    everything you want about Delphi is here, it RAD and RDL (rapid developpement learning) ;)

  72. Richard

    Andy: I’ve tried one of those (could have been Xenocode) but it just made Hello World into a 12MB file. Fine as a once-off but I do a lot of auto-updates so having a big file would really irritate some users. I’d much rather have them download the framework once-off and have my app effectively smaller for updates.

  73. Jim Cooper

    > That still doesn’t mean that a .Net app is a native app in my book,
    > but I may be splitting semantic hairs

    Well, I think saying it runs in a VM is also misleading (IMO the definition of virtual machines in places like Wikipedia is so broad as to make it useless).

    You do get a performance hit from the jitter, of course. But supposedly it will optimise the machine code for each machine (how well, I don’t know)

    And I did mean NGen, not netgen, sorry :(

    NGen is not normally run on a user’s machine, IME, but I don’t think it is all that useful a tool, myself, as it compiles in loads of framework code too.

    I just mentioned it to reinforce the point that .NET apps are not interpreted, and the IL never runs anywhere.

  74. Jim Cooper

    > Contrast the following sites for ease of use and activity:

    That’s not an entirely fair comparison :-) If you’re going to use the RB website you should perhaps compare with the official Borland/Codesite fora.

  75. Pedant

    >That’s not an entirely fair comparison If you’re going to use the RB website you should perhaps compare with the official Borland/Codesite fora.
    <

    I think that those are the official Borland/Codegear fora via someone else. I could be wrong though.

  76. NativeCoder

    I have used Java in the past and developed several years in C++ using MFC…. And then I was introduced with Delphi. Since then I never looked back. It is simply the best choice when choosing your development stack for Windows applications.
    The VCL is probably the best component library currently available for the native platform today. Its compiler is several orders of magnitude faster than the best C++ compiler, and it produces native code that runs equally as fast.
    Kylix in the past and FreePascal/Lazarus and Delphi.NET today prove that the VCL is very cross-platform friendly. Applications written in older versions of Delphi seldom need any changes when a new version of Delphi is introduced.
    Before Java it had interfaces, and long before C# and the .NET hype it had components, properties, events, RTTI, packages. From day one all VCL sources were shipped with the enterprise version of the product, while Microsoft didn’t do this for the first versions of their .NET framework (maybe because it can be reverse engeneerded so easily :)).
    The only useful features that Delphi for Win32 misses today are full unicode support, generics and a 64bit compiler. Man I was happy to read that CodeGear is now focusing on implementing those features in stead of loosing time in a .NET version of Delphi. I still can’t believe why they invested so much time in the past in supporting the .NET framework. Maybe Codegear decided to make a .NET version to prove how elegant the VCL really is ;)
    I looked at .NET recently and I rejected it. I really do like the C# language, but I hate .NET. The main reasons are already noted in this article and in the comments of fellow Delphi developers.
    – Distribution of your applications is a real pain. With Delphi you can ship your application in one executable, that runs on all the windows versions made since Windows 95.
    – Though not as slow as Java applications, .NET applications are still slower than native ones (ok, after JIT only slightly) and they are very greedy with memory.
    – Your applications are very easy to reverse engeneer, even after using fancy obfuscation tools. Code that checks for a serial number for example, needs to be implemented in a seperate (yes native!) library.
    – The .NET framework is becoming very very complex and big.
    – Upgrading your applications to newer versions of .NET requires more work than doing the same with Delphi applications.
    – Winforms are a joke compared to VCL.
    – Delphi is made in Delphi :) (I just hate the requirement of .NET for the refactoring capabilities of the IDE). Is Visual Studio 2008 written in .NET? ;)

  77. Harald Scheirich

    About a year ago we migrated our apps from Managed C++/Forms to C++ with Qt. I have to say we have been very happy with Qt, the class libraries are quite complete. The GUI designer works well or better than most other tools I have seen in that area.

    We evaluated wx, gtk+ and a slew of other smaller libraries and we contemplated migrating to Java. Java was not really an option due to our use of a large C++ library.

    Yes QT is pricey, especially for an independent developer, but for us it was worth the price.

  78. Vasudev Ram

    Not really on the main topic of this post, but since many of the commenters said they use and like Delphi, here’s some news (they may have seen already) – CodeGear has been sold to Embarcadero Technologies. Google for “+CodeGear +Embarcadero” or other relevant keyword(s).

    Both David Intersimone (VP of Developer Relations at CodeGear) and the CEO of Embarcadero say that they will retain all the CodeGear products (for now, though there will be regular evaluations for business viability).

    – Vasudev

  79. Bob

    VB6 forever… which means until a real VB7 follow-on is released addressing a laundry list of improvement suggestions Microsoft has had on hand for years now.

  80. David Blake

    We use ATL & WTL.

    We haven’t had any issues with making our C/C++ code take advantage of multiple cores. I don’t see how there is lack of support for it in the language. Most of the concurrent code running on operating systems is probably written in C. C++ lends itself very well to writing a few simple classes to implement patterns for parallel computing.
    To get the most out of parallel processing, you have to know the nitty gritty details of the algorithm involved, and I don’t think a framework or language extension can come up with an abstraction that will generate ad-hoc novel parallel algorithms.
    If it’s just simply processing more than one task at a time, then there isn’t all that much code to write.

  81. El Torito

    For native win32, DELPHI definetely. Works OK in win98 and Vista. Lots of components and OOP since prehistory. Borland? Embarcadero? Don’t care. I am using Delphi2007 now and maintaining my old programs in Delphi6! (Year: 2001) which also run in Vista. Java, excellent for server applications. .Net? What is .NET? New Entertainment Tools?

  82. thomas

    u forgot to mention Action Script 3 using Adobe Air Run time since there is about 98% of desktop computer in the world with Flash Run time installed and a version of Quake can run using Flash Player Run time…

  83. Vlasta

    +1 vote for ATL+WTL and I am very happy I have chosen this combination over .net back in 2002.

    I’ll switch to .net after Microsoft switches Office and IE to .net (maybe never?).

  84. Toncic Linardic - Mestar

    Very good article. I’m still developing in Borland C++ 5.02, using pure C and Win32 API. Very gooed IDE and nice fast compiler. Now I decieded to go further. MS is pushing NET, and I must say that C# is pretty nice, but I really hate NET concept, hate pushing of web policy to everywhere.

    My applications are small, I don’t want any installation, I want to have all my files in one folder without registry etc. That is not possible with MS policy.

    So I think that I’ll try with new Builder C++ 2009 from CodeGear/Embarcadero. I already know that VCL is excellent framework, Delphi is very strong, now it is possible to use Delphi components and even sources in Builder projects… So I’ll get my C++ coding, and Delphi if here if some problem arise. And, it seems to me that Delphi/Builder comunity is weaking up. That is very important.

  85. Pingback: Qt to be available for free under LGPL « Successful Software

  86. Gad D Lord

    I try to move from Delphi to anything else possible for the past…7 years.
    And believe it or not I am still trying Java Swing, C# WinForms, Silverlight, ASP.NET Web Forms, Flex…

    I have a project which is about 300’000 lines of pure source code and only one third party library DevExpress available for both Delphi and .NET.

    MY .NET FRAMEWORK attempt:

    I tried to move it to .NET 2.0 (I earn my living as .NET Developer). And managed to move over 170’000 to it when I got … bored. I am sure I can complete the transition but for what:
    – lose my very strong native protection. My program has been cracked only once 3 years ago (and not very well if I may say so).
    – move to a Framework does not everybody was
    – lose the ability to “inject” some ASM here and there either for performance or just for the fun of it.
    – end up with twice large distribution. Yes! After I ported 170’000 lines of code with the very same graphics used in Delphi I ended up with ~ 20 MB executable as opposed to the 14 MB Delphi one.
    – and my source code is freely available for anyone. I have tested those Spices.NET, XenoCode, Dotfuscator and I am not very satisfied with the final result.

    My JAVA attempt:

    I also tried migrating to Java. And I stumbled upon one HUGE problem
    – there are simple NO good quiality professional third party libraries. Please, if anyone has stubled upon somethinig like DevExpress WinForms suite for Java, let me know. I only found JIDE and it is not the best thing I have ever seen.
    – and again anyone can run a JAD over your source code
    – and not everyone has Java
    – and the Swing is a bit buggy. Yes, it is! (Have you tried wring your own XP Border column header)
    – multiplatform support is cool but not that cool to lose my great looking UI (99% of the great look in my app comes from their components)

    My Flex attempt:
    – I also tried Flex. Nice one BUT:
    – No good documentation if any at all. (Try comparing the number of google result for “C# + MD5” and “Flex + MD5”)
    – You HAVE to write the back-end in again .NET, Java or Code Fusion (for Christ sake). If they managed to make a ActionScript backend web service developement, I would have been pleased.
    – And again…how many really good professional components are out there for Flex

    My Silverlight attempt:
    – First of all. Am I a dummy or is Microsoft constantly lying. Everyone says “Silverlight runs on Linux” but when you try to understand how it ends up with “Moonlight is out”. I am not a fan ot Novell, at all.
    – Silverlight is better than Flex at least in being able to write both the front and beck end in the same language C#.
    – I think Silverlight has lots of potential but MS has to fix lots of stuff there.
    – And again installing some additional plugin is not the favouritte thing for an usual user to do

    So. I end up again with my Delphi again.
    I started the project with Delphi 5 and than upgraded through
    Delphi 6
    Delphi 7
    Delphi 2005
    Delphi 2006
    Delphi 2007
    Delphi 2009
    and all upgrades went smoothly like a breeze. I think I may end up using Delphi 2015 in the end.

    So lets say something negative for Delphi too, shall we:
    – Pascal is not a very “fancy” language to learn, though I fancy it a lot
    – We still miss some LINQ, Garbage Collection, Attributes stuff there. I can live without them very well but would like to try a GC at least for the try
    – DevExpress components (which I heavily use) are updated a bit after the .NET ones. I still miss the DX Reports library from the .NET Suite.
    – I know Borland/Inprise/Borland/CodeGear/Embarcadero had tough times but I am pretty sure they will survive this financial crisis too.
    – Pascal/Object Pascal/Delphi language became bloated with some contructs which give the language the C/C++ “scary look” for the beginners. For example how often you use the cdecl or variant records or reintroduce, seriously?
    – Chrome is a good think in general but I don’t think we will see many job offers “Searching for an experienced Chrome deveoper”

    And what about Mac someone can ask. I have an oppinion there too:
    – XCode sucks. It seems like a Notepad++ with some fancy icons. Maybe it is just me not being able to hug this great “simplicity is good” idea.
    – Objectice C is a language which I would like to learn after Perl. I wonder now someone in 21 century would invent a new language and write “Hello Word” like this

    #import “HelloWorld.h”
    @implementation HelloWorld
    – (void)sayHello
    {
    NSLog(@”Hello, world, at %@”, [NSCalendarDate calendarDate]);
    }
    @end

    Objective C is not my language for sure.
    – I haven’t found any disent UI library. I know I should stick with the plain and simple design but I really need this DbTreeGridListView.

    So what’s left:
    – VB6. No thanks.
    – C. Too complicated
    – C++. Good choice in general. GCC is real pain for multiplatform (all those coditional defines) but at the end works well. If anyone has good experince in writing nice GUI applications with C++ for different platforms please share with me gaddlord att mtgstudio dott com.
    – Python. No good GUI libraries. Not many sources to read from.

    So. Delphi is the answer for me.

  87. eyuzwa

    Hi Andy,
    Fantastic dissusions here, which I think are still relevant today. Not to “blog necro” but out of curiosity do you have any updated .NET install base stats?

  88. Gad D Lord

    A little update from my side. I looked into QT and it really hides the platform dependencies. If I have to write a multiplatform app I will pick QT.

    Unfortunately there are no good and extensive components for QT. No such thing as DevExpress or TMS. Yet its inbuild Table widgets can be extended quite a lot.

    If CodeGear fail to deliver a MacOSX building Delphi any time soon, I guess I will have to migrate my already 350’000 lines of code to C++ using QT.

Comments are closed.