Comment by VyseofArcadia
1 year ago
I find "offline first" software to be interesting because it's so foreign to me. If I wanted to build an offline first application, I'd just build a traditional desktop application with Qt or GTK etc.
Why did you choose to build this with a webdev stack?
(Not a criticism! Use what works for you! I'm just interested in why people choose the tools they do.)
I always assume the stack people choose is based on what they know. Given that we’ve seen a huge number of people learn web tech over that last decade or so, it’s sort of unsurprising to see so many people go that direction. I’d assume a secondary factor is portability, although given that you can achieve portability with other stacks too, I generally think it’s tech familiarity that drives it more than anything else.
I understand where you're coming from but in addition to offline first, having cross-platform support is also a priority. Although it's possible to run Qt/GTK apps on win, linux, mac, ios, and android, it still misses a huge platform: the web.
Also, even if we exclude the web, you still have to deal with app stores, code signing, separate builds for each platform and whatever else you'd have to do to distribute your app everywhere (not my area of expertise). But with a PWA, you make a website that uses Service Worker and you're done.
QT is not as approachable as web stack.
With all downsides of the web stack I still would rather go with it than QT.
Having worked with both, I strongly disagree.
3 replies →
* It's cross-platform
* It's (probably) sandboxed
* It's easy to distribute
* It's easier to make an app with a decent (but non-native) UI, compared to other cross-platform toolkits
I developed desktop applications a long time ago, but I do webdev now, including Electron apps. Modern web stack is just a much better developer experience. Sure, if you just want to build a simple app with 5 controls and two screens, you can remember good old days of VB6 or Delphi fondly. But for a modern complex application with localisation, reactive design for mobile and desktop screens, a lot of user content and complicated state that is changed asynchronously both from the user input and from remote events, modern web stack is actually great.
Typescript is about the best mainstream (not Haskell) programming language I've ever worked with, modern web frameworks (React, Svelte and others) use functional programming concepts in the right places without requiring knowledge of type theory, it's easily debuggable at runtime and modern css/html is actually a pretty good way to do layout of complex user interfaces.
Interesting. I've done both desktop app dev and web dev professionally, in both cases complex applications that required localization etc. I still found the traditional C++ desktop app a better developer experience. It's significantly more straightforward, and I could be more productive of the simpler mental model of "OS runs application, calls out to thin GUI abstraction layer which calls out to either Cocoa or win32" vs "backend runs on service fabric in one of three different data centers, calls out to x different DBs and y different microservices, user connects to it via frontend after auth (another can of worms) via roughly a dozen different common configurations, but we're only going to test with Chrome on Windows, using TypeScript and an unholy combo of three different frameworks because the frontend team keeps chasing the new hotness"
Web dev just feels insane to me. The amount of logistics and infrastructure and tooling you need[0] is beyond the pale.
[0] "need" is maybe strong, but in an enterprise setting like I was that's what you have
If you don't have to deal with backend in the former scenario it seems that you're really comparing apples to oranges here.
1 reply →
I always wonder what people mean by "complex applications" when they associate them with mobile design and then contrast them with "simple applications" created with Delphi.
Guess that complexity is the same as number of spinners.
I have had interesting interactions with web devs in which I describe the architectural CAD application I used to work on, which they call "a simple desktop app". They then talk at length about their overengineered CRUD app.
Personally, my experience was developing IDEs and other developer tools.
I'm a web dev so naturally, I'd pick something I know well to implement UIs. Second, distribution is a big one. With native mobile, you have to go through lot of hoops to get your code onto the device easily, usually it means dealing with certificate, licenses etc.