While I agree 100% on the programming part of this article, I think it kind of misses the point when it comes to what GUIs are good for.
It has been noted that GUIs make simple things simple, and complex ones impossible. Certainly it is worthwhile to make simple things simple. But too often software is geared to only one level of expertise. That which is novice-friendly is too frequently expert-hostile, and vice versa. Being needlessly forced to click the mouse over a menu will slow down the expert user who is more comfortable with a keyboard interface.What has mouse-only interaction got to do with a GUI? A _good_ GUI will provide as many modes of operation as possible, including keyboard where appropriate (which is many places for most applications).
E.g. a graphic-intensive program like Photoshop has a LOT of keyboard shortcuts for e.g. selecting tools in the toolbox, selecting etc, etc. You can really tell that this program has been around a long time by looking at the streamlined UI. And, it's really a shining example of TMTOWTDI once you learn the more esotheric parts :)
One of the good things about a GUI as opposed to a CLI (Command Line Interface) is that they are "explorable"(1) to a greater extent. Rarely used commands are found in menus for easy browsing, commonly used commands have shortcuts and maybe a button in the toolbar. Using the GUI to learn to use the application is a good thing because it will allow people with different skills to jump right in at a comfortable level, allowing them to grow more advanced and efficient ways to use the program over time.
People are different. Some prefer text. Some people are more visually oriented.
Programs are different. Some problems are more suitable for a visual direct-manipulation approach, while other are strictly text-oriented, which the moronic and endless point-and-click configuration of many Windows programs proves (where text files would be a so much more usable and efficient solution(2)).
Programs have different usage patterns: the program itself may be complex or "shallow", different users may use the program seldom or daily. Ignoring these usage patterns will get you a bad user interface, be it a GUI or CLI.
His entire site is very good, BTW. Other nice sites about GUI and usability design are:
(2) But like I said, more modes of operation is better. What's wrong with text files for experts and automatic processing, _and_ a GUI for seldom-users?