kantien a écrit 1131 commentaires

  • [^] # Re: C'est bien dommage

    Posté par  . En réponse au journal C++17 est sur les rails. Évalué à 3. Dernière modification le 18 mars 2016 à 11:34.

    Un des intérêts des macros est de permettre d'étendre la syntaxe du langage, je ne vois pas en quoi c'est un problème de conception. S'il n'y a pas de mécanisme d'extension tu peux moins écrire les choses comme tu veux. Et dans le code d'Eliom (c'est peut-être là que je n'ai pas tout compris) j'ai l'impression que des outils de compilation intégrés au langage sont utilisés. Donc pas de macros mais on utilise des outils propres aux compilateurs pour étendre la syntaxe…

    Tu as bien compris, et l'intérêt de passer par des outils propres aux compilateurs pour étendre la syntaxe plutôt que d'utiliser des macros c'est :

    • uniformiser et simplifier l'écriture d'extension
    • conserver les gardes-fou du typage statique

    Jusqu'à il y a deux ans, pour étendre la syntaxe OCaml on utilisait un pré-processeur camlp4 (ce qui, au fond, est similaire à de la macro) mais c'était chiant à écrire et on se retrouvait avec des tonnes de syntaxes différentes entre les projets : la coopération entre projet était rendue plus compliqué. Avec la nouvelle façon de faire, via ppx, cela se passe au niveau de la manipulation des AST et les extensions sont uniformisées : la coopération est simplifiée et s'est accrue. Par exemple dans le cas de Eliom :

    let f x = x + 1 (* définition usuelle d'une fonction en ocaml, ici le successeur *)
    let%client f  x = x + 1 (* extension de syntaxe pour dire que cette fonction est définie côté client *)
    let%server f x = x + 1 (* la même mais définie côté serveur *)
    let%shared f x = x + 1 (* elle est accessible aussi bien côté serveur que côté client *)

    Étendre la syntaxe d'un langage est une chose fort utile, mais il ne faut pas que cela défigure complètement la syntaxe initiale (ce qui est tentant avec les macros) et quitte à générer du code par modification de la syntaxe autant le faire au niveau de l'AST : ce que montre la signature du foncteur que tu cites (une signature en OCaml c'est l'équivalent des headers en C ou C++, et un foncteur est proche des templates du C++ : une fonction dont les paramètres sont des modules, i.e. des structures ayant une signature donnée).

    Les foncteurs (comme les templates en C++) est aussi une manière beaucoup plus simple et sécurisée (meilleur contrôle du typage) de générer du code. Un exemple simple, en OCaml, et la cas de la structure d'ensemble : pour construire des ensembles sur un type de donné quelconque, il suffit de le munir d'une relation d'ordre et d'utiliser le foncteur Set.Make

    (* on définit une structure d'ordre sur les entiers *)
    module IntOrd = struct
    type t = int
    let compare = Pervasives.compare (* c'est une fonction d'ordre générique sur n'importe quel type *)
    end
    
    (* on la passe en arguments au foncteur Set.Make *)
    module IntSet = Set.Make(IntOrd)
    
    (* et cela génère automatiquement toutes ces fonctions *)
    module IntSet :
    sig  
     type elt = int                                                              
     type t = Set.Make(IntOrd).t
     val empty : t
     val is_empty : t -> bool
     val mem : elt -> t -> bool
     val add : elt -> t -> t
     val singleton : elt -> t
     val remove : elt -> t -> t
     val union : t -> t -> t
     val inter : t -> t -> t
     val diff : t -> t -> t
     val compare : t -> t -> elt
     val equal : t -> t -> bool
     val subset : t -> t -> bool
     val iter : (elt -> unit) -> t -> unit
     val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a
     val for_all : (elt -> bool) -> t -> bool
     val exists : (elt -> bool) -> t -> bool
     val filter : (elt -> bool) -> t -> t
     val partition : (elt -> bool) -> t -> t * t
     val cardinal : t -> elt
     val elements : t -> elt list
     val min_elt : t -> elt
     val max_elt : t -> elt
     val choose : t -> elt
     val split : elt -> t -> t * bool * t
     val find : elt -> t -> elt
     val of_list : elt list -> t
    end
    
    (* que je peux utiliser dans la foulée *)
    let e = IntSet.empty (* e est l'ensemble vide *)
    let e = IntSet.add 1 e (* je lui ajoute l'élément 1 *)
    
    (* je teste si 1 est élément de l'ensemble *)
    InSet.mem 1 e
    - : bool = true

    Pour ce qui est du parenthésage, c'est une question de goût, mais la syntaxe de Lisp qui colle à la syntaxe du lambda-calcul n'est pas toujours des plus simples à lire. Par exemple la fonction qui consiste à échanger l'ordre d'application des arguments d'une fonction s'écrit en \lambda-calcul : \lambda z.(\lambda x.(\lambda y.(z y)x)), là où je trouve la syntaxe let swap z x y = z y x plus « parlante » et moins « lourde ».

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: C'est bien dommage

    Posté par  . En réponse au journal C++17 est sur les rails. Évalué à 2.

    Pour juste un petit exemple : écrire un générateur html qui permet de mêler du code Lisp et du code html (comme les jsp de java mais avec tout le langage Lisp sous la main, sans un (en fait deux dans le cas des jsp, sans compter les balises personnalisées) langages supplémentaires à apprendre) ça nécessite même pas 100 lignes de code, avec les échappements html appliqués automatiquement. Et si tu écris des applications web tu sais à quel point la sécurité de la génération des pages est difficile (sinon je te le dis ;) : ajouter du texte dans des pages dont les méta-données sont du texte c'est assez délicat parce qu'il faut faire attention partout et que par définition les humains ne sont pas très doués dans ce domaine). Étendre ce générateur pour qu'il traite tous les cas (échappement des paramètres javascript, échappement correct des url, jetons dans les urls, …) c'est quelques centaines de lignes de code. Avec une syntaxe finale qui mêle harmonieusement lisp et html (ou ce qui le représente), sans avoir rien d'autre à apprendre, y compris pour créer tes propres composants de présentation (de simples fonctions/macros Lisp). C'est un exemple où il y a peu de choses à apprendre pour savoir comment ça marche, qui libère le développeur de pas mal de problèmes (moins de choses à penser partout) et qui permet à des gens ayant une expérience modérée du développement web d'éviter les conneries. À l'échelle d'un site de 3 pages ce n'est pas intéressant mais si tu réalises des applications plus complexes c'est vite rentabilisé.

    Cela ressemble à ocsigen ce que tu décris, en moins développé. C'est écrit en OCaml (c'est la même famille que Lisp : \lambda-calcul avec très impératif, et aussi objet, mais en mieux typé et sans les horreurs du paranthésage et des macros — pour moi, avoir besoin de macros est un défaut de conception dans un langage) et ça génère du html garanti conforme (grâce au système de types du langage) ainsi que de la compilation OCaml vers javascript : ce qui permet d'écrire une webapp en full-ocaml en codant les parties client et serveur dans le même langage, tout en bénéficiant de la puissance et de la sécurité de son système de types.

    En exemple, tu as l'application graffiti : proof of concept d'une application collaborative de dessin (si tu ouvres deux navigateurs sur la page, ce que tu dessines dans l'un est répercuté sur le caneva de l'autre) dont le code fait 200 lignes.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Hôpital … charité

    Posté par  . En réponse au journal Sale temps pour les informaticiens lanceurs d'alerte. Évalué à -3.

    On a toujours le choix, mais on a pas toujours la paire de couilles qui va avec.

    Le courage est-il un attribut qui n'est caractéristique que des personnes possédant une paire de couilles ? Le courage serait-il un attribut exclusivement masculin ? La phrase aurait eu le même sens, et la même portée en la formulant : « On a toujours le choix, mais on n'a pas toujours le courage qui va avec ! » (j'y ai simplement substitué ton expression, quelque peu phallocrate, par un point d'exclamation — je suppose qu'elle avait pour but de souligner la détermination inébranlable que nécessite le courage).

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Machine Learning

    Posté par  . En réponse au journal AlphaGo remporte le premier match contre Lee Sedol. Évalué à 3. Dernière modification le 10 mars 2016 à 17:54.

    Il ne faut pas s'emballer non plus. Le programme "de base" joue très bien au go et battrait la plupart des joueurs amateurs.

    Assurément que de base le programme savait déjà bien jouer au Go. Je rappelle pour cela le koan de Marvin Minsky :

    In the days when Sussman was a novice, Minsky once came to him as he sat hacking at the PDP-6.

    “What are you doing?”, asked Minsky.

    “I am training a randomly wired neural net to play Tic-Tac-Toe” Sussman replied.

    “Why is the net wired randomly?”, asked Minsky.

    “I do not want it to have any preconceptions of how to play”, Sussman said.

    Minsky then shut his eyes.

    “Why do you close your eyes?”, Sussman asked his teacher.

    “So that the room will be empty.”

    At that moment, Sussman was enlightened.

    source

    :-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 4.

    Tu sais aussi que c'est le même genre d'erreur si il y a redefinition de type, ce qui donne :
    Error: This expression has type mytype_t but an expression was expected of type mytypet_

    Je crois qu'ils sont en train de travailler dessus, ce qui manque c'est les adresses dans les fichiers du pourquoi de l'erreur, en gros, les 2 définitions qui entre en conflit.

    Effectivement, à ce niveau tu as raison. Il me semble aussi qu'ils travaillent dessus, ce qui est d'ailleurs plus une question de temps à consacrer au sujet que de difficultés. À mon avis, si ce n'est pas encore présent c'est que ceux qui s'occupent du compilateur bossent tous sur Emacs et que leurs extensions résolvent déjà ce problème, donc de leur seul point de vue il n'existait pas.

    Pour des pures débutant, je ne suis pas sur que map et fold_left fasse si peur. Gérer correctement une boucle peut être bien plus compliqué que l'on peut le croire (erreur d'off by one). Et une fois que l'on a gouter au filtrage de type, on a plus besoin du "if" :)

    Le if peut bien servir de temps en temps (test d'égalité physique ou structurelle) mais assurément le pattern matching est le cœur d'un code OCaml. Mais l'ouvrage que je citais amène bien évidemment tous ces concepts (pour preuve l'exemple de code que j'ai cité) mais dans une approche progressive que je trouve bien faite sur le plan pédagogique. Et l'on n'y trouve pas tous les gros mots que tu as cités : monades, type algébrique, clôture, currification… ou du moins pas d'entrée de jeu. Il n'y est jamais question de monade (c'est indispensable en Haskell pour les IO, mais pas en OCaml) ni de clôture (il me semble), et ils parlent un peu de types algébriques et de currification (c'est indispensable) mais sans rentrer dans le détail : c'est inutile, il vaut mieux apprendre par l'exemple. Mais l'on aborde des techniques évoluées du langage comme la fonctorisation.

    Pour revenir sur la non-nécessité des monades en OCaml, qui reste pour moi le concept le plus abstrait et sans doute le plus dur à comprendre dans ta liste, je vais revenir sur le code que j'avais cité en exemple. Au fond ce qu'ils codent pour avoir des tableaux persistants c'est un système de contrôle de version sur des tableaux : faire un set c'est faire un commit sur la structure et la fonction reroot a pour rôle de se rebaser sur le tableau sur lequel on veut opérer : on modifie le graphe des diff jusqu'à ce que notre tableau soit à la base et un « véritable » tableau. Et pour faire cela, ils manipulent des pointeurs ce qui est impossible en fonctionnel pur à la Haskell. Néanmoins pour l'utilisateur d'une telle structure de données, on lui présentera cette interface dans le fichier .mli :

    type 'a t
    val init : int -> (int -> 'a) -> 'a t
    val length : 'a t -> int
    val get : 'a t -> int -> 'a
    val set : 'a t -> int -> 'a -> 'a t
    val iteri : (int -> 'a -> unit) -> 'a t -> unit

    La fonction reroot fait partie de la machinerie interne (du point de vue du mathématicien, c'est un lemme qui n'a pas besoin d'être connu de l'utilisateur), la représentation concrète du type lui est cachée (il ne peut donc pas manipuler les pointeurs) et pour lui tout ce passe comme si c'était du fonctionnel. C'est pour cela que les auteurs aiment bien définir ainsi une des caractéristiques du paradigme fonctionnel :

    Une structure de données persistantes n'est pas nécessairement codée sans effet de bord. La bonne définition de persistant est observationnellement immuable et non purement applicatif (au sens de l'absence d'effet de bord). On a seulement l'implication dans un sens : purement applicatif ⇒ persistant. La réciproque est fausse, à savoir qu'il existe des structures de données persistantes faisant usages d'effets de bord.

    Et effectivement la structure des tableaux persistants fonctionne avec des effets de bord (les fonctions set et reroot) mais cela c'est en interne et l'utilisateur ne l'observe pas : pour lui la structure est persistante.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Backup

    Posté par  . En réponse au journal Comment Github a ressuscité mon logiciel libre. Évalué à 2.

    Parce qu'il est possible qu'ils fassent de la merde dans le futur, on va s'empecher d'utiliser un outil maintenant?

    Oui, c'est le principe de précaution et il fait partie de notre Constitution depuis Chirac : de peur que ce soit mal un jour, on n'utilise pas ! :-/

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 3.

    J'avais espoir dans oscigen, mais je ne comprends rien à leur super tuto. De plus, il n'utilise pas du ocaml standard.

    Si c'est juste pour avoir un serveur web, il y a ocsigen server. Après les tutos sont surtout là si tu veux faire une webapp en full-OCaml avec le framework eliom qui permet de coder les parties clients et serveurs en même temps. Et 200 lignes de code pour faire une appli simple de dessin collaboratif, c'est pas mal je trouve.

    Qu'entends-tu par « il n'utilise pas du OCaml standard » ? Est-ce l'usage de fichier .eliom ? Cela est du à la nécessité de compiler différemment les code clients et serveurs que l'on met dans le fichier entre les balises [%%client], [%%server] ou [%%shared], mais entre ces balises c'est bien du OCaml standard.

    Sinon il y a aussi cohttp développé par l'équipe de mirage.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 5.

    Honnêtement je trouve que c'est un reproche aussi fréquent qu'immérité.

    Je suis bien d'accord avec toi, mais je l'ai souvent entendu c'est pour cela que je l'ai précisé. Et effectivement, elle est bien plus fournie que la bibliothèque standard C. Mais ceux qui ont connu Python, par exemple, doivent croire que tout langage vient avec une bibliothèque standard aussi fournie.

    Comme tu l'as dit, depuis l'arrivée de opam on peut toujours trouver une bibliothèque qui correspond au besoin. Au fond le dépôt opam est la bibliothèque standard. ;-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 2.

    Autre point que je n'ai pas mentionné, c'est la bibliothèque standard. Celle de base, fournie par INRIA, est souvent jugée limitée : elle est surtout développée pour le compilateur. Néanmoins, la société Jane Street a développé la bibliothèque core pour remédier à ce problème. C'est celle qui est utilisée dans les exemples du livre Real World OCaml.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 1. Dernière modification le 09 mars 2016 à 19:15.

    Pour le premier point OCaml le fait :

    Le système OCaml est une implémentation de qualité industrielle de ce langage, comprenant un compilateur produisant du code natif de haute performance (ocamlopt) pour 9 architectures de microprocesseurs (IA32, PowerPC, AMD64, Alpha, Sparc, Mips, IA64, HPAA, StrongArm), un compilateur code-octet (ocamlc) et une boucle d'interaction (ocaml) pour la rapidilité du développement et la portabilité. La distribution d'OCaml offre également une bibliothèque standard, un débogueur (ocamldebug), des générateurs d'analyseurs lexicaux (ocamllex) et syntaxiques (ocamlyacc), un pre-processeur pretty-printer (camlp4) et un générateur de documentation (ocamldoc).

    source

    Pour le second (QT5) je ne sais pas. Je n'ai rien trouvé dans les dépôts opam (le gestionnaire de paquets haute performance OCaml) mais tout ne s'y trouve pas.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Pourquoi ?

    Posté par  . En réponse à la dépêche Swift sous GNU/Linux - Introduction. Évalué à 5.

    Tu es un peu dur, même si tu n'as pas complètement tort : on trouve des personnes qui présentent ainsi le langage à des non initiés, ce qui les fait fuir inéluctablement.

    Pour les messages d'erreurs, je viens de faire dans mon toplevel :

    # let f x = 1 + x;;
    val f : int -> int = <fun>
    # f "1";;
    Error: This expression has type string but an expression was expected of type
             int

    et le "1" est souligné pour indiquer qu'elle est l'expression qui n'a pas de le bon type.

    Pour ce qui est de l'apprentissage, je conseille le livre de Sylvain Cochon et Jean-Christophe Filliâtre Apprendre à programmer en OCaml. Ils sont enseignants-chercheurs, et enseigne la programmation OCaml au niveau licence, donc sans tous les gros mots. ;-)

    Le livre présente progressivement les concepts du langage et débute d'ailleurs par des traits purement impératifs comme les boucle for, les tableaux, les boucles while pour n'aborder qu'ensuite les spécificités du paradigme fonctionnel.

    Les deux auteurs ont d'ailleurs une approche intéressante du paradigme fonctionnel qui consiste essentiellement dans la persistance des données. Ils ont, par exemple, publié ensemble un article A Persistent Union-Find Data Structure où ils exposent leur implémentation de l'algorithme union-find en utilisant des traits impératifs du langage, bien que la structure obtenue soit persistante. Là où un langage fonctionnelle pure, comme Haskell, aurait recours à des monades. Et dans leur livre il y a tout un chapitre, par exemple, où ils reprennent le concept de tableaux persistants, dont le code suit, en l'expliquant pas à pas :

    type 'a t = 'a data ref
    and 'a data =
      | Arr of 'a array 
      | Diff of int * 'a * 'a t
    
    let init n f = ref (Arr (Array.init n f))
    
    let rec reroot pa = match !pa with
      | Arr a -> 
          a
      | Diff (i, v, pa') -> 
          let a = reroot pa' in
          let old = a.(i) in
          a.(i) <- v;
          pa := Arr a;
          pa' := Diff (i, old, pa);
          a
    
    let length pa = Array.length (reroot pa)
    
    let get pa i = (reroot pa).(i)
    
    let iteri f pa = Array.iteri f (reroot pa)
    
    let set pa i v = 
      let a = reroot pa in
      let old = a.(i) in
      a.(i) <- v;
      let res = ref (Arr a) in
      pa := Diff (i, old, res);
      res

    Les opérations set et get sont en temps constant tant que l'on n'utilise pas le côté persistant, mais on paye un léger prix lorsque l'on veut l'utiliser (il faut défaire les patch de la version courante pour revenir à la version que l'on souhaite manipuler, c'est le rôle de la fonction reroot).

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Un potentiel sacré bourbier

    Posté par  . En réponse à la dépêche ZFS, Canonical et GPL. Évalué à 10.

    Preuve irrefutable: une bonne partie de l'ortographe ou de la grammaire n'apparait absolument pas a l'oral.
    Dont acte: l'ecrit n'est qu'une norme abstraite, sans logique, et sans utilite reele sinon a se faire coire intelligent ceux qui l'ont appris par coeur.

    Je m'inscris en faux contre une telle affirmation. J'en veux pour preuve cette extrait d'un discours de Gerard Huet Fondements de l'informatique, à la croisée des mathématiques, de la logique et de la linguistique. lors d'un colloque sur l'enseignement philosophique et les sciences.

    On nous dit « il faut inculquer aux jeunes l’esprit scientifique ». Très bien, mais qu’est ce que ça veut dire au juste, au-delà d’une incantation un peu creuse ? Inculquer l’esprit scientifique ne se fait pas à coup de bourrage de crâne de connaissances scientifiques rebutantes, ce qui est au contraire la meilleure manière de faire fuir les élèves. De toutes façons, la science moderne est trop vaste et trop complexe pour que quiconque puisse tout connaître, on n’aura plus de Pic de la Mirandole, et c’est aussi bien. Par contre, on peut susciter la curiosité des élèves en mettant en valeur les figures de rhétorique développées par la science pour acquérir ces connaissances. Pour avoir prononcé ce terme de rhétorique devant vous, je devrais m’excuser, c’est un terme vieillot. Autrefois, il y avait des classes de rhétorique, et la notion de débat intellectuel était valorisée. Maintenant c’est terminé, on inculque des connaissances prédigérées, et la Science est imposée comme un prêche. On apprend par cœur des formules que l’on fait réciter, les exercices sont calibrés pour être résolus par application mécanique d’un cours bien saucissonné, l’esprit critique n’est pas encouragé. Ouvrons la fenêtre, discutons des méthodes qui permettent de raisonner droit, de comprendre comment poser des hypothèses, d’élaborer des conjectures, de chercher des contre-exemples. Ces méthodes sont transversales à toutes les matières enseignées, littéraires comme scientifiques. Il y a là un lien important entre philosophie et informatique, car la méthodologie informatique prolonge la rhétorique traditionnelle en tant que moyen légitime d’acquérir des connaissances. Ce sont ces préoccupations qui ont développé la logique, qui a finalement quitté la philosophie pour s’intégrer aux mathématiques, mais a perdu en passant sa finalité argumentative, qui est l’essence de la démarche scientifique. […]

    Je vais prendre un autre exemple dans un domaine complètement différent, c’est l’analyse grammaticale dans la classe de français. Je ne sais pas si on fait encore beaucoup ça, mais de mon temps on décortiquait les phrases : toute phrase doit avoir un verbe, tout verbe doit avoir un sujet. Là, il y a un petit bout de raisonnement aussi. Comment est-ce que l’on obtient une phrase à partir d’un verbe ? Prenons d’abord un verbe intransitif. Un verbe intransitif a besoin d’un sujet pour exprimer son action. Donc, vous pouvez voir le rôle fonctionnel de ce verbe comme utilisant le syntagme nominal représentant le sujet pour construire la phrase représentant l’action. De même, un verbe transitif peut être vu comme une fonction qui prend son complément d’objet pour construire un syntagme verbal, se comportant comme un verbe intransitif. Vérifier que « le chat mange la souris » est une phase correcte devient un petit raisonnement où le verbe « mange » prend la souris pour construire « mange la souris », objet fonctionnel qui peut maintenant manger le chat, si je puis dire, pour donner la phrase. Le petit arbre de raisonnement, qui exprime la composition des deux fonctions en vérifiant leurs types, hé bien, c’est ce qu’on appelle l’analyse grammaticale de la phrase. Regardez de près, vous vous rendez compte que c’est exactement le même raisonnement que celui pour la machine à laver du cours de physique, avec deux étapes de modus ponens. L’analyse dimensionnelle devient l’analyse grammaticale. C’est important, en exhibant les procédés rhétoriques similaires on abstrait le raisonnement commun, pour lequel les deux disciplines fournissent des exemples concrets. Les deux exemples s’éclairent l’un l’autre, et on retient un procédé cognitif général qui peut servir pour toutes sortes d’autres investigations. En exhibant le procédé rhétorique commun, et en le réifiant dans deux disciplines supposées étanches l’une à l’autre, on apprend aux élèves que l’esprit scientifique transcende les matières enseignées et les présente comme des aventures intellectuelles cohérentes. Et puis, cela peut donner des idées. En classe de français on faisait de l’analyse grammaticale, mais on n’en faisait pas en classe d’anglais. Pourquoi ? Le même type de raisonnement s’applique, et on montre deux exemples du même phénomène, qui est ainsi mieux mémorisé. Par contre il y a des détails de grammaire qui ne sont pas les mêmes. Par exemple, en introduisant les paramètres morphologiques, on va pouvoir exprimer l’accord du verbe avec son sujet comme une contrainte sur les arbres d’analyse. En français comme en anglais. Par contre, l’adjectif est invariable en anglais, et donc ne s’accorde pas avec le nom qu’il qualifie. En mettant en lumière ces différences structurelles fondamentales, on éclaire les difficultés rencontrées par les élèves, les faux amis, les analogies erronées qui sont difficiles à déraciner. C’est important de le montrer en contraste avec le français. Parce que si vous leur apprenez l’analyse grammaticale du français, il y a une grande partie qu’ils vont pouvoir appliquer à l’anglais aussi, et les parties où cela ne s’applique pas, c’est justement les endroits où il faut faire attention à ne pas calquer d’une langue sur l’autre.

    voir le texte aux pages 20 à 23

    En d'autres termes, l'analyse grammaticale et morphologique d'une langue en révèle sa structure logique : comme le coup du verbe transitif qui revient à un double usage du modus ponens (si A alors B, or A, donc B). Pour illustrer cette exemple et son lien avec la logique et l'informatique (en réalité la théorie des types), je vais le coder (simplement) en OCaml

    # let verb_trans verb ~suj ~comp =             
        Printf.printf "sujet : %s\n" suj;
        Printf.printf "verbe : %s\n" verb;
        Printf.printf "complément : %s\n" comp;
        Printf.printf "phrase : %s %s %s\n" suj verb comp
      ;;
    val verb_trans : string -> suj:string -> comp:string -> unit = <fun>
    # let manger = verb_trans "manger";;
    val manger : suj:string -> comp:string -> unit = <fun>
    # let manger_la_souris = manger ~comp:"la souris";;
    val manger_la_souris : suj:string -> unit = <fun>
    # let le_chat_mange = manger ~suj:"le chat";;
    val le_chat_mange : comp:string -> unit = <fun>
    # manger_la_souris "le chat";;
    sujet : le chat
    verbe : manger
    complément : la souris
    phrase : le chat manger la souris
    - : unit = ()
    # le_chat_mange "la souris";;
    sujet : le chat
    verbe : manger
    complément : la souris
    phrase : le chat manger la souris
    - : unit = ()
    # le_chat_mange "ses croquettes";;
    sujet : le chat
    verbe : manger
    complément : ses croquettes
    phrase : le chat manger ses croquettes
    - : unit = ()
    # manger_la_souris "le chien";;
    sujet : le chien
    verbe : manger
    complément : la souris
    phrase : le chien manger la souris
    - : unit = ()
    # manger ~suj:"la souris" ~comp:"le chien";;
    sujet : la souris
    verbe : manger
    complément : le chien
    phrase : la souris manger le chien
    - : unit = ()

    Alors assurément, la logique de la langue française (son système de type et de déclinaison) est plus sophistiqué que ce que je viens de coder, mais c'était pour illustrer autrement mon propos et celui de M. Huet. Donc non ! la grammaire n'a rien, mais absolument rien d'illogique. Bien au contraire, l'étude de la grammaire aiguise la compréhension de la logique, la montre sous un autre jour et évite de rester dans une compréhension étriquée de celle-ci.

    J'avais d'ailleurs cité le même texte dans la dépêche où l'auteur de grammalecte (outil d'aide automatisée à la correction grammaticale) faisait une demande de financement participatif, afin de montrer que le problème algorithmique d'un tel outil est analogue à de l'inférence de type et à la correction automatique de démonstration. Et de fait, lorsque des grammairiens construisent un arbre d'analyse syntagmatique, la structure est très proche d'un AST ou Arbre de Syntaxe Abstrait.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Un potentiel sacré bourbier

    Posté par  . En réponse à la dépêche ZFS, Canonical et GPL. Évalué à 2.

    Nan mais arrête, tu joues carrément avec l'écrit là !

    Pour nous recentrer sur le sujet de l'article, et ne point prolonger le hors-sujet, on peut bien reconnaître que jouer avec les mots comme ne pas respecter leur orthographe sont bien des licences de penser que l'on peut accorder à tout un chacun. Question : sont-elles incompatibles ? doit-on s'attendre à un procès entre les deux parties en présence (surtout si l'on en vient aux mains) ou peut-on espérer un accord à l'amiable ?

    Tu serais pas un « petit nobliaux fils de bourgeois trop con toi » ?

    L'administration fiscale a encore moins d'humour. On a retrouvé, dans les archives de la police de Paris, deux lettres de Boris Vian à son percepteur, dont la seconde est :

    Mon Cher Contrôleur,

    Je suis un grand feignant, mais j'y comprends rien dans tous ces bouts de papier impossibles. Voilà ma déclaration, il y a un peu de retard; mais je suis plein de bonnes intentions.

    Encore mille excuses pour ce retard excusable et répandez mes bénédictions autour de vous.

    Je ne sais si le choix orthographique pour « feignant » a été relevé par le destinataire, mais le policier qui archiva les lettres nota dans son rapport : « On affirme que ces deux lettres, dont la dernière était rédigée sur l'imprimé de déclaration de revenus, auraient coûté, du point de vue fiscal, très cher à leur auteur. » source

    Vian était sans doute un petit nobliaux fils de bourgeois cherchant à échapper à l'impôt.

    :-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Un potentiel sacré bourbier

    Posté par  . En réponse à la dépêche ZFS, Canonical et GPL. Évalué à 2.

    J'aime beaucoup cet exemple simple :
    - Allons manger grand-mère.
    - Allons manger, grand-mère.
    Les deux sont syntaxiquement corrects, mais ne veulent pas du tout dire la même chose !

    Tout est question de personnage : cela dépend si l'on est le petit chaperon rouge ou le grand méchant loup; ce dernier ayant tout intérêt à entretenir la confusion. :-)

    Hors les problématiques de ponctuation, les accents sont aussi porteur de sens et une erreur peut tout autant prêter à confusion. Par exemple, il y a des jours où je me demande si notre gouvernement croît en incompétence, ou bien s'il croit en incompétence. Quoique, dans une forme fléchie, cela permet d'assimiler la croissance à de la croyance. :-Þ

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Un potentiel sacré bourbier

    Posté par  . En réponse à la dépêche ZFS, Canonical et GPL. Évalué à 1.

    Je ne suis pas d'accord, un troll pourri t la discussion s, il ne l'enrichit pas. Il n'hésite pas à utiliser la mauvaise foi s, les attaques personnel les, cela n'a rien d'intéressant.

    Sans aucune volonté trolessque. ;-)
    Cela étant, je t'accorde qu'un troll est pourri et n'hésite pas à recourir maintes fois à la mauvaise foi. Pour ce qui est des attaques contre le personnel, je ne pense pas qu'un troll aille jusque-là. :-)

    La perte de foi dans l'orthographe arrive bien des fois mais tenter d'y remédier ne fait pas risquer des coups dans le foie — alors que, selon certain, ce peut être plus risqué à l'oral : faisons donc une petite chanson !

    Il était une fois,
    Une marchande de foie,
    Qui vendait du foie,
    Dans la ville de Foix…
    Elle se dit ma foi,
    C'est la première fois
    Et la dernière fois,
    Que je vends du foie,
    Dans la ville de Foix

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: dommage

    Posté par  . En réponse au journal Ray Tomlinson est décédé. Évalué à 1.

    Tout à fait, l'idée est juste d'avoir une syntaxe pour décrire un arbre et utiliser des > en début de lignes réalise pleinement l'objectif.

    Il y a bien sûr d'autres solutions possibles. Par exemple sur linuxfr, après lecture rapide des sources d'une page de journal, l'arbre des commentaires est syntaxiquement structuré par des listes non ordonnées (<ul>) imbriquées : ce qui nous permet de plier-déplier à volonté une discussion issue d'un commentaire à partir de sa racine. :-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: dommage

    Posté par  . En réponse au journal Ray Tomlinson est décédé. Évalué à 4.

    En fait, le principal problème du mail, c'est qu'étant du texte pur, il n'y a aucun standard qui puisse dire au client mail "ça, c'est la réponse, et ça, c'est le texte cité".

    Si il y a un standard et pour les citations c'est la même syntaxe qu'ici. ;-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Et avec les extensions tierces ?

    Posté par  . En réponse au journal Iceweasel is dead!. Évalué à 3.

    Je ne dis pas le contraire, les mainteneurs aurait pu rajouter les répertoire dans /usr/local, mais ils ne l'ont pas fait. Mais cela permet, sinon, de rajouter des dépôts dans le sources.list sans qu'ils soient signés par Mozilla ou Debian.

    C'est du hack crade, je l'accorde, mais ma réponse avait pour objectif de montrer que ce n'était pas limité aux paquets issus des dépôts Debian. Quoique le rapport qui clos le bug précise que l'on peut le rouvrir si la solution apportée n'est pas jugée convenable. ;-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Et avec les extensions tierces ?

    Posté par  . En réponse au journal Iceweasel is dead!. Évalué à 1.

    De ce que je comprends tu pourras tester l'extension non signée de ton ami.
    Le rapport qui clos le bug précise :

    toolkit/mozapps/extensions/internal/XPIProvider.jsm: Allow unsigned addons in /usr/{lib,share}/mozilla/extensions.

    Bon, il faut avoir les droits root (sur ta machine je suppose que tu les as ;-) et placer l'extension dans les répertoires système.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Incitation au troll

    Posté par  . En réponse au journal Projet de loi français El Khomri. Évalué à 2. Dernière modification le 23 février 2016 à 17:10.

    Rien de plus récent. CQFD.

    Je ne sais pas, que fallait-il prouver ? Mon message était autant une réponse au tien qu'à celui de ketchupenz.

    Ce dernier prétend que le néo-libéralisme provoquera violence et misère (il aurait pu aussi parler de l'ultra-turbo-néo-libéralisme, ça en jette plus), pour ensuite critiquer des comportements qu'il reconnaît ne pas être du libéralisme (effectivement c'est du capitalisme de connivence, ce qui n'est pas libéral), et enfin conclure que le libéralisme est de la fumisterie. J'ai du mal à suivre la cohérence du propos.

    Ensuite, pour ta part, tu soutiens que le libéralisme a toujours pour effet de renforcer le pouvoir des puissants. Jouant sur ton « autant que je me souvienne », je contre-argumente sur un discours de 1849 (au passage, son amendement a été rejeté) pour montrer qu'un libéral ne cherche pas à renforcer le pouvoir des puissants. Je dirais même plus : si une mesure vise à renforcer le pouvoir d'une partie de la population sur une autre, alors on peut en conclure sans hésitation que cette mesure n'est pas libérale. Les libéraux recherchent en tout point l'égalité des droits et de devoirs de tous devant la loi, et font l'apologie du modèle du bazar sur celui de la cathédrale. ;-)

    Le problème est qu'en France, comme l'a dit lelama, ce terme est assimilé à capitalisme de connivence, ploutocratie, népotisme, loi de la jungle… Si tu penses que le MEDEF est une association de libéraux, alors tu te trompes sur le contenu de la doctrine libérale. Ainsi dans l'introduction de son ouvrage pulp libéralisme, la tradition libérale pour les débutants, Daniel Tourre écrit :

    Être libéral en France, c'est un peu comme être un robot mutant avec des tentacules métalliques. C'est mal vu dans les soirées entre amis ou dans les dîners entre gens bien.
    C'est assez injuste.
    Les robots mutants n'ont pas eu une influence déterminante dans la rédaction des Droits de l'Homme de 1789.
    Les robots mutants n'ont pas contribué aux théories économiques qui ont permis un recul de la misère sans précédent dans l'histoire de l'humanité.
    Les robots mutants ne s'appuient pas sur un droit permettant d'échanger avec nos semblables en respectant leur autonomie.
    Les robots mutants n'ont pas été les adversaires les plus résolus des deux grands totalitarismes du XXe siècle.
    La lecture de ces 36 poncifs antilibéraux vous permettra de discuter avec un libéral à la prochaine soirée sans lui parler de son vaisseau spatial ou de pinces hydrauliques.

    La DDHC de 1789 fait partie du préambule de notre constitution, et les libéraux ne transigent pas sur les deux premiers articles qui sont :

    Art. 1er. Les hommes naissent et demeurent libres et égaux en droits. Les distinctions sociales ne peuvent être fondées que sur l'utilité commune.

    Art. 2. Le but de toute association politique est la conservation des droits naturels et imprescriptibles de l'Homme. Ces droits sont la liberté, la propriété, la sûreté, et la résistance à l'oppression.

    Pour conclure, et revenir sur les progrès sociaux et le libéralisme, je citerai cet article :

    Il est nécessaire de préciser que ce sont les libéraux qui sont à l’origine des progrès sociaux dans notre pays. Passons brièvement en revue deux cent ans d’apports du libéralisme au social : rémunération par un salaire, protection sociale, caisses d’épargne, droit de grève, liberté du travail, liberté d’association, droit de coalition, interdiction du travail des enfants , lois sur la durée du travail, loi et assurance sur les accidents de travail, instruction des ouvriers, etc.
    Pour nous recentrer sur les syndicats, ce sont bien les libéraux qui sont à l’origine du droit de coalition. Ils s’en prirent très tôt à la loi Le Chapelier. Ainsi le 17 novembre 1849 Frédéric Bastiat intervint à l’assemblée dans son Discours sur la répression des coalitions industrielles. Quinze ans plus tard Emile Ollivier fut le rapporteur de la loi du 25 mars 1864 qui abolit le délit de coalition. En 1867 la loi reconnut la liberté des réunions publiques à condition qu’on n’y traitât ni politique ni religion mais économie et social. Dès 1876 Edouard Lockroy déposait une première proposition de loi concernant la liberté syndicale « visant à reconnaître aux syndicats professionnels le droit de se constituer librement et d’obtenir la personnalité civile sans autre formalité que le dépôt de leurs statuts auprès d’une administration publique » . Il fallut huit ans pour que cette proposition devienne la loi du 21 mars 1884 grâce à un autre libéral, Waldeck-Rousseau, alors ministre de l’intérieur. En ce qui concerne les conventions collectives on les retrouve dans la proposition de Lockroy de 1876. Cela ne fut pas repris dans la loi de 1884 mais fit l’objet d’un important projet de loi en 1906 par Gaston Doumergue, libéral lui aussi. Ce n’est toutefois que le 25 mars 1919 que les conventions collectives reçurent une définition légale.

    Je ne vois toujours pas, dans ces combats, où se trouvent la volonté de « renforcer le pouvoir des puissants ».

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: Incitation au troll

    Posté par  . En réponse au journal Projet de loi français El Khomri. Évalué à 2.

    Le libéralisme qui a toujours eu pour effet de renforcer le pouvoir des puissants, cela se discute fortement. Alors, aussi loin que je m'en souvienne, je prendrai pour exemple le discours de Frédéric Bastiat, alors député des Landes, devant une commission de l'assemblée pour défendre le droit de grèves et de s'organiser en syndicats des ouvriers le 17 novembre 1849 : Discours sur la répression des coalitions industrielles.

    Bastiat défend un amendement de son collègue et ami M. Morin afin de s'opposer au texte de la loi. La loi prétend interdire toute coalition, qu'elle soit patronale ou salariale, mais pour ces députés ce n'est qu'un leurre.

    Vous avouez vous-même que, sous l’empire de votre législation, l’offre et la demande ne sont plus à deux de jeu, puisque la coalition des patrons ne peut pas être saisie ; et c’est évident : deux, trois patrons, déjeunent ensemble, font une coalition, personne n’en sait rien. Celle des ouvriers sera toujours saisie puisqu’elle se fait au grand jour.

    Effectivement, pour le patronat cela aurait nécessairement été du « pas vu, pas pris » et donc l'interdiction n'aurait touchée que les ouvriers. Ce qui pour lui ressemblait tout bonnement à de l'esclavage :

    En vérité, c’est là un renversement complet d’idées.

    Quoi ! je suis en face d’un patron, nous débattons le prix, celui qu’il m’offre ne me convient pas, je ne commets aucune violence, je me retire, — et vous dites que c’est moi qui porte atteinte à la liberté du patron, parce que je nuis à son industrie ! Faites attention que ce que vous proclamez n’est pas autre chose que l’esclavage. Car qu’est-ce qu’un esclave, si ce n’est l’homme forcé, par la loi, de travailler à des conditions qu’il repousse ? (À gauche. Très bien) !

    Vous demandez que la loi intervienne parce que c’est moi qui viole la propriété du patron ; ne voyez-vous pas, au contraire, que c’est le patron qui viole la mienne ? S’il fait intervenir la loi pour que sa volonté me soit imposée, où est la liberté, où est l’égalité ? (À gauche. Très bien) !

    Continuant sa critique du texte, loin de le trouver équitable, conformément à la loi de l'offre et de la demande, il le rejette car le texte favorise exclusivement la demande (l'employeur) au détriment de l'offre (les ouvriers) ce qui ne peut que tirer les salaires vers le bas injustement :

    Puisque les uns échappent à votre loi, et que les autres n’y échappent pas, elle a pour résultat nécessaire de peser sur l’offre et de ne pas peser sur la demande, d’altérer, au moins en tant qu’elle agit, le taux naturel des salaires, et cela d’une manière systématique et permanente. C’est ce que je ne puis pas approuver. Je dis que, puisque vous ne pouvez pas faire une loi également applicable à tous les intérêts qui sont en présence, puisque vous ne pouvez leur donner l’égalité, laissez-leur la liberté, qui comprend en même temps l’égalité.

    Ainsi au nom de son libéralisme, il considérait comme bonne justice de laisser les ouvriers libres de s'organiser en syndicat et se mettre en grève lorsqu'ils étaient en désaccord avec leur direction sur le taux des salaires.

    Néanmoins, pour illustrer l'amendement qu'il soutient (qui revenait à imiter la législation anglaise de l'époque), il prend un exemple issu de l'histoire récente anglaise suite à un disette en blé en 1842. La rareté du blé ayant entraîné une hausse des prix, les gens achetaient moins de produits manufacturés (leur argent partait dans le blé) ce qui entraîna du chômage dans les usines. Il y eu des manifestations ouvrières, ils n'obtinrent pas gain de cause mais voilà ce que compris la classe ouvrière :

    Messieurs, à l’époque dont je parle, il s’agitait une grande question en Angleterre, et cette question était envenimée encore par les circonstances, par la disette ; il y avait lutte entre la population industrielle et les propriétaires, c’est-à-dire l’aristocratie qui voulait vendre le blé le plus cher possible, et qui, pour cela, prohibait les blés étrangers. Qu’est-il arrivé ? Ces unions, qu’on appelait hier plaisamment trade-unions, ces unions, qui jouissaient de la liberté de coalition, voyant que tous les efforts faits par leur coalition n’étaient pas parvenus à faire élever le taux des salaires…

    Une voix. C’est ce qui est mauvais.

    M. Bastiat. Vous dites que c’est un mal ; je dis, au contraire, que c’est un grand bien. Les ouvriers se sont aperçus que le taux des salaires ne dépendait pas des patrons, mais d’autres lois sociales, et ils se dirent : « Pourquoi nos salaires ne se sont-ils pas élevés ? La raison en est simple : c’est parce qu’il nous est défendu de travailler pour l’étranger, ou du moins de recevoir en paiement du blé étranger. C’est donc à tort que nous nous en prenons à nos patrons ; il faut nous en prendre à cette classe aristocratique qui non seulement possède le sol, mais encore qui fait la loi, et nous n’aurons d’influence sur les salaires que lorsque nous aurons reconquis nos droits politiques. »

    Et oui : le libre-échange avec le blé venant de l'étranger leur était favorable et leur permis de se retrouver en meilleur position pour obtenir de l'emploi et une hausse de salaire. La prohibition ne profitait qu'aux aristocrates propriétaires terrien qui organisaient la rareté du blé par la loi : c'est on ne peut plus anti-libéral. ;-)

    Son intervention générale se conclua de la sorte :

    En résumé, je repousse le projet de la commission, parce qu’il n’est qu’un Expédient, et que le caractère de tout expédient ; c’est la faiblesse et l’injustice. J’appuie la proposition de M. Morin, parce qu’elle se fonde sur un Principe ; et il n’y a que les principes qui aient la puissance de satisfaire les esprits, d’entraîner les cœurs, et de se mettre à l’unisson des consciences. On nous a dit : Voulez-vous donc proclamer la liberté par un amour platonique de la liberté ? Pour ce qui me regarde, je réponds : Oui. La liberté peut réserver aux nations quelques épreuves, mais elle seule les éclaire, les élève et les moralise. Hors de la liberté, il n’y a qu’Oppression, et, sachez-le bien, amis de l’ordre, le temps n’est plus, s’il a jamais existé, où l’on puisse fonder sur l’Oppression l’union des classes, le respect des lois, la sécurité des intérêts et la tranquillité des peuples.

    À lire cette intervention (dans son intégralité), j'avoue avoir du mal à voir où l'objectif est de « renforcer le pouvoir des puissants ».

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • # Tests vs Types

    Posté par  . En réponse au journal De tout, de rien, des bookmarks, du bla bla. Évalué à 3.

    Un commentaire pour ajouter des compléments de lecture à ton article tests vs types, qui est relatif aux questions : comment définir les spécifications d'un code ? et comment être certain que le code répond bien à ses spécifications ?

    Un journal récent de Big Pete m'a rappelé les excellents cours de Gérard Berry au Collège de France. Sur le sujet en question, il y a tout le cours de l'année 2014-2015 : Prouver les programmes : pourquoi, quand, comment ? ou celui de cette année structures de données et algorithmes pour la vérification formelle (la première leçon et le séminaire qui suit est une bonne présentation, avec des exemples en Java et intégration dans les commentaires du code).

    Comme l'article auquel tu renvoies traite de Haskell et de Idris (du ML made in England), il y a l'équivalent made in France. Dans un ancien journal Qui fait des trucs "cool" en France et en Europe ?, j'avais essayé d'expliquer les principes à la base de la différence entre OCaml et Coq et pourquoi le système de types du second permet de se dispenser des tests unitaires.

    Au passage, comme tu abordes aussi la question des gestionnaires de paquets, OCaml dispose du sien : opam dont l'architecture est basé sur les résultats de recherches du projet Mancoosi (qui a aussi servie au projet Debian pour son assurance qualité), en particulier sur la nature NP-complet du problème de gestion des dépendances.

    Last but not least, en rapport avec la compilation clojure vers du bytecode JVM, la machine virtuelle Coq (qui est LE langage fonctionnelle le mieux typé) a été compilé en javascript via OBrowser (et tourne donc dans un navigateur) par une start-up française : edukera.

    P.S : le journal de Big Pete renvoie a une leçon en cours sur les réseaux neuronaux convolutionnels qui permettent, en autre, de faire de la reconnaissance d'images. ;-)

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: What's the point ?

    Posté par  . En réponse au journal À propos des certificats. Évalué à 2.

    c'est quand même l'argument d'autorité suprême

    L'argument d'autorité : c'est mal !

    Mais déformer les propos d'autrui, afin de leur faire dire ce qu'ils ne disent pas, ce n'est pas mieux non plus. Le message n'avait nullement pour intention de revendiquer je ne sais quelle autorité, mais de préciser à jyes que j'étais loin d'ignorer les travaux de Gödel et Turing, et que l'opinion que j'exprimais à leur sujet n'était pas sans fondement. Cela étant mon message et la discussion autour avec Perthmâd a plus d'importance que le point qui vous a tant marqué.

    Pour ce qui est de la qualité du Master, que tu sembles mettre en doute, je ne savais pas que les normaliens et les polytechniciens avaient pour réputation de se « branler les couilles rue Mouffetard ». Ni, lorsque l'on lit les débouchés :

    La suite naturelle de cette formation est la préparation d’un doctorat, soit en logique mathématique, soit en informatique. Pour un doctorat en informatique, la thèse peut éventuellement être préparée dans une entreprise ou un organisme public de recherche (INRIA, CEA…).

    Les débouchés sont des postes d’enseignant‐chercheur ou de chercheur :

    • soit dans le milieu universitaire (français ou étranger) ou des organismes publics de recherche (CNRS, INRIA, CEA, ONERA, etc.).

    • soit dans les services de recherche et développement d’entreprises du monde industriel (EDF, France Telecom, Siemens, EADS, etc.).

    Les services de recherche et développement de ces entreprises sont particulièrement demandeurs d’étudiants ayant une forte compétence à la fois mathématique, logique et informatique, leur permettant d’encadrer des ingénieurs travaillant dans les domaines de la certification de logiciels, de la vérification de programmes et de protocoles, ainsi que de la sécurité informatique. Dans certains cas, le recrutement peut s’effectuer directement à l’issue du master 2ème année.

    que les services de R&D de ces entreprise avait pour habitude de recruter à ses fonctions dans des masters qu'on obtient en se « pignolant ». Cela étant, je n'en sais rien, les problématiques autour de la logique, de l'épistémologie et de la philosophie eurent ma préférence sur celles en rapport avec l'informatique.

    Néanmoins, je n'ai jamais eu la prétention d'avoir « tant de puissance intellectuelle et autant d'années d'études réunies en une personne », ni de me comparer à Gödel ou Turing : ça, c'est un homme de paille.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: What's the point ?

    Posté par  . En réponse au journal À propos des certificats. Évalué à 1.

    Arf j’avais pas vu ça. Au moins ceci explique cela (faut avoir un peu suivi le journal sur les SSII).

    Il faut dire que ta blague s'inscrivait dans une controverse sur la réforme et l'assouplissement du code du travail, et que ton message s'apparentait plus à de la raillerie qu'autre chose, voire à un sophisme par homonymie dans le but d'éluder l'objet du débat.

    Ce stratagème consiste à étendre une proposition à quelque chose qui a peu ou rien à voir avec le discours original hormis la similarité des termes employés afin de la réfuter triomphalement et donner l’impression d’avoir réfuté la proposition originale.

    Nota : des mots sont synonymes lorsqu’ils représentent la même conception tandis que des homonymes sont deux conceptions couvertes par le même mot. Voir Aristote, Topiques, I, 13. « Profond », « coupant », « haut » pour parler tantôt de corps tantôt de ton sont des homonymes tandis que « honorable » et « honnête » sont des synonymes.

    On peut voir ce stratagème comme étant identique au sophisme ex homonymia. Cependant, si le sophisme est évident, il ne trompera personne.

       Omne lumen potest extingui (toute lumière peut être éteinte)
       Intellectus est lumen (l'intelligence est une lumière)
       Intellectus potest extingui (donc l'intelligence peut être éteinte)
    

    Nous pouvons voir ici quatre termes : « lumière », utilisé à la fois au sens propre et au sens figuré. Mais dans les cas subtils ces homonymes couvrant plusieurs concepts peuvent induire en erreur[1].

    Exemple 1
    A : « Vous n’êtes pas encore initié aux mystères de la philosophie de Kant. »
    B : « Ah, mais s’il s’agit de mystères, cela ne m’intéresse pas ! »

    L'expression « marché frileux » étant somme toute classique en science économique.
    Mais là, tu semble te rapprocher grandement de l'ultime stratagème

    Ultime stratagème
    Soyez personnel, insultant, malpoli

    Lorsque l’on se rend compte que l’adversaire nous est supérieur et nous ôte toute raison, il faut alors devenir personnel, insultant, malpoli. Cela consiste à passer du sujet de la dispute (que l’on a perdue), au débateur lui-même en attaquant sa personne : on pourrait appeler ça un argumentum ad personam pour le distinguer de l’argumentum ad hominem, ce dernier passant de la discussion objective du sujet à l’attaque de l’adversaire en le confrontant à ses admissions ou à ses paroles par rapport à ce sujet. En devenant personnel, on abandonne le sujet lui-même pour attaquer la personne elle-même : on devient insultant, malveillant, injurieux, vulgaire. C’est un appel des forces de l’intelligence dirigée à celles du corps, ou à l’animalisme. C’est une stratégie très appréciée car tout le monde peut l’appliquer, et elle est donc particulièrement utilisée. On peut maintenant se demander quelle est la contre-attaque, car si on a recours à la même stratégie, on risque une bataille, un duel, voire un procès pour diffamation.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.

  • [^] # Re: What's the point ?

    Posté par  . En réponse au journal À propos des certificats. Évalué à 0.

    C'est clair qu'ils ne décernent pas de ceintures noires d'humour !

    Tel n'est pas non plus leur objectif. Quoi qu'il en soit, j'ai ri à la lecture de la planche; et ma petite remarque ne visait nullement à mettre en cause son côté humoristique. Elle serai d'ailleurs sans doute moins efficace si elle ne minimisait pas le nombre, cela rajoute à la dimension d'incompréhension du génie par ses congénères. Bien qu'au fond, il n'y ait peut être effectivement que 10 personnes qui comprennent le génie de Turing : Lui et la machine qui passera son test.

    Cela étant, le message auquel tu réponds était destiné à la reflexion de jyes dont je n'ai alors certes pas saisi la dimension humoristique, si telle était son intention. Mais ce dernier point à la lecture de son message n'a rien d'évident en soi : il coupe mon message pour ne retenir que ma comparaison entre Turing et Gödel, et semble en conclure que je fais parti des personnes qui n'ont rien compris au génie du premier. J'ai pris cela, à tort ou à raison, comme une attaque personnelle et je me défends. Encore, si j'ignorais totalement leurs œuvres respectives et leurs apports à la science, je me serais tu, mais c'est loin d'être le cas et je tenais à le préciser.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.