barmic a écrit 10455 commentaires

  • [^] # Re: chi va piano va sano

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 3.

    si ce que tu veux refactoriser ce sont des classes complètes, le problème c'est qu'une classe embarque un état + un comportement, c'est donc plus compliqué qu'une "simple fonction" qui n'embarque qu'un comportement (sous réserve que tu n'utilises pas des variables globales, statiques ou assimilés)

    Donc ce que tu entends c'est que le code « r2r » est une fonction pure donc son comportement est simple (pas d'effet de bord) et facilement testable. C'est pratique quand c'est le cas, mais il arrive que ça ne soit pas possible à obtenir (dans un temps limité au moins).

    donc tu n'implémentes pas cette complexité supplémentaire qui te retarderait en développement, mais également en tests et en gestion des effets de bords

    Il y a aussi des techniques qui permettent de préparer les nouveautés avec un sur coût en terme de temps de dev négligeable. Je pense particulièrement aux cas où personnellement, je fais une sorte de data-driven programming : un cas trivial c'est pour implémenter différent cas au lieu d'avoir une structure de contrôle if/else if/else ou un switch, je place chaque partie du code dans un dictionnaire condition => fonction. Ajouter des cas consiste à ajouter le cas à l'initialisation de l'objet et le test qui va avec (c'est plus déclaratif et ça réduit la complexité cyclomatique).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: chi va piano va sano

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 3.

    garder les algorithmes dont la complexité immédiate est nécessaire aussi monolithiques que possibles

    Personnellement pour cette partie là j'ai tendance à utiliser un peu d'abstraction, non pas pour rendre le code particulièrement souple, mais pour le rendre lisible. Mon objectif pour ce genre de chose, c'est de partir de « comment est-ce que je voudrais écrire cette logique ? » et de me créer les outils qui permettront de l'écrire de cette façon. Ça permet d'essayer d'avoir un endroit où l'on a que la logique métier sans s’embarrasser des contraintes purement technique et de garder cette partie là concise (on lit l'algo sans naviguer dans le code, on navigue dans le code quand on veut voir chaque partie de l'algo).

    Bien sûr il ne faut pas créer un DSL pour ça, juste avoir le bon niveau d'abstraction (c'est vraiment au jugé).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: chi va piano va sano

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 4.

    J'ai un peu de mal avec ta notion de « ready-to-refactor », pour moi l'unique prérequis pour un refactor c'est d'avoir un minimum de couverture par des tests unitaires (de ma modeste expérience, j'ai appris que je ne savais pas faire de refactoring sans avoir de test…).

    Quels sont les caractéristiques de ce genre de code pour toi ?

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: java ?

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 5.

    Ouais, mais non, pas en Java. Les guetter and setter n'encapsulent rien dans 90% des cas, ils sont justes auto générés et retournent la valeur, point.

    Non ils retournent la référence, c'est là le vrai problème à mon avis.

    foo.bar est plus sympa à lire que foo.getBar()

    On est dans la subtilité, là. Juste une question de joli.

    Surtout sur des créations/copies d'objets ou t'assignes 10 fields d'affilée.

    Le problème n'est peut être pas dans les setters. Sauf cas particulier, je considère qu'il y a 2 grandes classes d'objet (il y en a d'autre comme les énumération par exemple, mais elles sont bien plus rare) :

    • les beans, qui ne portent que de la donnée, en principe j'essaie qu'ils soient immutables (donc avec le(s) constructeur(s) qui va bien des getter (d'objets aussi immutables) et pas de setter) ou si vraiment la construction se fait en plusieurs fois j'utilise des setters de type builder qui te permettent d'écrire foo.setBar("toto").setBidule(42)
    • les objets « de traitement » dont les données internes doivent rester interne. Donc le constructeur permet de lui injecter ses dépendances et c'est tout.

    Exemple enswift, langage décent avec des vrai properties (il me semble que c# à un truc du genre aussi, mais je connais pas assez pour dire).

    Euh… Si je comprends bien ton exemple, tu va faire un print à chaque affectation. Donc tu as un effet de bord lors de l'utilisation de foo.bar = "toto". C'est totalement opposé à ce que tu affirme juste au dessus :

    Le fait que tout soit une fonction a aussi tendance à cacher le fait qu'un getter peut avoir un side effect/être cher à calculer, et ca c'est mal. si t'as un side effect notable, ça devrait être une fonction, pas get/set.

    Je trouve au contraire qu'il est bien plus logique d'imaginer avec un effet de bord sur foo.setBar() (ou foo.bar(String)) que sur foo.bar = "".

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: java ?

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 3.

    Je ne comprends pas. Java EE et certaines vielles API de Java (je n’ai pas en tête d’API de ce type qui soient encore vraiment utilisées1) sont effectivement trop sophistiquée pour ce qu’elles font. Mais en quoi est-ce que ça doit « contaminer » d’une part ton code, d’autre part ton code dans d’autres langage ? Les gens qui font du Vertx, du Sparkframework, jooq… ils ont utilisé de la magie noire qui t’es impossible ?

    Tu ne t’es jamais posé la question d’utiliser des choses un peu pointues en C++ comme la programmation template (pour faire autre chose que de la généricité) ou des pointeurs de fonctions pour rendre ton code plus facile à faire évoluer (mais plus complexe à aborder) ?

    En Haskell personne ne se demande jusqu’à quel niveau pousser le système de type ?


    1. après je ne connais pas tout le JDK :) 

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: java ?

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 3.

    Je ne suis pas expert du noyau pour autant je comprends l'overengineering comme étant "utiliser un bazooka pour tuer une mouche".

    Les extrêmes c'est une chose, il y a ensuite tous les autres cas moins clairs. Vois-le comme : « Comment fais-tu pour t'assurer d'utiliser le meilleur outil pour un travail donné ? »

    Ou alors l'overengineering n'est réservée qu'aux ingénieurs et je suis effectivement trop bête pour comprendre la subtilité.

    Cool, on est que lundi :)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: java ?

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 6.

    Je ne crois sincèrement pas que ce soit si simple.

    moi ou un de mes collègues risque de l'utiliser plus tard

    Comment évalue-tu ce risque ?

    Ce ne sont pas que des questions de classes :

    • quand décide-tu qu'un DSL est nécessaire ?
    • comment est-ce que tu choisi d'utiliser ton système de type ? Comment choisi-tu si tu garde des chaînes de caractères ou des enum quand tu as une chaîne qui présente un choix limité et connu de cas ? De même pour les types fantomes pour les langages fonctionnels ? Ou la métaprogrammation pour le C++ ?
    • comment choisi de passer par des pointeurs de fonctions plutôt que d'avoir des if entre plusieurs fonctions ?

    Si c'est pas de l'overengineering…

    Tu ne semble pas comprendre la subtilité du problème. Sais-tu que c'est réellement un sujet sur le quel Linus se bat régulièrement ? (il envoie bouler violemment les gens qui lui propose du code trop sophistiqué) Je ne crois pas qu'on puisse prendre de haut comme ça les gens sans chercher à comprendre.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Moi aussi !

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 5.

    Je pense aussi que la multiplicité de styles et de caractères dans une équipe de programmation, ainsi que l'ouverture d'esprit et humilité des développeurs peut beaucoup aider.

    C'est vraiment quelque chose à gérer et le fait de faire des revues de code/design à 30% de la tâche aide. Plus tu t’investis dans une solution, moins tu sera enclin à la remettre en cause.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Un chouia simpliste ?

    Posté par  . En réponse au journal Lutter contre l'overengineering. Évalué à 6. Dernière modification le 23 mai 2016 à 13:54.

    Tu ne parles pas non plus du principal souci, à savoir les divers facteurs humains, en estimant que c’est évident de décider qu’un projet est "over engineeré". Les gens sont rarement d’accord sur le sujet et y a plusieurs raisons pour ça.

    J’ai peut-être pas assez mis l’emphase dessus, mais quand je dis que ça dépend de chaque projet et de comment il est développé c’est un peu ce que je voulais dire.

    Par exemple, les gens vont avoir tendance à sur estimer leur capacité (effet dunning kruger), et donc à voir de l’over enginering là ou il y a juste de leur part un manque de compréhension.

    Tu as aussi l’effet inverse.

    Donc non, l'over engineering, c'est comme la sécurité, c'est pas un état binaire, ça dépend des besoins qui doivent être précisés.

    Je pensais que mon premier paragraphe était là justement pour montrer ce fait.


    Et pourtant, je pense pas que ça soit de l'over engineering, par rapport à l'alternative d'avoir 15 scripts presque semblables, voir pire, un logiciel pour produire les 15 scripts simples.

    Ce n’est pas parce que tu rends ton outil plus sophistiqué qu’il l’est trop. C’est plus subtil que ça.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: GitHub

    Posté par  . En réponse au journal Migration d'un projet de SourceForge vers TuxFamily. Évalué à 7.

    Il fait bien ce qu'il veut mais je suis d'accord. J'ajouterai que ça ne me paraît pas pertinent de penser qu'un service sur internet est immuable et qu'on aura jamais à changer. Même avec toute la bonne volonté du monde, une association peu disparaître (comme ça a failli être le cas pour la quadrature) ou des éléments extérieurs peuvent intervenir (si la loi les oblige à donner à l'état un accès à tout ce qu'ils hébergent par exemple, il y a des chances qu'ils se sabordent).

    Bref de la même manière que github peut dans l'avenir faire n'importe quoi, tuxfamilly peut disparaître. L'important c'est donc plus de garder la main sur les données et d'avoir de quoi changer facilement (avoir son propre nom de domaine par exemple c'est bien).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Crapware

    Posté par  . En réponse au journal Quand 01net nous explique ce qu’est un hacker. Évalué à 4.

    Je pensais au site derrière télécharger.com pas à tout 01.net

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Crapware

    Posté par  . En réponse au journal Quand 01net nous explique ce qu’est un hacker. Évalué à 8.

    J'ai un point de vue un peu différent. 01net se comporte comme un dépôt de logiciels et comme tous les dépôts (y compris ceux de ta distribution) à toi de savoir quelle confiance tu y met. Rechercher le site officiel n'est pas toujours simple et certains logiciels ont des sites officiels qui font peur (on pourrait croire ne pas être sur le site officiel), comme le site de putty.

    Les sotores vont finir de tuer ces sites là.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Le javascript

    Posté par  . En réponse à la dépêche Node.js passe la sixième vitesse. Évalué à 4.

    Ensuite pour avoir un truc optimisé tu va utiliser un truc comme gulp, grunt ou webpack qui vont prendre tes sources et les concaténer (avec plus ou moins d'optimisation) ou utilise les CDN pour tes dépendances, comme ça le navigateur ne les téléchargera pas.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # npm3

    Posté par  . En réponse à la dépêche Node.js passe la sixième vitesse. Évalué à 10.

    Npm3 est également de façon notoire bien plus lent que npm2.

    Ben ça fait rêver… (surtout quand on se souviens de ce qu'on disait sur maven il y a des années)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Le javascript

    Posté par  . En réponse à la dépêche Node.js passe la sixième vitesse. Évalué à 8.

    Node.js c'est un packaging du moteur javascript V8. À la base c'est pour faire un serveur web pour javascript (comme tu le dirais pour tomcat avec java ou wsgi pour python ou plank pour perl…). Ça n'utilise pas (Fast)CGI. Mais comme ça fonctionne assez bien, c'est devenu la base pour faire du js hors du navigateur. Globalement ça permet d'écrire du js avec des API pour faire véritablement tout ce que tu veux (comme Atom par exemple).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Destructeurs

    Posté par  . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 5.

    De même pour MapR et sa réécriture de HBase, HDFS et kafka. Ce n'est pas parce que ça existe que c'est véritablement plus performant.

    J'ai l'impression comme avec Scilla, qu'il s'agit de gens qui veulent s'engouffrer en se disant qu'ils vont réécrire le truc à la mode mais en C++ (parce que c'est fooorcément plus performant !).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Destructeurs

    Posté par  . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 5.

    Pour scylla, on va peut-être éviter de prendre pour argent comptant les tests fait par l'éditeur, non ? Le seul test que j'ai vu (mais j'ai pas vraiment cherché je suis juste tombé dessus quand il est sorti) ne donnait pas plus envie que ça
    http://blog.octo.com/scylladb-contre-cassandra-vers-un-nouveau-mythe/

    Sachant qu'ils ne sont pas iso fonctionnels. Par exemple il n'y a pas de de vues matérialisées tu va devoir le faire à la main et c'est bien plus lent.

    Ce sera peut être bien un jour, mais on va attendre quelques mois pour se décider (mais je doute).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Autres OS

    Posté par  . En réponse au journal Android: position dominante et navigateurs alternatifs. Évalué à 1.

    Bref, je trouve Qwant particulièrement bon. Si Google est meilleur (ou en tout cas te parait meilleur), c'est en parti parce qu'il t'a pisté comme un malade et qu'il sort des réponses en fonction de ton "profil". (qui ne sont pas forcément les plus pertinentes, puisque Google choisi pour toi ce qui est pertinent selon lui).

    Globalement, si l'utilisateur les trouve pertinent c'est plutôt pas mal déjà, non ? Tu fais comment pour déduire autrement que la réponse est pertinente ? La pertinence est nécessairement quelque chose de subjectif. L'idée qu'on peut avoir un résultat pertinent à la recherche « image latex » de manière objective, c'est vraiment ne pas comprendre à quoi sert un moteur de recherche. Ce n'est pas wikipedia, qui en tant qu'encyclopédie se doit d'être neutre et objectif. Là on parle d'être au plus proche de la perception de l'utilisateur.

    Bien sûr qu'il y a des dérives possibles, que Google peut te manipuler en te cachant que nuit debout existe, qu'il te présente que des pages qui parle positivement du 49-3… Il y a un curseur à poser et aujourd'hui soit tu n'a rien de personnalisé soit tu as google. Les gens utilisent google.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Destructeurs

    Posté par  . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 2.

    Je me suis trompé d'Ariane et oui je sais que ça n'a rien avoir, c'est juste répondre à du troll par du troll _^
    (tu as un détecteur à quand on parle d'ADA ? :)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Destructeurs

    Posté par  . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 4.

    C'est vrai que grâce à un langage sans GC Ariane 4 n'a jamais eu ce genre de problème, n'est-ce pas ?

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Autres OS

    Posté par  . En réponse au journal Android: position dominante et navigateurs alternatifs. Évalué à 3.

    J'utilise keepass sur mon téléphone depuis longtemps (j'ai commencé avec un Galaxy Ace qui n'a jamais était du haut de gamme) sans problème particulier (donc de l'AES ou du towfish 256bits). Il ne s'agit pas de chiffré des gros volumes, juste un fichier texte assez simple.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Destructeurs

    Posté par  . En réponse à la dépêche Crystal, un langage proche de Ruby, en version 0.16. Évalué à 8.

    Encore une fois, c'est un problème associé au design du langage, et pas à l'absence de GC. Le C pure rend trés difficile, voir impossible la mise en place de technique de RAII car il ne gère pas la notion de "scope", contrairement à C++, Rust, Ada, Objective-C, Swift, etc….

    Un langage est un tout cohérent sortir des coupables plutôt qu'un autre comme ça n'est pas forcément si clair. La gestion des chaînes de caractères du C, c'est lié à sa gestion de la mémoire, tout comme le fait de faire de l'arithmétique de pointeur,…

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Autres OS

    Posté par  . En réponse au journal Android: position dominante et navigateurs alternatifs. Évalué à 3.

    Je ne critique pas le google store, mais de là à l'encenser comme étant le meilleur, je ne vois aucun fondement à cette affirmation.

    Je vais m'autoréférencer :)
    https://linuxfr.org/users/ickythump/journaux/android-position-dominante-et-navigateurs-alternatifs#comment-1656330 et toute la discussion qui suit.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Programmation Dynamique

    Posté par  . En réponse au journal Haskell -- Évaluation paresseuse. Évalué à 3.

    facilité avec laquelle

    Ah ! Ah ! Note que cette facilité s'accompagne d'une démonstration de ton code… :-)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • [^] # Re: Autres OS

    Posté par  . En réponse au journal Android: position dominante et navigateurs alternatifs. Évalué à 4.

    Euh… Ah oui ! Parce qu'on parle de concurrencer la main mise de Google sur le marché :)

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)