Question: Can anyone explain the difference between `use` and `require`, both when used directly and as `:use` and `:require` in the `ns` macro?

Answer: 
`require` loads libs (that aren't already loaded), `use` does the same *plus* it refers to their namespaces with `clojure.core/refer` (so you also get the possibility of using `:exclude` etc like with `clojure.core/refer`). Both are recommended for use in `ns` rather than directly.
Use sure does make it easier by not requiring you to spell out the namespace every time you want to call a function though it can also make a mess of things by creating namespace conflicts. A good middle ground between "use" and "require" is to only 'use' the functions from a namespace that you actually use. 
for instance: 
```

 (use '[clojure-contrib.duck-streams :only (writer reader)])

```

or even better, specify it at the top of the file in the namespace definition:

```

(ns com.me.project
   (:use [clojure.contrib.test-is :only (deftest is run-tests)]))

```