Disagree. One of the most generally applicable practices to learn as a developer is the ability to use CLIs effectively, for tasks to which they area best suited. Which is the great bulk of them (version control, database admin, most filesys manipulation, etc).
Or to address your point more directly: for many tasks the GUI may seem easier at first, but a modest investment in CLI techniques can yield far greater dividends, over time.
And then there's all the conceptual and dependency bloat that GUIs impose on a project, over time.
I don't think you and the parent are in disagreement if you take their last sentence seriously:
"It could make more impact if it actually explained tasks that are harder to do in GUI than in the command line, such as massive renaming of the files, filtering files depending on content and so on."
It seemed to me his assertion wasn't "the CLI is bad and we shouldn't use it," but rather that the linked "You Don't Need the GUI" piece doesn't make a particularly good case.
And, I admit I agree. There are things that a CLI is much better at, especially if you're a developer, but there are other things that a GUI is arguably better at, sometimes even if you're a developer. If I have a bunch of files that need to be committed to a git repository and I want to commit the changes in multiple commits so they're related by topic, it's faster to select and commit each set of files with GitUp than it is using git's CLI. I find myself switching between the terminal and Finder on a fairly routine basis depending on what the task is.
tl;dr: GUI aficionados really should learn the CLI, but the reverse is also true. I can't speak for every GUI out there, but there's a lot you can do in macOS's that I think people don't really take advantage of.
True, it would be nice to join both (though I'm fine with only cli). One example is vim's :set guifont=(star char here), where star is a special value that modal-calls system font selection dialog. It would be great if shell also had something like @ wildcard, which would expand into file selector gui, unlike other wildcards. So you could 'svn commit ./path/to/@' and select what you want (or press cancel/esc).
It is partially possible via svn commit `select-files ./path/to`, except cancel part.
If you type
svn commit ./path/to/<Star><Star><tab>
It launches a fuzzy Finder (within the terminal) that you can use to recursively search through `to`. You can use the arrow keys and enter to navigate and select. Imo it's faster than a gui would be.
I agree with you in general, but the first two examples you cited are all more comfortable on the GUI for me.
TortoiseSVN was a breakthrough for me. After switching to git, it was painful to try to remember all the different commands, wade through commit logs and find the hashes of commits. I see TortoiseGit exists, but since my org is still on SVN i haven't really given it a try.
Database admin, same thing. CLI clients such as sqlplus or pgsql are ok, but I'll never be able to commit to memory the various commands to show tables, show all databases, describe a table, etc. The one exception is the mysql client which has sane defaults and easy-to-remember commands. I frequently switch dbs, so this is a must. Pgadmin, sql developer and even the buggy MySql Workbench are all more pleasant to work with than CLI, in most cases.
But this are just my preferences. If the CLI works better for everyone else, then great. Maybe I'm missing something, and maybe someone would give me a pointer to unlock the magic of CLI in these scenarios that would make me more productive
MySQL/MariaDB also has really good built-in help. If you can't remember how to re-order columns or add a constraint, it's just a `help alter table` away. `psql` also has decent built-in help, but sqlplus is practically unusable without the manual on your desk.
Totally agree. I frequently find myself googling things like "postgres equivalent of describe table" and the like. I didn't know you could get operation reference in MySQL. Thanks for the tip!
I don't understand why version control is easier using the command line? I use perforce daily, and struggle with the command line interface. The GUI gives me lots of vital information at a glance without having to query it, and for the most part can do everything I ever want to do in 2-3 clicks.
Aside from large integrates, everything that the people working on my project do is drom the GUI.
I agree with you general point, but I think for your specific examples you may just not have used the best GUIs.
Magit https://github.com/magit/magit is definitely the best user interface I've tried for version control. I still drop to the command line occasionally, but it's not as productive unless I'm doing something unusual.
SQL Server Management Studio is also much better than any command line database tool I've used. For any action you can do in it, you can hit a 'generate script' button which you can use to automate what you just did. This is a fantastic feature, because using the GUI becomes a better way to discover and understand the CLI underlying it.
I agree that CLIs have advantages over GUIs in many cases (but the GUIs have advantages over CLIs in many other cases).
However, the linked repo in the original article simply presents a few commands for copying, moving and zipping files. This is useless and will not convince anybody that they do not _need_ a GUI. It makes a very poor case. If you know what terminal is and how to launch it you already know way more than that article shows, if you don't then there is no way it will convince you that you do not need something like Finder.
I always have a problem with not dog fooding. If we're building UIs and such then we should use them, learn from them, etc. Yes. Absolutely. They sometimes have limits. But scarcity breeds innovation. It's hard to imagine in 2017 that we're accepting CLI as innovation. That's just feels too silly to me.
CLI's are automatable and scriptable in ways we still haven't achieved with GUIs.
They are also usually easier to write and to maintain.
There are many, many more reasons too.
[QUOTE]
... to me, GUIs are like a caveman language where you have to grunt (click) and wave your hands (mouse) at the computer until it does what you want. (imagine the mouse pointer as your hand, then say "ugh" every time you click to mean "ME WANT THAT".) if whoever wrote the gui didn't add a feature that you can specifically communicate with an exact grunt and wave sequence, you're out of luck and have to ask the developer to add that.
Shell scripting is like spoken language, a much more natural and powerful way to communicate what you want to do. instead of every developer having to reimplement functionality for crawling a tree and doing something, one guy just writes the 'find' command and it's usable in conjunctions with other commands.
[/QUOTE]
I'm not sure where the "point and grunt" analogy came from, but I first read it from Eben Moglen. I can't remember where, but there are lots of examples floating around, e.g. at http://www.cabinetmagazine.org/issues/1/i_moglen_1.php
> In 1979, when I was working at IBM, I wrote an internal memo lambasting the Apple Lisa, which was Apple`s first attempt to adapt Xerox PARC technology, the graphical user interface, into a desktop PC. I was then working on the development of APL2, a nested array, algorithmic, symbolic language, and I was committed to the idea that what we were doing with computers was making languages that were better than natural languages for procedural thought. The idea was to do for whole ranges of human thinking what mathematics has been doing for thousands of years in the quantitative arrangement of knowledge, and to help people think in more precise and clear ways. What I saw in the Xerox PARC technology was the caveman interface, you point and you grunt. A massive winding down, regressing away from language, in order to address the technological nervousness of the user. Users wanted to be infantilized, to return to a pre-linguistic condition in the using of computers, and the Xerox PARC technology`s primary advantage was that it allowed users to address computers in a pre-linguistic way. This was to my mind a terribly socially retrograde thing to do, and I have not changed my mind about that. I lost that war in the early 1980s, went to law school, got a history PHD, did other things, because the fundamental turn in the technology - which we see represented in its most technologically degenerate form, which is Windows, the really crippled version. I mean, I use Xwindows every day on my free-software PCs; I have nothing against a windowing environment, but it`s a windowing environment which is network transparent and which is based around the fact that inside every window there`s some dialogue to have with some linguistic entity.
Thanks for the reference to that interview -- it's also an interesting resource for the crypto wars.
Edit: it's also apparently one source for Eben's idea that I read a while ago but couldn't find again, about the switch from fighting over crypto for privacy to fighting over crypto for DRM (though it seems like in past few years we've gone back to fighting over crypto for privacy again).
I think the key distinction is between different kinds of tasks (and importantly, the scale on which those tasks are done) rather than different kinds of people.
CLIs are idiotic. Why can't you just click a button and be done, certainly not sit there and spend 20 minutes figuring out what the fuck -g means or if knockut-sortable is missing an o.
It's utterly ridiculous that you're discussing this and just shows how many of you are utterly brainwashed by utterly useless trivia that your computer should be memorising for you but your fellow programmers are too lazy to implement GUIs for.
I honestly can't comprehend that you so gleefully spend your time so pointlessly, you should be spending your brains on solving actual life and business problems, not memorising the syntax of CLIs you'll use once every 3 months, or worse still, never again, or virtually useless regex syntax.
The day when gui applications have anywhere near the composability of cli applications, I'll think about it.
> I'm a developer
> useless regex
I don't know what kind of developing you do but regexes are massively useful if you do any sort of string handling or input checking.
> CLIs you'll use once every 3 months
Funny, I spend 90% of my time in a CLI. I don't spend my time memorizing stuff, the commands I use frequently are committed to muscle memory, the rest I look up. If you spend time with the CLI you learn to look stuff up not too inefficiently. Looking for a menu entry in a GUI is more painful to me than reading/grepping a man page.
Sounds like you really hate CLIs, I hope you don't have to use them too often, there's no reason why everyone has to use them, but I promise you, there are hundreds of thousands if not millions of productive CLI users out there.
I'm a developer, and an ex-sysadmin. Using the CLI makes my life much simpler. I greatly prefer being able to write scripts, and use things like PDSH to run commands across many boxes. For example, go through every web server, search their logs for occurrences of IP X and then count the number the number of requests per second. Is this something I do every day, nope, but the basics of doing it are the same as the basics of so many other things that I do that there is no issue memorizing the commands.
Using guis and managing a server without a CLI is a very annoying situation.
There are other things where using a GUI is way nicer, like complicated partial git commits.
Also thanks for informing me that I have aspergers, guess I'll have to go have a doctor check that out ;)
How you can tell someone is perfectly normal: they will tell you they are normal.
On the topic, some GUIs are idiotic. A command takes a second to type, but a complicated GUI may take multiple buttons, menus, etc. that take almost forever to navigate.
> I honestly can't comprehend that you so gleefully spend your time so pointlessly, you should be spending your brains on solving actual life and business problems, not memorising the syntax of CLIs you'll use once every 3 months, or worse still, never again, or virtually useless regex syntax.
This makes me skeptical that you're a programmer, because you just described programming. CLIs are everywhere in programming, and if you haven't written a script you prototyped on a command line, you can't be very experienced as programmer.
Eh, beware overgeneralization from your specific context. I've been working in the Rails/OSS world for the last 5 years or so, and I agree that in this context, someone claiming dislike of CLIs would give me pause.
However, I spent a decade working in .NET on Windows – mostly before PowerShell became popular/usable. A lot of good, experienced programmers in that space rarely used a CLI. I personally had some batch scripts that I used often, but for most people on my team, the CLI was just used for infrequent admin tasks, e.g., debugging a networking issue, restarting IIS, etc. No part of the daily programming workflow depended on a CLI.
I've also worked around some iOS developers, and their workflow seemed similar in that most of them rarely used the terminal for anything beyond infrequent admin tasks or maybe version control.
So yeah, I live in the shell, and it's hard to imagine anyone working in Ruby (or Python or server-side JS) for long without heavy CLI usage. I love the power and composability of the command line, but I also understand that not everyone does and not everyone needs to.
Edit: This might be a flawed analogy, but my feelings on this are similar to my feelings on an IDE vs a text editor. I've become a somewhat passionate vim user, but I wouldn't negatively judge a .NET developer for using Visual Studio nor an iOS developer for using Xcode.
Dump 150 table database, both schema and data. Except two tables, for which you need only schema. Then compress, encrypt & email.
With CLI I can spend 10 minutes looking up documentation, shove command into shell, start it and go to lunch. If I need to something like that again, I can Ctrl-R it, tune and launch again in couple minutes.
I think that's exactly the kind of workflow we should be able to create a graphical interface for.
I sometimes wonder if our ability to imagine what visual interfaces can do is limited by our experience with current GUIs. Right now, as other have pointed out, we're limited by the fact that GUI interfaces aren't really composable the way CLI commands are.
But what if we had something that is composable -- maybe something like Smalltalk on steroids -- where every program is a living object that can describe in detail what it does? Then, you'd be able to ask the program what inputs it requires, what its abilities are, and what outputs it can provide.
With something like that, it would be possible to visually put together interesting combinations of programs that we might not have created otherwise. Sort of the like what Bret Victor describes in 'Inventing on Principle'[1] where certain solutions to problems become much more apparent when you can manipulate things and try out new combinations quickly. I'm certain things like this exist (and have existed) in various forms, but I don't think we've explored the concept as fully as we can.
On the other hand, though, I agree with a quote from Eben Moglen earlier in this thread where he talked about 'point and grunt' interfaces. We've been iterating on the same paradigm for a long time. Touchscreens are better in some ways, and worse in others. We gain more physical interactivity with our devices, but we lose a lot of precision because we're now just smacking meat sticks against a pane of glass.
But you know, it's easy for me to sit here and complain about this on the internet. Actually doing something about it is much harder. Maybe it's time for me to fire up Smalltalk and give it a try. :)
Or to address your point more directly: for many tasks the GUI may seem easier at first, but a modest investment in CLI techniques can yield far greater dividends, over time.
And then there's all the conceptual and dependency bloat that GUIs impose on a project, over time.