Utilisateur:Denispir/projet claro!

claro! en 9 secondes modifier

la programmation évidente
                        forme
humain                    |
  |     <----------->  langage
modèle                    |
                       traits

Le projet claro vise à explorer le domaine de la conception de langages de progammation, ses principes & ses usages, en visant à permettre au programmeur (humain, souvent) de s'exprimer aussi clairement ou 'évidemment' que possible. Il s'agit ainsi de définir comment on pourrait concevoir un langage dans cette optique et d’être capable de dire pourquoi on devrait procéder ainsi.


claro! en 99 secondes modifier

dess(e)in de pensée
         conception           expression             transcodage
objet  <------------> modèle <----------> programme <-----------> exécution

principes modifier

sémantiques modifier

origine

J’aime programmer ; c’est un hobby et presque une passion depuis longtemps, bien qu'épisodique. Or je tolère malun outil qui ne me convient pas, qu’il soit mal adapté à ma façon de penser ou fondamentalement mal conçu. Il n'y a strictement aucune préoccupation / prétention / compétence professionnelle là derrière. Je souhaite simplement de tout mon cœur disposer d'un LP qui soit une aide précieuse à la modélisation ; plutôt qu'un frein, un obstacle, une source constante de complication et d'obscurité.

domaine

Il y a selon moi un champ d'étude quasi vierge, du moins de façon consciente et explicite : l'étude ou la science de la *conception* de LPs. En commençant par la prise en compte basique qu'un LP est un langage, qu’il est destiné à l'usager - programmeur humain, que c’est un outil pour exprimer de la pensée (modèle). Car c’est là que pour moi se situe le problème : j’ai le sentiment que les concepteurs ne se posent pas la question de savoir ce que devrait être un bon LP, sinon du point de vue de sa puissance (C), au mieux de sa simplicité d'expression (Pascal). C'est à mon avis très insuffisant et surtout c’est mettre la charrue avant les bœufs. À ma connaissance, il n'existe aucune théorie la-dessus.

axiome

Un LP plus clair (simple, évident) est autant une bénédiction pour le programmeur expérimenté, talentueux ou passionné, qu'une porte ouverte néophyte. [La plupart des problèmes sont intrinsèquement complexes ; l'acte de modélisation est ardu par son abstraction ; il n'y a pas besoin d’en rajouter une couche -- et quelle couche ! -- avec un LP abscons ;-)]

évolution

Le point central de ma réflexion actuelle est la notion d'évidence, issue de l’idée que "un bon programme est un programme qui reflète clairement ('évidemment') le problème qu’il modélise. Un bon LP est un LP qui permet et favorise cela." De deux points de vue :

  • Comme langue, la clarté (ou l'évidence) du lien signifiant - signifié, c'est-à-dire du lien entre forme et 'sémantique' (sic!) du langage.
  • Comme outil d'expression pour l'humain, le passage entre mode de penseée et mode d'expression dans un LP, et inversement le décodage du programme à la pensée.
cognition

Il s'agit ainsi que le langage , en quelque sorte par analogie, reflète dans sa sémantique les traits (éléments, formes, propriétés) de la pensée. Ce qui amème la question de savoir comment on pense, et ceci spécifiquement dans l'activité de développement logiciel. D'où le besoin d'une science appliquée, prérequis donc à la 'programmation évidente' : la psychologie cognitive du programmeur ;-)

PS : Au départ, 'claro' signifiait pour moi juste 'clair'. Depuis que j'en suis venu à penser (sic) au lien pensée <--> LP, il veut maintenant dire aussi 'claro!', 'évidemment!'.

claro! en 999 secondes modifier

intro
réels                esprit
objets    <------->  '''humain'''   <------->  langage  <------->  machine
virtuels             cerveau


pistes modifier

explorations modifier

explo 1

...

explo 2

...

explo 3

...





projet claro

thême comment concevoir un LP clair ? clair : distinct, évident, lumineux "Ce qui se conçoit bien s'énonce clairement." ? Encore faut-il, en programmation, que le langage s'y prête. Qu'il permette et favorise une énonciation claire, aussi bien en expression (écriture) qu'en interprétation (lecture) ; au lien dêtre un obstacle la clarté. Bien, mais comment s'y prendre pour concevoir un langage clair, et pourquoi ? Le but du projet est ainsi d'étudier les fondements sur lesquels se baser pour concevoir un langage de programmation (LP) aussi clair, facile, convivial que possible. Un langage qui laisse l'utilisateur programmeur se consacrer la tâche aussi difficile que jouissive de modéliser quelque chose. Ce qui revient se demander comment la sémantique d'un langage (l'organisation qu’il permet de définir) peut refléter au mieux la sémantique humaine (notre façon de penser, de se représenter les choses). Dans l'idéal, la complexité de développement d'un logiciel devrait résider uniquement dans la complexité propre la chose modéliser. Autrement dit, le langage utilisé ne devrait pas ajouter une couche d'obscurité, un obstacle supplémentaire, une tâche intrinsèquement difficile notamment par son abstraction.

origine du projet Il me semble que les langages de programmation actuels sont basés sur des principes implicites qui les rendent, dans leur forme, bien moins clairs et efficaces qu’ils ne pourraient être -- et bien plus rebutants, voire effrayants par leur ésotérisme. Comme si leurs concepteurs ne pensaient pas: * d'une part, remettre en cause des choix qui font primer la technique sur l'humain, choix qui n'étaient justifiables qu'au tout début de l'informatique * d’autre part, s'interroger sur ce que pourrait et devrait être un beau et bon langage, en tant qu'outil de modélisation au service de l'humain.

objectifs -1- Participer la recherche sur la conception & l'évaluation de LPs en fournissant un ensemble cohérent de principes, critères & arguments. -2- Fournir aux concepteurs de LP des idées & des exemples évalués. -3- Créer un LP (ou une variété de LPs) conforme nos études : * comme 'vrai' LP * comme LP pédagogique * comme (norme de) pseudocode (par ex pour wikipédia)

principes langage & technique * Un LP est d’abord un langage : un système de règles et de symboles, destiné l'humain qui souhaite s'en servir. * Un LP est ensuite destiné être Ôcompris' par la machine, via un ÒtranscodeurÓ (compilateur/interpréteur). * La première qualité d'un LP est sa facilité d'usage, due sa simplicité, sa clarté et globalement sa cohérence (ÒconsistanceÓ). * Un LP facile est meilleur aussi bien pour le programmeur novice ou Ôpeu doué' que pour le développeur expert et Ôtalentueux' -- mis part les habitudes et autres blocages mentaux de celui-ci. * la spécification du LP (lexique, grammaire) prime sur son implantation (transcodeur, studio)

langage & pensée * Un bon programme est un programme qui reflète ce qu’il modèle (design ↔ dessin). Un bon langage est un langage qui favorise cette analogie (formelle). * Par sa forme, un LP doit permettre d'exprimer aussi spontanément que possible la façon dont nous, humains, nous pensons les choses, la façon dont nous cherchons conna”tre & comprendre comment les choses fonctionnent (cognitivisme). * L'outil naturel pour exprimer la pensée, la langue naturelle, possède des avantages et des inconvénients majeurs.

pistes langage * pensée comment pensons-nous ? cognitivisme * POO : aspects pertinents de ce paradigme -- & aspects abscons / * intuition : ce qui se comprend tout seul * lexique : choisir avec un grand soin les symboles (mots & signes) * extensible programming : définir des mots nouveaux (forth, logo) * vocabulaire d'étude : (re)définir un vocabulaire clair, précis, distinctif pour l'étude, la conception & la description des langages * richesse & simplicité : introduire les traits (ou distinctions) pertinents, ceux qui font sens, qui reflètent la pensée, la modélisation

édition * studio de développement : dédié ou adapté * aspect : distinction aspect visuel (édition) / forme standard (process) * style : usage de nombreux styles ? * personnalisation du LP : lexique & syntaxe ? * internationalisation : programmer avec des mots de sa propre langue * unicode : pouvoir écrire & afficher dans tous les systèmes d'écriture * graphisme : programmation visuelle (cf. algorithme & ordinogramme)

projet * tenter de s'affranchir de l'ethnocentrisme, notamment en multipliant les langues pour exposer des essais, exemples

  • utliser la technologie wiki

hérésies / explorations base d'index 0 affectation = instruction print ...


exemples

* modèle de pensée : objets / qualités / relations / actions / composant -- cf. langues naturelles