These days it's very common for more than half your work to take place in a browser, with many browser windows, each having many tabs
Every window of the browser almost is like its own application for the user, yet they're all from the same application with the same name for the OS
How does an application switching interface, rather than window switching interface, work out for that, if a lot of what you want to switch between is different windows of the same browser?
(and what if in addition there would be also many terminal emulator windows, each also with many tabs, and maybe some code editors, spread across multiple virtual desktops)
What's being described as "full screen" windows on macOS is not exactly that, and it's very different than full screen windows on Windows or the standard Linux window managers.
On macOS, when we click on the little green button on top of a window, that window becomes full screen *and* becomes a new single-window workspace.
https://support.apple.com/guide/mac-help/use-apps-in-full-sc...
Except for that annoying quirk, I actually find the interface better (though it definitely took time to get used to it).
cmd-tab switches to the last used application (assuming you don't hold down), right now for me that switches from Firefox to Slack.
Pressing cmd-tab again switches from Slack back to Firefox.
However for window switches
cmd-` switches from my HN window to a jira window. cmd-` again switches to a webmail window. To switch from jira back to HN I have to press cmd-shift-`
If you press Cmd-Tab, hold Cmd, and keep hitting Tab, you cycle through the available applications.
If you press Cmd-`, get the window you want, and do something in it, then press Cmd-` again, you get back to the first window you were in.
If you press Cmd-` repeatedly, you cycle through the available windows of the active application.
There is a slight difference in how you trigger the two behaviours—and the behaviour of Cmd-` can sometimes be a little opaque, I grant, since "do something in the window" is not always 100% clear, either to the user or the computer—but they do have analogous behaviours.
If you’re talking about cmd-tab, personally I’ll take big recognizable icons than thumbnails with minuscule text and such any day.
And mission control will give you windows previews if you want them.
The Portuguese layout sucks horribly for programming, especially on the Mac (brackets in horrible places), and the U.K. layout (where I’m based) sucks horribly for writing Portuguese in. The US international just works for all my purposes (including writing tiny amounts of other languages besides Portuguese and English)
Often I need to quickly switch between a particular terminal window to a particular browser window. But it's always a gamble. I don't know what I'm gonna get when I press cmd+tab. It may show the correct window, or it may show all terminal windows, or it may even do absolutely nothing.
When you press Cmd-Tab, first of all, if you hold it down for longer than about a second, it shows you the icons of the currently-open applications, letting you select which application you switch to.
Whenever you use Cmd-Tab to switch to an open application, it will always foreground all the open windows of that application that are on the active desktop/space.
When I'm doing something like you describe, where I know I'll be switching back and forth between a specific pair of windows of different applications (and I have a bunch of other windows of those applications open), my usual practice is either to size and position them where I can just see both at the same time (large screens ftw), or I'll pull them off into a separate space where Cmd-Tabbing between the two applications will be guaranteed to switch between just those two windows.
Application switching makes sense in a world where the application is the locus of interest and you tend to spend a long time in each app, only rarely switching to another. We haven't lived in that world for a very long time.
Or maybe after a couple more years of macOS and I would get used to it.
Let's say I have just two monitors. That box being checked means I have spaces A1 A2 .. An and B1 B2 .. Bn, and monitor A can display any of the "A" spaces and monitor B can display any of the "B" spaces. But if I want everything from B2 to get displayed on monitor A, I have to create a new space An+1 and drag everything over one window at a time, like a cave man.
Unchecked means I have spaces AB1 AB2 .. ABn, and switching spaces switches both monitors at the same time! So if I want to see the A side of AB1 and the B side of AB2 at the same time, I'm out of luck.
Xmonad workspaces allow me to do any of the above behaviors (oh, and it switches workspaces instantaneously, instead of this left/right spatial thing macos insists on, I guess because of the trackpad swipe gestures). One of these days I need to try to make Hammerspoon fake workspaces in a way that works for me, because (like the OP) this is by far the least comfortable thing about working in macos for me.
The former of those two can also get rid of redundant menubars (as seen in e.g. Figma) which is a nice bonus.
Also, windows are in a stack from least to most recently put in front, so if I know something is toward the back I start with command-~.
I also happen to believe that there is such a thing as having too many browser windows open, so when these strategies start to become unmanageable, I will close some. The Expose for browser windows takes up to twelve before it needs to make the icons really small, that's a reasonable limit for me, especially given both tabs and tab groups (which I'm increasingly making good use of).
To be clear, this is a workflow, not a workaround: unlike focus follows mouse being impossible, I'm content and productive handling the browser this way.
Yes, Mac also supports switching between Windows in the same application but that is rarely what I want either since I am a heavy user of virtual desktops