Ajouter un commentaire

fredericmazue

Quote:
Mais ce sont des dinosaures !

Le dinosaure que je suis va donc tenter d'élever un peu le débat. :)
Et si ça se trouve on va conclure que le dinosaure n'est pas là on l'on croyait.

Alors voyons:

Quote:
Pour faire court, il y a des langages "naturels" et d'autres pas. La logique d'écriture en C, C++,etc... est la même, cohérente avec la façon naturelle de penser des humains.

Il n'en est rien. Et c'est vraiment s'abuser soi même que de dire ça.
Prenons d'abord l'assembleur, puisqu'il est venu dans la discussion. Est-ce seulement un langage ? Même pas. On comprendra pourquoi un peu plus loin :) Peut être que le macro assembleur est-il un balbutiement de langage ? Enfin bref comment code-t-on en assembleur ? La pensée est soumise totalement, incontournablement, à la dictature de la machine. Les valeurs contenues dans les registres et les limites qui vont avec, l'ordre d'exécution des instructions, la mémoire, la pile. Bref tout de la machine, dans les moindres détails, impose sa loi au programmeur.
Est-ce naturel ? Je ne le crois pas. Si ça l'était tant que cela, personne n'aurait eu l'idée de créer C. Pourquoi le langage C ? Pour continuer à piloter (je ne dis pas programmer) la machine, mais déjà avec un meilleur niveau d'abstraction, un début d'affranchissement des contraintes imposées par le système, afin de s'exprimer plus librement. Ainsi peut-on grâce à C appeler une routine, sans se préoccuper de restaurer la pile, gros progrès :)
Peut être bien que l'abstraction n'est pas encore suffisante puisqu'on a créé C++, qui apporte plus en ce domaine. Avons nous là un langage naturel ? Je ne pense pas. En C++ on est toujours sous la houlette de la machine. Et même avec lui programmer est extrêmement répétitif et contraignant.
Programmer avec un tel langage est aussi naturel que de conduire sa voiture en ayant en permanence conscience des mouvements des soupapes dans le moteur et en veillant constamment à éviter qu'elles ne s'entrechoquent :lol:

Voyons maintenant en quoi la pensée du reptile et de l'homme diffèrent. Le reptile pense-t-il d'abord ? Je n'en sais rien. Mais à le regarder on dirait plutôt qu'il ne fait qu'accomplir des tâches répétitives trop beaucoup de réflexion.
Qu'est ce donc alors que la pensée de l'homme, la particularité de sa pensée naturelle ? C'est de concevoir. De formuler des concepts, des idées, de les assembler pour finalement en produire d'autres. Des concepts très élevés, très abstrait, loin du détail et de ses limitations. Si je veux pouvoir exprimer, coder des concepts naturellement, il me faut un langage qui ai le niveau d'abstraction suffisant. Je prends un exemple: l'ensemble des entiers naturels. J'ai le concept en tête. Mais l'ensemble est infini. Comment exprimer cela dans un programme ? En Assembleur, en C en C++, en Java ;) je ne peux pas.

Par contre si je prends Haskell (je prends celui là parce que c'est un récent (1998) hein, pas un vieux comme lisp ;) ) c'est différent. Haskell est un langage fonctionnel non-strict (évalutation paresseuse). Ce langage de pointe (donc forcément pas connu en France, moins encore utilisé... en France...) abstrait totalement de la machine. Ainsi avec Haskell, le codeur n'a même pas à penser à l'ordre d'exécution du programme. Le programme est totalement déclaratif et permet même de déclarer des types infinis. Je veux coder le concept de l'ensemble des entiers naturel ? Une ligne de code le fait:

ensembleN = [1, 2, ..]

Je peux quand je veux accéder à une partie des éléments de l'ensemble (magie de l'évaluation paresseuse). Je n'ai jamais à penser que la mémoire de la machine est trop réduit pour contenir l'ensemble. Au contraire je peux passer cet ensemble infini en argument à une fonction, je peux déclarer toujours en une ligne (donc je vous fait grâce :) ) un sous-ensemble des entiers naturels pairs.
Bref à chaque ligne de code je manipule des concepts, des idées de façon naturelle, car tels que je les pense, sans devoir penser à les faire entrer au chausse-pied dans une puce de silicium. Voilà ce qu'est la programmation naturelle selon moi. Exprimer les concepts à un (très) haut niveau d'abstraction où la machine s'efface, disparaît et où la créativité, l'efficacité s'expriment. Celui qui code en C peut il même approcher de la chose. Jamais....

Revenons à Lisp. Langage à très haut niveau abstraction, il permet de construire des applications industrielles, par assemblage de concepts, avec une facilité, une concision et une expressivité du code que les codeurs "naturels" C/C++/Java/Perl/TCL ne peuvent même pas imaginer. Je ne vais pas rentrer dans le détail des explications. D'autres l'on fait bien avant moi, et bien mieux que je ne pourrais jamais le faire. A ceux que la question intéresse, je recommande le remarquable ouvrage de Paul Graham "On Lisp" que l'on peut télécharger ici: http://www.paulgraham.com/onlisp.html. Malheureusement c'est en anglais, mais sa lecture ouvre des horizons.

Alors quand on me sort ça:

Quote:
Pour comprendre le Lisp, il faut l'esprit tordu.

Dans le contexte de la discussion, je le prends pour un compliment extrêmement flatteur. Je me dis que je pense mon informatique. Je me dis que j'ai la chance de coder de façon sûre en 10 lignes ce que d'autres ne parviennent pas à coder en 10000, je me dis que du coup, professionnellement j'ai un net avantage (bon pas souvent exploité en France mais qu'importe, il n'y a pas que la France ;) ), Je me dis que quand je code 10 lignes au lieu de 10000 , il me reste du temps pour faire autre chose, je me dis que j'ai de la chance de ne pas coder, encore et toujours, les mêmes 10000 lignes le nez dans le guidon. Je caresse l'idée séduisante de me sentir plus le maître de la machine que son esclave. Et mieux que cela, de la triste condition de reptile condamné à la répétition de tâches sans intérêt, je me sens promu au grade d'Homo Sapiens. C'est Byzance. :lol:

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 TTTTTT  M   M  PPPP   BBBB   FFFF 
TT MM MM P P B B F
TT M M M PPPP BBBB FFF
TT M M P B B F
TT M M P BBBB F