En informatique DWIM est un sigle pour Do What I Mean. Cela signifie « fais ce que je veux dire ». Il est utilisé en informatique pour dénoter la qualité des langages qui permettent d'éviter de spécifier « en long, en large et en travers » l'action à effectuer. En d'autres termes : on peut spécifier le « quoi » sans spécifier le « comment ». Mais souvent, comme dans l'exemple développé ci-dessous, c'est le « quoi » lui-même qui est omis et qui doit donc être inféré.

Le DWIM est aussi la qualité des programmes ou parties de programmes qui exploitent le DWIM du langage utilisé. Comme en anglais, où le rôle grammatical des noms est assez souple, DWIM peut aussi utilisé comme verbe : « Les langages de bas niveau ne DWIMent pas ».

En effet, lorsqu'on écrit un programme en assembleur, on doit spécifier des détails de la mise en œuvre comme les registres par lesquels transitent les valeurs calculées. Pire, ces détails enferment le programme dans l'architecture matérielle choisie et empêchent sa portabilité.

La conséquence souhaitable du DWIM est d'obtenir des programmes concis mais lisibles.

Le DWIM est la qualité de certains langages puissants mais complexes. Cette qualité est très subjective et son appréciation dépend beaucoup des goûts du programmeur. Typiquement un langage qui utilise des informations contextuelles DWIMe. La complexité du langage augmente aussi la charge cognitive du programmeur qui doit bien en connaître les mécanismes pour comprendre un programme en apparence ambigu.

Les langages de haut niveau n'ont pas nécessairement la qualité DWIM.

L'importance du DWIM et les contextes de son usage raisonnable sont controversés. Le DWIM de l'un est souvent l'assombrissement de l'autre.

Exemple simple modifier

En Perl 5, la variable $_ est une sorte de pronom à tout faire. Sa valeur est affectée par un grand nombre d'opérations. Elle est un paramètre implicite de beaucoup de fonctions. C'est donc une forme d'usage implicite du contexte. Pour certains, ce style est acceptable uniquement dans les unilignes.

  $_ = "Salut le monde";
  print;  # équivalent de "print $_"

Mais cette qualité de DWIM doit être une partie intégrante du langage sinon elle devient rapidement agaçante et fragile. Ainsi Perl 5 n'a pas de mécanisme formel de signature de fonction. En l'absence de signature, forme de documentation concise et formelle incluse dans le code lui-même, il faut donc se reporter à la documentation pour savoir que $_ est un paramètre implicite de la fonction print. Le mécanisme est fragile car il n'anticipe pas que l'usage le plus commun de print utilise un saut de ligne terminal. Perl 6 propose une fonction say qui ajoute ce saut de ligne terminal.

  print "$_\n";   # Perl 5 : impossibilité d'utiliser le $_ implicite
  say;            # Perl 6 : équivalent à  print "$_\n"

Le concepteur de Perl 6 anticipe que say sera plus utilisé que print. C'est pourquoi il a choisi un nom court de trois lettres conformément au principe de Huffman. Comme le DWIM, le principe de Huffman concourt à la concision des programmes Perl.