J'ai toujours été passionné par la science en général mais il y a un concept en particulier qui me fascine, dans la nature comme en informatique : l'aléatoire.

Bien sûr, les plus pointilleux d'entre-vous me diront que le vrai aléatoire n'existe pas en informatique (c'est vrai), et les autres me demanderont pourquoi ?

Ma réponse : peut-être dans un prochain article !

Toujours est-il que beaucoup de mes expérimentations tournent autour de ce concept, et c'est bien sûr le cas de celle d'aujourd'hui.

Mon idée : Essayer de m'inspirer du concept de l'évolution théorisée par Charles Darwin pour générer un programme et le faire évoluer de manière aléatoire, comme s'il était lui-même vivant.

Le contexte

Pour faire évoluer un programme, comme un être vivant, il faut plusieurs choses :

  • un environnement, ici c'est le moteur d'exécution javascript
  • des briques élémentaires (adn), ici ce sont les caractères alphanumériques et quelques caractères spéciaux
  • une notion de temps et de survie, ici nous allons utiliser la fonction "exec" pour exécuter le programme généré. Si le code s'exécute sans renvoyer d'erreur, il sera considéré comme survivant.
  • une mémoire génétique, chaque version survivante du programme sera utilisée pour la prochaine évolution, sinon on reviendra à la précédente.

Même si cela parait compliqué, vous allez voir que le résultat est vraiment très simple !

Le programme

J'ai mené cette expérimentation il y a quelques années, le programme est en Javascript et le code n'est pas le plus propre mais il a le mérite d'exister.

Voici le code source du générateur, que vous pouvez aussi retrouver sur mon Github : https://github.com/NicolasBrondin/living-js

Le résultat

À chaque nouvelle version survivante, le programme essaye de faire grandir son code génétique. Bien souvent sans succès. Mais voici quelques résultats de programmes "vivants", quand même assez farfelus à lire pour nous, humains...

Et tous s'exécutent parfaitement !

Trois choses intéressantes ressortent de cette expérimentation :

  • Le plus petit programme Javascript valide sera un chiffre compris entre 0 et 9 ou bien un point virgule.
  • Les programmes les plus longs et générés les plus rapidements des commentaires car la combinaison "//" rendra toute la suite du programme valide.
  • La majorités des programmes générés sont en faite des valeurs

Évolution

Le programme étant vraiment très simple, il serait intéressant d'y ajouter de nouvelles fonctionnalités comme :

  • Utiliser des mots clés en tant que briques primaires, et pourquoi pas suivre la syntaxe du langage pour des programmes plus intéressants
  • Ajouter une heuristique plus spécifique que la simple exécution, comme le temps d’exécution, la mémoire utilisée, et...
  • Améliorer la méthode d'évolutions et permettre au programme de changer des morceaux à l'intérieur du programme et non pas seulement à la fin
Tu as aimé cet article ? Tu veux me donner ton avis ou une idée ? Alors on se retrouve sur Facebook, Linkedin, Twitter ou même Instagram !

À bientôt !


À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter "JAW : de Junior à Warrior" pour recevoir 1 conseil par semaine par email.


Photo par Danielle MacInnes sur Unsplash