A GUI emphasises the use of pictures for output and a pointing device such as a mouse for input and control.

A CLI requires the user to type textual commands and input at a keyboard and produces a stream of text as output.

The most obvious difference between the models is that a CLI makes you remember a command, where a GUI makes you recognize a command. The human memory is far better at recognition than recall (example: if I asked you the name of your first teacher at school, you probably wouldn't remember, but if I said "hey, do you remember Mrs So-and-So", you would probably recall her). GUIs let you manipulate graphical (iconic) representations of data and programs.

This is a bunch of hooey in my opinion. The human memory is phenomenally complex and can't be described simply by "better at recognition than recall". You have to remember vocabulary as well, yet that doesn't make humans weak at language. The CommandLine is merely a restricted form of speech. The strong point of GUIs can be summarized by "a picture is worth a thousand words (of description)" - but conversely, try communicating complex ideas with pictograms. I find it much less frustrating to do so with words. What the human memory actually does is association; the more cues lead to a certain memory, the easier it becomes to recall. Doing something in a GUI requires many simple associations; doing something in a CLI requires a single, complex association. The tradeoff is that while you have to take time to train the latter, you will always be forced to do all of the steps a GUI requires. Another reason you have a hard time remembering names of elementary school teachers is that associations change or weaken with time, and the way you interpret perceptions also develops over time so you associate things in different manners as you get older. That's why you can hardly recall anything from your infancy except a few very pronounced memories that have since influenced the way you experienced all of the world. --AristotlePagaltzis