Est-il imaginable d'enseigner à une machine comment se programmer selon une spécification définie? [fermé]

12

Un de mes amis sans connaissances en programmation m'a posé cette question et je l'ai trouvée intéressante.

Je pense que ce n'est pas possible car cela nécessiterait une intelligence artificielle vraiment avancée capable d'analyser le texte d'un problème, de réfléchir à une solution et de le programmer. Le simple fait de penser à une machine capable de programmer une simple calculatrice me semble assez avancé.

Mais peut-être que je me trompe et j'aimerais savoir ce que vous en pensez et si vous connaissez des articles / recherches sur le sujet, ou si cela existe déjà ou s'il existe la possibilité de sélectionner une spécification et d'obtenir le machine à auto-programme à cette "spécification?"

florian
la source
4
Définissez la programmation. Je pourrais construire un programme qui ferait d'autres programmes. Mais cela apprendrait-il vraiment?
Pieter B
Oui, la question ne concerne pas la génération de code mais la vraie programmation comme nous le faisons en tant que développeurs.
florian
Cela dépend de ce qu'est le programme. Un programme avec beaucoup de logique métier procédurale serait beaucoup plus difficile (et beaucoup moins réalisable) qu'un programme fonctionnel et purement mathématique. (C'est une intuition, de toute façon, mais je n'ai malheureusement aucun moyen de
confirmer cela
@florian: Nous sommes nous-mêmes des machines qui ont appris à faire de la programmation (en supposant que des extraterrestres / dieu nous ont créés :-)). Bien sûr, nous n'avons pas encore acquis la capacité de programmer des séquences d'ADN, etc., donc si vous créez une machine qui doit apprendre à programmer éventuellement, vous devez la programmer pour "évoluer" et finalement apprendre comment elle-même a été programmée.
Nav
2
@maple_shaft: J'ai rendu la question plus objective en l'alignant sur les réponses existantes, et je me demandais si elle pouvait être rouverte sous sa forme actuelle.
Tom Au

Réponses:

15

Joel a répondu à celui-ci il y a quelques années . Le sens réel de «apprendre à une machine à programmer par elle-même» est «enseigner à une machine comment prendre une spécification et créer un programme qui correspond à cette spécification». Et dans cet esprit:

Le problème, ici, est très fondamental. Afin de prouver mécaniquement qu'un programme correspond à une spécification, la spécification elle-même doit être extrêmement détaillée. En fait, la spécification doit tout définir sur le programme, sinon rien ne peut être prouvé automatiquement et mécaniquement. Maintenant, si la spécification définit tout sur la façon dont le programme va se comporter, alors, voilà, elle contient toutes les informations nécessaires pour générer le programme! Et maintenant, certains geeks partent dans un endroit très sombre où ils commencent à penser à compiler automatiquement des spécifications dans des programmes, et ils commencent à penser qu'ils ont juste inventé un moyen de programmer des ordinateurs sans programmation.

Maintenant, c'est l'équivalent en génie logiciel d'une machine à mouvement perpétuel. C'est l'une de ces choses que les crackpots continuent d'essayer de faire, peu importe combien vous leur dites que cela ne pourrait jamais fonctionner. Si la spécification définit précisément ce que fera un programme, avec suffisamment de détails pour pouvoir être utilisé pour générer le programme lui-même, cela pose simplement la question: comment écrivez-vous la spécification? Une telle spécification complète est tout aussi difficile à écrire que le programme informatique sous-jacent, car autant de détails doivent être répondus par l'auteur de la spécification que le programmeur. Pour utiliser la terminologie de la théorie de l'information: la spécification a besoin d'autant de bits d'entropie de Shannon que le programme informatique lui-même aurait. Chaque bit d'entropie est une décision prise par le rédacteur de spécifications ou le programmeur.

Donc, l'essentiel est que s'il y avait vraiment un moyen mécanique de prouver la justesse d'un programme, tout ce que vous seriez en mesure de prouver est de savoir si ce programme est identique à un autre programme qui doit contenir la même quantité d'entropie comme le premier programme, sinon certains des comportements ne seront pas définis, et donc non prouvés. Alors maintenant, l'écriture de spécifications est aussi difficile que d'écrire un programme, et tout ce que vous avez fait est de déplacer un problème d'ici à là-bas et de ne rien faire du tout.

La seule façon de contourner ce problème serait de produire un véritable ordinateur intelligent avec suffisamment d'intuition pour faire tous les blancs que vous et moi faisons automatiquement, tout le temps, lors de la production de logiciels ... auquel cas vous trouverais un ordinateur qui se programme lui-même ainsi qu'un développeur humain. ;)

Mason Wheeler
la source
7
Je peux écrire une spécification complète pour un algorithme de tri beaucoup plus facilement que je ne peux proposer un tri par insertion, un tri rapide ou un tri par compartiment. Pourtant, vous prétendez qu'il est facile de transformer le premier en deuxième.
raptortech97
Joel ... Assez dit! ;-) Je comprends que pour ce faire, nous aurions besoin d'une spécification dans une langue donnée. Mais je ne suis pas totalement convaincu de l'argument selon lequel la spécification devrait être très détaillée. En tant que développeurs, nous sommes capables de développer un programme sans avoir de spécifications très détaillées. Ne pouvons-nous pas développer une intelligence artificielle capable de prendre une décision "aléatoire" sur la conception d'un programme?
florian
6
@florian Vous voulez donc que le programme effectue la tâche d'interprétation des spécifications que les programmeurs humains effectuent? Ensuite, il devient le problème séculaire de "l'IA forte", que de nombreuses personnes intelligentes ont recherché pendant des décennies sans aucun progrès à démontrer. Il y a un débat philosophique passionné pour savoir si l'IA est même métaphysiquement possible, beaucoup moins possible dans un avenir lointain, et d'après mon expérience, personne d'autre que les vendeurs de snakeoil ne prédit une IA forte dans un avenir proche.
Je n'en veux pas vraiment, je me demandais (comme mon ami me l'a demandé) si c'était possible. Je comprends parfaitement que l'IA n'existe pas vraiment et qu'elle se résume à des choix programmés "aléatoires".
florian
2
@ raptortech97: Non, vous ne pouvez pas. Pas «complet» au sens de cette question. Pour que votre spécification soit suffisamment complète pour pouvoir être transformée mécaniquement en un programme exécutable, elle doit essentiellement être écrite dans un langage de programmation. Sinon, votre spécification aura un comportement indéfini, ou vous écrivez simplement du code dans un document MSWord.
whatsisname
4

Bien sûr, nous faisons cela tout le temps (pour des sous - ensembles extrêmement limité de problèmes). Il est assez trivial d' imaginer faire un pas de plus et lier quelque chose comme Siri à l'entrée de ces générateurs de code (ou quelque chose comme Wolfram Alpha) qui à son tour écrit du code et résout votre problème. Je m'attendrais à ce que quelque chose existe déjà quelque part pour faire les choses les plus élémentaires.

Le problème avec l'écriture de logiciels complexes pour les entreprises n'est pas de créer un programme pour écrire le code - c'est d'écrire un programme pour obtenir les exigences.

Telastyn
la source
Merci pour les liens. Même si Yacc & Xamarin sont des générateurs de code purement déterministes. Ils ne créent pas des trucs à partir de zéro.
florian
@florian - rien ne crée des choses à partir de zéro. Il y a toujours une entrée, ils sont juste plus pointilleux que la plupart.
Telastyn
1
@Telastyn: comparer l'entrée / sortie pour un générateur d'analyseur à l'entrée / sortie pour un esprit humain comme étant "plus pointilleux" est faux au mieux.
whatsisname
2

Je pense que la réponse de @Mason Wheeler détient l'idée clé. Ça va comme ça:

L'entropie Shannon de Tic-tac-toe est vraiment petite. Nous appelons donc tic-tac-toe un jeu "résolu" ou "déterministe". Ce n'est pas vraiment intéressant une fois que vous avez terminé l'école primaire. Checkers a une entropie plus élevée, si vous considérez l'entropie de tous les jeux possibles auxquels vous pouvez jouer. Mais les dames aussi sont un jeu «résolu» ou «déterministe». Si vous vous déplacez en premier, vous ne devriez gagner ou tirer. Les échecs ont une entropie beaucoup, beaucoup plus élevée, mais aucun humain n'a battu les meilleurs joueurs informatiques depuis 2006. D'une certaine manière, les ordinateurs maîtrisent les échecs d'une manière que les humains ne peuvent pas. Big Blue a analysé wikipedia, puis a joué à Jeopardy contre des joueurs humains et les a battus à fond.

Et après? Quelle est l'entropie d'un roman, ou les sonnets de Shakepeare?

De même, dans l'espace de programmation, ce qui émergera probablement est un ensemble croissant de compétences. Prolog a résolu un ensemble de problèmes informatiques où vous avez configuré le problème et l'ordinateur a résolu la réponse. Quelqu'un trouvera probablement des classes de problèmes de programmation simples qu'un ordinateur pourra satisfaire, etc. Ensuite, quelqu'un s'appuiera sur cela pour produire une "personnalisation à la demande" dans un espace problématique. Et c'est ainsi.

Je pense que la question devient: combien de temps faut-il à une IA pour maîtriser une quantité donnée d'entropie ... et combien de ressources informatiques sont nécessaires? Je pense qu'il est inimaginable qu'un ordinateur ne puisse pas maîtriser l'entropie maîtrisée par le meilleur cerveau humain - il n'y a rien de magique dans le cerveau - mais la question est, de combien de cœurs avez-vous besoin, et combien de siècles faudra-t-il pour y arriver?

Mais ... un ordinateur pourra-t-il jamais faire mon travail? Inconcevable!

Rob
la source
Je pense qu'il est juste de dire cependant que Jeopardy est un cas un peu spécial: il se résume à rappeler et associer des faits. Prenez même les meilleurs spécialistes, et il y aura des pépites de même connaissance publique dont ils ne sont pas conscients ou incapables de se souvenir sous la pression. En revanche, pour un ordinateur capable d'analyser une encyclopédie (telle que Wikipedia, Encyclopedia Britannica ou tout autre), aucun fait déclaré dans cette encyclopédie n'est plus (ou moins) exotique que tout autre.
un CVn du
1

C'est difficile à répondre car, tout comme avec l'intelligence artificielle, une fois que nous aurons accompli cela, ce sera parce que nous aurons écrit un programme qui le fera. Et les critiques diront: "Eh bien, cette machine ne se programme pas vraiment elle-même! Elle suit juste exactement le programme que vous lui avez donné!"

Hé bien oui. Tout ce que nous accomplirons avec les ordinateurs, nous le ferons en lui donnant un programme et il l'exécutera. Si c'est un argument contre, nous ne pouvons rien accomplir. Et pourtant, à un moment donné, les gens pensaient qu'un ordinateur jouant aux échecs serait évidemment intelligent. Maintenant, ils le peuvent, et nous savons exactement comment, et nous ne pensons pas que ce soit intelligent. Les sous-marins ne savent toujours pas nager.

Alors - considérez quelques exemples.

Depuis des décennies, nous avons des générateurs d'analyseurs . Vous leur donnez une description d'une langue, elle est traitée et le résultat est le code d'un analyseur pour cette langue. Nous savons exactement comment cela se fait, mais n'est-ce pas une programmation informatique en soi?

Deuxième - éditeurs qui vous disent que vous avez fait une erreur (erreur de syntaxe, variable non existante, etc.). Il ne programme rien lui-même, mais il peut vous dire que vous avez fait quelque chose de mal. C'est très bien en surface seulement.

Langues dans lesquelles vous pouvez simplement cliquer et faire glisser les contrôles d'interface utilisateur, et le code qui les fera réellement fonctionner est généré automatiquement.

Compilateurs JIT. Logiciel capable de reconnaître les points chauds dans le logiciel en cours d'exécution et de remplacer une partie de celui-ci par du code compilé hautement optimisé, s'optimisant efficacement pendant son exécution. Je pense que ceci est un exemple de ce qui peut sembler être une machine se programmant elle-même, jusqu'à ce que vous sachiez exactement comment cela se produit, puis il s'avère que c'est juste ce que le programmeur lui a dit, comme toujours.

Jeu général. Il s'agit d'un domaine de recherche intéressant, dans lequel les chercheurs écrivent des programmes qui peuvent lire des descriptions des règles des jeux, que les programmes jouent ensuite les uns contre les autres. Donc, au lieu d'un programme de tic-tac-toe ou d'un programme d'échecs, ce sont des programmes qui lisent les règles du tic-tac-toe ou des échecs ou un nouveau jeu composé sur place, et peuvent ensuite les jouer. Le programme ne se programme pas lui-même, mais il joue aux échecs sans que les règles des échecs aient été codées en dur. Il fut un temps où cela serait clairement considéré comme l’ordinateur s’enseignant quelque chose.

Nous avons fait beaucoup de petits pas dans la direction générale.

Mais je ne peux pas penser à des programmes qui se réécrivent sur la base des résultats d'exécutions antérieures, ou qui peuvent reconnaître des routines obsolètes ou inefficaces dans leur propre code. Je pense qu'un jour nous l'aurons, et nous ne considérerons rien de spécial du tout, car ce ne sera qu'une fonctionnalité du dernier compilateur ...

RemcoGerlich
la source
0

Pas actuellement et pas dans un avenir prévisible car vous avez besoin de toute la complexité impressionnante du cerveau humain pour créer un programme. Et même alors, ces cerveaux doivent être hautement entraînés pour le faire correctement, et même alors, ils ne sont pas tous capables de faire la tâche, bien que l'on puisse dire qu'avec suffisamment de temps, vous pourriez former n'importe qui à programmer.

J'ai déduit de la façon dont vous avez formulé votre question que vous ne parliez pas de tâches émulées simples.

Vous avez demandé des articles et cet article de Science Blogs sur le développement de l'intelligence répond à cette question de plusieurs manières.

Ian Macintosh
la source