Jul. 4th, 2014

Customizing

Jul. 4th, 2014 02:09 pm
migmit: (Default)
I hate customizability.

Don't get me wrong. I'm not saying having an "Options" window hidden somewhere is wrong. Quite the contrary. Only the smallest programs can work without it. Or the programs that are nothing but a big "Options" window (like, "System Preferences" in Mac OS X).

And the idea of enabling the user to change anything and everything, tweaking the program and setting every little detail so that it's just right, sounds very exciting. Kinda like communism — I mean, come on, who doesn't want to get whatever he needs, while giving back only as much as he can, right? And, like communism, it doesn't work. Or, if implemented (which, unfortunately, requires somewhat less efforts than establishing communism), it leads to macabre, to say the least.

The problem as I see it is that the resources are limited. They are always limited. And at some point the decision has to be made: either we figure out the best way to do something, and proceed accordingly, or we insert enough hooks so that the user can do it himself. It requires a lot of effort to do either of this things, but doing both at the same time is an order of magnitude more complicated. We don't just have to make things look and work good; we have to make sure that if the user changes something so that it no longer works as we imagined, the rest remains intact.

So, nobody goes both ways. Either we get the thing that just works — and if it doesn't work as we want, our only option is to discard it and get something else — or we get a piece of shit; a customizable piece of shit, but still.

I really prefer the first option. I'm really flexible; I don't mind going from Mac OS X at home to Windows 7 at work to Debian Linux in VM. What I don't want is to spend my time configuring tools so that they at least do their job. I don't want HammerFactory; I just want a really good hammer, and if the one I've bought doesn't suit me, I'll buy another.

What is really sad is that sometimes the first option just isn't available. There are some good IDEs out there (the best I've ever seen is probably Visual Studio — yes, seriously), but there is nothing that works for Haskell better than Emacs. And Emacs is a terrible IDE. Yes, you can customize it. No, you can't make it good. And when you find out you can't — well, they would laugh at you, call you names and say that it's all possible, you just haven't tried hard enough. Which is kinda true — but that's the point. I want to be an awesome Haskell programmer; I don't want to be an awesome Emacs developer. Why? Because I don't.

I'm not attacking open source, by the way. A couple of days ago I've had a "training" in the thing called "Rally". It's supposed to be a collaboration tool. Very enterprise-y. And yes — quite customizable. No, it doesn't work; but nobody cares. And yes, we are stuck with it. Management decision.

On the other hand, we have open source tools like "git", for example. Do you customize it a lot? I bet you don't. Yes, there are some customization parameters, like "user.name" (which git explicitly asks you to set), and there are ".gitignore" files — but those are minor things. Git just works, and works great.

So, customizability isn't a good thing. It's just an excuse for developers to make the user do their job, while ridiculing the user for failing.