Convergence
L'un des objectifs définis dans le cahier des charges pour la définition du langage Ada était qu'il permettrait de faire des économies. Une manière d'y parvenir consistait à créer un langage universel et très normalisé. Universel parce qu'il était destiné au développement d'à peu près tous les types d'applications (gestion, scientifique, temps réel, applications embarquées ). Ainsi il n'est plus nécessaire de former des informaticiens à plusieurs langages et les domaines spécifiques sont moins éloignés les uns des autres (bien qu'il ne soit par exemple toujours pas immédiat d'obtenir une précision optimale pour un programme de calcul scientifique). Comme le langage est très normalisé, il est plus facile de porter une application d'un matériel vers un autre et là aussi les informaticiens ont moins besoin d'une spécialisation pour chaque système.
Une autre option a été la définition de composants logiciels, c'est à dire de parties standard de programmes pouvant être réutilisées un nombre indéfini de fois. Ainsi ce sont les applications elles-mêmes qui sont standardisées et partagent un maximum d'éléments. Ces composants doivent s'intégrer avec le minimum de problèmes dans de gros développements réalisés par des équipes plus ou moins nombreuses. Ce besoin est pris en compte dans différents langages modernes et a mené à l'idée de séparer une interface accessible aux programmes utilisateurs d'une partie cachée où se trouvent les mécanismes employés, que cette approche soit nommée encapsulation ou utilisation de types privés.