Like jynx, I'm now using a completely console-based
environment, although I've already been working primarily on the
command line for a good few years.
I started writing a list of my 'favourite' programs, but I realise
that I don't actually have that many. This isn't because I don't
like UNIX or don't like my computer setup, though. It's more or
less the 'big' programs I use that are salient enough to qualify as
favourites--things that stick out enough to seem like 'programs'
rather than just 'using the computer'. These are things like vim,
my text editor.
Most of my computing work is done with smaller programs. This is
where the power of UNIX really comes from: Composing single-purpose
tools to solve bigger problems.
For instance, I had to import some raw data into a database last
night. What program did I use? I used awk, bash, cat, cd, chgrp,
chmod, cp, curl, grep, head, info, irb, less, ls, lynx, mv,
postgres, rm, ruby, scp, screen, sed, ssh, sudo, vim, and wc.
What program did I use to make that list of programs? I used awk,
bash, cat, echo, grep, less, rm, scp, screen, sed, sort, tail, tr,
uniq, and vim.
You get the idea.
This way of working might seem a bit strange to people who aren't
familiar with UNIX. It's like playing with Lego instead of, I
dunno, Fisher-Price. Rather than having one big program that does
what it wants, and that's hopefully also what you want, you have
lots of little programs, and you do what you want by picking the
ones you need and putting them together. This makes a lot of sense,
because I don't always want exactly the same thing when I'm using a
How do you "put programs together"? UNIX provides the architecture
and functionality to do this. Just about every UNIX program will
either take some kind of input, or generate some kind of output, or
both. The output from one program can flow seamlessly into another,
into another, and so on. The data that these programs operate on
is, basically, text. This text can have some special meaning,
whether it be scientific data, program source code, commands to
format a document, or words for people to read.
Using UNIX might, a lot of the time, look like programming. In the
sense that programming means "telling the computer what to do",
then yes, it is. But it's also a lot like having a conversation
with the computer. You ask it to do something, and if it's got
anything to tell you about that, it will.
What is the upshot of all this? It means you can pick the way you
want the computer to work and what you want it to do. Programs that
do one thing tend to do them well. You can tell pretty easily what
each tool does. Building something is more fun than playing with
something someone else made.