how to skip directories when using find on directories

there have been many, many dozens of times when I needed to use the find command on a directory, but needed to skip some portions thereof, eg., list all directories in $HOME, but skip all the hidden ones, or do the same in a directory that’s been checked out from subversion (skip the .svn directories).

this should work but often fails:

find . -path foo -prune -o -print

this does work:

find . -type d ! -path '*.svn*'

note that the last argument requires either single or double quotes:

find . -type d ! -path "*.svn*"

note also that the exclamation mark does not require quotes.