What a crazy day for technology. It all started with Paul Graham’s ridiculous link-bait article “Microsoft is Dead,” earlier today. Since then, the web has been in an uproar – just how do you define success, innovation, power, creativity, and can companies just “die” anyway? Never mind that conversation – Paul Graham surprised us there though. He’s normally a sane and very much down-to-earth person with a lot of insight on Web 2.0 and what it takes to be a startup. But that’s not what we’ve taken up a problem with – what’s really gotten to us is how some people are using his article as grounds for an argument that Desktop apps are old, dead, and a pain-in-the-ass to make.
The particular post being referred to is Ryan Stewart’s “Why Do People Hate to Build Desktop Apps?” It comes in response to the article by Don Dodge and a conversation with Simon Bateman. Now that the background’s succinctly (hopefully) out of the way: While Ryan’s article makes a valid a point about the ease-of-use of Microsoft’s .NET Framework and Adobe’s Apollo and just how powerful-yet-easy these two technologies make desktop software development – his entire article is based on an invalid premise! People don’t hate making desktop apps!
Sure, .NET and Apollo make building desktop apps easier, but no one was really complaining before. Before there was .NET there were millions of programmers out there “suffering” with Java and C++ but that didn’t stop companies from making Microsoft Office, Quake, Lotus, Windows, Linux, Solaris and just about every other commercial and freeware application out there. Apollo is still coming out, but no one ever complained about how they just hate to develop desktop applications. To the contrary, if you ask the average programmer, you’ll find out they enjoyed making desktop apps more than web-based ones.
Two reasons: First, people making desktop apps aren’t usually concerned with supporting different systems, and if they are, the toolkits needed are freely available. Programmers are given a specific (e.g. make me a blog reader that runs on Windows and can post comments back from the native interface) and they build it. Second, before PHP, building a web app was harder than a desktop one!
You can’t really consider HTML a programming language,1 so the next easiest thing would be PHP. Before there was PHP, there was CGI and Python. Oh, and C++ too. Yeah, that’s right, people used to make a desktop program then tie it in to a web interface – and they still do!2 So making a web program meant making a real program first, then putting more work into a web UI afterwards – talk about tiresome waste of time! CGI before Perl 4/5 was a pain-in-the-ass, and Python is just as complicated/hard-to-use as C++ (depending on how you look at it).
One other point that Ryan makes is that desktop applications “look uglier.” Sorry – but where’s the evidence? To make a .NET program look decent and have a great GUI before there was ever WPF and XAML (the two technologies that Ryan rightly states are redefining the concept of UI) it doesn’t take HTML, CSS, color theory, and psychology. You just have to drag controls onto a form in some sort of slightly-logical manner, and it’ll be far more usable than an entry-level PHP application with some half-baked CSS job (and tons of tables to boot) – with a hell of a lot less work.
All this just begs the question: whoever said people hate to make desktop applications? According to who!?
At NeoSmart Technologies we’ve done almost everything you see on the site and in the downloads (with the exception of this blog, of course). From the download scripts to the revamped forums to the WordPress plugins. And of course, our desktop products too. It’s infinitely more enjoyable to build a desktop product than it is to make its web equivalent. The reasons (besides what’s written above) are extremely simple.
You have more tools to work with, tons of space (relatively speaking…), more mature languages, more extensions and libraries available, virtually no lag time, no bandwidth worries, far fewer security vulnerabilities, faster code, better IDEs,3 and a hell of a lot more fun. With desktop apps, anything’s possible, and the only limit is your creativity.
It doesn’t take a datacenter to run a desktop app, and you don’t have to worry about mod_rewrite rules, network downtime, ISAPI extensions, and all that nonsense. You just code – and watch as the magic happens. What could be more enjoyable and satisfactory than that?
Good stuff. I think it’s mostly an ease of entry thing. You have to be pretty smart to put together desktop applications. With web applications, any Joe Schmo like myself can jump in and start building. You don’t really have to worry about memory management or DLLs. As you say, you have a lot more freedom with desktop applications, but that means a lot more you have to worry about and take into account. None of that is bad, it just makes the barrier to entry for desktop applications higher.
The other thing about desktop applications is that if you’re building something consumer facing, you’ll have to think long and hard about doing a Mac version as well. With the web, it just works (unless you’re using Ajax). Cross platform is more important than it used to be, and the web has set that standard because it’s so easy to do it there.
But you make a lot of good points. I just want to see desktop development be as easy and interesting as web development so that the two environments are on equal footing. That will mean more innovation/creativity and ultimately better applications. I think we’re starting down that road. What do you think?
I don’t think one type of development is better than the other. It depends on the developer. I used to do desktop development and then tried my hand at web development. Tools and UI aside, I found web development to be more satisfying because the end result was publicly available (as opposed to an in-house app) and had the potential to be seen by hundreds of thousands ans possibly millions of people.
Ryan, that’s exactly what I would like to see too.
I think .NET and now Apollo really are the beginning of the realization of that dream. Java was “technically” cross-platform, but it wasn’t on the same level of .NET as far as power and aesthetics go. With .NET and proprietary .NET equivalents for Mac/Linux, it’s actually becoming possible – but of course, the fact that Microsoft doesn’t release its own official 100% compatible framework for other Operating Systems doesn’t help. Hopefully that’s something that the Adobe crew can work out and that it may serve as a wakeup call to Microsoft.
I guess your point about entry levels is extremely valid. PHP takes care of everything, and the reason why “real” developers hate it is because it lets you get away with murder. It’s just like HTML – except it’s executable, so it’s easy yet powerful… I guess you could possible compare Visual Basic 2005 to PHP in a way – it has the same power of C#, but with much easier semantics. However, it won’t compile if you code it wrong, whereas things like PHP and JavaScript will – and that’s unfortunately the root of all the problems on the web today – and as you are pointing out, the reason why many prefer web development to traditional desktop apps.
Marios, while I agree that a good developer can make do with whatever resources he or she has – especially since resourcefulness and creativity are pre-requisites to being a good developer, I have to disagree with your reach premise.
What’s the difference between a free-but-registration-required web app or a free-but-you-need-to-download-it desktop app?
With today’s network speeds in Southeast Asia and North America, it’ll take the same amount of time to do either. If it’s free and it’s a good idea, the people will come – whether it’s a web app or a desktop app we’re talking about.
There is one real benefit to web apps however, and that’s portability. That’s the reason why some people will choose Gmail’s nifty-but-limited web interface over Office 2007’s incredibly feature-rich Outlook mail client – it’s because you can access it from anywhere. So I think in the end, the number of people won’t be affected by web vs. desktop, but web applications definitely have the edge when it comes to versatility (and with Web 2.0 comes one more yet-unmentioned thing: Mashups) – while desktop apps still hold the edge when you’re talking about raw power, speed, rich user interfaces, or sheer number of options/possibilities.
I don’t think its a matter of hating desktop apps as much as a lot of devs (and I have seen this consistently over the last 6-7 years) get comfortable with a single technology, draw a paycheck and play CS or WoW every night instead of keeping up with the learning curve. Unbelievably to me, I also see lots of developers who think of coding as a job and not something fun to do and enjoy learning. That said, they see something new (well not new to anyone who keeps up with these kinds of technologies) and then can think of every reason why it’s not a good idea, cause they realize that they will have to sink or swim. And sinking is a lot easier. π
Anyone else who thinks desktop RIAs is a bad idea should at least have educated reasons why they don’t like it but that just leaves more work for the early adopters.
I agree with you that Paul Graham’s argument is based on a very invalid premise. But then, I also disagree with you on how you conclude that building desktop apps is more enjoyable than building wep apps. Both are fun and painful and easy and complicated to build. Both have their own challenges and purposes. From your article, you can argue all day long how fun, enjoyable, rewarding, important for customers, etc to build desktop apps and just leave it as that.
But you made a mistake, I think, when you stated about datacenter, mod_rewrite rules, network downtime, ISAPI extensions as reasons for not to enjoy or to build web apps at all. As I said, each has its own challenges. But people have come up with solutions for both, in the past, now and the future.
“Second, before PHP, building a web app was harder than a desktop one! You can?t really consider HTML a programming language, so the next easiest thing would be PHP.”
Er, not quite. ColdFusion Markup Language (CFML) was around for several years before PHP arrived, and it’s still going strong.
ColdFusion got a bad reputation as a source/cause of bad web applications because of one of the traits you mentioned in your article: it was so easy to learn and use (easier than PHP in terms of readability, IMO) that it allowed a lot of beginners to make a lot of beginner mistakes. But, just like other web development languages, when used by an experienced programmer, it allows you to create sound, scalable applications very quickly.
There will always be room for both web apps and desktop apps, and the techniques used for creating them will always differ.
You are right if you talk in the developers perspective. But the thing that actually means when they talk about the death of desktop apps and rise of web desktop apps is all about the end users’ perspective. The web has evolved into a whole new enterprise which include blogs, podcasts, feeds, web desktops, online chat, social networks etc. All these inventions have made communication faster and more effective. Coming to the web and desktop war I may cite an example. A person would choose a Gmail Talk app built into the web page rather than downloading yahoo messenger, installing it and then using it. The web apps which are built nowadays and their success stories speak for themselves. Today people want everything to go faster and what could be more faster than opening up a web page and starting your application. People always wish to avoid the regular downloading, installing, using it routine and are wanting to make more work online since it is easy, fast and hardware independent and finally accessible even when away from home.
Stating a quote like “Web apps will fade away soon” would actually be 5 – 10 years from now where in the communication networks have to compete with the speed of our desktop system processor. But from the developer’s perspective everything is fun when the developed product meets the current user’s need. I would be happy to deliver a desktop app as well as a web app only if someone needs it. Developing for the sake of fun is altogether another story. Its just a matter of survival of the fittest!
Edit : The quote should have been “Desktop apps would fade away soon”. My apologies!
Yeah, I was wondering what you meant by that – now it makes sense π
I still disagree though, but maybe it’s just me: I don’t think the nature of web apps makes it possible to make applications as powerful and intuitive as Outlook 2007 for instance.
If you’re talking about using Flash or Flex or WPF online – that’s not really a web app, because you’re technically downloading an entire program that lasts throughout the session. But if you’re talking about a AJAX HTML web app (like current-gen Gmail, Yahoo, Live Mail, Netvibes, etc.) then that power just won’t be there.
The desktop is a more secure location for your data, a more comfortable and native work environment, and a more natural place to do your stuff.
I don’t think the desktop is the answer to everything, nor is that applicable for the web. The web is for communication and sharing, the desktop is for individual applications and projects.
Just like a wiki on your desktop doesn’t make any sense, an online Word Processor (ignoring collaborative projects) doesn’t either. Each has its own focus, and I hope they both continue to develop and evolve full-speed ahead.
I’m mostly a web developer and I like writing desktop apps more. It’s so much easier when you don’t have to worry about multiple programming languages (ASP.NET, C#, JavaScript, HTML/XHTML and CSS) and supporting many different “platforms” (Web Browsers: IE6, IE7, Firefox, Safari, etc.). All this along with the concern of both client-side and server-side code, and now more recently using AJAX to blur difference between the two.
Now don’t get me wrong, I still love doing web development. My point is just that it’s easier to develop an app when you only have one programming language and one platform to worry about.
The applet, WebStart or flash program that is executed in the browser window is not a true online application. It is backed by a plug-in that has to be installed in the browser, so basically it is some script code for a plain desktop application loaded and installed on the fly from some URL.
Moreover, we all know that it is possible to write a plug-in/some weird ActiveX component to run any application in the browser. And it has been done by numerous projects for many years.
In fact, nothing not DHTML/CSS/JavaScript is ?online?. No sir, in fact, it is a good old desktop application executed in the browser or outside the browser with no difference.
Moreover, pure DHTML/CSS/JavaScript is just too slow and too primitive to create an application. Not to mention a number of issues with different browsers which are too difficult to solve.
Those popular JavaScript/AJAX frameworks look really cool but are they of any threat to a desktop application? Firstly as I said they are lame and slow and there is no way any OS will let online application do anything outside of an applet-like sandbox. Risks are too high.
Second, before PHP, building a web app was harder than a desktop one
You are a fucking monkey.
“Oh, yes, Web 2.0 is here to save the world from the hands of the evil empire.”, Yeah, right.
Paul Graham has been attracting flame like a magnet since … I’ve first read about him. That’s what he does, that’s what he’s good at, and sometimes he makes a valid point.
And deep beneath the multiple layers and coatings of BS, Paul Graham makes a valid point in his article which you people seem to completely miss.
No one really cares if developers hate or love to make desktop apps. There will always be someone there to accept the challenge of making them, no matter how hard they are to build. Besides, Paul Graham never really said that.
The people that hate desktop apps are (drumrolls, surprise) the users. People want to see computers as appliances and the way desktops and desktop apps are built today totally gets in the way of that.
Despite what some might think, web applications are much harder to build (properly). Regardless, they’re installation free, and the data on your web account persists across multiple machines. Web development also allows for stupidly simple ways to connect the user to other people. Desktop applications can never compete with that.
Users don’t care about computers. They just care about getting their job done and, if possible, being more connected to the ones around them. That’s it.
And they couldn’t care less if you do or do not like building apps for them, they’re selfish and they’ve every right to be. They’re your customers.
sumfag, why do people like you have to ruin every intellectual discussion that takes place anywhere?
I mean, no wonder people think the web is such a screwed-up place…
NST: do you guys have a comment censoring policy?
Web apps are fine for the lucky few that may have high speed internet and reliable connections etc, (obviously not any Australians), and for those that want the basics of apps with limited features etc.
Web apps will never reach the performance or power of desktop apps, simply by their nature. Even a high speed connection is ridiculously slower than a low end computer.
The current web development frameworks are mediocre at best when it comes to features, power, access, security, reliability, compatibility, etc. Okay for minor apps and utils but no where near ready for mainstream applications.
As a small developer I can’t see my type of apps ever going to Web apps. Very few people would trust web apps for tasks like business management, accounting etc.
I do see, modular based programs becoming more relevant, where desktop apps can be enhanced with extra features as the end user requires, but more where they download extra modules etc, or perhaps enhance the program with web app options.
Security is the paranoia of the day, yet people want to move everything online to the unsecured and open environment. Has any one noticed the security problems related to Java, PHP and similar server based systems?
Desktop apps also allow for greater utilisation of the power of the PC. Who wants every app to look like Firefox (or IE) ?
Desktop development is by far easier, quicker, more reliable, and offer far greater power to than any web app could possibly offer. Desktop apps are here to stay for a very long time yet, and I doubt you will see too many giving them up, in exchange for slow, insecure, advert blasted, mediocre alternatives offered by the so called “Web 2.0” ( or Web 3, 4, 5, etc), until every home as a multi-gigabit connection and servers and technology are 100% secure, and we can trust the Corporate enterprises with all our data. (It will never happen!)
I use C# in making ASP.NET web pages and .NET desktop applications; so it’s not really a far cry from each other in the programming side of it.
When I am creating desktop applications… it just feels… rough. When I am creating web applications, the edges feel rounded. I enjoy creating both, but seeing as I program for a hobby and not a job, I don’t really have any specific goals set. I find it much easier to program for the web without any real goals than I can for a desktop application.
Not to mention that it seems like for every idea that I get for a new desktop application, there is already something there (and that I like to use.)
Oh, and Marios Alexandrou hit it right on the head when he said that web development feels more satisfying; I find that I enjoy programming for the web because it gets seen an used a lot more than any of my desktop applications. Even if I was part of a big company (Microsoft) that develops a heavily used product (Word), I would probably still feel the same; the web just gets a lot more hits.
Web development is much less enjoyable than writing desktop apps. Why? I can summarize in one work: JavaScript. ‘Nuff said.
Developing web apps is like something from the stone age – we’ve surrendered all the speed and responsiveness of desktop apps for these kludgy text-down-the-pipe horrors we call web apps. And why? ‘cos they can run anywhere and pretty much on anything.
Sadly, the desktop app is [all but] dead – we’re doomed to Javascript, ASP.Net, C#, HTML, CSS, XML where once we just dragged a field onto a form and were done.
I suppose it’s progress for the user, but in programming terms it’s a complete reverse.