clojure-france

2021-04-16T09:57:17.007900Z

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)

2👍
val_waeselynck 2021-04-16T12:03:34.009500Z

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

5👍3
2021-04-16T12:06:57.010Z

agreed sur le ramp up, les devs qui sont passés chez nous ont été rapidement autonomes

2021-04-16T12:08:58.011300Z

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

2021-04-16T12:10:51.012800Z

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 !

2021-04-16T13:44:25.013600Z

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

2021-04-16T13:46:18.015300Z

si le but du cours c'est d'apprendre la prog fonctionnelle ou autre je sais pas si Clojure est le meilleur choix

Yehonathan Sharvit 2021-04-16T13:51:53.015500Z

Même probleme quand c'est le cinquième. Après on n'a pas envie de passer au sixième

2021-04-16T14:51:49.018100Z

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

2021-04-16T14:56:20.021500Z

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…

2021-04-16T15:20:15.023800Z

@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

2021-04-16T15:21:14.024900Z

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

2021-04-16T15:22:06.025800Z

après c'est aussi souvent l'argument "dynamic typing = à jeter" de dev plus expérimentés qui revient quand ça compare les langages

2021-04-16T15:22:47.026600Z

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...

2021-04-16T15:26:09.028500Z

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 😄

2021-04-16T16:42:50.028800Z

Clojure s'en sort pas mal en algo, en fait.

2021-04-16T16:43:54.029Z

Je m'en suis servi pour faire le Advent of Code en decembre dernier, et j'etais parmis ceux qui finissaient les problemes tot.

2021-04-16T16:44:37.029200Z

Il y a des tactiques a apprendre pour booster le temps d'implementation, ca s'apprend justement en y participant.

val_waeselynck 2021-04-16T18:04:17.029400Z

Oui mais au moins on en a eu 4 avant, c'est déjà ça de pris

2021-04-16T19:48:00.031Z

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

val_waeselynck 2021-04-18T00:06:49.036700Z

@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 :)

val_waeselynck 2021-04-18T00:08:02.036900Z

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»

1👍
2021-04-18T02:39:34.037100Z

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.

2021-04-18T02:43:58.037300Z

Donc en gros, en reframe tu dois retourner une nouvelle DB, et en vrac tu retournes une hashmap de path -> valeur.

2021-04-18T02:45:42.037500Z

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.

2021-04-18T02:46:40.037700Z

La dans mon example, (:time-color nil) peut etre lu comme (:time-color global-context)

2021-04-18T03:01:20.038300Z

@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)

2021-04-16T19:49:23.031200Z

@val_waeselynck je me souviens que tu etais assez critique de re-frame, ton avis m'est donc tres important.

2021-04-16T19:57:15.031400Z

tu veux dire temps d'execution ?

2021-04-16T19:57:26.031600Z

j'y ai participé en python justement

2021-04-16T19:58:00.031800Z

Le temps d'ecrire le programme ET le temps d'execution.

2021-04-16T19:58:02.032Z

je fais un peu de competitive programming et je vois pas comment compete avec de l'algo pur fonctionnel

2021-04-16T19:58:17.032200Z

http://clojure-goes-fast.com/

2021-04-16T19:59:04.032500Z

je parle surtout de la complexité en time / space

2021-04-16T19:59:27.032700Z

Je te passe mon code : https://github.com/green-coder/advent-of-code-2020

2021-04-16T20:00:02.033Z

merci je regarderai

2021-04-16T20:00:39.033200Z

Les complexite algorithmiques sont les memes en Clojure ou en un autre language. Ce qui change, c'est la formulation de la solution.

2021-04-16T20:02:22.033400Z

pas la complexité en space

2021-04-16T20:02:25.033600Z

déjà

2021-04-16T20:02:43.033800Z

pourquoi ?

2021-04-16T20:04:33.034Z

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.

2021-04-16T20:04:45.034200Z

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

2021-04-16T20:05:18.034400Z

Le garbage collector est assez efficace en Java.

2021-04-16T20:05:21.034600Z

je suis pas sûr de comprendre du coup

2021-04-16T20:07:03.034800Z

un graph par exemple, si tu dois mapper tous tes noeuds pour changer leur valeur, la complexité change

2021-04-16T20:07:16.035Z

(space at least)

2021-04-16T20:09:15.035200Z

Je ne te suis pas

2021-04-16T20:10:10.035400Z

Clojure a aussi des structures transientes. https://clojure.org/reference/transients

2021-04-16T20:11:05.035600Z

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

2021-04-16T20:14:08.036200Z

ça a l'air straightforward j'ai jamais joué avec

2021-04-16T20:15:34.036400Z

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)