Vivek Haldar got me thinking a bit with this great post here contrasting GUI’s vs CLI’s
Short summary is that some computer environments are targeted towards expression, while others are targeted towards operation. GUI-based programs tend to be a way to operate a computer, while CLI program systems allow for recombination and expression.
Think about it. You run a GUI, and everything you do is an operation. It is targeted strictly towards a well defined set of results. While operating a GUI, you can’t take the data from the top-corner button, and pipe it to the bottom corner button to make it do something new and cool, you’re stuck with what you see in front of you.
On the other hand, if you run a CLI, with its pipes, redirects, and scripts, you’re unbounded, you can create whatever results you want. Data can flow where you direct it, but you have to learn a lot about the system before you can be a master of this. CLI’s are unbounded and require mastery, while GUI’s are bounded, and do not require mastery.
Neither approach is bad intrinsically, its just some approaches are better suited for some purposes. Just like a car needs an operation panel, many computer users just need an operation panel to accomplish whatever function they have. e.g. Its sufficient for an accountant to just push a button to compute a well-defined sum of all the spreadsheets they have. Expressive purposes, like programming or managing computing systems tend to
favor the expressive CLI approach. An admin needs to be able to recombine his system quickly on the fly, and the CLI approach better lends itself to this.
This way of thinking about the dichotomy between GUI and CLI is pretty applicable to thinking about how computers have evolved over the past 20 or 30 years.
Linux saturated the “expressive market” quite readily, from when it became usable in the early 90’s. Everyone who wanted full flexibility of their system flocked to Linux. It cornered the expressive niches (servers, scripters, programmers) quickly, but always stalled out when trying to take share from the operational market (read, Windows). If you can internalize the Linux ecosystem’s commands, then you have unbounded potential to recombine and use your computer.
Windows is heavily GUI based; that is, its heavily designed around operating a computer, and it has done very well in terms of market share because it met the need a large
majority of computer users need. I, being a programmer accustomed to the expressibility of Linux, feel like I’m fumbling on a Windows computer because I can’t express, combine, recombine, and create the way I’m used to. The big majority of users don’t particularly care about this, they want their computer to do a few fixed functions, and the GUI approach works for them.
The success of Ubuntu stems from the realization that Linux circa 2005 was ready for prime-time, but was totally geared towards expressibility. In order to gain market share, (and the advantages that come with market share and additional resources), Ubuntu started gearing more towards operational efficiency, without sacrificing its expressive roots. Its great to see how it continues to grow, and just who is picking up Linux/Ubuntu these days as the open source ecosystem continues to grow in operational efficiency! I like to see new approaches like Unity coming down the pipes; hopefully it will help Ubuntu gain more and more of the “operational” user base!