Title. Also I’m not talking about any specific frameworks, I am more interested in learning about different concepts. Eg. State management etc. Or MVVM/MVC/MVP/MVI
From my brief exploration I’ve found out that “Retained mode” GUIs is what I need to look into more as well.
I’ve tried making guis before, was only able to wrap my head around tkinter - when I tried web stuff it just didn’t click no matter how hard I tried.
GUIs are much more complicated than they seem at first.
My recommendation is to learn and get familiar with a specific framework first, before branching out to other frameworks and learning how they feel. Then and only then would I start learning about the concepts behind those frameworks.
About the web stuff:
When it comes to GUIs, web is a crazy constrained chaos.
It runs everywhere, is backwards compatible by necessity, and yet is so fast paced that it experiments with new ways of doing things, makes mistakes, and tries to find ways around those mistakes.
It’s fast pace leads to it creating things that other GUIs end up looking to for hard lessons and inspiration.
Web is easy to click, but only if you learn it properly. It has decades of old features that you shouldn’t be looking at as a beginner.
Beginners should only be looking at learning (and only moving to each new step once they fully understand the previous steps):
- selectors
- block model
- display modes (block, inline, inline-block)
- position
- flex-box
You can make any site you want with those basic concepts.
The other stuff:
If you’re really really set on learning some of the concepts behind GUIs, you can have a look at the rust space which has a whole bunch of incomplete GUI libraries trying to solve problems. Creating a proper GUI framework for Rust isn’t as simple as other languages. Rust’s borrow checker means that devs can’t just reuse existing linked lists and graph based solutions. Raph Linus is one of those devs who is involved in that space, and they’re all experimenting and looking at each other trying to figure out which approaches will work best for them. You can see some of those notes here:
Thanks I’ll read up on these. Yup know about Raph :) and I primarily write rust so I’ve been following the space closely.
On the topic of GUI programming, I feel it’s of critical importance to understand a couple of basic concepts that have a fundamental impact on software architecture:
- Application life cycle, and
- Application states.
Both boil down to one fundamental mental model that is of critical importance for developing a GUI applications: a GUI app is a big state machine, which covers not only changes in the application life cycle (i.e. startup, shutdown by the user, shutdown by the OS, minimize a window, maximize it, move it to the system tray, online/offline,etc) but also in the application state (i.e., login, launch long running task, user opens dialog box, user changes settings, etc)