In modern English usage, the term "idiot proof" describes building, organizing or writing in such a way as to be usable to someone of lower to average intelligence. Defensive design. The term came into use in the late 1970s to early 1980s.
Look at this Idiot Proof Website. It is a brilliant satire of this dangerous and backwards concept.
Programmers and designers are often told to make their products idiot-proof for the final customer. I contend that when you make something idiot proof you encourage idiots and punish intelligence. Users should be rewarded for their intelligence by having flexible interfaces that grow with the knowledge of the user.
The problem with idiot-proofing is knowing when to stop. How much do you dumb an idea/interface/feature down before it appeals to your local idiot, and how much does this restrict and frustrate an informed or intelligent user? The process is purely speculative and therefore inaccurate. It offends intelligent users who are willing to read manuals, brief introductions or even contextual help to further their expertise.
This issue is tied in closely with backwards-compatibility. Cars don't have reins to be backwards-compatible with horses. If you continually pander to idiots and backwards-compatibility then you are forever stuck with the same problems and constraints of current and past technology - you are preventing progress.
Does this mean that I think users should need to read an entire manual before starting to use software? No. It simply means that users should not be restricted by a designer's hazy guess at how intelligent they should be. Striving for clarity and eliminating needless complexity is not idiot-proofing. Clarity and power should be the end game for software or design - not restriction, constriction or condescension.
Shaw's Principle: Build a system that even a fool can use, and only a fool will want to use it.
Django Python 960.gs Git Vim NetBSD Nginx
This is the blog of Brad Willis, a software engineer living in Brisbane.
Help
Latest entries
*BSD Agile Apache Apple apt Athletics Best-Practice Censorship Chrome Comedy Cool Crosswords Deployment Django English Exim Firefox Git Hardcore Health irssi Javascript Jira Languages Linux Makefile Mathematics Mobile Broadband Mutt MySQL NetBSD nginx Nokia OpenVZ OSX Perl Postfix Privacy Python Rant Requirements rsync Ruby Shell Slackware SQL SQLite SSH Standards Subversion Television Testing ThisBlog Vim VMWare (Fusion) VPN X zsh
gvim - Always open new files as new tabs
crontab - escape % (percentage)
OSX Google Chrome - start in incognito mode
SQLite date arithmetic
Postfix - delete message in mailq
Checking for exceptions in doctests
Homer's Curling Speech
retry in Python
Vim Makefile tabs
Centos (or RH) IPTables
Converting ssh2 public keys to openssh
Vim comment hints
Context managers in Perl
Dish rotation
Git - fixing commit user
apt stuff
Using shell variables in AWK
Linux - Too many open files
Tell gvim to save and quit... remotely
Vim - automatically remove whitespace at EOL
Python - relative paths from within modules
TV Aspect Ratios
Git - Which commits are in your branch only?
Subversion setup cheat sheet
Force detach a screen session
Modify sudo's use of environment variables
Install all Perl modules
Mutt - delete old messages
OpenVZ VPS and swap space
fail2ban on NetBSD for ssh
NetBSD - Using sup
Python - testing for a sys.exit
Python Best Practice Link Dump
Python script names
Perl - Using an expensive module
Speed of git clone
Perl Modules with Custom Prefix
Perl: tr vs. s
Brilliant sysadmin Reference
Why is GRUB better than LILO?