Operating Systems Suck
So - it's a pretty common manta amongst some specific people that All Operating Systems Suck. Which is fine. They do. But that's because, using software sucks.
I say that a little sarcastically - but I mean that in the same way I say technology is fashion. Basically - people choose technology based on their expectations, rather than their needs. I also hear a lot of things based on what larger corporations use (almost definitely not what you want), what people use at home (which is mind boggling), or else based on what has been marketed to them. This is based on a few problems I suspect.
Basically - I believe the a lot of the problems driving Operating System suckitude is based on what the user wants, what the user expects, and what the user actually is given by OS creators. I, firstly, suspect that people claim to want easy, expect intuitive, and are given obfuscated. Most of the time people who build computer applications mistake hiding configuration and other tools from the user - making as many choices for them as possible. Most of the time - the user is given one workflow, and one model to do things within, and that's the one that the programmer envisioned.
Of course, the workflow the creator envisioned never matches up with the reality that the user has (this is expected and normal). Therefore, the user typically doesn't have a choice available to them. Humans are ingenious and so they begin to change the workflow. They make up solutions - they make up new methods of using the software, things that work for them, but things that makes sense to them. They create novel workflows, and new tools.
By obfuscating complexity in the name of easy - you end up where the user thinks your software sucks. The idioms by which you can approach their software are basically all the ones they've already discovered, except for any configuration you leave up to them. Configuration is the tool through which you modify the workflow, in a meaningful way, which isn't an antipattern. Every single configuration point is a different place where a user can make a choice - and every configuration you take away from the user is a place where they need to develop an antipattern.
This is why people claim that the terminal is such a powerful tool - because it has had so many years of tools built up to create design space in, and so many supported workflows. As well, GUIs have the need to limit the number of options to present to the user in order to limit "clutter". A complex GUI that matches your workflow, or otherwise a GUI tool with the options you need is often better than any other - but each time you add a configuration to a GUI, you must do so specifically - and each time you add an external hook, you need to consciously do so - the Unix philosophy exists to add external hooks without effort, making sure all software has hooks by default. Configuration files are easy to build when building software.
Windows is really great at creating systems that are obfuscated into specific use cases, often specifically designed to be the only correct use case (though other people might believe that the use case is wrong). OSX on the other hand has a super strict use case, which rigidly ignores reality, and marches on into its strictly defined future (only one port to interact with a computer MADNESS, only one program for loading and unloading files from a mp3 player MADNESS). And the more I see Linux be "user friendly" the more I see decisions being made by the programmer, and not the user, and the more I see the growth of antipatterns.
Only by giving users choices and the ability to change their workflow can we really make software not suck. Workflow is the most important part of software usage, and it makes a lot of sense that customizing it is where software breaks, but the idea that removing the choice to customize software makes it easy, intuitive, or user friendly baffles me.