Connexion
Abonnez-vous

Publicodes, l’étrange langage de développement en français

Cocoricode

Publicodes, l’étrange langage de développement en français

Une partie des simulateurs proposés aujourd’hui par l’administration et le gouvernement français sont basés sur un langage spécifique, nommé Publicodes. L’une de ses particularités est d’être intégralement en français. Il a été créé en 2017 par un développeur, Maël Thomas, avec qui nous nous sommes entretenus.

Le 19 décembre à 09h15

Voilà un langage bien étrange, dont la syntaxe est basée sur des mots courants en français, pour en simplifier l’utilisation. Si vous n’en avez jamais entendu parler, on le trouve pourtant sur bon nombre de services proposés par l’administration directement ou dans des projets affiliés. mon-entreprise.fr a par exemple été incubé par l’URSSAF et s’en sert pour calculer les coûts liés aux salaires. Nos Gestes Climat a été incubé par l’ADEME et propose un calculateur pour estimer les empreintes carbone et eau. Le Code du travail numérique s’en sert aussi pour répondre aux questions sur le droit du travail.

De quoi parle-t-on exactement ? D’un langage déclaratif créé pour coder les algorithmes d’intérêt public. Il génère automatiquement une documentation permettant d’expliquer les opérations. Dès sa création, ses concepteurs ont cherché à fournir un code interprétable et explicable. Publicodes se veut particulièrement adapté à la modélisation des domaines métiers pouvant être décomposés en règles élémentaires. Sur le GitHub du projet (le langage est sous licence MIT) et le site officiel, on trouve plusieurs cas d'usage : législation socio-fiscale, bilan carbone, estimateur de rendement locatif, etc.

Le langage a été créé en 2017 par le développeur Maël Thomas, alors qu’il travaillait à la Direction du numérique (DINUM) sur un projet de simulateur d’embauche (devenu depuis mon-entreprise.fr après une reprise par l’URSSAF). Aujourd’hui, il souhaite faire plus largement connaitre Publicodes, pour attirer des personnes intéressées, collecter des retours critiques, voire des retours pratiques d’autres membres des administrations. Nous lui avons posé quelques questions.

Comment vous est venue l’idée de créer Publicodes ?

J’ai commencé à travailler pour l’État en 2016, avec un CDD de deux ans. Je suis arrivé dans l’équipe qui travaillait sur le simulateur d’embauche. On utilisait alors un outil qui s’appelle OpenFisca, assez lourd, en Python, mais qui a joué un rôle crucial dans l'ouverture des calculs de l'administration et dans l'évolution des pratiques. On avait alors une écriture vectorielle et des formules de calcul et on devait coder les fiches de paye avec ça. C’était démesurément compliqué. On ne pouvait pas faire de choses simples comme « if ». Je me suis dit que l’on pouvait faire beaucoup plus simple.

Il reste 74% de l'article à découvrir.

Déjà abonné ? Se connecter

Cadenas en colère - Contenu premium

Soutenez un journalisme indépendant,
libre de ton, sans pub et sans reproche.

Accédez en illimité aux articles

Profitez d'un média expert et unique

Intégrez la communauté et prenez part aux débats

Partagez des articles premium à vos contacts

Abonnez-vous

Commentaires (22)

votre avatar
Je suis développeur, et j'ai toujours un a priori sceptique sur les nouveaux langages.
D'autre part, dans mon métier, je suis amené à fournir à des utilisateurs non informaticiens (juste curieux) des outils de configuration. Parfois, un simple fichier de configuration de type INI ne suffit pas, il faut pouvoir y coder quelques règles. Demander aux gens d'apprendre Python ou Lua, c'est un peu trop exigeant.

Quand je vois Publicodes, je me dis que c'est justement adapté à la cible. Excel devient trop vite le bordel, et il est difficile de partager son document.
C'est clairement pas un outil pour les développeurs de métier. C'est justement le but, j'ai l'impression.
votre avatar
Merci, cet article est très intéressant.
On dit souvent de lire le code source, mais un peu comme pour lire les textes de loi, il faut avoir un certain niveau de connaissances avant de pouvoir l’interpréter. Cette initiative pourrait-elle un jour permettre à Mr Tout-Le-Monde de comprendre les calculs et décisions qui en découlent ?
votre avatar
Pour ma part, je trouve que c'est plutôt une bonne idée, notamment pour faire le lien entre le métier et les dev.

Côté dev : il est plutôt facile de générer du code à partir de ce langage

Côté métier : il est plutôt facile à lire, et donc de voir s'il y a des erreurs.

La lecture ne nécessite pas un gros bagage technique, et ceux qui font déjà du Excel s'en sortirons très bien.

Qui plus est, je vois un avantage très rare par rapport aux autres langages plus "classiques" : le support des unités.

Enfin, le métier peut facilement faire des cas de tests et vérifier que les résultats sont bons (toujours d'un point de vue métier). Louvois aurait bien eu besoin de cette approche !
votre avatar
le support des unités.
Il y a les litterals en C++ (le temps avec s, ms, etc., et tu peux surcharger pour définir tes propres unités).
votre avatar
Oui. Je n'ai pas dit que cela n'existait pas, juste que c'était rare ;)

A ma connaissance, je ne vois que C++ et F# qui proposent ce genre de fonctionnalité. Des langages beaucoup plus répandus (Python, Javascript, PHP, Java, C#, etc.) ne proposent pas nativement ce concept (bien que parfois il soit possible de l'approcher)
votre avatar
J'ai toujours été un grand fan des applications de type Soulver et le principe de Publicodes m'y fait beaucoup penser. L'idée est bonne !
votre avatar
Oui ! Un de mes grands regrets c'est de n'avoir pas pris le temps de proposer une calculette moderne à la Soulver.

Le studio* remplit en partie cette fonction, mais pas complètement.


https://publi.codes/studio
votre avatar
Pourquoi YAML alors qu’elle est décriée ?
Ah bon?
votre avatar
Je me suis posé la même question.
Si @laem sait répondre, ce serait top !
votre avatar
Mince, mon commentaire n'est pas passé. Je disais que YAML est langage assez complexe, plus qu'il n'en a l'air. Coder un parser pour la spec YAML complète est une lourde tâche.

Mais sur publicodes, on n'utilise que les fonctions très basiques. D'ailleurs, on conseille maintenant d'utiliser des fichiers .publicodes pour la coloration syntaxique. Un parser simple pourrait être une option un jour.

Dans tous les cas, Publicodes prend en entrée du JSON. Libre à l'utilisateur d'utiliser du TOML s'il le désire, tant qu'il produit un JSON compatible :)
votre avatar
Merci pour les infos !

Et YAML n'est pas un superset de JSON en plus ?
votre avatar
En langage francophone, il y a aussi le langage Gibiane développé par le CEA pour son code de calcul par éléments finis Cast3M.

Mais pour le coup, c'est beaucoup moins convivial 😅
votre avatar
J'y vois un autre avantage : initier à la programmation des enfants n'ayant pas encore appris l'anglais, voire des populations adultes qui ne le parlent pas. C'est une barrière de moins pour mettre le pied à l'étrier. Bravo pour ce projet !
votre avatar
initier à la programmation des enfants n'ayant pas encore appris l'anglais, voire des populations adultes qui ne le parlent pas
Ne pas oublier ce bon vieux Scratch : fr.wikipedia.org Wikipedia
votre avatar
C'est en français ? J'ai toujours vu une interface avec des mots-clés en anglais.
votre avatar
Oui, par exemple : Scratch en ligne.
Edit : voir aussi cette interface qui donne l'équivalent en Python.
votre avatar
Concours du jour : utiliser publicode pour décrire le calcul de l’impôt sur le revenu !
votre avatar
Je pense qu'il te faut plus qu'1 jour
votre avatar
Un petit coup de pouce ici github.com GitHub
votre avatar
Je viens de faire une version "très simpliste", juste le calcul des tranches à partir du montant imposable.

Mais on pourrait appliquer la même chose et venir enrichir au fur et à mesure avec la prise en compte du nombre de parts, du calcul du montant imposable à partir des revenus, etc...

Ca peut être assez itératif comme descriptif


montant imposable : 35000€

impot revenu :
somme :
- revenu tranche 1 * tranche 1 taux
- revenu tranche 2 * tranche 2 taux
- revenu tranche 3 * tranche 3 taux
- revenu tranche 4 * tranche 4 taux
- revenu tranche 5 * tranche 5 taux
avec :
tranche 1 taux : 0%
tranche 1 plafond : 11520 €
tranche 2 taux : 11%
tranche 2 plafond : 29373 €
tranche 3 taux : 30%
tranche 3 plafond : 83988 €
tranche 4 taux : 41%
tranche 4 plafond : 180648 €
tranche 5 taux : 45%

revenu tranche 1 :
valeur : montant imposable
plafond : tranche 1 plafond

revenu tranche 2 :
valeur :
valeur : montant imposable
plafond : tranche 2 plafond
abattement : revenu tranche 1
plancher : 0 €

revenu tranche 3 :
valeur :
valeur: montant imposable
plafond : tranche 3 plafond
abattement : revenu tranche 1 + revenu tranche 2
plancher : 0€

revenu tranche 4 :
valeur :
valeur : montant imposable
plafond : tranche 4 plafond
abattement : revenu tranche 1 + revenu tranche 2 + revenu tranche 3
plancher : 0€

revenu tranche 5 :
valeur : montant imposable
abattement : revenu tranche 1 + revenu tranche 2 + revenu tranche 3 + revenu tranche 4
plancher : 0€


Bon, pas utilisable en l'état car l'indentation n'est pas conservée :/
votre avatar
Par contre, une petite idée comme ça, pour l'écriture des nombres : pouvoir utiliser l'espace comme séparateur des milliers. Autrement dit, pouvoir écrire "35 000 €" au lieu de devoir écrire "35000€".

J'ai cru comprendre que tu ne gérais plus trop l'évolution, mais si c'est syntaxiquement faisable, ce serait un ajout intéressant pour gagner en clarté je pense ;)
votre avatar
C'est pas mal du tout :)
Dans le genre arrêtez de nous péter de nouveaux langages qui ont en gros la même syntaxe qu'avant ou pire, le langage M de MS dans PowerQuery est impressionnant pour la transformation de données.

Deux langages qui ont été pensés autrement que "C et trop compliqué, il faut le simplifier", mais plutôt "C est niveau CPU, j'ai besoin d'un langage niveau utilisateur".

Je pense que je vais modifier des programmes pour intégrer ce langage pour les règles.

Publicodes, l’étrange langage de développement en français

  • Comment vous est venue l’idée de créer Publicodes ?

  • Sur quoi est basé le langage ?

  • Publicodes a-t-il fait des émules depuis sa création ?

  • À quoi correspond aujourd’hui cette volonté de parler plus ouvertement de Publicodes ? Quel est votre objectif ?

  • La fragmentation y est prononcée ?

  • Si le but de Publicodes est de coder la loi, y a-t-il des problèmes d’interprétations de cette loi ? Comment obtenez-vous les retours ?

  • Cette volonté de mieux faire connaitre Publicodes se heurte au mur de la francophonie, car centré sur la loi française. Y a-t-il une volonté d’internationaliser le projet ?

  • Publicodes pourrait-il être utilisé pour autre chose que de la simulation ?

Fermer