Comments on: Le débat sur la programmation fonctionnelle en Python http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sam http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-170453 Sun, 13 Dec 2015 10:10:10 +0000 http://sametmax.com/?p=16141#comment-170453 Mes opinions sur PHP (http://sametmax.com/deterer-le-cadavre-dun-troll-non-php-nest-pas-simple/) et JS (http://sametmax.com/un-gros-troll-de-plus-sur-javacscript/) sont très tranchées et bien connues, mais si je devais rester dans le contexte de cette discussion je dirais ceci :

J’ai beaucoup fait de PHP en début de carrière, et voilà ce que je trouve problématique pour la lisibilité :

  • beaucoup de caractères spéciaux ($ pour les variables, (){} pour les blocks, & pour les références, -> pour les accès, etc). Donc il faut parser tout ça dans sa tête.
  • les litéraux sont confus : les arrays ont trop de casquettes, et il faut regarder tout le code contextetuel pour savoir pour quoi on faire. ” et ‘ ne fait pas pareil. etc.
  • bind() c’est un mauvais design de langage, autant en JS qu’en PHP.
  • l’API de PHP est plein de fonctions avec des noms à ralonge, faire aka_truc_bidlule_chose(machine_chouette(ma_var)) plutôt que ma_var.machine.bidule() c’est pas pratique.
  • la lib standard est dans le name space global. include/require/autoload charge aussi tout dans le namespace global. Du coup ça demande de faire très gaffe aux effets de bords de ses imports.
  • il faut faire gaffe à la convertion de type implicite partout, donc ça demande de s’arrêter et réfléchir au code.
  • pas de culture de la lisibilité et plein de conventions de formatage différentes qu’on retrouve dans plein de bases de code.
  • langage initialelement orienté WEB, et donc un paradigme un peu batard pour les autres usages.
  • c’est verbeux. Tout est long à lire.
  • les anciennes bases de code PHP (avant l’air de Symfony) sont immondes. C’est culturel : beaucoup de bidouilleurs à l’arrache (j’en étais). D’autres langages ont un héritage beaucoup moins lourd.
]]>
By: draeli http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-170341 Sat, 12 Dec 2015 14:28:01 +0000 http://sametmax.com/?p=16141#comment-170341 Tous d’abord merci pour cet article qui comme une bonne partie des autres et instructif et agréable à lire.

Je reviens sur la partie lisibilité et ta remarque à propos de Php et javascript. Pour php, si tu as vu ce genre de chose c’est que tu as à faire à quelque chose de peu sèrieux et donc c’est selon moi un mauvais exemple. Je t’invite à regarder par exemple du Laravel, le code est propre, lisible mais il est sur que cela a était codé par des gens dont c’est le métier. Donc l’idée ici n’est pas de critiquer mais simplement faire remarquer que le langage permet de grandes largesses mais dés que c’est du travail en équipe, il existe des reco et même des outils pour s’assurer qu’il n’y a pas du code de porc. Bref tous ca pour dire que ce n’est pas inhérent au langage car même en python tu peux faire le porc.

Concernant le callback hell de javascript, je n’ai jamais eu de soucis pour débugguer et selon moi le soucis ce trouve plus dans l’imcompréhension du langage qui certe est trés putassier et demande beaucoup plus d’efforts d’apprentissage que python. Je t’invite d’ailleurs à lire/voir ce que Douglas Crockford en dit la dessus, on peut difficelement faire plus limpide.

Pour en revenir au sujet inital, je partage le même point de vue sur la FP. Et même d’un point de vue pédagogie je trouve que python est plus simple comme introduction à un langage. (php aussi mais là c’est certainement moins objectif :D )

]]>
By: Lilian http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-169775 Sun, 06 Dec 2015 22:57:15 +0000 http://sametmax.com/?p=16141#comment-169775 Dans l’intro, le lien vers la page sur votre article sur le type hinting s’est un peu emmêlé les pâtes (oui, nous parlons ici de spaghettis) entre lien relatif et absolu, et du coup on a un joli 404 avec une adresse qu’on corrige en quelques secondes, certes, mais voilà.

</partie utile>

Ben, vu que c’est l’occasion pour moi de commenter pour la première fois, merci d’exister les gars. Depuis que j’ai le nez quasiment à temps plein dans du Python, vous vous êtes rapidement imposé en première place de mes recherches quand j’ai une couille de néophyte (on la reconnaît, elle est petite, moche, et facilement résolvable), et vous y restez depuis que les questions de plus haut niveau apparaissent entre deux élégantes lignes de script.

Bref. Merci à vous d’avoir fait en sorte que l’une des premières bases d’information Python en français ait pour slogan “Du code, du cul.”

</partie suce-boules>

]]>
By: Sam http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160495 Sat, 09 May 2015 19:57:19 +0000 http://sametmax.com/?p=16141#comment-160495 Le débat a repris sur python-ideas, avec la suggestion d’utiliser @ pour faire de la composition de fonction : http://code.activestate.com/lists/python-ideas/33320/

Ca ne passera jamais sous cette forme, heureusement. Mais pour ceux qui veulent s’y essayer, c’est facile à implémenter:

class pipe:
    def __init__(self, data):
        self.data = data
    def __rshift__(self, other):
        return piped(self, other)
    def __iter__(self):
        return iter(self.data)

class piped(pipe):
    def __init__(self, data, process):
        self.data = data
        self.process = process
    def __iter__(self):
        for x in self.data:
            yield self.process(x)
            
res = pipe(["1", "2", "3"]) >> int >> (lambda x: x * 2) >> (lambda x: "#%s" % x)
for x in res:
    print(x)

Perso, quand je vois ce genre de code, je pleure. Tout devient plus dur à debugger : pdb, la stack trace, les prints, tu peux tout te mettre au cul.

]]>
By: Sam http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160464 Fri, 08 May 2015 19:32:27 +0000 http://sametmax.com/?p=16141#comment-160464 Je pense que si on a un background de maths et qu’on fait de l’algo, Haskell doit effectivement être très parlant, son expressivité étant optimisé pour ça.

]]>
By: Noir http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160455 Fri, 08 May 2015 11:31:19 +0000 http://sametmax.com/?p=16141#comment-160455 @Sam : hum alors… Je ne prononcerai pas sur la “charge cognitive” du japonais parce que je n’y connais rien (à la charge cognitive, pas au japonais), mais pour l’argument sur les stéréotypes… On m’a appris quand j’étais au lycée que la commedia dell’arte était bien connue pour ses personnages volontairement stéréotypés, idem en France avec le théâtre de Molière, ou même dans certaines pièces de la Grèce antique (arrêtez-moi si je dis de la merde, mes cours de français commencent un peu à dater). Pourtant l’italien et le grec (et le japonais si on enlève les caractères chinois), pour les rudiments que j’en ai c’est nettement plus facile à apprendre et à lire que le français. En bref, à mon sens, les onomatopées et les stéréotypes ce ne sont corrélées à la difficulté de la langue sous-jacente.

Après je ne me positionne pas sur les la prolongation aux langages de prog, comme le dit Eric je trouve ça très subjectif; le sens de codes en Haskell/Ocaml m’apparaissent beaucoup plus clairement que ceux en C ou même en Python (no joke), mais j’ai bien vu que masse de gens qui ont publié ici ne sont pas de mon avis.

]]>
By: Sam http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160452 Fri, 08 May 2015 09:14:51 +0000 http://sametmax.com/?p=16141#comment-160452

@dineptus Bien sur qu’il faut une formation specifique, tout autant que pour lire du code python.

J’ai enseigné le PHP, le Java, le Python et le Javascript. J’ai vu enseigné le VM, le lisp, l’erlang et le C. Le temps et l’effort de la formation est toujours bien plus faible en Python.

Est ce que ca veut dire que le japonais a une charge cognitive plus forte? Je ne pense pas, les japonais lisent aussi vite et sans efforts particuliers. La charge est juste repartie differement.

Oui, la charge cognitive est plus importante en japonais.

Ce n’est pas un hasard si les japonais favorisent les personnages très stéréotypés, les expressions exagérées et les onomatopées dans les arts. Cela donne un contexte important pour la compréhension d’un message.

Apres, je comprends mal cette peur de la recursion,

Prend un sociologue, et apprends lui la programmation. Et tu comprendras.

Après, je ne retire en aucun cas les mérites des mécanismes des langages que tu cites. Je dis simplement qu’ils se font au prix d’autres qualités, et que souvent, je donne la priorité à ces dernières. Et Guido aussi.

]]>
By: Eric http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160447 Fri, 08 May 2015 08:02:08 +0000 http://sametmax.com/?p=16141#comment-160447

Bravo, en un exemple tu viens de me faire passer l’envie de toucher à ce langage, c’est complètement illisible le deuxième exemple ! Il faut avoir une formation spécifique pour comprendre ce machin.

@dineptus Bien sur qu’il faut une formation specifique, tout autant que pour lire du code python.

Les langages fonctionnels encourages un style où les instructions sont compressées et chaînées, où il y a moins de mot clés, et plus de symbole. Cela augmente ce qu’on appelle “la charge cognitive”, c’est à dire le nombre de cycle cpu que le cerveau doit consacrer, non pas à la tache de comprendre le sens du code, mais à décortiquer la structure.

@Sam “La charge cognitive” est une notion tres relative.

Si l’on compare par exemple l’anglais et le japonais:

  • 26 lettres en anglais contre environ 2000 caracteres en japonais

  • des mots espaces en anglais, aucun espace en japonais

Est ce que ca veut dire que le japonais a une charge cognitive plus forte? Je ne pense pas, les japonais lisent aussi vite et sans efforts particuliers. La charge est juste repartie differement.

Pour les langages fonctionnels je pense que c’est un peu la meme idee, c’est juste une facon differente d’apprehender le code.

Apres, je comprends mal cette peur de la recursion, si la fonction est pure elle peut etre testee independament (et prouvee comme logiquement correcte avec un peu d’effort). Et la plupart du temps une solution basee sur fold ou map suffisent.

Pour apporter deux trois choses au debats tests / typage:

Elixir c’est pas mal et ca apporte de vrais choses en plus a erlang comme une bonne gestion de l’unicode et mix.

Dans un autre genre, il y a Elm qui est base sur haskell et qui permet de creer des applis web/js.

]]>
By: kontre http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160242 Mon, 04 May 2015 18:43:15 +0000 http://sametmax.com/?p=16141#comment-160242 @PeuLeuBeu Appelle-le comme tu veux, t’auras au final pas le bon résultat et paf l’avion au final ! Que ce soit de la belle programmation ou non :)

]]>
By: N_Arno http://sametmax.com/le-debat-sur-la-programmation-fonctionnelle-en-python/#comment-160234 Mon, 04 May 2015 16:08:30 +0000 http://sametmax.com/?p=16141#comment-160234 Wow, je n’entrerais pas dans le débat, mais wow. Un super article, que je vais faire lire. A pleins de gens. Continuez comme ça vous êtes formidables.

Nb: Guido van Rossum. Sans V majuscule. Cf sa bio twitter.

]]>