PL/I ou PL/1 (Programming Language number 1, littéralement « Langage de programmation numéro 1 ») est un langage de programmation développé par IBM au début des années 1960.
Son objectif était d'être universel et de pouvoir remplacer indifféremment les langages à destination scientifique, tels que FORTRAN et ALGOL, et le langage COBOL, plus adapté aux problèmes de comptabilité et de gestion. Il permettait même l'accès à des fonctions autrefois réservées à la programmation système, comme la gestion de zones dynamiques de mémoire allouées à la demande (et non simplement à l'entrée dans un bloc), de pointeurs, et le travail par programme directement dans les tampons d'entrée-sortie. Ses capacités de points d'entrée génériques dans les procédures offraient une possibilité qui se retrouvera avec C++. Il avait pour objectif de devenir le langage privilégié de programmation des ordinateurs universels IBM 360 et 370.
Ce langage est défini par les normes ECMA-50 (1976), ANSI X3.53-1976, AFNOR NF Z 65-500 et ISO 6160:1979. Il fut utilisé comme langage de programmation système dans le projet Multics.
Sa syntaxe ajoutait aux idées de FORTRAN certaines idées de COBOL (structures, calcul en mode décimal), et d'ALGOL (structure de blocs imbriqués). Toutefois, les programmeurs de ces deux langages ne communiquaient guère entre eux à l'époque, et chacun jugeait inutile et encombrant ce qui avait été inclus pour l'autre. Son compilateur nécessitait également des machines importantes pour l'époque, et ne comportait au départ ni optimiseur, ni compilateur incrémental (le PL/I Optimizing compiler et le PL/I Checkout compiler ne viendront que plus tard).
Ce langage avait beaucoup des caractéristiques de ce qui sera plus tard le C, et même déjà certaines du C++. IBM déposa les noms de PL/1 à PL/100 pour éviter de perdre le contrôle des spécifications du langage.