Pour Git, je suis d’accord, mais pour Mercurial, il me semble qu'il stocke justement un ensemble de patch et que le sha porte sur les patches qui permettent d'arriver à une version donnée.
En lisant la doc, ce qui me vient, c'est que en effet, sous Git, dès que tu pète un coup, tu changes le hash de ton snapshot et tu dois passer derrière par des phases de publications, fusion, distribution etc. Pour pas mal de cas triviaux, c'est assez ennuyeux.
Après, de là à justifier un autre DVCS, je reste un brin sceptique. Même mercurial qui tenait bien la route s'est fait enterrer par Git…
Je m'interroge aussi sur un point : il m'a semblé saisir que si deux patchs sont commutatables, les échanger ne change pas l'identifiant du résultat final. Cela veut dire qu'on peut réécrire l'ordre de l'historique d'un projet ? Et si c'est le cas, n'est-ce pas une anti-feature ?
Ce n'est pas une histoire d'être passionné ou pas, c'est une histoire de faire évoluer ses outils pour pouvoir bénéficier des avancées qu'ils proposent.
Perso, je partage plutôt le point de vue que c'est bien de se tenir à jour et de faire des outils plus performant et que ça va impacter de façon positive l'entreprise, la productivité, l'innovation, etc.
Par contre, objectivement, une entreprise qui a des outils qui lui donnent satisfaction n'a pas tant de raison que ça de s'intéresser à des nouvelles générations d'outils. Une petit citation pour la route : If it ain't broken, don't fix it - si ce n'est pas cassé, ne le répare pas.
En fait, tu crois savoir et tu répètes des choses que tu as entendu dans les couloirs sans jamais avoir fait l'effort de te mettre dedans pour avoir ton propre avis. […] La complexité du langage n'a pas augmenté, il y a juste des nouvelles fonctionnalités, comme dans beaucoup d'autres langages qui évoluent. Et tu n'as juste pas pris le temps de comprendre.
Tu te trompes sur un point, c'est que j'ai fait l'effort de tenter de comprendre les nouveautés du C++. Je lis avec passion les articles de linuxfr qui en parlent, et j'ai lu la pages de nouveautés expliquée par … j'ai un doute, Herb Sutter ou Bjarne Soustroup (je ne retrouve pas le lien, je me souviens que c'était assez fouillé mais incomplet en tout cas). Il y a un certain nombre d'améliorations qui me parlent (la sémantique du move par exemple), d'autres où je saisis l'idée mais où j'ai du mal à rentrer dans les détails (les lambda, les constexpr) et d'autres où vraiment, c'est complètement au dessus de mon niveau de compréhension du langage.
On va avoir un débat sur le mot complexité vs quantité. On est au moins d'accord que la quantité de fonctionnalité augmente à chaque révision. Je maintiens que la complexité augmente aussi car il y a plus de façon de se tromper dans la façon d'écrire du code. Et il y a plus d'interactions possibles entre les nouvelles fonctionnalités.
Il est courant en Python de ne pas s'embêter avec un gros formalisme quand ce n'est pas nécessaire.
La façon la plus simple de représenter une paire est d'utiliser un tuple de deux éléments. C'est une structure non-modifiable, donc ça correspond bien à la définition d'une paire.
Si on se retrouvait avec un programme manipulant des paires ayant des significations variées, on serait amené à utiliser une structure de plus haut niveau, genre un NamedTuple ou une DataClass qui permettrait d'accéder aux deux éléments de la paire avec un nom qui les représente, genre x/y ou first/second, ou encore firstName/lastName.
Genre :
d[k] = Point(x=v.y, y=v.x) Dans le cas où on manipulerait des coordonnées et qu'on veuille faire une transposition.
Mais bon, souvent, les structure de Python sont suffisamment élaborées pour pouvoir les utiliser longtemps en l'état.
On peut trouver dans différents langages les if, unless, switch, l'opérateur ternaire, des opérateurs de déréférencement null-safe, du pattern matching, le given de perl est une sorte de pattern matching bizarre, bash a ${identifiant:-defaultValue} et d'autres, etc. Ce sont autant de constructions qui permette au développeur d'exprimer des choses différentes, alors qu'elles sont compilée (ou du moins compilables) en un simple saut conditionnel.
Ok, je saisis mieux. Après, je comprends toujours pas en quoi ça range le C++ dans la catégorie des langages expressifs, il reste pour moi associé à un trucs très complexe avec des erreurs très très absconses (genre tu oublies de mettre un espace entre deux > >, tu pleures). Mais je salue les progrès faits ces dernières années, même si je ne peux pas en tirer partie dans mon entreprise (cf mon autre commentaire).
Concernant l'expressivité, après être passé du BASIC/Assembleur au Pascal, puis au C, puis au C++, puis au Python (avec un détour par Caml Light), j'ai eu l'impression de progresser à chaque étape à pas de géant en terme de correspondance "ce que j'ai dans la tête" et "comment je l'exprime dans le langage". Avec Python, je ne ressens plus aucune limitation d'expressivité, et c'est probablement pour cela que ton commentaire ne résonne pas plus que cela en moi. Je reste cependant conditionné par le langage et je saisis bien qu'un programmeur familier des langages fonctionnels purs sera certainement très frustré par le manque d'expressivité de Python en la matière.
Il existe certes des structures plus complexes ou plus élaborées comme le pattern matching en OCaml mais je n'en ressens pas le manque. Avec les années, je ressens aussi l'importance de garder le code dans la catégorie du "moyennement complexe" afin de rester intelligible. Si j'écris du code qui va être partagé entre plusieurs développeurs, plusieurs équipes, qui va vivre pendant plusieurs années, je sais que je suis réticent à utiliser des constructions très puissantes du langage car je ne suis pas sur d'être lisibles pour mes collègues, ou même pour moi dans 10 ans.
Après oui le C++ n'est pas le langage le plus concis qui existe (c'est ce que tu voulais me faire dire ?)
Oui :-)
Tu y as mis du temps !
et le python n'est pas le langage le plus verbeux (c'est l'autre truc que tu voulais me faire dire ?).
Aussi oui.
C'est surtout que ce que tu as écris est à l'exact opposé de mon ressenti sur ces deux langages. Je suis assez ébahi qu'on puisse avoir des expériences aussi éloignées. Sois tu as tort, sois …. il y a une autre explication (non, je n'ai pas tort :-) ).
C'est quoi une classe copiable ? Faire une deep/shall copy ?
C'est vrai que quand j'y pense, une grande partie de mes classes en C++ sont soit des "Plain Old Data" copiables par copie simple, soit des trucs plus complexes mais déjà gérés par la lib que j'utilises (Qt, boost, etc).
C'est juste que je me rappelle du gros warning que j'ai eu lors de l'apprentissage du langage sur les copies de classes.
Tu nous fais un bel homme de paille. Les gens sérieux qui font du C++ utilisent tous C++11 de nos jours
C'est quoi la définition de sérieux ? Si je prends mon entreprise, où on parle quand même de développeurs qui gagnent leur vie en écrivant du code … on peut penser qu'il s'agit de gens sérieux non ? Et pourtant, côté C++, on est loin du C++11. Je pense même pas que la plupart des mes collègues immédiats connaissent le sigle. Si je leur montre un bout de code avec des lambdas et des templates, ils ne comprendront juste rien. On fait de la carte programmation pour carte à puce, ce qui veut dire beaucoup de C, un peu d'assembleur, un peu de JavaCard, et un peu de Python pour nos tests.
Aujourd'hui un collègue développeur a vu mon écran et m'a demandé pourquoi je regardais un forum sur le jeu de Go. Il n'avait jamais entendu parlé du langage…
On utilise un peu de Python mais le seul qui est installé sur leurs postes, c'est Python 3.1 . Et je ne m'avance pas à utiliser des syntaxes avancées de Python (décorateurs, getter/setters, comprehensions, …) si je ne veux pas les perdre en route.
Je tiens donc à souligner la grande distance qu'il y a entre des passionnés qui suivent les évolutions de l'informatique et des entreprises qui restent avant tout consommatrices d'outils en l'état.
(GCC utilise par défaut C++14, tout comme Clang, et même MSVC utilise du C++ moderne par défaut).
Côté Visual Studio, on utilise la version … 2011 Professional. Et je crois pas que C++11 soit bien supporté dans cette version. :-)
Les nouvelles fonctionnalités apportent non seulement de la lisibilité, mais également des constructions nécessaires pour faire du code performant (comme la sémantique de déplacement). Tu peux refuser de les considérer mais tu passes à côté de l'essentiel quand tu fais du C++.
Il y a pas de refus de ma part. C'est juste que le C++, globalement, je ne l'utilise pas. Et je sais que c'est un langage complexe, dont la complexité ne fait que grandir au cours du temps.
Déjà, j'avais noté que le C++ de mon époque était plus complexe que ce que mon cerveau pouvait encaisser en une seule fois. Je sais que je ne me hasarderai pas à lever une exception en C++ sans relire un bouquin entier sur le sujet tellement il y a de façon de mal le faire.
Alors maintenant, de savoir que la complexité du langage a augmenté (ce que je vois quand je lis des exemples dans quelques journaux, je comprends juste rien), ça me motive pas vraiment à m'y mettre. Après, si j'avais un boulot qui l'exige, je me lancerai à fond dedans avec plaisir.
Paradoxalement, j'ai fait pas mal de Qt/C++. Et je bénis Trolltech/Nokia/Digia/Qt d'avoir rendu le C++ utilisable même par des gens peu experts en la matière.
Hum… Certaines choses comme l'une des règles du Zen of python : « There should be one-- and preferably only one --obvious way to do it ». Ne vont pas vraiment dans ce sens.
Tu pourrais être plus explicite ? Je ne vois pas en quoi le fait de favoriser "une façon évidente et si possible unique" de faire une tâche nuit à l'expressivité du langage. Au contraire, si il y une façon évidente et unique de faire une tâche, tout le monde va utiliser cette façon et l'intention du programmeur sera claire.
J'ai tendance à toujours le comparer à perl qui a la règle parfaitement inverse, le TMTOWTDI.
Cette règle a été écrite (à mon avis) en réaction à Perl qui a en effet le TMTOWTDI. Et côté Perl, je vois ça plus comme un constat qu'il existe mille et une façon de faire une tâche que comme quelque chose que le créateur de langage a volontairement instillé dans la conception.
Hum… Je n'ai pas trop cette sensation (encore une fois je peux me planter). Quand je vois les exemples de serge_sans_paille je ne vois pas de boiller plate justement.
Tu n'a pas réagi sur mon exemple pourtant ? C++, c'est pas le langage où quand on veut faire une classe copiable, il faut définir 4 méthodes différentes ? Mais pas de boiler-plate hein ?
Les constructions nouvelles du langage apportées dans C++11 et consorts sont certainement bien pratiques, mais dans les faits, elles sont très récentes dans l'histoire du langage (si on prend 1985 comme date de première visibilité, on est à 34 ans d'existence alors que le C++11 n'est là que depuis 8 ans). Elles restent encore peu connues, apportent leurs propres problèmes de lisibilité et de compréhension. Côté lisibilité, on repassera. Ça ajoute en plus énormément à la complexité du langage.
J'ai du mal à voir C++ et expressivité dans la même phrase, et Python dans la catégorie "inexpressivité". Pour le reste du commentaire, je suis plutôt d'accord.
J'exprime mon désaccord sur les deux points:
Python est au contraire un langage très expressif, le programmeur peut manifester son intention en très peu de lignes de code. Le boiler-plate code en Python est quasiment inexistant.
A l'opposé, à chaque fois que j'utilise la STL en C++, mes yeux pleurent, je me dis que 120 colonnes pour une ligne, c'est bien peu quand tu veux manipuler une structure un tant soit peu élaborée.
Allez, au hasard, parcourons une map/un dict de string vers des paires de string en Python et en C++ et inversons les paires:
En Python:
# on parcours le dictionnaire, k est la clé, v est la valeurfork,vind.items():# v est une paire, on peut accéder aux deux éléments et les inverserd[k]=(v[1],v[0])
En C++:
// on parcours le dictionnaire/map avec un iterateur, it.first est la clé, it.value est la valeurfor(map<string,pair<string,string>>::iteratorit=d.begin();it!=it.end();it++){// la paire est dans it.second, c'est elle qu'il faut inverserd[it.first]=make_pair(it.second.second,it.second.first);}
En terme d'expressivité et lisibilité, je trouve que la version Python s'en sort beaucoup beaucoup mieux.
Et encore, il aurait été de bon ton d'expliciter l'instanciation de make_pair<> .
Alors, certes, en C++11, on peut faire plus compact en utilisant des auto et surement avec d'autres trucs (lambda ? foreach ?). Mais tout le monde ne les connait pas.
On peut aussi faire bien plus compact en Python mais on tombe sur le même problème: la syntaxe des Python compréhensions est peu connue (par exemple, aucun de mes collègues de travail ne connait): d = { k:(v[1],v[0]) for k,v in d.items()}
M****, je viens de faire un calcul avec mon mot de passe par erreur. Tu crois que Microsoft est déjà au courant ?
Ça me rappelle KDE il y a fort longtemps où je ne sais plus pour quelle situation, tu pouvais te retrouver à copier ton mot de passe dans le presse-papier. Et tu voulais le coller quelque part mais si tu faisais pas attention, tu faisais un click du milieu dans Konqui, qui prenait automatiquement le contenu du presse-papier et essayait de le traiter en tant qu'url et si ça ne passait pas, il lançait une recherche sur google avec. En un clic souris du milieu, tu balançais ton mot de passe sur google. Nice :-)
Et c'était considéré comme une super feature par le développeur :-)
J'en reçois seulement depuis quelques semaines, comme vous.
Détail intéressant, une version de ce SCAM me dit qu'il connait mon mot de passe et affiche dans le mail … mon mot de passe. C'est assez flippant sur le coup.
Il dit aussi qu'il a mis un tracker dans l'email, ça par contre, j'ai vérifié, c'est pas le cas.
Après quelques recherche, j'ai découvert que c'était mon mot de passe linkedin, connu probablement suite à cette fuite (merci au passage à Ihavebeenpowned qui m'a fait découvrir cela).
Evidemment, je suis un geek consciencieux, j'utilise des variantes de mon mot de passe suivant les sites où je vais. Mais ça reste flippant!
Du coup, je me lance dans une campagne de remise à plat de mon mot de passe de référence. Je vais le passer à 16 caractères, et passer la partie variable à deux ou trois lettres…
Le problème, c'est que les gens ne se fient plus aux journalistes…
La plupart des informations sont maintenant véhiculées par les réseaux sociaux, seule la première ligne de l'article est lue, l'émotion est le seul angle d'analyse de ce qui est dit. Si en plus l'information va dans le sens du poil du lecteur, il y a encore moins d'analyse qui est faite.
Pour ne pas s'enfoncer dans une route délétère, on pourrait quand même sauter un jour de temps en temps, genre quand la somme des décimales de la date au carré (jour-mois-année complète) est divisible par 13.
En plus des aspects déjà cité, j'aime bien la pratique d'un art martial pour socialiser. Ca m'a permis de rencontrer des gens très sympas, qui sont en dehors de mon milieu social habituel. Notamment, il y a un bon mélange des classes sociales dans les différents clubs où j'ai pratiqué et ça fait du bien de changer d'horizon. Ca s'applique bien sur à peu près n'importe quelle activité à un prix abordable.
Sinon, je pense que beaucoup d'arts martiaux ne permettent pas vraiment de combattre un adversaire agressif (par exemple, c'est le cas de l'aikido que je pratique pourtant avec grand plaisir) mais ça donne déjà une posture. Le fait de pratiquer la rencontre d'un "agresseur" et d'un défenseur en cours donne une certaine confiance en soi qui fait qu'en cas de situation réelle, on sera légèrement moins stressé. Quelqu'un qui n'a pas peur attire aussi moins l'envie de tabasser: les délinquants préfèrent s'en prendre à des faibles.
J'ai beaucoup de plaisir à pratiquer l'aikido malgré son irréalité martiale. Ce que j'aime bien c'est:
- une petite plongée dans une autre culture, la culture japonaise martiale légèrement médiévale
- la souplesse des mouvements qui m'entretient. On apprend à rouler pour se dégager d'une prise (et non pas à chuter brutalement comme au judo). A chaque fois que j'ai mal au dos, un bon cours d'aikido me remet toutes les vertèbres en place et je me sens bien.
- je trouve les chorégraphies de l'aikido très jolies.
- la connaissance du corps humain est aussi très intéressante. L'être humain vue en tant qu'un ensemble d'aritculation est assez marrant à manipuler.
- j'adore faire joujou avec les armes. Se retrouver en face d'un sabre en bois (bokken) est très impressionnant et réveille tout de suite un mélange de peur et de tension combative. Manipuler le baton en bois est très marrant. Si en plus, ça permet de se défendre un jour, pourquoi pas. En attendant, c'est un peu comme apprendre à jongler.
Cette année, je change de discipline pour quelque chose de plus combatif: le Yoseikan Budo. C'est aussi d'inspiration japonaise, et ça intègre des notions de karaté, judo, boxe, aikido, de lutte et de pratique d'armes. On fait des combats d'armes avec des armes en mousse, on rigole comme des gamins.
Bizarre, le titre parle de travailler en "indépendant" et tu ne parles pas du seul statut qui correspond le mieux à la définition d'un indépendant: la profession libérale.
Contrairement aux autres forme d'entreprenariat que tu cites, tu n'es pas rattaché à une structure, et tu n'es pas obligé de créer une structure d'entreprise juste pour t'héberger toi.
Concrètement, tu ne crées pas d'entreprise avec des statuts, tu n'es pas salarié non plus, c'est ta propre personne qui devient une entreprise avec un SIRET. Tu peux même (c'est fortement déconseillé) mélanger tous tes revenus et tes dépenses privées avec tes revenus pros, la seule obligation étant de possèder un compte dédié à ton activité professionnelle.
En terme d'administratif et de comptabilité, c'est plutôt simple. Tu dois t'affilier à un Association de Gestion Agrée (AGE) qui va vérifier vite fait tes comptes à l'année.
Il n'y a pas de notions de dividendes ou de salaire: tout ce que tu perçois comme revenu professionnel t'appartient. Tu déclares à la fin de l'année un bénéfice qui est taxé il me semble de façon proche d'un dividende.
J'ai exercé sous ce statut pendant une année et j'ai trouvé ça plutôt léger en terme d'administratif, et plutôt rentable en terme de conversion montant facturé / net dans ma poche.
Par contre, tu es un peu livré à toi-même ce qui peut être un peu angoissant vis à vis des administrations. Il faut bien choisir son AGE pour être bien conseillé.
A noter que si tes clients ne te payent pas trop, tu peux être auto-entrepreneur. Mais les montants des rémunérations dans l'informatique dépassaient lorsque j'avais tenté l'aventure les plafond de la micro-entreprise.
Le burn-out emmène vers une dépression, qui elle peut s'installer beaucoup plus durablement que la charge de travail / pression / complications qui ont conduit au burn-out. C'est donc assez sournois, les conséquences persistent longtemps après que les causes aient disparues.
Je parle malheureusement d'expérience…. 2 ans après un burn-out professionnel, je sens que je ne suis plus capable de gérer le niveau de responsabilité professionnelle que je gérai auparavant. Je ne suis pas sur que je pourrai de nouveau le faire dans ma vie.
nous avons eu la chance incroyable ma femme et moi d'avoir autour de nous des formateurs et formatrices expérimentés principalement en la personne de nos parents, grands-parents et de quelques amis proches. Expérimentés mais discrets, nous laissant faire nos propres expériences et nos propres choix et donc quelquefois nos propres erreurs. Suggérant, plutôt que de d'imposer un schéma rigide et définitif du genre : "de mon temps c'était comme ça".
Je crois donc que c'est d'abord le cercle familial et amical proche qui apporte cette "formation".
C'est clairement une chance exceptionnelle que tout le monde n'a pas pour des raisons très très variées.
Et en plus, tous ceux qui lisent ce message viennent d'être tracés par BFM TV, une des incarnations du mal capitaliste. Et oui, l'image de Neo est stocké sur le site de BFM…
C'est vrai que c'est pénible de devoir importer des modules juste pour avoir sous la main la classe pour l'annotation. La première fois que je l'ai fait, ça m'a fait un import circulaire, j'ai cru que j'allais m'arracher les cheveux !
Je te rejoins aussi sur le fait que ça surcharge pas mal les entêtes de fonctions, qui étaient plus facile à lire sans, surtout quand tu as des valeurs par défaut.
Cela dit, malgré ces deux inconvénients, je suis très content de les utiliser. Dès que la base de code grossit, qu'il y a plusieurs développeurs dans l'équipe, dès que le projet prend de l'age, les annotations créent beaucoup de valeur car elles vérifient la cohérence globale de ton programme. Ce que ne font pas les docstring.
Les docstrings ont d'autres inconvénients:
- parfois, elles sont pas là
- parfois, elles sont pas assez précises (elles oublient de préciser le type de retour, …)
- parfois, la fonction a évolué mais le développeur pressé a oublié de la mettre à jour
Mais surtout:
- les docstrings ne vérifient pas le type des données avec lesquelles la fonction est appelée
- les docstrings peuvent contenir une erreur, genre elles disent qu'on peut passer une liste ou un tuple mais en fait, seule une liste fonctionne.
Comme j'essaie de le montrer dans la présentation, les annotations permettent d’attraper pas mal d'erreur et obligent à clarifie son intention.
J'utilise ecosia et lilo. Ils sont-traitent la recherche soit à Bing, soit à Google. Par contre, ils profitent de l'argent récolté pour mener des projets écologiques ou d'économie solidaire.
Il me semble qu'ils filtrent mes coordonnées personelles ce qui limite un peu le mal. En tout cas, quitte à utiliser internet et griller du Co2, autant que ce soit pour des gens qui essaient un minimum de le compenser…
Si tu veux rester dans la mouvance Weboob, il faut te trouver un meilleur nom.
Je te propose: Contenteub. En français, ça passe très bien. Pour l'anglais, j'ai pas d'idée mais avec des boob et du gros contenu, on doit bien pouvoir trouver un jeu de mot à la con !
Avec l'achat de Skype par Microsoft, c'était pareil. Le jour même où la transaction était actée, Skype a connu une des plus grosses pannes de son histoire, avec indisponibilité globale pendant plusieurs heures. Ca n'a rien à voir qu'y disaient aussi…
Même si j'utilisais TkInter, je ferai le choix d'un packaging en .exe . Le packaging est un aspect fondamental de la distribution d'un programme. Dans l'univers Python, PIP est le minimum vital et tout ce qu'on peut fournir en plus participera à facilité d'installation et donc la popularité d'une programme.
TkInter est petit certes, mais pour faire une vue à la Excel avec nombre de lignes illimitées sur le fichier de donnée, j'ai peur qu'il soit un peu court. C'est pour ça que Qt assure bien, on peut faire des applis assez haut niveau avec très peu de code.
Je l'ai utilisé une ou deux fois contre mon gré et je ne regrette pas Qt.
En cadeau, un snapshot de SxTool pour voir de quoi je parle.
Pour la deuxième partie, c'est tout à fait possible, c'est ce dont je parle à la fin du journal. J'essaierai de faire un test dans ce sens un de ces quatre et de vous faire un retour.
[^] # Re: Soit j'ai rien compris soit...
Posté par Philippe F (site web personnel) . En réponse à la dépêche Pijul, contrôle de version et théorie des patchs, version 0.12. Évalué à 2.
Pour Git, je suis d’accord, mais pour Mercurial, il me semble qu'il stocke justement un ensemble de patch et que le sha porte sur les patches qui permettent d'arriver à une version donnée.
[^] # Re: Difference Pijul vs Git
Posté par Philippe F (site web personnel) . En réponse à la dépêche Pijul, contrôle de version et théorie des patchs, version 0.12. Évalué à 9.
En lisant la doc, ce qui me vient, c'est que en effet, sous Git, dès que tu pète un coup, tu changes le hash de ton snapshot et tu dois passer derrière par des phases de publications, fusion, distribution etc. Pour pas mal de cas triviaux, c'est assez ennuyeux.
Après, de là à justifier un autre DVCS, je reste un brin sceptique. Même mercurial qui tenait bien la route s'est fait enterrer par Git…
Je m'interroge aussi sur un point : il m'a semblé saisir que si deux patchs sont commutatables, les échanger ne change pas l'identifiant du résultat final. Cela veut dire qu'on peut réécrire l'ordre de l'historique d'un projet ? Et si c'est le cas, n'est-ce pas une anti-feature ?
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 2.
Perso, je partage plutôt le point de vue que c'est bien de se tenir à jour et de faire des outils plus performant et que ça va impacter de façon positive l'entreprise, la productivité, l'innovation, etc.
Par contre, objectivement, une entreprise qui a des outils qui lui donnent satisfaction n'a pas tant de raison que ça de s'intéresser à des nouvelles générations d'outils. Une petit citation pour la route : If it ain't broken, don't fix it - si ce n'est pas cassé, ne le répare pas.
Tu te trompes sur un point, c'est que j'ai fait l'effort de tenter de comprendre les nouveautés du C++. Je lis avec passion les articles de linuxfr qui en parlent, et j'ai lu la pages de nouveautés expliquée par … j'ai un doute, Herb Sutter ou Bjarne Soustroup (je ne retrouve pas le lien, je me souviens que c'était assez fouillé mais incomplet en tout cas). Il y a un certain nombre d'améliorations qui me parlent (la sémantique du move par exemple), d'autres où je saisis l'idée mais où j'ai du mal à rentrer dans les détails (les lambda, les constexpr) et d'autres où vraiment, c'est complètement au dessus de mon niveau de compréhension du langage.
On va avoir un débat sur le mot complexité vs quantité. On est au moins d'accord que la quantité de fonctionnalité augmente à chaque révision. Je maintiens que la complexité augmente aussi car il y a plus de façon de se tromper dans la façon d'écrire du code. Et il y a plus d'interactions possibles entre les nouvelles fonctionnalités.
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 3.
Il est courant en Python de ne pas s'embêter avec un gros formalisme quand ce n'est pas nécessaire.
La façon la plus simple de représenter une paire est d'utiliser un tuple de deux éléments. C'est une structure non-modifiable, donc ça correspond bien à la définition d'une paire.
Si on se retrouvait avec un programme manipulant des paires ayant des significations variées, on serait amené à utiliser une structure de plus haut niveau, genre un NamedTuple ou une DataClass qui permettrait d'accéder aux deux éléments de la paire avec un nom qui les représente, genre x/y ou first/second, ou encore firstName/lastName.
Genre :
Dans le cas où on manipulerait des coordonnées et qu'on veuille faire une transposition.d[k] = Point(x=v.y, y=v.x)
Mais bon, souvent, les structure de Python sont suffisamment élaborées pour pouvoir les utiliser longtemps en l'état.
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 1.
Ok, je saisis mieux. Après, je comprends toujours pas en quoi ça range le C++ dans la catégorie des langages expressifs, il reste pour moi associé à un trucs très complexe avec des erreurs très très absconses (genre tu oublies de mettre un espace entre deux > >, tu pleures). Mais je salue les progrès faits ces dernières années, même si je ne peux pas en tirer partie dans mon entreprise (cf mon autre commentaire).
Concernant l'expressivité, après être passé du BASIC/Assembleur au Pascal, puis au C, puis au C++, puis au Python (avec un détour par Caml Light), j'ai eu l'impression de progresser à chaque étape à pas de géant en terme de correspondance "ce que j'ai dans la tête" et "comment je l'exprime dans le langage". Avec Python, je ne ressens plus aucune limitation d'expressivité, et c'est probablement pour cela que ton commentaire ne résonne pas plus que cela en moi. Je reste cependant conditionné par le langage et je saisis bien qu'un programmeur familier des langages fonctionnels purs sera certainement très frustré par le manque d'expressivité de Python en la matière.
Il existe certes des structures plus complexes ou plus élaborées comme le pattern matching en OCaml mais je n'en ressens pas le manque. Avec les années, je ressens aussi l'importance de garder le code dans la catégorie du "moyennement complexe" afin de rester intelligible. Si j'écris du code qui va être partagé entre plusieurs développeurs, plusieurs équipes, qui va vivre pendant plusieurs années, je sais que je suis réticent à utiliser des constructions très puissantes du langage car je ne suis pas sur d'être lisibles pour mes collègues, ou même pour moi dans 10 ans.
Oui :-)
Tu y as mis du temps !
Aussi oui.
C'est surtout que ce que tu as écris est à l'exact opposé de mon ressenti sur ces deux langages. Je suis assez ébahi qu'on puisse avoir des expériences aussi éloignées. Sois tu as tort, sois …. il y a une autre explication (non, je n'ai pas tort :-) ).
C'est vrai que quand j'y pense, une grande partie de mes classes en C++ sont soit des "Plain Old Data" copiables par copie simple, soit des trucs plus complexes mais déjà gérés par la lib que j'utilises (Qt, boost, etc).
C'est juste que je me rappelle du gros warning que j'ai eu lors de l'apprentissage du langage sur les copies de classes.
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 3.
C'est quoi la définition de sérieux ? Si je prends mon entreprise, où on parle quand même de développeurs qui gagnent leur vie en écrivant du code … on peut penser qu'il s'agit de gens sérieux non ? Et pourtant, côté C++, on est loin du C++11. Je pense même pas que la plupart des mes collègues immédiats connaissent le sigle. Si je leur montre un bout de code avec des lambdas et des templates, ils ne comprendront juste rien. On fait de la carte programmation pour carte à puce, ce qui veut dire beaucoup de C, un peu d'assembleur, un peu de JavaCard, et un peu de Python pour nos tests.
Aujourd'hui un collègue développeur a vu mon écran et m'a demandé pourquoi je regardais un forum sur le jeu de Go. Il n'avait jamais entendu parlé du langage…
On utilise un peu de Python mais le seul qui est installé sur leurs postes, c'est Python 3.1 . Et je ne m'avance pas à utiliser des syntaxes avancées de Python (décorateurs, getter/setters, comprehensions, …) si je ne veux pas les perdre en route.
Je tiens donc à souligner la grande distance qu'il y a entre des passionnés qui suivent les évolutions de l'informatique et des entreprises qui restent avant tout consommatrices d'outils en l'état.
Côté Visual Studio, on utilise la version … 2011 Professional. Et je crois pas que C++11 soit bien supporté dans cette version. :-)
Il y a pas de refus de ma part. C'est juste que le C++, globalement, je ne l'utilise pas. Et je sais que c'est un langage complexe, dont la complexité ne fait que grandir au cours du temps.
Déjà, j'avais noté que le C++ de mon époque était plus complexe que ce que mon cerveau pouvait encaisser en une seule fois. Je sais que je ne me hasarderai pas à lever une exception en C++ sans relire un bouquin entier sur le sujet tellement il y a de façon de mal le faire.
Alors maintenant, de savoir que la complexité du langage a augmenté (ce que je vois quand je lis des exemples dans quelques journaux, je comprends juste rien), ça me motive pas vraiment à m'y mettre. Après, si j'avais un boulot qui l'exige, je me lancerai à fond dedans avec plaisir.
Paradoxalement, j'ai fait pas mal de Qt/C++. Et je bénis Trolltech/Nokia/Digia/Qt d'avoir rendu le C++ utilisable même par des gens peu experts en la matière.
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 2.
Tu pourrais être plus explicite ? Je ne vois pas en quoi le fait de favoriser "une façon évidente et si possible unique" de faire une tâche nuit à l'expressivité du langage. Au contraire, si il y une façon évidente et unique de faire une tâche, tout le monde va utiliser cette façon et l'intention du programmeur sera claire.
Cette règle a été écrite (à mon avis) en réaction à Perl qui a en effet le TMTOWTDI. Et côté Perl, je vois ça plus comme un constat qu'il existe mille et une façon de faire une tâche que comme quelque chose que le créateur de langage a volontairement instillé dans la conception.
Tu n'a pas réagi sur mon exemple pourtant ? C++, c'est pas le langage où quand on veut faire une classe copiable, il faut définir 4 méthodes différentes ? Mais pas de boiler-plate hein ?
Les constructions nouvelles du langage apportées dans C++11 et consorts sont certainement bien pratiques, mais dans les faits, elles sont très récentes dans l'histoire du langage (si on prend 1985 comme date de première visibilité, on est à 34 ans d'existence alors que le C++11 n'est là que depuis 8 ans). Elles restent encore peu connues, apportent leurs propres problèmes de lisibilité et de compréhension. Côté lisibilité, on repassera. Ça ajoute en plus énormément à la complexité du langage.
[^] # Re: Expressivité
Posté par Philippe F (site web personnel) . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 5.
J'ai du mal à voir C++ et expressivité dans la même phrase, et Python dans la catégorie "inexpressivité". Pour le reste du commentaire, je suis plutôt d'accord.
J'exprime mon désaccord sur les deux points:
Python est au contraire un langage très expressif, le programmeur peut manifester son intention en très peu de lignes de code. Le boiler-plate code en Python est quasiment inexistant.
A l'opposé, à chaque fois que j'utilise la STL en C++, mes yeux pleurent, je me dis que 120 colonnes pour une ligne, c'est bien peu quand tu veux manipuler une structure un tant soit peu élaborée.
Allez, au hasard, parcourons une map/un dict de string vers des paires de string en Python et en C++ et inversons les paires:
En Python:
En C++:
En terme d'expressivité et lisibilité, je trouve que la version Python s'en sort beaucoup beaucoup mieux.
Et encore, il aurait été de bon ton d'expliciter l'instanciation de make_pair<> .
Alors, certes, en C++11, on peut faire plus compact en utilisant des auto et surement avec d'autres trucs (lambda ? foreach ?). Mais tout le monde ne les connait pas.
On peut aussi faire bien plus compact en Python mais on tombe sur le même problème: la syntaxe des Python compréhensions est peu connue (par exemple, aucun de mes collègues de travail ne connait):
d = { k:(v[1],v[0]) for k,v in d.items()}[^] # Re: télémétrie
Posté par Philippe F (site web personnel) . En réponse au journal Microsoft publie sous licence MIT les sources de la calculatrice de Windows. Évalué à 6.
M****, je viens de faire un calcul avec mon mot de passe par erreur. Tu crois que Microsoft est déjà au courant ?
Ça me rappelle KDE il y a fort longtemps où je ne sais plus pour quelle situation, tu pouvais te retrouver à copier ton mot de passe dans le presse-papier. Et tu voulais le coller quelque part mais si tu faisais pas attention, tu faisais un click du milieu dans Konqui, qui prenait automatiquement le contenu du presse-papier et essayait de le traiter en tant qu'url et si ça ne passait pas, il lançait une recherche sur google avec. En un clic souris du milieu, tu balançais ton mot de passe sur google. Nice :-)
Et c'était considéré comme une super feature par le développeur :-)
[^] # Re: Passionnant
Posté par Philippe F (site web personnel) . En réponse au journal Hacker du dimanche. Évalué à 5.
J'en reçois seulement depuis quelques semaines, comme vous.
Détail intéressant, une version de ce SCAM me dit qu'il connait mon mot de passe et affiche dans le mail … mon mot de passe. C'est assez flippant sur le coup.
Il dit aussi qu'il a mis un tracker dans l'email, ça par contre, j'ai vérifié, c'est pas le cas.
Après quelques recherche, j'ai découvert que c'était mon mot de passe linkedin, connu probablement suite à cette fuite (merci au passage à Ihavebeenpowned qui m'a fait découvrir cela).
Evidemment, je suis un geek consciencieux, j'utilise des variantes de mon mot de passe suivant les sites où je vais. Mais ça reste flippant!
Du coup, je me lance dans une campagne de remise à plat de mon mot de passe de référence. Je vais le passer à 16 caractères, et passer la partie variable à deux ou trois lettres…
[^] # Re: Comment "démasquer" un faux visage
Posté par Philippe F (site web personnel) . En réponse au journal Cette personne n'existe pas. Évalué à 6.
Le problème, c'est que les gens ne se fient plus aux journalistes…
La plupart des informations sont maintenant véhiculées par les réseaux sociaux, seule la première ligne de l'article est lue, l'émotion est le seul angle d'analyse de ce qui est dit. Si en plus l'information va dans le sens du poil du lecteur, il y a encore moins d'analyse qui est faite.
Saloperie de société de moutons !!!
[^] # Re: LA solution
Posté par Philippe F (site web personnel) . En réponse au journal [HS] Etes-vous pour rester à l'heure d'été ou à l'heure d'hiver ?. Évalué à 6. Dernière modification le 18 février 2019 à 11:27.
Pour ne pas s'enfoncer dans une route délétère, on pourrait quand même sauter un jour de temps en temps, genre quand la somme des décimales de la date au carré (jour-mois-année complète) est divisible par 13.
Après, c'est juste une habitude à prendre…
# Socialiser
Posté par Philippe F (site web personnel) . En réponse au journal Les arts martiaux. Évalué à 7.
En plus des aspects déjà cité, j'aime bien la pratique d'un art martial pour socialiser. Ca m'a permis de rencontrer des gens très sympas, qui sont en dehors de mon milieu social habituel. Notamment, il y a un bon mélange des classes sociales dans les différents clubs où j'ai pratiqué et ça fait du bien de changer d'horizon. Ca s'applique bien sur à peu près n'importe quelle activité à un prix abordable.
Sinon, je pense que beaucoup d'arts martiaux ne permettent pas vraiment de combattre un adversaire agressif (par exemple, c'est le cas de l'aikido que je pratique pourtant avec grand plaisir) mais ça donne déjà une posture. Le fait de pratiquer la rencontre d'un "agresseur" et d'un défenseur en cours donne une certaine confiance en soi qui fait qu'en cas de situation réelle, on sera légèrement moins stressé. Quelqu'un qui n'a pas peur attire aussi moins l'envie de tabasser: les délinquants préfèrent s'en prendre à des faibles.
J'ai beaucoup de plaisir à pratiquer l'aikido malgré son irréalité martiale. Ce que j'aime bien c'est:
- une petite plongée dans une autre culture, la culture japonaise martiale légèrement médiévale
- la souplesse des mouvements qui m'entretient. On apprend à rouler pour se dégager d'une prise (et non pas à chuter brutalement comme au judo). A chaque fois que j'ai mal au dos, un bon cours d'aikido me remet toutes les vertèbres en place et je me sens bien.
- je trouve les chorégraphies de l'aikido très jolies.
- la connaissance du corps humain est aussi très intéressante. L'être humain vue en tant qu'un ensemble d'aritculation est assez marrant à manipuler.
- j'adore faire joujou avec les armes. Se retrouver en face d'un sabre en bois (bokken) est très impressionnant et réveille tout de suite un mélange de peur et de tension combative. Manipuler le baton en bois est très marrant. Si en plus, ça permet de se défendre un jour, pourquoi pas. En attendant, c'est un peu comme apprendre à jongler.
Cette année, je change de discipline pour quelque chose de plus combatif: le Yoseikan Budo. C'est aussi d'inspiration japonaise, et ça intègre des notions de karaté, judo, boxe, aikido, de lutte et de pratique d'armes. On fait des combats d'armes avec des armes en mousse, on rigole comme des gamins.
# Et la profession libérale ?
Posté par Philippe F (site web personnel) . En réponse au journal Devenir un indépendant libre. Évalué à 10.
Bizarre, le titre parle de travailler en "indépendant" et tu ne parles pas du seul statut qui correspond le mieux à la définition d'un indépendant: la profession libérale.
Contrairement aux autres forme d'entreprenariat que tu cites, tu n'es pas rattaché à une structure, et tu n'es pas obligé de créer une structure d'entreprise juste pour t'héberger toi.
Concrètement, tu ne crées pas d'entreprise avec des statuts, tu n'es pas salarié non plus, c'est ta propre personne qui devient une entreprise avec un SIRET. Tu peux même (c'est fortement déconseillé) mélanger tous tes revenus et tes dépenses privées avec tes revenus pros, la seule obligation étant de possèder un compte dédié à ton activité professionnelle.
En terme d'administratif et de comptabilité, c'est plutôt simple. Tu dois t'affilier à un Association de Gestion Agrée (AGE) qui va vérifier vite fait tes comptes à l'année.
Il n'y a pas de notions de dividendes ou de salaire: tout ce que tu perçois comme revenu professionnel t'appartient. Tu déclares à la fin de l'année un bénéfice qui est taxé il me semble de façon proche d'un dividende.
J'ai exercé sous ce statut pendant une année et j'ai trouvé ça plutôt léger en terme d'administratif, et plutôt rentable en terme de conversion montant facturé / net dans ma poche.
Par contre, tu es un peu livré à toi-même ce qui peut être un peu angoissant vis à vis des administrations. Il faut bien choisir son AGE pour être bien conseillé.
A noter que si tes clients ne te payent pas trop, tu peux être auto-entrepreneur. Mais les montants des rémunérations dans l'informatique dépassaient lorsque j'avais tenté l'aventure les plafond de la micro-entreprise.
[^] # Re: depression ou burnout
Posté par Philippe F (site web personnel) . En réponse au journal Mes activités open sources / libres récentes. Évalué à 8.
Le burn-out emmène vers une dépression, qui elle peut s'installer beaucoup plus durablement que la charge de travail / pression / complications qui ont conduit au burn-out. C'est donc assez sournois, les conséquences persistent longtemps après que les causes aient disparues.
Je parle malheureusement d'expérience…. 2 ans après un burn-out professionnel, je sens que je ne suis plus capable de gérer le niveau de responsabilité professionnelle que je gérai auparavant. Je ne suis pas sur que je pourrai de nouveau le faire dans ma vie.
[^] # Re: un art de vivre plutôt qu'une formation
Posté par Philippe F (site web personnel) . En réponse au journal une formation à être parent. Évalué à 3.
C'est clairement une chance exceptionnelle que tout le monde n'a pas pour des raisons très très variées.
Je te rejoins sur le reste.
[^] # Re: Non
Posté par Philippe F (site web personnel) . En réponse au journal Téléphone mobile : suis-je paranoïaque ?. Évalué à 2.
Et en plus, tous ceux qui lisent ce message viennent d'être tracés par BFM TV, une des incarnations du mal capitaliste. Et oui, l'image de Neo est stocké sur le site de BFM…
[^] # Re: Les annotations
Posté par Philippe F (site web personnel) . En réponse au journal PyParis 2018, c'était bien!. Évalué à 3. Dernière modification le 26 novembre 2018 à 12:17.
C'est vrai que c'est pénible de devoir importer des modules juste pour avoir sous la main la classe pour l'annotation. La première fois que je l'ai fait, ça m'a fait un import circulaire, j'ai cru que j'allais m'arracher les cheveux !
Je te rejoins aussi sur le fait que ça surcharge pas mal les entêtes de fonctions, qui étaient plus facile à lire sans, surtout quand tu as des valeurs par défaut.
Cela dit, malgré ces deux inconvénients, je suis très content de les utiliser. Dès que la base de code grossit, qu'il y a plusieurs développeurs dans l'équipe, dès que le projet prend de l'age, les annotations créent beaucoup de valeur car elles vérifient la cohérence globale de ton programme. Ce que ne font pas les docstring.
Les docstrings ont d'autres inconvénients:
- parfois, elles sont pas là
- parfois, elles sont pas assez précises (elles oublient de préciser le type de retour, …)
- parfois, la fonction a évolué mais le développeur pressé a oublié de la mettre à jour
Mais surtout:
- les docstrings ne vérifient pas le type des données avec lesquelles la fonction est appelée
- les docstrings peuvent contenir une erreur, genre elles disent qu'on peut passer une liste ou un tuple mais en fait, seule une liste fonctionne.
Comme j'essaie de le montrer dans la présentation, les annotations permettent d’attraper pas mal d'erreur et obligent à clarifie son intention.
# Ecosia et lilo
Posté par Philippe F (site web personnel) . En réponse au sondage Mon moteur de recherche préféré est. Évalué à 2.
J'utilise ecosia et lilo. Ils sont-traitent la recherche soit à Bing, soit à Google. Par contre, ils profitent de l'argent récolté pour mener des projets écologiques ou d'économie solidaire.
Il me semble qu'ils filtrent mes coordonnées personelles ce qui limite un peu le mal. En tout cas, quitte à utiliser internet et griller du Co2, autant que ce soit pour des gens qui essaient un minimum de le compenser…
# Contentoob ?
Posté par Philippe F (site web personnel) . En réponse au journal scraplap, pour mouler offline. Évalué à 7.
Si tu veux rester dans la mouvance Weboob, il faut te trouver un meilleur nom.
Je te propose: Contenteub. En français, ça passe très bien. Pour l'anglais, j'ai pas d'idée mais avec des boob et du gros contenu, on doit bien pouvoir trouver un jeu de mot à la con !
Allez, --> []
[^] # Re: ...
Posté par Philippe F (site web personnel) . En réponse au journal Github m. Évalué à 0.
Avec l'achat de Skype par Microsoft, c'était pareil. Le jour même où la transaction était actée, Skype a connu une des plus grosses pannes de son histoire, avec indisponibilité globale pendant plusieurs heures. Ca n'a rien à voir qu'y disaient aussi…
[^] # Re: Taille déraisonnable
Posté par Philippe F (site web personnel) . En réponse au journal Réduire la taille des exécutables générés avec PyInstaller. Évalué à 2.
Je veux bien juste pour voir à quoi ça ressemble. Ecris-moi à phil.fremy (chez) free.fr .
Merci en tout cas de regarder, je vais voir si je peux retravailler le .spec comme le tien.
[^] # Re: tkInter ?
Posté par Philippe F (site web personnel) . En réponse au journal Réduire la taille des exécutables générés avec PyInstaller. Évalué à 3. Dernière modification le 16 octobre 2018 à 20:26.
Même si j'utilisais TkInter, je ferai le choix d'un packaging en .exe . Le packaging est un aspect fondamental de la distribution d'un programme. Dans l'univers Python, PIP est le minimum vital et tout ce qu'on peut fournir en plus participera à facilité d'installation et donc la popularité d'une programme.
TkInter est petit certes, mais pour faire une vue à la Excel avec nombre de lignes illimitées sur le fichier de donnée, j'ai peur qu'il soit un peu court. C'est pour ça que Qt assure bien, on peut faire des applis assez haut niveau avec très peu de code.
Je l'ai utilisé une ou deux fois contre mon gré et je ne regrette pas Qt.
En cadeau, un snapshot de SxTool pour voir de quoi je parle.

[^] # Re: go
Posté par Philippe F (site web personnel) . En réponse au journal Réduire la taille des exécutables générés avec PyInstaller. Évalué à 3.
Pour la deuxième partie, c'est tout à fait possible, c'est ce dont je parle à la fin du journal. J'essaierai de faire un test dans ce sens un de ces quatre et de vous faire un retour.
[^] # Re: go
Posté par Philippe F (site web personnel) . En réponse au journal Réduire la taille des exécutables générés avec PyInstaller. Évalué à 10.
En même temps, Go fait quand même beaucoup moins de choses que Qt… C'est plus facile d'être compact.