As a C#/WPF developer and a beginner to UX I find it hard to apply some ideas to my desktop applications because most of UX books are focused on web development. What are the main differences between web UX and desktop UX? Are there any? Is there a good source (book/web) focused on Usability regarding dektop apps?
There is a common false assumption that UX means just the interface. If, by UX, you mean interaction design then there are many good books on the basic principles of interaction and interface design such as About Face by Alan Cooper.
Good UX is as much about learning the underlying theories creating good programmes. Anyone can learn to code, but that doesn't mean you can programme. Anyone can learn to put together interfaces but that doesn't mean they have created a User Experience.
Here's a few more books...
Also, and not trying to confuse you (seriously!), do you mean "mobile web" or "desktop web"?
The first and foremost influence is not the medium (desktop, whatever web, or native mobile), but the user and their goals. So there really is no single answer. Very abstractly, there usually is a reason why one app is desktop and one is web:
A desktop app has been installed. Somebody has spent some effort on that. Why?
- To get more performance,
- to get more interactivity,
- to ensure a certain hardware,
- or to get more security.
A web app is accessible from everywhere, which means
- unknown screen size (e.g., regular website on phone)
- unknown device (mouse, touch, keyboard?)
- unknown situation (at home, or on subway)
These point to differences which typically can be seen between desktop and web apps: More interactivity, more visualization, and specialized input devices on desktop, more focussed, single-tasked web apps. Users on desktop apps usually are more proficient with them, because they use them more often.
There are also a few design patterns which belong to either: Navigation is done by menus and toolbars on desktop, while there is a top-or-left-side navigation pane on web apps. Functions on objects can be invoked using the context menu on desktop, which is not available on web apps.
Use cases also differ: Noone will install Amazon or Google on their own machines - the use case is inherently web. The former desktop-only use cases (such as my personal accounting) migrate to the cloud, however.
A couple of the biggest differences I can think of between a desktop application and web application are:
A desktop application is generally faster than a website. A desktop application is able to compile and display results faster than a browser (typically) because a browser has latency displaying results. It has to send requests out, have those requests fulfilled by a server, receive them back, and then process those requests into the correct binary code from the browser. There are just more layers involved, so there's more latency. The practical application of is this that desktop applications are able to do some process or display results quicker. The downside is that these items can only be done on the computer(s) you have the application installed and synced together.
A desktop application is available even when a computer is offline. This is a different use-case than almost all websites. Almost every website is designed under the assumption that the user has some consistent internet connection. Yet what happens to your application (interactions, available actions, data) if the internet isn't available? Does the user still have a valuable experience? Does going online enhance your app or is it crucial for the application's success? The offline experience becomes much more important.
A desktop application can utilize different UI paradigms than a website. Just as gestures in a smart phone app introduces a different way of accomplishing tasks, desktop applications provide different approaches as well. Users assume certain items are always true with a website. There will be some sort of navigation. Information can be deep-linked to, so the experience is non-linear. Information is organized from most important to least important. The browser offers additional functions as well (bookmarking, searching the text of a page, history, back & forward buttons, etc). With a desktop application, you don't have any of this. You need to build it, and because of that you're able to reinvent it too. Your application isn't wrapped in a browser. You don't have to necessarily work within the workflows typical to a browser. You can re-organize your application's approach (menus, panes, layout, workflows, etc) as you see best to solve the user's problems.