oui @fredokun donnait un cours Clojure à Paris 6 On a eu 4 stagiaires de ce master à Paris 6 chez Electre qui avait fait du Clojure, après le ramp up avec Clojure n’est jamais très important (je dirais environ 1 mois pour être up and running suivant l’expérience de dev préalable)
Je continue à penser que Clojure est peu recommandable comme premier langage, parce qu'après on n'a pas envie de passer au deuxième
agreed sur le ramp up, les devs qui sont passés chez nous ont été rapidement autonomes
perso j'ai eu une période "algo" et du coup je me suis dirigé vers python / C++ mais la période rebelle est terminée, back to Clojure 100% ahah
mais si je demandais c'est pas tellement pour l'apprentissage mais plutôt pour la démocratisation du language, parce que c'est franchement pas évident de recruter en Clojure en France, en tout cas pour nous !
Clojure pour l'apprentissage j'ai un doute, toutes mes expériences de training Clojure (en interne, meetup...) ont été compliqués à cause des messages d'erreurs
si le but du cours c'est d'apprendre la prog fonctionnelle ou autre je sais pas si Clojure est le meilleur choix
Même probleme quand c'est le cinquième. Après on n'a pas envie de passer au sixième
oui c’est vrai que Clojure comme premier langage c’est clairement un blind spot pour moi, je ne sais pas si un langage impératif ou soi-disant objet est un préalable indispensable notamment pour choper les bases des structures de données et de l’algo..:man-shrugging: après faire un peu de C permet de démystifier bcp de choses sur le fonctionnement de la mémoire, je dirais que ça fait partie de la culture générale Vous avez vu l’initiative Clojure Error Mediator ? https://clojureverse.org/t/introducing-clem-the-clojure-error-mediator/7468
J’oses parfois un parallèle entre le Domain-Driven Design et Clojure : quand j’évoquais le DDD il y a une dizaine d’année ou que j’entendais les réactions de dev junior, c’était : ça sert à rien, show me the code, trop abstrait, etc. alors que maintenant ça fait partie de la boite à outils de base (en tout cas de ce que je vois). Je rêve la même chose avec Clojure, peut-être que dans quelques années on se dira que le bon niveau d’abstraction et modèle mental c’est celui que propose Clojure…
@jeremie J'ai vu Clem en effet, et c'est marrant car on discutait avant sa release avec @mpenet d'un truc similaire. J'ai regardé rapidement Clem et ça a l'air pas mal, sauf la partie "serveur http externe". que celui qui n'a jamais leak un truc un peu interne dans une exception me jette la premiere pierre xD
si j'ai la motiv j'écrirais un truc similaire un jour (mais trop de projets sur le feu actuellement). Mais pour moi (et pas que, tous les clojure survey le montrent) les messages d'erreurs sont un vrai problème pour populariser le langage
après c'est aussi souvent l'argument "dynamic typing = à jeter" de dev plus expérimentés qui revient quand ça compare les langages
là où pour moi c'est pas un problème au vu de ce qu'on manipule comme structures de données en Clojure (et de la taille moyenne des programmes Clojure), l'immuabilité etc...
et perso la course à "le langage qui aura le typesystem le plus incompréhensible sans Phd", ou les types à la Foo<Box<&'a Option<Result<const Bar, Error>>>> je trouve ça plus lourd qu'autre chose 😄
Clojure s'en sort pas mal en algo, en fait.
Je m'en suis servi pour faire le Advent of Code en decembre dernier, et j'etais parmis ceux qui finissaient les problemes tot.
Il y a des tactiques a apprendre pour booster le temps d'implementation, ca s'apprend justement en y participant.
Oui mais au moins on en a eu 4 avant, c'est déjà ça de pris
J'ai fait un peu de Hammock time, et j'ai pondu une idee pour ameliorer re-frame. Je ne sais pas trop a qui en parler, j'espere pouvoir avoir votre avis, et si ca vous interesse, pouvoir en discuter. https://twitter.com/VincentCantin/status/1383143229932015621
@vincent.cantin c'est gentil ça ! Je ne comprends pas à partir de l'exemple en quoi la logique est plus «location-agnostic» que re-frame. Bon pour être honnête je ne comprends pas non-plus la sémantique d'évaluation de :logic donc ça n'aide pas :)
Sur la forme, je recommanderais de namespacer les clefs, ça aiderait beaucoup les utilisateurs à explorer le code source pour lever le voile sur la «magie»
la partie "logic" retourne une association entre une sorte de "reference" a la valeur qui change (sous le capot, ca sera un path dans la db) et une nouvelle valeur.
Donc en gros, en reframe tu dois retourner une nouvelle DB, et en vrac tu retournes une hashmap de path -> valeur.
Les 2 gros changement pour l'utilisateur, c'est que : • la personne qui implemente un event handler n'ecrira pas le path directement. A la place, il ecrira la relation qui lui permettra de faire reference a la valeur a changer. • les changements sur la db deviennent explicites dans la valeur retournee par le event handler. Ca peut etre utile pour implementer plus efficacement la reactivite sur les changements. Un outil d'inspection pourra montrer tres facilement ce que l'event handler veut changer.
La dans mon example, (:time-color nil)
peut etre lu comme (:time-color global-context)
@val_waeselynck est-ce que tu penses que l'idée tient la route ? sinon je la remets dans ma culotte, mais tu sais pas c'que tu perds (comme dirait Renaud)
@val_waeselynck je me souviens que tu etais assez critique de re-frame, ton avis m'est donc tres important.
tu veux dire temps d'execution ?
j'y ai participé en python justement
Le temps d'ecrire le programme ET le temps d'execution.
je fais un peu de competitive programming et je vois pas comment compete avec de l'algo pur fonctionnel
je parle surtout de la complexité en time / space
Je te passe mon code : https://github.com/green-coder/advent-of-code-2020
merci je regarderai
Les complexite algorithmiques sont les memes en Clojure ou en un autre language. Ce qui change, c'est la formulation de la solution.
pas la complexité en space
déjà
pourquoi ?
La complexite dans l'espace, c'est la taille de ce que tu gardes en memoire a un instant t. C'est pareil dans tous les languages.
je sais pas jusqu'à quel point le structural sharing va, mais je vois pas comment ça peut compete avec muter l'emplacement mémoire directement
Le garbage collector est assez efficace en Java.
je suis pas sûr de comprendre du coup
un graph par exemple, si tu dois mapper tous tes noeuds pour changer leur valeur, la complexité change
(space at least)
Je ne te suis pas
Clojure a aussi des structures transientes. https://clojure.org/reference/transients
On peut les utiliser si on a besoin d'un petit coup de boost. La difference n'est pas enorme, ca reste dans de l'acceleration lineaire .. x1~x2 peut-etre
Exemple dans mon code, tient : https://github.com/green-coder/advent-of-code-2020/blob/79a1cd54b669329c38245262ecc9b33a4d5e50c2/src/aoc/day_23.clj#L32
ça a l'air straightforward j'ai jamais joué avec
je cherche un exemple mais tu as surement raison c'est simplement un shift de mindset j'ai jamais vraiment essayé en fait (l'"algo" en clojure)