# Alexander Stepanov

Alexander Alexandrovich Stepanov (en russe : Александр Александрович Степанов) est un informaticien d'origine soviétique, né à Moscou le 16 novembre 1950, où il a étudié les mathématiques. Spécialiste de la programmation générique, il est le créateur, avec Meng Lee, d'une bibliothèque du langage C++ appelée Standard Template Library. Il a commencé à développer la STL aux environs de 1992 lorsqu'il était employé de HP Labs. Il avait travaillé auparavant aux Laboratoires Bell et avait essayé de convaincre Bjarne Stroustrup d'introduire quelque chose ressemblant aux génériques d'Ada, dans C++.
Il est l'auteur (avec Paul McJones) d’Elements of Programming, un livre qui est issu du cours Foundations of Programming que Stepanov donnait à Adobe Systems lorsqu'il y était employé.
Il a pris sa retraite d'A9.com en janvier 2016.

## La Standard Template Library et la programmation générique

Alexander Stepanov est un avocat de ce qui est connu sous le nom de programmation générique. Bien que David Musser ait développé et défendu certains aspects de la programmation générique dès 1971, cela était limité à un domaine relativement spécialisé du développement de logiciels (les systèmes de calcul formel).
Stepanov reconnut le plein potentiel de la programmation générique et persuada ses collègues de l'époque de la recherche et du développement de General Electric (incluant tout spécialement David Musser et Deepak Kapur) que la programmation générique devrait être poursuivie comme une base complète du développement de logiciel. Au même moment, il n'y avait aucun support réel dans les langages de programmation pour la programmation générique.
Le premier langage majeur à fournir un tel support était Ada, avec ses unités génériques. En 1987 Stepanov et Musser avaient développé et publié une bibliothèque Ada pour la gestion de listes qui constituait les résultats de la plupart de leurs recherches en matière de programmation générique. Toutefois, Ada n'avait pas atteint une audience significative en dehors de l'industrie de la défense et C++ semblait plus susceptible d'être utilisé largement et de fournir un bon support à la programmation générique en dépit du fait que le langage était relativement immature. Une autre raison de se tourner vers C++, que Stepanov identifia très tôt, était que le modèle de calcul de C/C++ qui utilise un accès très flexible au stockage par l'intermédiaire de pointeurs est crucial pour atteindre une généralité sans perdre de l'efficacité. Cela mena finalement au développement de la Standard Template Library de C++.

## Critique de la programmation orientée objet

« I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper's Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras — families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting — saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms — you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work. » — Alexander Stepanov
    (« Je pense que l'orientation objet est presque autant un canular que l'Intelligence Artificielle. Je n'ai toujours pas pu voir un fragment de code intéressant qui provient de ces gens du monde orienté objet. En un sens, je suis injuste vis-à-vis de l'IA : j'ai appris beaucoup de choses du groupe du Lab d'IA du MIT, ils ont réalisé quelques travaux vraiment fondamentaux : Hakmem de Bill Gosper est une des meilleures choses qu'un programmeur puisse lire. L'IA n'a peut-être pas eu une fondation sérieuse, mais elle a produit Gosper et Stallman (Emacs), Moses (Macsyma) et Sussman (Scheme, avec Guy Steele). Je trouve la programmation orientée objet techniquement bancale. Elle essaie de décomposer le monde en termes d'interfaces qui varient sur un seul type. Pour traiter les problèmes réels vous avez besoin d'algèbres multi-sortes — des familles d'interfaces qui couvrent des types multiples. Je trouve la POO philosophiquement bancale. Elle affirme que tout est un objet. Même si c'est vrai, ce n'est pas très intéressant — dire que tout est un objet ce n'est rien dire du tout. Je trouve la POO erronée d'un point de vue méthodologique. Elle commence par les classes. C'est comme si les mathématiciens commençaient par les axiomes. Vous ne commencez pas par les axiomes — vous commencez par les preuves. C'est seulement lorsque vous avez trouvé un ensemble de preuves liées entre elles, que vous pouvez concevoir les axiomes. Vous finissez par les axiomes. La même chose est vraie en programmation : vous devez démarrer par les algorithmes intéressants. C'est seulement quand vous les comprenez bien que vous pouvez concevoir une interface qui va les faire fonctionner. »)