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

Answer: 
It's idiomatic to include external functions with `require` and `refer`. You avoid namespace conflicts, you only include functions you actually use/need, and you explicitly declare each function's location:

```
(ns project.core
    (:require [ring.middleware.reload :refer [wrap-reload]]))

```

I do not have to invoke this function by prefixing it with its namespace:

```
(wrap-reload) ; works

```

If you don't use `refer` you'll need to prefix it with the namespace:

```
(ring.middleware.reload/wrap-reload) ; works if you don't use refer in your require

```

If you choose `use` instead, (pretty much) always use `only`:

```
(ns project.core
    (:use [ring.middleware.reload :only [wrap-reload]]))

```

Otherwise you're including everything, making it both an unnecessarily large operation and very confusing for other programmers to find where the functions live.

Also, I highly recommend [this blog](https://8thlight.com/blog/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html) as a resource for learning more about Clojure namespaces.
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)]))

```