What does “Simple” mean in the context of software?
A lot of computer programs, and especially many open-source applications like to boast that they are “simple”. But what does it mean? Given the various applications and misapplications of this word, I can think of several meanings:
-
Easy to use.
-
Lacks complexity (whatever that means and implies).
-
Simplistic.
-
Minimalistic.
-
Lacks extraneous features.
Very often, these meanings are at conflict with one another. For example, the GNOME developers have been keen on making the feature set as minimalistic (in accordance to meaning #4) as possible, which has taken the project to spiraling depths of unusability (opposing meaning #1). Furthermore, Arch Linux taglines itself as “a lightweight and flexible Linux® distribution that tries to Keep It Simple”. However, during one day, I spent three incredibly vexing hours in trying to install it on a Virtual Box virtual machine, due to the installer's lack of usability, and if I had to do it on live hardware, it would have taken me much longer. You call that simple? I joked that it would take an engineering degree from a prestigious university to figure it out. I have that, but it did not help me much.
As a result, I have become incredibly suspicious and weary of any software that prides itself on its “simplicity”, even though “simplicity” should be a good thing.
Bjarne Stroustrup (the creator of C++) has this to say about Java on his FAQ:
Much of the relative simplicity of Java is - like for most new languages - partly an illusion and partly a function of its incompleteness. As time passes, Java will grow significantly in size and complexity. It will double or triple in size and grow implementation-dependent extensions or libraries. That is the way every commercially successful language has developed. Just look at any language you consider successful on a large scale. I know of no exceptions, and there are good reasons for this phenomenon. [I wrote this before 2000; now (2012), the language part of the Java 7 specification is slightly longer in terms of number of pages than the ISO C++11 language specification.]
So simplicity is often a function of immaturity and incompleteness.
Of course, some things that call themselves “simple” are not simple in any of the meanings, for example SOAP, the so-called “Simple Object Access Protocol” (see the S stands for Simple), is not simple in any of the meanings I have given, but it is still called like that.
I feel that like the word “Zionism” no one is no longer sure what “simplicity” means, and as a result, some people no longer consider it a good quality to have. It’s a shame, but that’s life.