We compare the first- and the higher-order paradigms for the representation of mobility in process calculi. The prototypical calculus in the first-order paradigm is the π- calculus. Here, we focus on an asynchronous π-calculus (L π) that may be regarded as the basis of some experimental programming languages (or proposal of programming languages) like Pict, Join, Blue. We extend L π so to allow the communication of higher-order values, that is values that may contain processes, and show that the extension does not add expressiveness: the resulting higher-order calculus can be compiled down into L π. This paper is mostly a tutorial. It also contains original contributions. The main one is the full abstraction proof, which, with respect to previous proofs, is simpler and does not rely on certain non-finitary features of the languages such as infinite summation. Another contribution is the study of optimisations of the compilation, with which we are able to handle recursive types and to prove full abstraction also for strong behavioural equivalences.