Backport from 3.2: improve argument/parameter documentation (issue #15990).

The corresponding 3.x commits are 69d5d834c5cb, 40fd26a4206b, and
74d8a2a20c52.
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst
index a0898c5..8e218c0 100644
--- a/Doc/faq/programming.rst
+++ b/Doc/faq/programming.rst
@@ -469,6 +469,27 @@
        apply(g, (x,)+args, kwargs)
 
 
+.. _faq-argument-vs-parameter:
+
+What is the difference between arguments and parameters?
+--------------------------------------------------------
+
+:term:`Parameters <parameter>` are defined by the names that appear in a
+function definition, whereas :term:`arguments <argument>` are the values
+actually passed to a function when calling it.  Parameters define what types of
+arguments a function can accept.  For example, given the function definition::
+
+   def func(foo, bar=None, **kwargs):
+       pass
+
+*foo*, *bar* and *kwargs* are parameters of ``func``.  However, when calling
+``func``, for example::
+
+   func(42, bar=314, extra=somevar)
+
+the values ``42``, ``314``, and ``somevar`` are arguments.
+
+
 How do I write a function with output parameters (call by reference)?
 ---------------------------------------------------------------------