People Don't Hate to Make Desktop Apps, Do They?
Annie Peterson writes "Paul Graham has been making the argument that desktop development is dead — That's his premise for declaring Microsoft dead as well, and he claims that no one out there likes to develop for the desktop anymore. But that's not true, or is it? Desktop development is easier, faster, more productive, and infinitely more enjoyable — right? The question is, since web apps were originally built on desktop applications themselves, have the tables flipped? Or is it just wishful thinking?"
Although I have done my share of PHP web apps, my favorite application would be writing in Python using Qt.
Desktop programming is so nineties. I'm a laptop programmer!
Be relentless!
Does this guy have a life? I can understand the editors wanting to keep "the discussion unedited and real" but this guy is just a spammer..
Web apps are fun and all... Until my comcast tech decides to flip my interweb switch to OFF for 5 hours.
Then i'm glad i don't rely on ajax apps or anything to get work done. While corporate customers enjoy a level of reliability that the average home user doesn't even dream of, being chained to the internet, yes, being chained to hotspots or cell towers for mobile internet is a drawback that the average user can't consider.
While php and perl are great, people like to think they're somewhat self reliant, and relying on outside sources is good every so often, you don't hire consultants to do payroll for you.
The web apps are like consultants, you bring them in for activities that is too expensive to implement and are only needed for on demand, but you don't have them do mundane activities that you could hire someone full time and not lose money on.
Is it sad that I am more likely to recognize you and your posts by your sig than your name or UID?
it's the age old situation. not one tool does every job best. there are still plenty of situations where desktop apps are appropriate. as nifty as web 2.0 apps are, they still aren't as good, in certain situations.
that there is a demand for disconnected apps is undeniable. all one has to do is look at the disparity between the number of households with computers and the number of households with dial-up or less.
me, i prefer desktop apps in a number of areas - personal finance, my office suite, games, my coding tools - and there are probably more.
at the same time, on those rare occasions i find myself sitting somewhere with my laptop but no internet access, i feel lost to some extent. i am very, very used to having both types of software at my disposal constantly.
It's hard to believe that's how Micronians are made. Why don't we see it right now by having you both kiss one another?
Got completely out of computers when I hit college, and then jumped back into it as a web developer later. Now I'm toying with PHP-GTK(2) apps and it's been quite fun, even though it's got a ways to go. C++ etc. just doesn't interest me - a language I knew from web dev had to hook me back into the desktop.
I prefer desktop development. Web development gets frustrating with its nooks and crannies of brokenness. If standardized Javascript and CSS were as ubiquitous as C/C++/[anything else desktop], that might someday change... but probably not.
Turning coffee into code.
I am a numerical analyst. I hate making anything that the user needs to interact with. This being said, I hate writing desktop apps. Furthermore, I hate writing web apps too. I only care about algorithms and automation.
But for some reason I can't stand Web Development at all but *love* desktop applications. My coding of choice is C#.Net or Java and i've written numerous small but useful applications that are in use at my place of employment and a few former jobs. Most of these apps are networked and use client-server interactions, but only on the intranet, not out on the internet.
I am asked quite often though, "Well why don't we just stick this on a web page and then we can get it from everywhere!" and I usually demur some and note that we dont need it to when anyone on the intranet can get to it anyway and there is no reason for some of these apps (or data) to be accessible outside of the corporate intranet.
For some reason, I just don't like ASP.Net or PHP or JavaScript, i've written small interactive web things in them, but it takes me way longer to accomplish something useful on a website than it does doing a desktop application. I suppose this probably has to do entirely with familiarity, but I also hate how slow websites typically are when you do something overly graphical or complex, whereas it runs great on the desktop application locally.
"To strive, to seek, to find, and not to yield." - Tennyson
I've been looking into Ruby (on Rails) recently and, from what I gather, it's not just hype.
Meaning that, from what I've seen, it seems pretty good.
Maybe the more experienced Ruby programmers (and the other ones, who decided not to use ruby even after learning all about it) can enlighten me further?
I'd like to know exactly why Rails is so good.
I bet Ruby on Rails has something to do with this article, in any case.
09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C1 bottles of beer on the wall. Take one down, pass it round... Oh, umm...
and I love doing both, as long as I have decent tools to do either with.
.NET front ends and legacy C++ backends in a mix of multiple versions of MFC and .NET - argh - which makes it unbearable at times, but only on the app I currently work on.
For example, I have done desktop development for over 10 years, I am more experienced at it and easier to make a usable UI. Drawbacks: harder to build and test, but easier to step debug - unfortunately, my current employer has a MESS of a desktop app full of
Web apps, I have only done for about 5-6 years tops, however the UI flexibility is less powerful, the "stateless" state of doing web programming is a bit more of a challenge. Easier to set up and get running fast, harder to step debug (unless you have just the right dev environment) and can be VERY hair raising. Oddly enough I am doing a contract job for a company right now, purely in ASP.NET 2.0 (C#) and I am having a blast. However, I AM fortunate to be able to build from the ground up so I know what everything is doing.
Well, who really cares who a person is?
If the person says something that can be backed up by evidence, then does the source really matter? If Mussolini said to "Love one another", does his actions reduce what is said? (Be aware that Mussolini was much worse than Hitler, his group killed 20 million 'indigents' vs 10 million for Hitler)
Base ones word upon their worthiness of said word, not among their prior words, nor among their actions.
No, really, they do. They like solving problems. Having to implement the solution is the boring part, no matter how it's going to be done.
I wonder if I use bold in my signature, people will notice my posts.
You're never going to get the performance on the web (for most things) that you can running locally. Equally, while tools and frameworks for faking it have gotten a lot better, maintaining state is a pain in the ass on the web and generally is not on the desktop.
It's like when Java came out and some people said we'd never write C again. There are things Java is good for and has taken over, just as there are things web apps are good for and has taken over, but there is still a place for desktop apps just as there is still a place for C.
The kind of bold, sweeping statements made by this article aren't much more than flamebait in a pretty dress.
This web app stuff is a fad (I hope). It was really popular in the late 1990s as well. Eventually the weight of developing in the unreliable and limiting multi-purpose browser gets to be too much, and desktop apps come back into vogue. Ajax makes things a lot nicer than ten years ago, but people expect more as well. Some things can be done really well using Ajax but it's not the solution for everything.
iTunes is a dedicated desktop app that uses internet data intelligently, but Apple made a good choice not depending on a browser. Compare Google Maps to Google Earth, which is more responsive and flexible? And then there's the comparison of something like QuickTime or Windows Media players and the pseudo video players written in Flash with bad control responsiveness and limited functionality.
I hate writing desktop apps. I prefer writing backend or embedded stuff.
I develop two things for a living. I work on a server back-end, and on the web front-end. The back end is easy. It's all Java, it's fun to develop for (there is challenge in some things, for example).
Then there are tons of front-end things I do. I hate them. It's developing the same code OVER and OVER (since we basically make copies of some parts to be used numerous times) and the glue code always has to go in there and is a pain. Then there is the scripting. Besides making things display right (which is a pain across numerous browsers), there is the functionality. "We want a select all checkbox." "When you update this date, it should update that date, unless this date is before than date except when...". Javascript is HIDEOUS. Can we just replace it with Python or Java even PHP?
Our problems are all user based. The users want it to work like a desktop application, but want it to be web based. It should respond fast and do all this checking and such, but it can't be a real application. You should be able to move forward and backwards without things going weird (can be tough to do in the stateless-ness of the web) but it can't be a real application.
We want an application, but we want it to be web based. We want it fast, but it must be made in HTML and Javascript. Blah blah blah.
I would LOVE to do more desktop applications. I wish I could.
I wish users would get over this stupid "lets put everything on the web" stuff. There is a fair amount of what we do that I can see being web based (like most of the reporting type stuff external users use). But all the management stuff we use in house would be a much better fit to a real application than the web applications we are using now.
Please, PLEASE.... bring desktop applications into vogue. Java allows right-once-run-anywhere to just as high a degree as HTML/JavaScrpit, if not more. Takes less bandwidth. Can run much faster. Can do client side stuff easier.
Comment forecast: Bits of genius surrounded by a sea of mediocrity.
Web apps are great, except...:
Why not just leave the web to things that require the Internet and keep applications on the PC?
GLaDOS for President 2016! "Well here we are again. It's always such a pleasure." -- GLaDOS, 2011
The web has much to evolve before it can live up to all this hype. Yeah, this may sound weird coming from a web developer, but I'm a careful one.
As for desktop apps, they are, still, faster and more reliable than their web counterparts, not to mention that a whole cultural change must occur so web apps can really prevail.
I've done some desktop development - only to amuse myself, really (so I'm not the best man to write statements about it) but I'll take my chances: the amount of code needed to transform a shell app into a desktop one is huge, so I really don't see any advantages on it, being a geek.
OTOH, web app interface development seems to be a lot easier and shorter than QT, GTK, etc...
Er Galvão Abbott - IT Consultant and Developer
Wait for Firefox 3.0. Soon you'll be able to use your web apps, even if you're connected at 0 Mbps.
Perhaps a better question might be, why on earth would coders waste time reading Graham's meandering opinions when they could be developing for the [web|desktop] instead?
For that matter, why would they be on Slashdot?
Karma police, arrest this man. He talks in math. He buzzes like a fridge. He's like a detuned radio.
There will always be a need for custom software for corporates, but that is typically client/server with the client side just being a web front-end. The browser covers that.
The real scope for target-side (as opposed to server-side) applications is in embedded/mobile marketplace. Embedded devices outnumber desktops and are increasing in number, size and complexity. Due to performance, cost and comnnectivity limitations these won't get soaked up by server-side apps for a long time still.
Engineering is the art of compromise.
http://news.com.com/2100-7345_3-6163015.html
Channel Zilch: In Your Face From Outer Space!
Aren't Integrated Development Environments (such as Eclipse, NetBeans, and Visual Studio) used by developers to create apps -- both Web and Desktop style apps -- Aren't they themselves desktop apps ? Essentially IDEs are Meta-Apps, because they can be used to create new Applications. I think that these tools are still alive and kicking... So it would seem that until we (or rather the tool creators) manage to figure out how to do away with those fundamentally useful tools, we won't ever truly be rid of the Desktop metaphor. If you are a professional software developer: Can you really imagine trying to develop a new application for your employer, using tools that are running totally inside of a browser window, streaming one click at a time over AJAX ? I mean, there would probably be some gee-whiz coolness factor at first, but I think the novelty would quickly wear off once it dawns on you that you have ceded so much control over to the System Administrator. It's bad enough as it is with things like Database Admins controlling access to my data, and Security Admins controlling access to my email.... I can't bear to give away the last piece of territory that is truly totally within my domain - my precious IDE !!!
So as long as the IDE shall live, so shall the Desktop App!
All hail King WIMP !
I can throw as many stones as I wish; my house is made of transparent aluminum.
You assume that neither PHP nor Perl are being used to do desktop apps. Perl certainly is. Ruby, Java, Python, and several other languages are being used to do web development, too.
In particular, it seems a shame to pigeonhole Perl. Using Perl and readily available libraries, one can develop console programs, GUI programs, daemons, or web apps. With Tk, SDL, OpenGL, WxWidgets, curses, GTK, Win32::GUI, or Prima, few languages have as many options for interface libraries last I checked. Just because Perl is very useful for web development doesn't mean it's not useful in other areas.
In a fun twist, I had to develop an app that worked the same over the web or on a Windows desktop with no net connection and no installation. It's written in PHP and Perl with a little client-side JavaScript and runs an Apache+MySQL instance from CD. So it's a web app, but it doesn't require net access.
And BTW, ADP (American Data Processing) and similar companies makes a lot of money doing payroll for other companies.
Real Men code GREEN SCREEN!
It runs faster! It is more secure!
Say what huh? That doesn't even make sense.
--Matthew
For two primary reasons: 1) Installers. Writing installers sucks. The MSI "standard" is a bloated piece of crap, Installshield and Wise are ridiculously hard to get along with, and NSIS is a little too primitive (although by far the best installer platform I've found). You have to test the installer on every platform, ending up with stupid little quirks on Vista and x64 platforms. It's a nightmare, and patching/updating is a whole different nightmare. In the real world, there's no such thing as simple XCOPY deployment. At least for shrinkwrapped apps. 2) COM Interop. The Win32 API and COM combined is the crappiest piece of crap that ever crapped. I have nightmares about being forced to use Interop because they left out some trivial and silly thing from a WinForms control. I am speaking quite literally in saying that I have had nightmares. Seriously. I know, I know, working in Linux probably makes both of these problems more tolerable, if not completely invisible. But some of us must work in Windows. C'est la vie. I would take ASP.NET, or PHP, or Ruby, or Python, or any of those over crappy desktop Windows programming any day of the week. I'll even accept multiple-obscure-browser testing over COM Interop and installers.
As a matter of fact, I work for ADP, and one of the training videos I watched as part of my orientation said that ADP was founded precisely because doing payroll in-house was not always reliable. Basically, the founder of ADP knew of a company where the person in charge of payroll got sick, and no one else at the company knew how to do it. So they had to struggle to figure it out, and it became a great big mess with people wasting a lot of time to figure it out and employees getting angry about not being paid. Thus was born the idea of outsourced payroll, with the appeal being that payroll is outside most companies' areas of expertise, so it's simpler to just let a professional handle it.
So ADP was founded on that idea. It also helped that this was in the 1940's and most businesses couldn't afford machines to do the calculations easily themselves, whereas a company that specialized in payroll could easily afford to buy mechanical calculating machines (and later, electronic computers) to crunch the numbers way more efficiently than a regular business could do it. It's hard to relate to this today, but even in the 1970's, a simple 4-function calculator cost about as much as an entire laptop computer does today (without adjusting for inflation!) so those expenses were not insignificant.
I've been using PyQt4 since last june. The crossed-platform RAD nature of python with qt4 is a godsend. The widgets even look native across Linux, OS X, and Windows.
Unfortunately, the deficiencies of py2app and py2exe mar what could otherwise be one of the simplest ways to develop good cross-platform applications.
"The United States has no right, no desire, and no intention to impose our form of government on anyone else." - Bush 05
If desktop development is dead, then I must have used my mind to submit this post directly to the /. server. That's the only explanation I can come up with...
The browser and the HTML language were not designed to be an application interface; they were made to just display information. So writing apps in a browser will NEVER be as flexible or straightforward as standard GUI programming.
:(
It's all about the ubiquity of the browser -- i.e. it's already installed, the whole easy adoption jazz -- so most new apps get written for it. But anyone who had to debug Javascript, or trick the user interface NOT to accept multiple button pushes, or fiddle with browser implementation quirks & incompatibilities etc. KNOWS that we are worse off with this than desktop apps.
IMHO, about the only thing that validates the use of web apps is the easy creation of UIs that mostly contain text and images. Once we get to controls and business logic, HTML and Javascript are a PITA. And still, most of us are stuck with them...
I can think of at least 8 million people who might disagree with his assertion. World of Warcraft does not run in a web browser.
Microsoft being dead is not equivalent to saying desktop apps are dead. Sure, Graham is making a case that Web 2.0 is great, but he's not saying that it is going to completely replace the desktop. What he is saying is that Microsoft is no longer the monopoly that instills fear in all other technology companies. This is true, and is a very different statement from "desktop development is dead".
But alas, I'm not new here. I expect this kind of misleading headline. Just thought I'd clarify for all those who have no intention to RTFA.
If it's technically possible to choose either a web based app or a desktop app, I would pick the web every time.
Tech support sucks big time. It's far, far, far easier to maintain, upgrade, distribute a web application than it is to manage a desktop application. A couple major web browsers and a couple major plugins pretty much covers every testing and support situation that you will face -- especially for intranet type situations.
For desktop situations there are a million variables: installers, bugs, spyware, permissions, operating systems and versions of OSs, non-existent user backups, differing service pack and patch levels... the list goes on. Most of these really aren't your problem as a software developer or publisher, but in reality, they often become your problem. That's in addition to the nightmare of supporting different versions of your program.
If the web can be applied to a situation, there should be no surprise that people will develop for the web.
When writing web applications I find a great deal of my programming time is spent dealing with state and restoring it, this makes it (for me) generally less enjoyable as far as programming goes. Generally speaking a desktop application is in a constant running state, where as a web application will make an http request, get a response, render HTML, then stop. The user will then submit a form (or follow a link) and another http request is made and the cycle repeats. The painful part as far as the programming goes is restoring the state of objects and the like after each http request. Even tasks such as adding a row to a grid (say on the click of a button that for some reason must talk back to the server) may get complex because you have to restore the state of the previous X rows before adding the new one. Even using Ajax this problem still exists in most cases.
There are frameworks which try and simplify these state problems (ASP.NET for example has a few state handling mechanisms) but I'm yet to find a way to write *complex* web applications that doesn't require lots manual tweaking and fidgety programming to handle these state problems.
For me this makes coding desktop applications more enjoyable. What environment is 'better' is a different question alltogther and depends on the specifics of the project.
So you're the guy who keeps screwing up my paychecks. I would love to know how hours are just randomly dropped from my paycheck.
The truth is the desktop some real killer apps have to be released to want to give programmers inspiration IMHO. I'm sure there are many "killer apps" just waiting in the wings until computational power gets there. I have a shit tonne of ideas for great desktop programmes in my head that I've put part of the design to paper already but much of it has to wait because the time and expertise requires is a huge undertaking.
I also have a tonne of desktop software I would love to use if it was more advanced and the computational power was there. I love Dragon's naturally speaking and not having to type since I'm a natural orator in my mind and the words just can't come out fast enough when I get going. Not only that but not having to type keeps me focused on what I'm saying.
Lots of desktop applications will have to wait further advancements in science and art of information interpretation, that is converting human data and crunching it as easy as we do.
I like developing for the web... actually, I don't. I like developing in a non-gui environment, but I'm currently assigned to a "gui" team. Developing for the web (at least in my environment) allows me to (mostly) concentrate more on the problem itself and less on the "how thing are going to look". This is probably due to the great framework we use for web (mix of Struts and our own very extensive framework) and the lack of such framework for our (now abandoned) swing application. However, in my opinion, availability of mature frameworks is the decisive point when it comes to enterprise-level development. As a junior developer in my company my requests to change frameworks (or at least, conform to the rules of the one we use). Web development, or at least the variant I've seen 'here' (at my work place), almost forces you to work correctly (don't think I haven't encountered terrible code that broke all conventions as well). I could be wrong (again, little experience with these things), but from what I've seen so far, if I'm stuck with UI development, I'd prefer the web over desktop.
When in danger or in doubt, run in circles, scream and shout [Robert Heinlein]
Perhaps it has to do with familiarity, but from my perspective, doing desktop applications (especially by the time you deal with all the extra support & deployment issues) is a real pain.
However, I will say that many people I work with do not share my enthusiasm for web apps. There is a huge technology stack to learn when you need to deal with the chain of technologies involved from the server to the desktop. All the quirks of different browsers take some getting used to, and it requires a different mindset. It also requires you hold the belief that a website can be an application, which, amazingly, many still do not have.
With all that said, there are still some things which are more suitably done as desktop applications. I think as things advance that list gets shorter and shorter.
SSL Certificate
Nobody wants to use web-apps. There is only one reason why this abomination is artificially hyped again and again: Open Source.
No, really, you cannot sell standard software very good anymore. It gets more and more ridiculous to spend hundreds of bucks on something like Word, Excel, or even Photoshop if you can get similar programs for free. Even if you say that those replacements are not as good as the original, which I doubt, they are getting better and better. So what do you do if you are a mega-corp, which made most of its money from standard software?
You are starting your marketing machinery to tell the people that they need something you can provide, your open source competition cannot. Web based apps sound fine, for the provider. They need a big and expensive infrastructure of servers, which hardly can be provided even by large open source projects. They are the wet dream of every marketing person, being able to charge per use. Being able to get detailed using statistics and spamming you with ads. For the more criminal (more usual?) ones, I would take it as given, that they snoop through your content if this is technically feasible. Web based apps are technically inferior? Nothing a good marketing can fix....or perhaps it cannot. People are stupid, but it seems that they are not that stupid.
So, tell me one, just one advantage of web based apps, for the average user. Desktops apps are out? Yeah, right, and nobody needs more than 640K ever.
I'd only believe that it was random if you were finding hours added to your paycheck as well.
There are far too many people concerned with privacy, reliability, and security for web apps to be the end all replacement that everyone on the "Web 2.0" bandwagon wants. AJAX isn't very secure, I've yet to see an implementation of it that doesn't suck at least a little, not to mention it is much slower than static pages, and breaks conventional browsers most of the time.
Privacy: If you're working on a creative project, do you really want it held at the mercy of some other companies security measures? Some things just need to stay local and behind the firewall to have privacy. Unfortunately the upcoming generation doesn't understand what privacy is, nor do they care while their rights are being erroded in congress.
Reliability: Instead of just having your computer up and running, you would now have to have rely on your ISP to not have technical problems. If that isn't bad enough, you also have to rely on some server at some company that you have no idea what kind of security, privacy, or backup policies they have in place. If that weren't bad enough, you also have to rely on their connection being up. Some data (most) is just better kept locally. Another problem with remote apps, latency. Nothing is more frustrating then waiting a long time to make a simple change to an open file.
Security: As was previously mentioned, do you know what kind of security, privacy or backup policies are in place at the company hosting your webapp? Do you really trust other people with your data?
Performance: Another excellent point would be advanced computer games, you don't really think AJAX is going to be capable of providing the same kind of experience that running the next big "Half-Life 2" locally would be, did you?
Web apps have their place and Desktop apps have theirs. Neither one will overtake the other, they will only serve the purpose to extend or inhibit depending on your current state of connectivity.
--
"Web 2.0" is about the lamest buzzword term I've heard in a long time, and I will personally punch anyone in the face I hear vocally saying it outloud.
You know, I have one simple request. And that is to have sharks with frickin' laser beams attached to their heads!
Quote: "Maintaining state is a pain in the ass on the web and generally is not on the desktop."
You must not have heard of libraries like echo2 or Wt for doing web development. They have the same API as desktop GUI libraries.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{189504B8-50D1-4AA8-B4D6-95C8F58A641 4}
'Compatibility Flags' 0x400
Better not tell our 8 or so desktop-only developers. Those poor people are more overworked than the 4 web developers 9including myself), simply because there's a HIGHER demand for desktop apps over web apps. Desktop apps = control, which is something the customer craves.
Desktop apps I use the most? I can see two of them: a browser (ah!) and an IDE. The IDE I use is IntelliJ IDEA by JetBrains (no, I don't work for them), these guys are smart and the fact that they manage to sell a $250 Java IDE while the free (and good) Eclipse is out there speaks volume. I'm not holding my breath to see an AJAX IDE in a browser that could rivalize with IDEA: I don't say it's impossible, but I'm not holding my breath.
;), medical applications, chip design, etc. I'm somehow even less holding my breath.
Now of course if we speak about Avid's apps, Maya, Flint (nice Linux app
Regarding the desktop/laptop debate I'm sorry but I still don't find a laptop's keyboard productive at all (yup, I'm using a good mechanical keyboard) and I don't understand how a laptop's 17" screen could be anywhere near as good as, say, a 20" or 23" screen. But, yup, probably that apps that run fine on a laptop would run fine as Web apps. For "bigger" apps, demanding screen real estate and lots of ram, where your desktop is actually more of a workstation (Avid on a 30" Mac screen, with 8 GB of ram on a laptop anyone?) I don't see Web apps taking over this market anytime soon.
The short version of the reason is "scripts versus compiled code".
The long version:
* Web applications are developed interactively. You fix a typo, you hit reload, you see the results immediately. The interactive-versus-batch debate should have been over by 1980, but we still see dektop apps written almost completely in compiled languages that require a huge clumsy IDE.
* The part that runs in the browser is visible to the users, so when they are technically competant they can give you detailed feedback.
* It's automatically cross-platform.
* The problem space is reduced because web applications just can't do a lot of things, so people don't expect you to do them, so you don't have to implement them or explain why you didn't.
Any scripting language can give you the first two advantages... you don't need to write web applications to write in an interactive language that gives you immediate and early feedback, or that your users can dig into and improve.
Using a portable GUI toolkit like Tk lets you write cross-platform scripts as well.
And, ironically, using a toolkit that limits what you can do (like, say, Dashboard or Konfabulator widgets) can actually make programming more enjoyable because it reduces the problem space.
Which is why there are so many people writing little scripted plugins for *everything*. Firefox extensions. Applescript. Shell scripts. CGI scripts. PHP. Tcl/Tk. Perl. Widgets.
It's like the impact UNIX had on command lines in the '70s. Your mainframe programming environments were, like GUI environments now, very complex. You could specify everything, down to things like the virtual block size of your virtual disk. UNIX reduced the kinds of things you could do in your program... and it turned out that being able to specify the block size of your virtual disk wasn't something people really cared about.
I've been waiting for a similar simplification to take over the GUI world for years, something that dumped the irrelevant mainframe-style super-detailed API and concentrated on the essentials. I had hopes for Plan 9's window system, but Bell Labs played that too close to their chest. Tcl/Tk is wonderful, but if you don't "get" lispy reflective programming you're not going to like it, and Perl/Tk hasn't taken off either.
The browser has moved into this space by default, because it's solved the distribution problem, but it's not a simple programming model. It's not the answer, and neither is any proprietary platform built on top of it. It's been over 20 years now that I've been waiting for something to really fill in the 2d desktop... and I'm no longer expecting that anything will.
Something like an open source re-implementation of Konfabulator, maybe... it could be built on a standalone Firefox XUL engine with no browser component dragging in the horrifying security issues that trying to run trusted and untrusted applets in the same engine bring.
But... if you want desktop programming to be as fun as web programming, find a scripting language with a GUI toolkit and start playing...
Note: An expanded version of this reply appears as an article on my blog and you can also read more there. Because Slashdot only allows shorter titles, the title of the article there is "The Rumors of Microsoft's death are clearly exaggerated."
First, on the issue of Linux vs Windows (for the title of this article): Windows sells more because Microsoft got there first, there is tremendous inertia, plus, until recently, there wasn't that much available that wasn't an application running on Microsoft software. And while using Open Source is almost as good as proprietary it ain't there yet; the usability of X Windows over Microsoft Windows still has some cracks that need to be filled. Also, Visicalc was the "killer app" for the Apple II; Lotus 1-2-3 was for the IBM-PC; where's the Linux "killer app"? (I'll give an example of one that could have happened on my blog.)
I think I agree with a comment someone (or more than one person) said in the various comments linked around this whole comment churn, in which I'll paraphrase, "Anyone who thinks Microsoft is dead or that Web Applications are better than desktop ones has been sucking down way too much of the Web 2.0 Kool-Aid."
My own opinions are that the tools for implementing Web-based applications are far too primitive. Like with pushing Linux over Windows: it (they) aren't there yet. As has been noted, prior to PHP you had to design a CGI application (usually in C++) in which you wrote a regular program and then stuck on "a bag on the side" to make it run as a web service.
Having done both, I am fully aware that a web-based application is harder to develop than a desktop one. A Linux desktop application is harder to develop than a Windows desktop application. A text-based application is about equal on either platform, but it's a hell of a lot easier to develop even a simple non-gui desktop application than anything running as a served application through a browser. The tools for web development are different, are not as powerful, and more expensive, both in terms of operational requirements and development requirements (e.g. it's a lot more work to secure a web app than a desktop app.)
There are more details, (hint, hint, you can read them on the expanded version of this comment on my blog) but I'll stop here, and just say that the claims of Microsoft's death are premature.
The lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
I think that many will agree that both Hitler and Mussolini stand very high up in the list of people who did "crimes against humanity", and I don't think there is any point in arguing who is higher up on the list - all I care about is that we will not get new entries. But could you please explain what you are talking about?
The mussolini killer file mentions "Over 400,000 Italians killed during the Second World War. At least 30,000 Ethiopians killed during Italian occupation of Ethiopia." (wikipedia cites "more than 275,000" Ethiopians killed)
For Hitler, it mentions "Directly responsible for the deaths of over 60 million worldwide as a result of the Second World War."
Who are the 20 million that were killed by Mussolini and his followers? Can you give me references?
Let see...
I like web development a bit, but I really BELIEVE in the desktop. Yet it's reasonable to think that the Google generation of home users will rely more and more on apps that are just an URL away.
But, again, I believe in the desktop. Currently, duplicate desktop UI functionality in a web page is painful. And not everyone wants to pull his hairs out writing a FPS relying on DIVs and Javascript!
On the other hand, I hate DB desktop apps, as year passes and few tools/platforms are really up to the task of deliver results as easily as it should.
Got Pike?
I'm seeing a lot of text being written here about how desktop apps are wonderful and webapps are crap, or a fad, or difficult, or slow.
Web apps are not desktop apps. They are different. You have different reasons for writing a desktop app than you do for a web app. Web 2.0 interfaces may be a fad, may be painful to write, etc., but webapps as an entire class just don't fit that bill.
Write once, deploy instantly over an entire organization. Write in the environment you like, and yet the whole org doesn't know you wrote it as a wrapper over a bunch of perl scripts you use as command-line apps. Write something using one database connection (where that's a legal option), and thus, write cheaply. Write using a simple interface with fairly low expectations, so that anyone can use it without training (unless you do a VERY BAD JOB INDEED), it takes minutes instead of hours to write, and can work on every single machine of any sort in the org.
Folks, web apps are the best thing since sliced bread.
Desktop apps are a BITCH. As a linux guy, they mean I have to work under windows. That's a showstopper, right there. As a desktop support nightmare, they're immense. They mean you have to standardize on a version of windows in the org, have to have minimum requirements, have to compete with viruses, self-destructing OS installs, etc. Meanwhile your design phase gets much longer, because expectations are higher.
Yes, complex apps often work much better as standalone. Yes, interface design for them is much more complicated, and thus can be more rewarding. But most companies need VERY FEW of these. Web apps are a much better choice for a huge amount of what most companies do. And as programmers, they allow us to maximize our impact on the productivity of the org. Where you can use web apps, you should. For programmer productivity, LAN supportability, and speed of delivery, it's like night and day.
We, the developers of the world, are in a bad situation right now. The ideal application is a zero-deployment cross-platform GUI application. Writing such an application depends on an already deployed cross-platform framework. The problem is that the dominant platform for doing this is a cobbled together load of crap.
.NETb y|C#|whatever)
Which of the following is the _best_ environment to develop a zero-deployment cross-platform GUI application?
1) Java applet/Java web start
2)
3) HTML+CSS+Javascript+HTTP+SOAP+XML+(Python|PERL|Ru
The last option is the slowest, most complicated, and hardest to develop for, with the fewest features, and is most brittle (changes in OS, software version, etc. may break it). Unfortunately, it is also the only one everybody has on their computer.
The reason for this is that we had several competing standards, and they all competed well enough to hold each other from gaining critical mass. And in the mean time, a mish-mash of technologies never intended for this purpose gained enough momentum that it snuck onto everyone's computer before we realized what it was. We had AJAX around for years before the general developer population realized it existed!
I don't see a way out. We are stuck with the AJAX solution unless we all decide to get together and agree to some other standard. But there is too much infighting for that to become likely. If Sun had done things differently, we would all be writing Java applications today. But it didn't work-out that way. I, for one, welcome our over-complicated AJAX development tools - since I don't really have a choice anymore.
"The term web application is not often applied to Java any more. The term "web app" these days often refers to AJAX " ...and what do you think is more often than not receiving those asynchronous XMLHttpRequests?
<Devil's advocate>
I _greatly_ prefer doing desktop apps. Great things about desktop apps:
Perhaps it has to do with familiarity, but from my perspective, doing web applications (especially by the time you deal with getting awkward UIs to work, browser incompatibilities, communications unreliability, security overheads and users constantly clicking "back" or "close" buttons you can't control) is a real pain.
</Devil's advocate>
I'm not sure that's actually that big a downside. I wanted to create some simple database-backed tools for a club I help to run a few years ago, so I sat down and learned CGI, Apache configuration, MySQL configuration and PHP. Coming from a general programming/CS background, and with the benefit of some decent documentation available on the web, none of these things took me more than half a day to get a decent working knowledge and identify the common problem areas in terms of performance, security, etc.
I had been avoiding the area of web programming (rather than simple HTML+CSS web design) for many years, assuming that it probably required a lot of different skills to desktop development and it would take a long time to learn all the relevant tools. In practice, this (as with most areas of software development, IME) turned out to be fear of the unknown rather than fear of what's actually there when you look. CGI is just a protocol for taking text input, following a few simple rules, and sending back some text output. PHP is just another scripting language like Perl or Python, it just happens that this one is typically embedded within HTML files and executed by a web server rather than run as a standalone script. Connecting to MySQL is just learning another, rather small, library of function calls that are built into PHP anyway. AJAX is just retrieving some data from a source using a protocol, and again, the libraries to do it are readily available. There is no magic, and none of this stuff is rocket science if you have a general programming background.
I would actually phrase that one the other way around: most things are better done as desktop apps, and always will be, because the fundamental limitations of web applications (NB: not distributed applications generally) simply don't match up to what most categories of application need. Almost all web-based applications are just glorified database front-ends where the client-server situation is a central part of the software architecture anyway and much of the functionality consists of simple form-filling and report-generating UI. Those web apps that aren't just DB front-ends typically don't have any compelling technical reason to run in a browser rather than as a standalone application anyway, it's just that writing them that way is sometimes the least inconvenient way to achieve client-server communications because all the other protocols suck more.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Programming basic web functionality is ten times harder, more time-consuming, more error-prone, and less rewarding than desktop programming.
Seriously? 'Cause I've found the exact opposite to be true. The last time I took a serious crack at desktop development, Windows 3.1 was the OS du jour and Borland C++/ObjectWindows Library was my best friend. So that was, what, 1993? And it was hideous. I moved from that into web programming in Perl and then PHP, and it all made such good sense to me. It was easy and fast (like a good woman), and after a while I gained enough experience that I could even do it well (i.e. not terribly inefficient and full of security holes).
Now, years later, I've barely touched C++ or any other "real" (non-scripting) languages for years, and the idea of learning even one GUI toolkit seems an almost insurmountable obstacle. I'd actually like to get into desktop development, but the learning curves are sharp enough to even put off someone like me, who constantly learns stuff for fun. I'm sure I could manage, but I find myself questioning whether the massive ass-ache involved would be worth it. I don't really deal with the Windows world, so I find myself trying to choose between GTK/GTKmm, QT, WxWidgets, or finally learning Java and using Swing. And do I freshen my now-extremely-rusty C++ skills, learn Java, or go with something like Python (which I've been meaning to get into for a while now)? It seems that no matter what path I choose, I'm destined to spend a long, long time just getting up to speed before I can write anything approaching useful.
If anyone has any suggestions on where to start, I'd love to hear 'em.
From reading the answers, I think the true statement is that people hate developing desktop apps for Windows.
.NET version hell, all that stuff is specific to Windows development.
The crufty GUI code, the horrible installers, the COM string and duct tape, the
Mac OS X application development is almost a pleasure in comparison. Even Java and Swing is nicer.
Having done Windows, OS X, Java and web app development, I'd definitely pick Windows as my least favorite. But I'd take OS X or Java over web app development any day.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
You have to admit, it's pretty cringe-worthy when you discover Frozen Bubble was written in Perl.
I Browse at +4 Flamebait
Open Source Sysadmin
"Robert O'Callahan from Mozilla, who is based in NZ but drives the rendering engine of Mozilla/FireFox"
----
Now that's what I call an unreasonable commute!
Can't the poor man afford a car?
Limitations of web apps can be an advantage when it comes to getting a finished product out the door.
Sure you can do more with a desktop. You also HAVE to do more with a desktop app. And you need to make more decisions, and spend the time to encode those decisions.
Web apps? Get a good basic framework under you, recognize the limits you are working on, and you can get a database backed app with basic business logic and prototype gui together in a days work.
Sure, I like working on the desktop better because of all of the reasons covered by others above, but the sheer availability and first cut simplicty of web apps make them very attractive, not to mention easy to build a business model for.
I had an epiphany the other day: "All web development is Rube Goldberg engineering."
I hate programming for modern PCs; programming my C=64 was so much easier, faster, less error-prone, and more rewarding. And my dad doesn't trust any computer whose registers he can't toggle in from the front panel.
As much as I prefer it, the C=64 is not coming back. You can't turn back the tide on web apps, either. You can bitch about how much IE6 sucks till the cows come home, but that doesn't mean that it's not how programs are, in increasing numbers, being written.
That pretty much describes the world of C/C++/Java/scripting glue with the Unix-y tools of makefiles, vi, building in dependencies on other software built on the same model. And people think stuff like Delphi, IDE's, and form designers are for wimps. It is either wimpitude or you can take your pain and suffering like a man.
I haven't played the game. I might try it out, if only to see what's so "cringe-worthy" about it. Is it buggy? Is it just plain annoying? Those things are likely effected by the implementation language very little if at all. I doubt that for a game like Frozen Bubble, using a good dynamic language is any problem. It probably could have been done in Perl, Python, C, Pike, D, C++, or any other language with SDL bindings and been just as good (or just as bad).
OTOH, the dynamic language Lua is used for much of Supreme Commander. SC is known as a great game, but one must wonder if using Lua for the AI is part of the reason it takes so much processor to run it. The game is fun, but due to the number of individual units that can be active at once it can run like a dog on all but multi-core systems. Using a more efficient language for the AI may have made it scale a bit better, but the flexibility of using something like Lua I'm sure is worth the trade-offs involved. The hardware will catch up shortly, as with lots of other games when they were first released. It's nice to see one stress the CPU instead of the GPU for once, anyway.
Oh, for mod points.
From my perspective as something of a time-strapped hobbyist developer who mostly makes stuff for my own personal use, the easiest, fastest, most productive, most enjoyable, and least stressful way I've found to make useful applications with pleasant interfaces to be run locally is...Ruby on Rails.
People often get stuck in a false dichotomy when choosing between a web and desktop app.
The simple answer is to use the web version for what it's good for (centralized updates, rapid development) and the desktop version for what it's good for (performance, offline access).
Some apps run a local webserver on a non-standard port (Yahoo Music Engine) to create a hybrid model. Javascript/HTML can be a very effective rapid prototyping tool.
For instacalc, I have an online version and downloadable gadgets to fill this need. I use both thunderbird (fast access to mail, offline access) and gmail (access from any computer) to read my email. The "secret" is letting a web app be a web app, and a desktop app be a desktop app. Use the right tool for the job.
...the only problem is I cant think of a single good app to write.
At a previous employer, we experimented with a very thin desktop GUI. It used the host OS to display widgets but was entirely under control of a server. It worked remarkably well and as long as the client and server were on the same LAN there was no lag.
From my hazy memory, it had these successes:
* a crashed app (which was rare anyway) could be restarted right where it left off
* clicking, drag/drop, typing, copy/paste, scrolling, and resizing were as fast as the host OS was capable of since most of the time these didn't involve the server
* very little installation headaches since there was no business logic, databases, or special-case code on the client side, and the set of available widgets didn't change that often anyway
* new servers could be tested by just pointing the client at them
* server could be upgraded at our convenience
* one server could handle dozens of users and the load was much lower than citrix, RDP, or X11 type of model since the whole GUI stack was offloaded to the client not just the final bit slinging
* protocol wasn't that complex. "this widget with this data goes here" then "send a message when the user finishes doing things with it"
* multiple windows could be open and be unrelated, so a server could make it look like you were running multiple apps even though it was just one GUI process and one server process
* response over slow network wasn't that bad. the most back-and-forth communication mostly happened at points in the app where users expected things to be slow, like when you click on "Okay" or select "New..." from a menu so we didn't get many complaints.
Okay, obviously we didn't invent this, but other attempts always seemed hobbled somehow. ActiveX and java applets are visually sandboxed and have a tough time breaking out into looking like a real app. Firefox had some experimental widgets that were actually pretty cool but in actual use they were laid out on the page in a very HTML-ish fashion and later withdrawn for security concerns.
Anyway, I just want to share this as kind of compromise between desktop and html-based apps that seemed to work particularly well for us.
Just write your desktop app and then deploy on Citrix...
/donning flame retardant underwear and ducking for cover.../P.
Brawndo: It's what plants crave!
I'm familiar. They do simplify state maintenance to a point and are appropriate for a lot of different things you could do with a web app, but I think you're kidding yourself if you don't think there isn't extra thought/work involved there and some extra performance concerns that you wouldn't need to have with an equivalent desktop app.
Could he be the new and not-so-improved John Dvorak?
Take a look at http://www.picnik.com/ for an idea how close to the simpler end of PhotoShop you can get, today, for free, without Adobe's code base and experience with both PhotoShop and Flash/Apollo/FutureWhateverTheyCallItToday.
Hello;
yeah, AJAX is so cool, but it is full of security issues, and is more difficult to get working with different browsers and OS types. Flash on the other hand has a lot of great examples of rich applications, and with the Adobe Apollo you can move applications over to the desktop to take them offline. Amazon, Ebay, and others are doing a lot of work with Adobe, and who else has such a wide distribution capability other than Adobe's flash player?
About 10 years ago (or maybe a bit less) there was a buzzword around the internet SAS, Software as a Service was the *next best thing* since sliced bread.
As a developer I love web apps because instead of selling my software for say, $20 to one person (who is going to distribute it to 100 more to use illegally), I can provide my app in some homepage, with 0 installation and update issues (the client always have the *last* available version, no need to click on "accept update patchfix kb32421"). The best thing is that the clients will keep paying me for the rest of their life (or at least for the rest of the time they want to use my service).
Of course this software as a service thing should *really* have emphasis in the *service* thing. You should provide additional services which are not provided by standard desktop software. As an example, take Gmail, The first time I used a mail account was back around 1994 when I created a new account at Hotmail. Since then I have always used webmail and I just cant use the desktop clients, the mere thought of having to download all my mail in my notebook or my PC or my mom's PC or my brother's PC if I want to check certain mail with a nice Enchiladas recipe at their places is ridiculous.
Ubuntu is an African word meaning 'I can't configure Debian'
the future is embedded
"turning espresso into code..."
Let's suppose, I wrote this great app for Windows XP.
...
Then VISTA comes out, and my app breaks.
Or a friend wants to run it on is MacIntosh or Linux system, and can't.
IMHO, desktop apps equals to limiting the customer base, and giving the developer much work with patches and OS-related issues.
The future is embedded some people say, or at least, it runs in a web browser.
I don't disagree.
However, the desktop locked to a specific OS as development platform, is dead. In my professional life, I haven't worked on desktop apps for 8 years now. But I am quite good at web-apps now