lundi 30 septembre 2013

Petit traité de manipulation à l'usage des honnêtes gens

Vous souhaitez connaitre les secrets de la publicité, du marketing, ou juste apprendre 2-3 trucs pour vous aider à éduquer votre enfant ? Ce livre est fait pour vous.

Devenu un best-seller, ce livre est un formidable vulgarisateur de pensée psychologique. Quelques passages très universitaires pourront troubler les lecteurs les moins académiques d'entre nous, moi le premier. Cependant, le reste du bouquin est formidablement simple à comprendre.

Les auteurs nous expliquent que la base de la manipulation est l'engagement. Arrivé à faire s'engager quelqu'un dans quelque chose d'aussi anodin que répondre à une question est déjà une victoire. Le plus simple et le plus frappant des exemples est celui-ci :

Il vous manque 50 centimes pour acheter votre journal. Vous décidez de demander à des passants la monnaie manquante.

  1. Vous choisissez une stratégie simple : `Bonjour, il me manque 50 centimes pour acheter mon journal, les auriez-vous s'il vous plait ?`
  2. Vous choisissez une stratégie dite de pied-dans-la-bouche : `Bonjour, avez-vous l'heure ?` - `Oui, il est 11h53` - `Merci. Auriez-vous 50 centimes à me donner pour m'acheter mon journal ?`
Faites l'expérience, mais la deuxième méthode vous permettra d'augmenter énormément vos chances de réussite. Evidemment, on ne parle ici que de réussite statistique, rien ne vous garantira un résultat à 100%. Mais augmentez vos chances de réussite, c'est déjà énorme. Pourquoi ça marche ? Parce que le passant se sentira engagé, vous aurez établi un contact, et il se sentira mal à l'aise à l'idée de refuser une somme aussi ridicule que 50 centimes. Il est bien plus simple de refuser 50 centimes à quelqu'un que l'on ne connait pas.

Tout un éventail de techniques vous seront exposées : 
  • Pied-dans-la-porte : une première demande peu coûteuse avant de faire la vrai demande
  • Porte-au-nez : une première demande très coûteuse avant de faire la vrai demande
  • Pied-dans-la-bouche : ouvrir le dialogue avant de faire la vrai demande
  • Toucher : toucher la personne avant de faire la vrai demande
Il y en a beaucoup d'autres, je vous invite à lire ces notes de lecture qui vous économiseront la lecture du livre en entier. Sans parler du fait que les auteurs terminent par combiner des techniques entre elles, ce qui rend certaines stratégies diaboliquement efficaces.

Une technique qui m'a particulièrement plu, de par sa simplicité et son efficacité est la technique de l’étiquetage. Je l'apprécie particulièrement vu son application immédiate pour l'éducation des enfants. Le principe est de donner une qualité que l'on souhaiterais voir s'exaucer. L'enfant aura tendance à s'y tenir.
Par exemple : `Que tu es sage en voiture`. L'enfant intériorisera ce trait de caractère, et deviendra sage comme une image en voiture. Marche aussi pour les adultes, bien que les adultes ne soient pas particulièrement turbulents en voiture.

Ce qui est beau dans la manipulation, c'est que le manipulé ne se rendra compte de rien. Le pire, c'est qu'il se créera lui-même ses propres raisons pour justifier ses choix. `Pourquoi as-tu décidé de donner à tel organisme humanitaire plutôt qu'un autre ?` - `Parce que leurs combats me correspond plus.` - ou bien parce que leurs bénévoles étaient les meilleurs manipulateurs !

Dans un supermarché, on demande à une personne de garder nos provisions, car:
  • Groupe 1 (faible justification): on a perdu un billet de 1$
  • Groupe 2 (justification forte): on a perdu un portefeuille avec beaucoup d'argent dedans.
Quelques secondes plus tard, un objet tombe du sac d'un second expérimentateur. Dans la condition de contrôle, 35% des personnes alertèrent le second expérimentateur. Pour les personnes du groupe 1, 80% alertèrent le second expérimentateur (On note l'efficacité du pied dans la porte). Quant au groupe 2 (forte justification), seulement 45%. Tout ce passe comme si une forte justification équivalait à une pression. On ne peut pas refuser son aide à une personne ayant perdu son portefeuille plein d'argent. Ainsi, les sujets sont peu engagés par leur décision. C'est la théorie de l'engagement. Néanmoins, il faut remarquer que tous les sujets (faible ou forte justification) ont acceptés de garder les provisions. L'engagement dépend du sentiment de liberté qu'on a eu en prenant la décision. [Expérience N°6]

L'argent n'est pas un critère engageant. Promettre une récompense ne donnera pas à vos employés une occasion de s'engager envers votre entreprise, puisque ce sera la récompense qui servira de justification à leurs actes.

Ressources :

mercredi 25 septembre 2013

C'est quoi un code smell ?

En anglais, `smell` veut dire odeur, et implique précisément une mauvaise odeur. Un `Code Smell` est donc une mauvais odeur de code. Vulgairement, `un code qui pue`.

Il existe beaucoup de code smell, et on en a tous fait. En tant que développeur, il faut essayer de corriger nos propres code smell, et donc, il faut travailler son nez. Reconnaître un code smell est déjà la moitié du chemin de parcouru pour mieux coder, coder un code qui sent bon le bonbon rose.

Mon code smell favori à mes débuts était l'écriture de fonction longue comme un repas de noël, et impliquait l'utilisation intensive des touches Ctrl, C, et V.

Voici une liste non exhaustive de code smell :
  • La notation hongroise. `int iInteger`, `long lLong`, `bool bReturn`. On ajoute l'initiale du type au nom de la variable. Mal enseignée, mal comprise, mal utilisée, on arrête tout. Voici un excellent article sur le sujet : Making Wrong Code Look Wrong. A lire 3 fois par jour jusqu'à le connaitre par cœur.
  • Des commentaires tout le temps, partout. Là encore, l'école n'y est pas pour rien. Qui n'a jamais entendu de professeur ressasser `une ligne, un commentaire` ? Trop de commentaires est pire que pas de commentaires du tout. Le nom des variables et des fonctions doivent être suffisamment explicite pour ne pas avoir à commenter. `connection.Close(); // close the connection`. On s'en doutait ! Les commentaires sont là pour dire pourquoi vous faites quelque chose, et non pas pour décrire ce que vous faites.
  • Duplication de code, deux fois les mêmes lignes, aïe.
  • Objet dieu, ou `God Object`, des objets qui font tout, IHM, algorithme, généralement plusieurs milliers de lignes.
  • Dans le même genre, des fonctions qui dépasse la centaine de lignes.
  • Non uniformité de l'écriture des variables et des fonctions. Dans la même classe, `ma_premiere_method`, puis `MaDeuxiemeMethod`. Au sein d'une équipe, il est déjà difficile de garder tout le monde à la même enseigne, mais si tout seul, on est déjà pas d'accord avec soi même, on ne s'en sortira jamais.
  • Getters et Setters auto généré. Ça casse le principe même d'encapsulage et ce n'est pas objet du tout.
  • L'envie de fonctionnalité, `Feature Envy`, ou comment votre classe aimerait tellement faire pareil que le voisin. Reconnaissable à la ligne `A.getB().getC().getD().getTheNeededData();`. L'un de mes pêchés mignons. 
  • Indentation manquante, ça ne pardonne pas.
Le Code Smell n'est pas un bug et est invisible à l'utilisateur. Par contre, le Code Smell ralentit le développement de nouvelles fonctionnalités, et assure d'horribles régressions lors de nouvelles livraisons.

Ressources :

mardi 3 septembre 2013

C'est quoi un pixel ?

Le pixel, la hantise de toute bonne mère de famille qui souhaite faire un pêle-mêle avec les photos de son petit bébé adoré. Vas-y qu'on installe Photoshop, et qu'on télécharge de belles images vectorielles, on prépare tout, puis on dit à la gentille maman : "Allez, tu n'as plu qu'à ajouter les photos".

Et là, c'est le drame. Le bébé se retrouve avec la tête de Mario sur NES, et la maman est en pleurs : "J'y arrive paaaaaaaaaaaaaaaaaaaaas".

Pas de panique, reprenons tout depuis le début. Une image, ou photo, est constituée de pleins de petits points de couleurs. Ces petits points associés ensembles forment une image si on la regarde d'assez loin. Chaque petit point est appelé pixel. Donc si on dit qu'une photo fait une résolution de 2000x1000, c'est qu'il y a 2000 pixels de large, et 1000 pixels de hauteur, soit 2 millions de pixels, ou bien 2 mégapixels.

Et magie, la même chose s'applique aux écrans. Un écran de télé ou d'ordinateur est constitué de minuscules petites diodes lumineuses, qui affichent au final une image. Donc l'écran a une résolution 'normale', qui correspond à son nombre de diode, par exemple 1920x1080. Ici aussi on parle de pixel, même si ce n'est pas tout à fait la même notion.

Question classique : "1cm ça fait combien de pixel ?". Et bien ça dépend de comment on l'imprime ! La même image de 10x10 peut très bien être imprimée sur une feuille A4, ou une feuille A3. Le rendu sera plus ou moins pixelisé. Ça dépend de combien de pixels vous désirez pour 1cm. L'image sera de plus ou moins bonne résolution, et on verra plus ou moins les pixels si vous regardez la photo de plus ou moins loin. Wikipédia a un excellent article la dessus qui est concis et assez clair, je n'y reviendrai pas plus en détails : Résolution spatiale des images matricielles.

Même nombre de centimètres, nombre de pixels différent, ça va, ça va un peu, ça va plus du tout du tout !

Revenons à nos pixels. Pourquoi la tête de bébé était toute pixelisée ? Parce que la maman avait crée une image de fond de 400x300, ce qui est très très peu. Du coup, lorsqu'elle a mis les photos de bébé de 4000x3000, elle a dû les réduire d'un facteur 100 : on est passé de 1.200.000 à 120.000 ! Et bim, la belle photo est devenue un amas de pixels horrible.

La règle de la retouche d'image, c'est de toujours partir d'une très haute résolution. Le traitement doit être fait avec le maximum de pixels possible, il sera toujours possible de réduire si besoin, mais au moins à l'impression, il sera possible d'imprimer des photos d'extrêmement bonne qualité, et c'est là tout le but recherché quand on veut un beau bébé !

Tadaaaaaaaaaaa !