Fork me on GitHub
#clojure-france
<
2021-04-16
>
jeremie09:04:17

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)

👍 6
val_waeselynck12:04:34

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

👍 15
9
Yehonathan Sharvit13:04:53

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

val_waeselynck18:04:17

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

cyppan12:04:57

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

cyppan12:04:58

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

Vincent Cantin16:04:50

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

Vincent Cantin16:04:54

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

Vincent Cantin16:04:37

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

cyppan19:04:15

tu veux dire temps d'execution ?

cyppan19:04:26

j'y ai participé en python justement

Vincent Cantin19:04:00

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

cyppan19:04:02

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

cyppan19:04:04

je parle surtout de la complexité en time / space

cyppan20:04:02

merci je regarderai

Vincent Cantin20:04:39

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

cyppan20:04:22

pas la complexité en space

Vincent Cantin20:04:33

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.

cyppan20:04:45

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

Vincent Cantin20:04:18

Le garbage collector est assez efficace en Java.

cyppan20:04:21

je suis pas sûr de comprendre du coup

cyppan20:04:03

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

cyppan20:04:16

(space at least)

Vincent Cantin20:04:15

Je ne te suis pas

Vincent Cantin20:04:10

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

Vincent Cantin20:04:05

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

cyppan20:04:08

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

cyppan20:04:34

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)

cyppan12:04:51

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 !

mcorbin13:04:25

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

mcorbin13:04:18

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

jeremie14:04:49

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

jeremie14:04:20

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…

mcorbin15:04:15

@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

mcorbin15:04:14

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

mcorbin15:04:06

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

mcorbin15:04:47

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

mcorbin15:04:09

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 😄

Vincent Cantin19:04:00

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 Cantin19:04:23

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

val_waeselynck00:04:49

@U8MJBRSR5 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_waeselynck00:04:02

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»

👍 3
Vincent Cantin02:04:34

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.

Vincent Cantin02:04:58

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

Vincent Cantin02:04:42

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.

Vincent Cantin02:04:40

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

Vincent Cantin03:04:20

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