J'ai écrit sur l'abstraction à la réponse de Mark Miller's à What is abstraction ? Je ne la considère pas comme une nécessité dans tous les cas, mais comme quelque chose qu'il est bon d'avoir. Elle devient une nécessité lorsque les systèmes deviennent complexes. Nous ne pouvons avoir qu'un nombre limité d'idées en tête en même temps, et nous ne pouvons gérer qu'une certaine complexité dans les idées. L'une des façons de gérer la complexité est de "découper" les idées, de les diviser en concepts, afin de pouvoir en parler en termes d'elles-mêmes, plutôt qu'en termes de leurs composants de soutien en permanence. C'est pour nous, pas pour l'ordinateur.
Certains concepteurs de langage ont essayé d'ajouter plus de puissance à l'abstraction en permettant non seulement l'abstraction lexicale, où vous pouvez utiliser des noms pour signifier quelque chose de significatif dans un modèle opérationnel, mais aussi l'abstraction sémantique, où vous pouvez changer ce que les symboles lexicaux font dans les expressions, non seulement dans les types sur lesquels ils'travailleront, mais aussi leur comportement opérationnel, comme les résultats qu'ils produisent, et quand. Cela permet de les utiliser de nouvelles façons qui, si elles sont conçues avec soin, peuvent "élever le niveau de la discussion" pour parler d'un modèle opérationnel qui utilise des termes que les participants qui observent et travaillent avec lui peuvent comprendre plus facilement, en s'éloignant des opérateurs de plus bas niveau qui soutiennent le modèle, mais qui obscurciraient la discussion potentielle qui pourrait avoir lieu à son sujet. Une autre façon d'exprimer cela est que vous pouvez créer un langage spécifique au domaine.