I am working on software development tools: http://www.codesynthesis.com
I am working on software development tools: http://www.codesynthesis.com
I've done both desktop/server software and web software, and IMHO good web software is harder. With web software, you have to explicitly think about many things that just aren't an issue with conventional software, like how to distribute the load of a million users over dozens of boxes. It helps that user expectations for UI responsiveness and robustness are somewhat lower with webapps, but that's changing with AJAX. You also need to know many more technologies to build a successful webapp: CSS, HTML, Javascript, a web scripting language, SQL, database performance, server administration & shell scripts, and any libraries necessary for your problem domain.
It is a completely different skillset. With conventional apps, you need to know how to architect a large single app instead of architecting a large collection of collaborating servers. You need to know C++, Java, or C# instead of PHP/Python/Ruby. You need to know intimately the particular toolset that your app fits into - VMWare can't live without device drivers; Sleepycat can't live without transaction algorithms; one desktop app I worked on needed an intimate knowledge of TCP, including Winsock LSPs and Linux kernel hacking. You get much more out of deep knowledge with conventional apps, while webapps require a more shallow understanding of a very broad range of topics.
Also, the technologies you need for desktop apps don't have zillions of articles on them plastered across the web, and the documentation is often poor quality. But if you take a professional software engineering job, you'll be expected to make sense of it and figure out how everything works (possibly through prototypes, debuggers, and a lot of pain and patience). It's not taught in college, but that doesn't make it particularly difficult.
I am not saying web development is necessarily easier. I don't have any problem believing Javascript or AJAX is a lot of pain to get working consistently across various browsers. What I am saying is that serious software (i.e., the kind that people are willing to pay for) requires deeper knowledge and practical experience to get right.
Most profitable software requires deep knowledge of at least one relatively unknown technology (the three web startups mentioned above are exceptions). This applies as much to web startups as desktop startups, eg. Google had deep knowledge of search, YouTube of Flash and video, Amazon of inventory and retailing. But acquiring this deep knowledge is not rocket science: typically, you identify the technologies that'll be useful for your app, you read all the publicly available documentation, you download a demo and write some prototypes, you ask some questions on a mailing list, and you e-mail the support people at the vendor (possibly paying for a product along the way). Fresh college graduates typically don't have this knowledge off the bat because it's not taught in school and they aren't exposed to it, but that doesn't prevent them from picking it up quickly. Look at Loopt, for example.
I can only ask what kind of software have you developed, sir?
If web software was harder, you wouldn't see "products" created over a weekend shaping up into companies a week later. And don't get me started on "millions of users on dozen boxes".
The primitiveness of web application development is mainly the reason why so many "ex-taxi drivers" and are rolling out web apps daily.
Two huge reasons why web app development is so trivial are: - You control your hardware. This is really important. - You do not need to develop UI. Web Pages are joke compared to the "real thing".
For starters, try to develop an super-simple desktop application that uploads an arbitrary file to a given FTP address, let 100,000 users (let alone millions) download it to discover: - It won't start - It won't connect - It crashes their computer. - "Where did it go?" question after downloading.
You'll be amazed. You will realize that PCs of most people are just like jungle, populated with adware, multiple software firewalls running simultaneously, paranoid anti-virus packages, missing DLLs and weird security settings. Moreover, users will be brutal: they'll be turning power off in the middle of your disk writes, they will upgrade libraries you linked to without asking you first, they will install your executable on desktop and will be killing files you create, the list goes on.
Over 80% of developing desktop software consists of two things: - Fighting unexpected problems in a hostile environment of user's PC - Dealing with real, LIVE UI that is reflecting real-time changing objects, and is pleasant to use.
On top of that you're trying to do this using minimal amount of libraries, because you can't expect people to download 100MB installer.
But webapps have the same problem, they just push the complexity into a different area. I also volunteered for FictionAlley.org, a mid-size (110k or so registered users) web community. We would get complaints from users that the site was unreadable on their 40 character PDA screen. We'd get e-mails from blind people saying could we please make the site handicap-accessible and usable on their screen readers. We would get irate e-mails from Opera users about display glitches, or irate e-mails from Mac users wondering why the latest feature we just released didn't work on Safari. We'd get tirades from people because we added navigation bars, after getting tirades from people because we didn't have navigation bars. We'd get constant complaints about the (free) site being too slow, because we didn't have money for more servers.
Until you've actually been involved with a website that has lots of visitors, you have no idea what goes on behind the scenes to keep things running smoothly (or sometimes not-so-smoothly). Yes, desktop apps are hard. I've done them - not just the release engineering stuff above, but I also wrote the Java app included in the package, and I wrote a Netbeans plugin for my current employer, and both had to deal with the sticky platform-and-threading issues necessary for a responsive, professional UI. I still say that webapps are harder.
I've worked on two large projects that are distributed and not web based.
The difference is that in a webapp, you have to think of the implications of distribution on every user request. So you have to consider latency and status feedback for everything the user does, you can't use shared state, you have to keep in-memory data structures to a minimum, you can't count on getting notification when events occur, and so on. Desktop-based apps with a distributed back-end usually have a well-defined interface to the cluster. As long as you don't need to update the backend, you can keep anything you want in memory. And you usually have a two-way connection: you don't need to frame everything in terms of request/responses.