Ask HN: Best resources for learning desktop software development?

20 points by alexliu518 ↗ HN
Hi HN community,

I'm interested in developing desktop applications and would love to hear your recommendations for the best resources. Books, online courses, tutorials, and any other learning materials are welcome!

Thanks in advance!

17 comments

[ 1.8 ms ] story [ 78.2 ms ] thread
On what platform? Which toolkit? The only good one is win32. Microsoft's online documentation used to be okay through MSDN but they've probably ruined it.
I’ve been getting into desktop development with C# and .NET and yeah, the docs are horrendous. It’s not that they‘re not informative, but they leave a lot of important information out (or just give you a step-by-step without explaining what you’re actually doing) and also somehow their servers are incredibly flakey. I get a „this service will be back soon“ message basically every fifth page load, otherwise it just takes 10 seconds or so to navigate.
Yeah… I’ve been playing around with windows forms. at least Visual Studio and the tooling is great.
If you are doing that, it's probably best to skip platform-specific frameworks and try AvaloniaUI or Uno Platform, both of which have decent documentation, if a bit limited in the first case, but I found various templates and examples more than sufficient as a replacement.
I would usually agree, but what I’m building [1] needs to 1. access shared memory data from a (windows only) game and pass that through to the frontend and 2. be able to access a lot of windows‘ window APIs, so this was the easiest way to go for me. I also know some C# from my school days and I actually like the language, so that’s a plus.

I did opt for using WebView2 for rendering all the fancy frontend stuff since I’m first and foremost a web dev and much more comfortable for building UI that way, so I kind of just made my own little electron, which is actually nice because the resulting app should be a lot smaller than any electron installation.

[1] a HUD overlay for RaceRoom, a racing simulation

I’ll bandwagon off the other comment to ask which platform(s) you’re interested in.

There’s a way to make native apps for each platform using Swift and XCode on macOS, C#/C++ and WPF (and whatever other ways of rendering desktop apps ms invented this year) for windows and multiple ways to do it for Linux.

There’s also cross-platform toolkits like Flutter (before google currently trying to kill that) and the liked by developers and hated by consumers electron (and its newer, much lighter, rust-based alternative Tauri), which lets you write low-level code for the system API stuff and HTML, CSS and JS for your frontend. Cross-platform apps have a tendency to feel more janky - though they don’t always do - however it lets you write a single codebase for multiple platforms if that’s what you need.

Another question - what’s your current skill-level as a developer? Have you built other kinds of software before or is this your entry into the field? That would partly impact what kind of material might be good for learning for you and which kind of framework you’d be comfortable with using.

Your descriptions are very inspiring to me, thank you. I am a front-end development engineer with 4 years of experience and I don't know much about desktop development. I have heard of Electron, but I understand that its package size and performance are difficult to control, so I am looking for other solutions and best practices, and want to try more possibilities.
Are you rich? Because you will have 1000 more career options developing server/javascript, heck, even mobile apps.
Honestly, you'll get a lot of varying advice on this topic. Everything from embedded browser solutions to fully native ones.

Just start building with flutter, it's the best maintained platform that's the easiest to reason around. Everything follows a well defined workflow, you won't spend 30 days just learning the variety of configurations people keep for getting each different platform running.

If you go native you'll spend so much time deciding on platforms, build tools, packaging, etc.

It's better if you just start building and when you find deficiencies in Flutter you know what you search for in other platforms. You can move to them then.

Well said, and I mostly agree. The only counterpoint I can think of is that there is also a lot of complexity which comes with cross platform development (especially true if you add mobile to the mix). If you have a specific desktop platform in mind, it can be advantageous to learn a native solution. The key is to just pick something and go with it.
Flutter is indeed a very good development framework. I heard that many people use it to develop mobile apps. I will try it on the desktop.
SwiftUI makes it super easy to get started on macOS. You can have an app editing a custom document format set up in an hour just following the documentation - as long as you don’t care exactly how it works since SwiftUI gives less control.

I think generally Apple’s tutorial content when available is pretty good, making Mac apps is vastly easier today than it was in 2018, and if you’re a React developer a lot of the way of thinking carries over.

Lazarus [1] is an open source Pascal based IDE that's cross platform. I even ran it on a Raspberry Pi Zero-W!

The only downside is the documentation, which really needs an upgrade.

[1] https://www.lazarus-ide.org/

(comment deleted)
I tried Tauri recently. I don’t recommend it. The current release, v1, is still a beta really with terrible documentation, and is not actively being worked on because the devs have moved on to v2 (in pre release).

They have an active discord which is good. But it’s painful to go through the chats trying to hunt down an issue. I wasted hours and hours just there.

I very strongly recommend electron. Yes the bundle size is larger but you will save so much time and effort that it’s worth it imo.

Check out Tcl/Tk. It is cross-platform, simple, stable, has a long history, and runs blazing fast.