La programmation lettrée (ou programmation littéraire) est une approche de la programmation préconisée par Donald Knuth qui se veut différente du paradigme de programmation structurée des années 1970.
Le paradigme de la programmation lettrée, tel qu'il a été conçu par Knuth, s'éloigne dans son écriture de l'ordonnancement imposé par l'ordinateur, et à la place autorise les développeurs à utiliser un ordre imposé par la logique et le fil de leur pensée. Les programmes lettrés sont écrits, dans un langage naturel, comme une exposition ininterrompue de la logique, à la manière d'un essai, dans lequel sont incluses des macros qui masquent les abstractions et la complexité.
La programmation lettrée propose des outils pour obtenir, à partir d'un fichier source, deux représentations : l'une utilisée par un compilateur ou un exécutable, le code « emmêlé », et l'autre lue comme une documentation formatée, qui est dite « tissée » à partir de la source lettrée. Alors que les premiers outils de programmation lettrée étaient spécifiques à chaque langage de programmation, la deuxième génération a produit des utilitaires indépendants des langages et existant hors de ceux-ci.
Edsger Dijkstra, dans sa conférence Turing, , avait mentionné qu'un esprit porté sur la rigueur mathématique et une maîtrise exceptionnelle de la langue maternelle étaient deux caractères essentiels qui faisaient un bon programmeur.
En France, Jacques Arsac était réputé dans les années 70 pour ne pas apprécier outre mesure les recours aux ordinogrammes alors à la mode et lui préférer largement le pseudo-code. Claude Pair promouvait, quant à lui, la méthode déductive, très proche de la programmation lettrée.
Un programme lettré est une explication de la logique du programme en langage naturel, comme l'anglais, entremêlée de fragments de code source traditionnel (éventuellement de macros). Les macros, dans un fichier source lettré, se présentent comme des titres ou des phrases en langue naturelle, qui décrivent les abstractions créées au moment de résoudre le problème et cachent le morceau de code ou la .