With Windows, there is a single shortcut to switch between windows: Alt+Tab. Its simple, and it works.

OS X however differentiates switching between:

  1. Apps
  2. Windows of the same app
  3. Full Screen Apps

Apps

For switching between apps, you press Cmd+Tab, which initially sounds very familiar to the Windows Alt+Tab.

Windows of same app

However, if you have multiple windows of the same application open, now you have to press Cmd+~ to switch between those.

So now you have to constantly remember if the switching you are doing is in the same app or across apps,

Your brain thinks in terms of 'get to that last window I was looking at', not 'get to last windows of same app' , so this "feature" will constantly tax your brain when working with OS X. Many times I end up pressing the wrong shortcut, resulting in switching to the wrong window.

Full Screen Apps

However, things go truly insane when one of the windows of an app is put in 'Full Screen mode'. Now, you simply can't switch between multiple windows using the Cmd+~ shortcut!

So if your app is full screen, the only way to switch between its windows is to open Mission Control and manually select the other window by looking around!

Due to this, most applications have had to invent their own shortcuts for switching between windows which works regardless of full screen mode. For example, Intellij uses Cmd+Alt+[.

This makes things even worse since now you have to remember different shortcuts for different apps!

The Dock From Hell

The Dock is so insane, its not even worth looking at. For example, why does my Dock show SourceTree and Slack on the right side but not Intellij or Sublime, is beyond me. I assume it just randomly picks which windows appear on the right pane vs left.

Conclusion

Window switching in OS X is truly hell. It is a cacophony of keyboard shortcuts that you have to remember and which cause you to switch mental context when you are working on something.