IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Qui a écrit le premier programme ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    Par défaut Qui a écrit le premier programme ?
    Bonjour,

    Au cours d'une discussion animée avec des amis au sujet de l'IA (eux n'ayant jamais programmé) j'en suis arrivé à citer les personnes qui sont de "vraies références" selon moi dans l'informatique :

    Claude Shannon
    Alonzo Church / Georg Cantor / Alan Turing / Roger Penrose
    Dennis Ritchie / Brian Kernighan
    Tim Berners-lee

    C'était, on va dire, par opposition aux Mark Zuckerberg et Elon Musk

    Mais une personne m'a dit "tu as oublié Ada Lovelace"

    C'est vrai, tout le monde sait que c'est elle qui a écrit le premier programme.

    Mais pourquoi je n'ai pas pensé à Ada Lovelace ?
    Je le savais pourtant.
    C'est très con : en fait je n'ai jamais utilisé ses travaux ; contrairement à Claude Shannon dont les théories étaient utilisées quotidiennement en cours lorsque j'étais étudiant, et aux autres personnes que j'ai cité dont j'ai au moins lu les livres ou les articles ou utilisé les langages qu'ils avaient écrit.

    Je suis allé sur la page wikipédia d'Ada Lovelace :
    https://fr.wikipedia.org/wiki/Ada_Lovelace

    Et du coup, je trouve que l'histoire du "premier programme informatique" n'est pas très nette...

    En fait, c'est quoi un programme informatique ?

    Tout s'est fait progressivement.

    A l'origine, il y a eu les algorithmes écrits à la main, qui existent depuis qu'on sait écrire et compter (et même avant, il suffit de faire une chose avec des étapes dans un ordre précis)
    Même une recette de cuisine peut être considérée comme un algorithme (c'est d'ailleurs un exemple qu'on donne souvent)

    Ensuite, il y a eu les premiers automates mécaniques :
    - horloges simples
    - automates "de fête foraine"
    - horloges astronomiques

    Et rapidement, les automates mécaniques véritablement "programmables" :
    - boites à musique à cylindre ou à carte perforée
    - métiers à tisser Jacquard

    Puis, la machine à calculer mécanique de Charles Babbage ; Ada Lovelace avait travaillé avec Charles Babbage et elle a écrit le fameux "premier programme"

    Plus tard, les premiers ordinateurs à lampes, puis à transistors, et enfin à circuits intégrés

    Considérer le diagramme de calcul des nombres de Brenoulli (que l'on peut voir sur la page wikipédia) écrit par Ada Lovelace comme étant "le premier programme" me semble un peu arbitraire en fait.
    J'étais persuadé qu'Ada Lovelace avait créé le premier langage de programmation alors qu'il n'en existait pas avant.
    Mais même avec beaucoup d'imagination, le diagramme de calcul des nombres de Brenoulli ne ressemble pas à ça, c'est plutôt un paramétrage de la machine de Babbage.
    Aussi, la fiche wikipédia semble suggérer que c'était un travail commun en binôme d'Ada Lovelace et Charles Babbage.

    Finalement, en fonction des critères que l'on choisi, on aurait pu aussi bien considérer comme "premier programme de l'histoire" :
    - le premier algorithme de calcul écrit (donc, à l'antiquité) - on risque de ne pas savoir qui l'a écrit, comme on ne sait pas qui a inventé la roue
    - la première série d'instruction exécuté par une machine (donc la première carte perforée pour une boite à musique ou un métier à tisser)
    - le premier programme écrit pour un ordinateur fonctionnant à l'électricité stocké dans une mémoire de programme (et non pas "câblé")

    Les manuels d'histoire veulent à tout prix retenir le nom d'un seul inventeur pour chaque chose, alors qu'en fait une invention est plus le fruit de son époque ou de plusieurs personnes. Par exemple le téléphone avait été inventé en même temps par deux personnes, l'histoire a retenu le nom de celui qui a déposé le brevet avant l'autre.

    A bientôt
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    Ada Lovelace est considérée comme la première programmeuse car elle est reconnue comme ayant écrit le premier programme de la première machine à calculer programmable, la machine de Baddage.

    C'est effectivement arbitraire car, elle s'est largement appuyé sur les cartes perforées des métiers à tisser de Jacquard. Machines elles-aussi programmables, mais ce ne sont pas des machines à calculer !!!!
    On pourrait effectivement considérer que les premiers programmes soient justement ces cartes perforées qui programmaient déjà des machines.


    Citation Envoyé par electroremy Voir le message
    Par exemple le téléphone avait été inventé en même temps par deux personnes, l'histoire a retenu le nom de celui qui a déposé le brevet avant l'autre.
    Même pas. Alexander Graham Bell, connu pour être l'inventeur du téléphone, n'en est en réalité que le 3ème. Elisha Gray avait déposé son brevet quelques heures avant Bell, mais pour des raisons obscures (dont la rumeur dit que Bell lui-même n'y serait pas totalement étranger) s'il a bien été reçu avant, il n'a été enregistré qu'après celui de Bell.

    Mais un certain Meucci avait créé, plusieurs années auparavant, un appareil qui peut être considéré comme l’ancêtre, ou le prototype de l'appareil téléphone, et dont Bell est soupçonné de s'en être fortement inspirer, pour pas dire plus.

    Il est donc reconnu maintenant que l'inventeur du téléphone est, ou plutôt, sont Meucci, Gray et Bell
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Membre éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    Ada Lovelace est considérée comme la première programmeuse car elle est reconnue comme ayant écrit le premier programme de la première machine à calculer programmable, la machine de Babbage .

    C'est effectivement arbitraire car, elle s'est largement appuyé sur les cartes perforées des métiers à tisser de Jacquard. Machines elles-aussi programmables, mais ce ne sont pas des machines à calculer !!!!
    L'autre question que je me posait était celle du langage de programmation.

    Par exemple il y a le langage C++, et le premier programme écrit en C++ était probablement un truc du genre hello world

    Du coup pour la machine de Babbage, c'est quoi le langage ?

    Pour les métiers à tisser, il y aurai une instruction par "tête de lecture" de la carte perforée, pour exécuter l'instruction correspondante au moment voulu on place un trou dans la carte.
    Cela se rapproche du langage machine d'un microprocesseur ou d'un microcontrôleur (donc le binaire qu'on écrit dans la mémoire flash d'un microcontroleur)
    C'est encore plus bas niveau que l'assembleur, il n'y a pas de "code source", il faut "taper" directement le binaire.
    Il n'y a pas vraiment de "langage" au sens actuel du terme, on est dans le hardware du CPU.

    Aussi, la machine de Babbage n'a jamais été fabriquée.
    Babbage a néanmoins inventé le concept de machine de calcul programmable (les métiers à tisser faisaient du travail mécanique)
    Babbage avait aussi fabriqué une machine à différence fonctionnelle pour générer des tables (mais cette machine n'était pas programmable)
    Le fameux premier programme écrit par Ada Lovelace n'a en fait jamais été exécuté.

    Du coup, si on s'attache au fait que le "premier programme" doit avoir été écrit pour tourner sur une machine (et pas être "juste" un algorithme sur papier), il serait presque plus pertinent de considérer comme premier programme la première carte perforée qui a été lue sans erreur par un métier à tisser.
    Mais on peut aussi considérer que dans un métier à tisser jacquard, la carte perforée n'est pas vraiment un programme mais plutôt un fichier qui représente une image bitmap du tissu à obtenir.
    C'est pareil pour les boites à musique et orgues de barbarie : la carte perforée est plus un fichier musical qu'un programme.

    La machine de Turing et son langage est déjà plus aboutie.
    Surtout, même si elle a été pensée comme concept abstrait, plusieurs machines de Turing universelles fonctionnelles ont été fabriquées.
    Ce concept de machine de Turing reste une référence, les langages actuels sont équivalents à des machines de Turing universelles, avec les possibilités et limites théoriques qui vont avec.
    Le premier "vrai" langage serait plutôt donc celui de la machine de Turing.

    Si on s'intéresse à la réalisation pratique, le premier langage qui a réellement fait tourner un programme est A-0 - (auparavant il y a eu Plankalkül, mais resté à l'état de concept, le compilateur a été fait bien plus tard dans les années 2000)

    La chronologie est intéressante.
    Le principe des métiers à tisser Jacquard a été inventé en 1745 puis ils ont été produits à partir de 1801.
    Les travaux de Babbage et Lovelace datent des années 1840
    Il faut attendre un siècle plus tard pour que Turing invente ses machines, en 1936
    Ensuite tout s'enchaîne rapidement
    La machine pour casser le code Enigma dans les années 1940
    Puis les premiers langages de programmation dans les années 1950

    Les métiers à tisser ne sont pas les ancêtre des ordinateurs mais plutôt les ancêtres des machines outils à commande numérique ; cependant, on peut considérer les cartes perforées des métiers à tisser comme les premiers fichiers informatique de l'histoire.
    Les travaux de Babbage et de Lovelace ont posé l'idée d'ordinateur, avec le premier prototype de programme, mais n'ont pas donné d'application fonctionnelle.
    C'est Alan Turing + la disponibilité des composants électroniques (tubes à vides, transistors puis puces électronique) qui a véritablement "lancé" l'informatique et les langages de programmation.

    On aurait donc inventé, dans l'ordre chronologique : le fichier, le programme, et le langage

    C'est drôle, cet ordre semble inversé, de nos jours on aurai trouvé logique d'inventer d'abord le langage, puis le programme, et enfin les fichiers de données
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  4. #4
    Membre confirmé Avatar de Galet
    Homme Profil pro
    Consultant/Programmeur Robotique industrielle
    Inscrit en
    Mars 2010
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant/Programmeur Robotique industrielle

    Informations forums :
    Inscription : Mars 2010
    Messages : 323
    Points : 484
    Points
    484
    Par défaut
    Merci pour cette réflexion aussi instructive que rafraichissante.
    La conclusion
    On aurait donc inventé, dans l'ordre chronologique : le fichier, le programme, et le langage

    C'est drôle, cet ordre semble inversé, de nos jours on aurai trouvé logique d'inventer d'abord le langage, puis le programme, et enfin les fichiers de données
    peut sembler étonnante mais reste toutefois logique : Le besoin apparait avant l'outil !
    Tout comme la multiplication des données à imposé de créer des microprocesseurs et des langages, c'est bien le besoin de se vêtir qui a poussé l'homme à créer le tissus, puis le métier Jacquard, puis la carte perforée...
    On pourrait penser que ce processus de recherche est typiquement humain...sauf que de nombreux d'animaux utilisent des outils pour se nourrir ou s'abriter.

    Belle journée à tous...
    Windows 10 / Delphi Tokyo
    "Les choses ne changent pas. Change ta façon de les voir, cela suffit" Lao Tseu

  5. #5
    Membre éprouvé Avatar de electroremy
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2007
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 934
    Points : 1 274
    Points
    1 274
    Par défaut
    Citation Envoyé par Galet Voir le message
    Le besoin apparaît avant l'outil !
    Oui, et tout s'invente progressivement.

    Il faudrait arrêter de vouloir glorifier un inventeur unique pour chaque invention, mais plutôt retenir la liste des contributeurs et des inventions
    Quand deux personnes échangent un euro, chacun repart avec un euro.
    Quand deux personnes échangent une idée, chacun repart avec deux idées.

  6. #6
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 328
    Points : 4 145
    Points
    4 145
    Par défaut
    Bonjour,

    Juste pour relancer la discussion , j'aurais tendance à considérer que la programmation commence avec l'apparition des possibilités de décision (aujourd'hui if, for, while, switch, etc.) qui changent le comportement dynamiquement. Cela exclurait donc les algorithmes purement séquentiels comme ceux des recettes de cuisine, les métiers "automatiques" de tissage, les boîtes à musiques etc. Mais cela ne rajeunit pas nécessairement beaucoup le sujet car des techniques de convergences très anciennes supposaient déjà des choix.

    Il me semble que le premier programme écrit en C était son compilateur. Une première version très réduite aurait été écrite en assembleur (ou pire en code machine). Puis, avec ce premier compilateur, il y aurait eu une réécriture en C. Et ainsi de suite, chaque nouvelle version s'appuyant sur la précédente pour apporter des fonctionnalités nouvelles.

    Je n'ai pas vérifié mais l'idée est séduisante.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 379
    Points
    20 379
    Par défaut
    Citation Envoyé par electroremy Voir le message
    Et du coup, je trouve que l'histoire du "premier programme informatique" n'est pas très nette...
    A bientôt
    concevoir une machine à calculer ça ne date pas d'hier dans l'Antiquité on avait déjà crée des bouliers..
    ensuite on peut considérer que l'invention de l'écriture comme le faisait les Sumériens en Mésopotamie dans la Perse Antique,les glyphes de la civilisation Maya une forme d'intelligence artificielle qui ne dit pas son nom.
    Par "artificielle" j'entends chose qui n'a pas de réalité concrète et qui sort tout droit du cogito d'un esprit inidividuel.
    L'intérêt de l'écriture vous le savez parfaitement c'est d'une idée dans la tête la matérialiser sous forme de codes.
    après qui de l'oeuf ou de la poule est arrivé le premier la problématique du Bootstrapping a déjà été abordée sur ce forum au risque de vous décevoir

  8. #8
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,

    Citation Envoyé par electroremy Voir le message
    Par exemple il y a le langage C++, et le premier programme écrit en C++ était probablement un truc du genre hello world
    Le C++ a été nommé a posteriori.

  9. #9
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    Citation Envoyé par Guesset Voir le message
    j'aurais tendance à considérer que la programmation commence avec l'apparition des possibilités de décision (aujourd'hui if, for, while, switch, etc.)
    On en revient donc à Ada Lovelace, puisque il est considéré que la première apparition d'une boucle conditionnelle (l'équivalent de ce que 'on appellerait une boucle While aujourd'hui) est apparu dans, justement, le premier programme de tout les temps, le programme de calcul des nombres de Bernoulli de Ada Lovelace.
    Citation Envoyé par Guesset Voir le message
    en assembleur (ou pire en code machine).
    Assembleur ou code machine, c'est la même chose. L'assembleur n'est qu'une représentation "humainement intelligible" du code machine d'un processeur. Ou, inversement, le code machine n'est rien d'autre que la représentation binaire de l'assembleur.

    Beaucoup parle du C comme premier langage. Il n'en ai rien.
    Les premiers langages, apparu dans les années 50 sont le Fortran, suivi de près par le Cobol et le Lisp.
    On pourrait ajouter aussi le Algol, très peu connu et quasi pas utilisé, mais qui a donné par la suite la famille des Pascal.

    Le Plankalkül, considéré par certains comme le premier langage, s'il a été conceptualisé dans les années 40, n'a été implémenté pour la première fois qu'en ... 2000 ! Il n'est donc pas le premier langage ayant existé.
    De même, certains prétendent que le C a été conceptualisé dès la fin des années 40, mais il a été en réalité développé à partir de 1973 par Ritchie qui écrira, 5ans plus tard, la fameuse bible avec son ami Kernighan

    Citation Envoyé par kaitlyn Voir le message
    Le C++ a été nommé a posteriori.
    Oui, le C++ n'était au départ (1980) qu'une "surcouche" objet du C. Ce n'est que plus tard qu'il a été formalisé en tant que langage autonome et nommé C++
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  10. #10
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 328
    Points : 4 145
    Points
    4 145
    Par défaut Assembleur vs code machine
    Bonjour sevyc64,
    Citation Envoyé par sevyc64 Voir le message
    Assembleur ou code machine, c'est la même chose. L'assembleur n'est qu'une représentation "humainement intelligible" du code machine d'un processeur. Ou, inversement, le code machine n'est rien d'autre que la représentation binaire de l'assembleur.
    L'assembleur n'est pas du code machine. La translation (et non la compilation) relativement directe, mais pas si simple (adresses calculées par exemple), nécessite néanmoins un programme d'assemblage pour transformer le source assembleur (un texte lisible) en code machine. Et il y a des langages assembleurs différents pour de mêmes cibles (INTEL et ATT par exemple).
    La transformation (assemblage, compilation ou interprétation sans parler des codes intermédiaires) caractérise la différence entre source (assembleur ou autre) et code machine. Aujourd'hui peu travaillent en assembleur mais aujourd'hui personne en code machine et même un bon programmeur en assembleur ne saura pas faire la traduction binaire à la main (enfin moi, cela me prendrait des heures et des heures pour obtenir un code binaire truffé d'erreurs non pistables).

    Le langage C n'est pas le premier langage mais il me semble que c'est le premier langage évolué créé pour développer un système d'exploitation.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

Discussions similaires

  1. premier programme!
    Par kriskikout dans le forum Langage
    Réponses: 8
    Dernier message: 11/02/2006, 16h10
  2. [Debutant]Premier programme blemes+ questions
    Par Bakura dans le forum Débuter
    Réponses: 21
    Dernier message: 07/10/2005, 18h26
  3. [Language] Aide sur mon premier programme Java?
    Par hash2zo dans le forum Langage
    Réponses: 15
    Dernier message: 27/09/2005, 19h26
  4. [Débutant] Mon premier programme: rien ne va...
    Par vincent0 dans le forum OpenGL
    Réponses: 10
    Dernier message: 02/08/2005, 13h59
  5. requette qui me donne la premiere lettre d'1 colonne?
    Par mounir_e dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/12/2004, 18h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo