The mouse was literally the worst thing to happen to computers.
“Caveman interface.”
Pre-linguistic/animal-like
“Point and grunt”
(Tablets and even “Minority Report” are cool and fun...but why is Charades a game?)
Because you can very quickly say/relate complex concepts in a concise way, by combining a series of simple symbols.
You know, like talking. Or writing.
Command line is the act of literally talking to the computer....unlike...
Buttons and gestures are frequently convenient for repetitive tasks...
...but to do anything intelligent,
you need LANGUAGE.
TEXT. Numbers and Letters.
Yes, I do think a *lot* of this UI/UX stuff is an enormous waste of time.
Especially since we have collectively "rediscovered" how good language can be,
in the form of Siri, Alexa et al.
(a waste of time and perhaps "ableist" as well.)
Know how to make your interface "ADA compliant" or otherwise definitely works everywhere?
ONLY USE TEXT.
Big differences though, roughly:
Or, I should probably say, a particular couple of ways to
redefine SIMPLE and EASY.
Big differences though, roughly:
Command line =
"Unfriendly, but a great deal of power and possibility through simplicity"
Siri /Alexa =
"Friendly, but very little power and lots of complexity, and it only lets you do like seven things" ☺
(all computer languages are for humans!)
Changing your screensaver
Writer/Word
Calc/Excel
HTML/CSS
Bash
PHP/MYSQL/Javascript
Python/Perl/Ruby interpreted/scripted
C compiled
Assembly (00 4E A3 77 8C 0A etc)
Good question.
What is taught as coding is usually:
“IN THE BEGINNING”
e.g.
It's nearly always presented as...
print “Hello world”;
and/or
(as if you were starting from scratch)
At a point in history, this was the ONLY
way to interact with the computer
AND
The "users" were the "programmers"
NO HAND HOLDING
That default thing that comes up on all the unixy-linuxy systems everywhere.
It’s a text interface. You type commands into it and the computer responds.
And it’s also a "programming" language. As in, you can type in more than one command in a row, save it to a file, and run the file. So, you know, "programming."
(ignore basic programming ideas like "objects" for now)
(open it in a text program like gedit or leafpad or notepad. Can you kind of read any of it?)
NOTE: Remember, frequently you can convert one to the other, e.g. ZIPs
Text
HTML
XML
.ini
Executables (bin, exe)
ZIP
ISO
jpg
MP3
MP4
Nearly any (real) language CAN do what any other real language CAN do...
If you want to sound smart say:
Turing Machine or Turing Complete
and
Lambda Calculus
Nearly any (real) language CAN do what any other real language CAN do...
Nearly any (real) language CAN do what any other real language CAN do...
..actually mean something today
ROOT – Like “Administrator” or maybe “God”
users – humans
(..and others – fake “users” to get tasks done)
Some systems (eg Ubuntu) allow for Super Users
S.U.- do “this” = sudo
Three major things you can do with files
Three important “groups”
..are weird
Any IMPERATIVE action the computer can do. Can be one word or more.
Ultimately, will be an ORDER, usually expressible as a VERB
Are VERY closely related to (if not identical) to FUNCTIONS/METHODS
"Computer! Do THIS!"
ls
Since we're in the command line we are always acting on:
FILES and/or TEXT. These will be input and/or output.
if commands are VERBS, the FILES and TEXT are the nouns/objects
We call these expressions
(and of course, the TEXT can lead you to something else, like a FOLDER)
cat file.txt echo "Hi there" ls "/home/mine"
Nearly every command can act on either TEXT or FILES or BOTH.
We've talked VERBS and NOUNS. But we might want to modify the operation of things;
Think ADVERBS and/or ADJECTIVES:
On the command line, these are called options
but seriously, Google/Duckduckgo etc
cat - "Good" example of "efficiency" at the expense of "redundancy"
i.e. it means "concatenate" — which is to squish two files together and print to the screen. But it can also do it with just one file.
less - this is such a terribly bad joke I hate even explaning it
because here is the power:
One way to describe cat - It "shows you the file"
BUT, let's be VERY precise here:
Cat TAKES A LINE OF TEXT (that refers to a file)..
and PRINTS IT ON THE SCREEN
TAKES A LINE OF TEXT = "Standard Input or stdin"
PRINTS IT ON THE SCREEN "Standard Output or stdout"
Default is to read from stdin, and write to stdout.
But by changing the default NOW YOU'RE PLAYING WITH POWER
(interesting then , cat goes from FILE to TEXT, and > goes from TEXT to FILE )
THAT'S MY OPINION
If it works and its clearer to you, don't let the supernerds tell you it's a bad idea e.g.
"Useless use of cat" IS FINE
BASH (Bourne Again) Shell - others are fish and zsh, etc
Lots of “tricks” are available here, eg
and many MANY more...
Furthermore, you can modify this environment to fit your needs, via:
.bashrc
(stuff here will be run everytime you open a terminal)
A great example is the “alias” command. If a command doesn't exist for what you want to do, just ,ake up your own!
alias modbash='nano ~/.bashrc'
You may see some like
"zsh" or "Zshell"
or Fish
or Oilshell
Roughly, they're a bit nicer to use, but are not "backwards compatible"
which may not matter. Feel free to try them out!
(later on, be careful when NOT using them interactively/as a REPL)
IN TERMINAL
ALSO
COMMAND/ARGUMENT STYLE
sorting text
searching text for matches
grep OPTIONS PATTERN (FILE)
Can search over FILES or STDIN
Also, can search ONE FILE or MANY (check -d or -R)
useful flags:
-i (case insensitive)
-v (invert search/show NON-matches)
-l (just show matching FILES, not lines)
(see also "ripgrep" or rg)
- sed
- awk
- find
- locate
head
and
tail
for getting only part of a file, by lines
"Transliterate"
Easier way to do SINGLE CHARACTER deletions or transforms
(but can act on "groups," like "A-Z"
Nice way to cut up lines. Just specify the "delimiter"
(the character you'll divide on)
and "which field" by number
echo "first:second:third" | cut -d ':' -f2
yields second
Command Line Interface
vs.
Graphical User Interface
(but, why not both)
(hardcore nerds may distinguish and call these TUIs)
"ncurses"
firefox http://jrm4.com
or
firefox /home/myuser/html/testindex.html
(NOTE, closing the terminal may also close the program)