Posted on Aug 19, 2009

Dégage sale programmeur

Lundi soir c’était home-made burgers au barbecue avec le petit frère de Mlle V. et la nouvelle locataire des parents de ce dernier. Après les présentations d’usage toussa toussa elle m’a forcément demandé ce que je fais comme boulot. J’ai expliqué ce que je fais… tant bien que mal… et en allemand. Et puis cette partie de la conversation s’est terminée par  un “ah mais t’es programmeur en fait?… ah… ok” ponctué d’un flottement.

Programmeur : n.m. Celui dont le métier est de rédiger des programmes informatiques. Le plus souvent, jeune diplômé, ou chef de projet raté. Syn. loser. Ex. Tu crains comme un programmeur.

Ouais… je suis programmeur. Dans ces cas là, pas grand chose à dire de plus que ce qui est dit dans ce billet:

La plupart des gens qui passent 90% de leur temps à programmer vont s’arranger pour qu’on les voit comme des ingénieurs d’études, des experts techniques, des chefs de projets, des architectes solution, des consultants, etc. Le top, quand on est un pauvre prestataire d’une SSII en mission pour une banque, et que l’on passe ses journées à coder, c’est de raconter à tout le monde qu’on est INGENIEUR DANS LA FINANCE. Oui oui. C’est assez terrible, mais il semblerait qu’on n’y puisse pas grand chose.

La première observation, c’est que le phénomène est assez localisé. Ou plutôt : le phénomène n’est pas généralisé. En France, dès les études, on explique qu’il y a les développeurs (berk), et les chefs (ouais). [...]

Je vous encourage vraiment à lire l’intégralité du billet, c’est bien écrit et assez vrai… aussi vrai que mon profil Linkedin dit “Software Engineer” parce que ça sonne quand même mieux que programmeur… :’(

Posted on Mar 27, 2009

Débuter en fourchelangue

Je vous ai promis une introduction au parler Python, la voici la voila! Avant toute chose, il va vous falloir un petit logiciel, j’utilise PythonWin Editor, outil gratuit que vous trouverez ici. Installez le comme vous le souhaitez puis cliquez sur la petite tête de serpent pour lancez l’éditeur. Ce dernier est d’une simplicité déconcertante… presque autant que le langage lui même.

Comme vous pouvez le voir ici après, il est composé d’une fenêtre principale dans laquelle se trouve une zone d’écriture. Il se peut que vous n’ayez pas toute la rangée d’icônes que j’ai ici, mais du moment que vous avez celles de gauche c’est suffisant pour commencer. Comme vous pouvez le voir ci dessous, l’éditeur interprète directement ce que vous lui racontez: 2 + 2 ça fait 4, il en est sûr alors il le dit ; par contre Bonjour il aime pas trop… sans les guillemets en tout cas!

python1 python1b

Vous en conviendrez, programmer ligne par ligne c’est moche, on va donc passer en mode “scripts” et pour ce faire il suffit d’ouvrir un fichier .py ou de cliquez sur File/New/Python Script. Commencez par écrire une fonction dans la fenêtre de droite comme sur l’image ci après. Les fonctions se déclarent (très) facilement. Un mot clé “def” pour indiquer que c’est une définition, le nom de la fonction, quelques paramètres (ou pas) entre parenthèses “()” et deux points “:” pour terminer. Une fois à la ligne, il suffit “d’indenter” un coup vers la droite pour que l’éditeur comprenne tout de suite que c’est le “corps” de la fonction (ça fonctionne aussi ainsi avec les boucles).

python2 python4

Une fois votre première fonction déclarée, vous pouvez y écrire comme ci dessus print “Blablabla”. Repérez alors les deux petites icônes fléchées ci-dessus ; celle de droite teste votre code à la recherche de fautes de syntaxe alors que celui de gauche charge le code écrit en mémoire pour pouvoir l’utiliser depuis la fenêtre de gauche (l’icône de gauche est à cliquer avant chaque test si vous voulez que vos dernières modifications soient prises en compte). Appelez la fonction depuis l’éditeur principal… magie, “Blablabla” apparait!

Sur la capture de droite se trouvent d’autres petits exemples à la con:

  • Une fonction (Puissance()) qui prend des paramètres et renvoie un résultat (en utilisant au passage une fonction externe de Python Math.Power()),
  • Une fonction (Genre()) qui présente la syntaxe d’utilisation d’une boucle “si-alors-sinon”.

Croyez moi ou non, mais c’est presque tout ce dont vous avez besoin pour attaquer le Projet Euler dont je vous parlais hier. Il va vous falloir une boucle “tant-que”, un opérateur “modulo” (reste de la division entière) et peut être un peu de quoi jouer avec le listes et voila, vous êtes parés. Et comme je suis sympa, je vais faire le premier avec vous.

Projet Euler 1: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.

Pas la peine de chercher midi à 14h, on parle ici de nombres ridiculement petits (1000 haha la blague), on peut foncer dans le tas de manière totalement systématique.

Alors, comment feriez-vous pour trouver la somme des multiples de 3 ou 5 qui sont inférieurs à 1000?

Simplement en itérant un stupide compteur de 0 à 1000 en testant le dit compteur à chaque tour pour savoir s’il est multiple de 3 ou de 5 ; si oui on l’ajoute au résultat. Voila la fonction en Python:

projeteuler1

Pour info, l’opérateur % est le modulo dont je parlais plus haut, qui retourne le reste de la division entière du premier paramètre et du second. Ex: 4 % 2 = 0, 3 % 2 = 1, 5 % 2 = 1. Vous pouvez également voir que la syntaxe du “if” et “while” se terminent toujours par “:”.

Que dire d’autre? Heu… je crois que c’est tout. Vous pouvez commencer à rigoler avec le Python et le Projet Euler.

Posted on Mar 26, 2009

La programmation est un jeu d’enfant

Que vous vouliez bien me croire ou non, programmer peut vraiment devenir un jeu. Loin de moi l’idée d’essayer de vous  faire apprécier la beauté d’un “refactoring” complexe ou appréhender les finesses d’un polymorphisme bien fait qui sont la coke des développeurs mais plutôt de vous aider à mettre un pied dans ce petit monde et – pourquoi pas – comprendre que programmer peut aussi devenir un jeu pour toute personne un peu curieuse!

Pour ce faire, je fais appel au Project Euler, un petit défi mathématico-informatique très intéressant dont voici l’intitulé officiel:

Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.The motivation for starting Project Euler, and its continuation, is to provide a platform for the inquiring mind to delve into unfamiliar areas and learn new concepts in a fun and recreational context.

Ça a le mérite d’être simple, si les problèmes proposés sont parfois réalisables de tête avec un peu de jugeote, la grande majorité d’entre eux implique la manipulation de nombres trop grands pour que ce soit faisable, sans cependant demander de grosses bases mathématiques. C’est là que l’utilisation judicieuse de petits programmes informatiques devient nécessaire, sans pour autant sombrer dans la complexité. Dans la rubrique “à propos” du projet est spécifié que tous les problèmes sont solvables “en une minute de traitement”, ce qui pousse implicitement à optimiser les algorithmes au maximum. Mais sans aller jusqu’à cette extrémité, il est relativement facile de résoudre une partie des problèmes de manière assez systématique en utilisant cette qualité qu’on oublie trop souvent: “un ordinateur ça calcule (très) vite”.

Pour le fun (et par curiosité) j’ai également décidé de commencer ce challenge dans un langage de programmation que je n’avais pas encore testé, le fourchelangue, le Python… SSSsssSssSSssss. Le fait que j’ai découvert le Projet Euler en même temps que les fonctions personnalisables en Python d’Enso n’y est pas pour rien. Après maintenant quelques jours de jeu avec le Python et Euler je dois dire que je suis très surpris du premier et passionné par le second même si je n’en suis toujours qu’au début. J’ai résolu à ce jour 18 problèmes (grosso modo les 18 premiers par ordre de complexité croissant nombre de personnes les ayant résolu décroissant) sur les ~250 que compte le projet à l’heure actuelle et ça m’amuse toujours autant de chercher a en résoudre un de temps en temps.

Pour le moment les nombres premiers et en particulier les décompositions en nombres (premiers ou pas) sont bien présents ainsi que quelques petits problèmes de logique géométrique franchement pas difficiles. J’encourage tous les curieux sachant un brin programmer à enfourcher le compilateur de leur choix et de tenter l’expérience. Pour les plus curieux, une fois un problème résolu, vous avez accès à un forum de discussion qui vous permet de comparer votre méthode avec les grands malades qui se prennent vraiment la tête pour résoudre ces problèmes de manière efficace.

Pour les autres, ceux qui ne savent pas programmer et ne seraient pas contre l’idée de tester ceci pour peu qu’on les prenne un peu par la main, attendez quelques jours que j’écrive un billet sur “Comment prononcer ses premiers mots en fourchelangue” pour commencer l’expérience tranquillement! A vos claviers!

Posted on Feb 6, 2009

iPod-a-Rasa

Mince ce que c’est triste le métro sans musique…

6h15: Comme tous les matins, un café sous le nez et le trackpad sous le doigt, je charge mon iPod jusqu’aux molaires avec mes podcasts du jour. Un nouveau “Silence on Joue”, une tripotée d’émissions de France-Inter, quelques épisodes de CanalAcadémie et un CD de Placebo pour la forme! Le temps que les transferts se fassent (iPod Nano de 1ère génération oblige) je file faire un premier passage sur mes flux RSS du jour.

6h35: Liste de flux RSS clear, la liste à fondu et il reste 7 liens que je garde pour le boulot! Je finis d’écouter le flash de France-Info, comme tous les matins depuis que Mlle V. ne se lève plus aux aurores avec moi. Ça parle de la prestation de Nicolas 1er à la télé… je vais me brosser les dents tiens.

6h45: Je suis sur le point de partir! Je supprime les sources des podcast synchronisés avant d’éteindre l’ordi. Je murmure quelques mots doux à l’oreille de la demoiselle bien cachée sous les draps avant d’enfoncer mon casque sur les oreilles et de machinalement chercher “Géopolitique matin” dans mes podcasts…

6h50: J’ai beau le rebooter, mon iPod est désespérément vide. Musique, podcasts… tout à disparu. Je rallume l’ordi, rebranche mon Nano et constate que rien n’y fait, tout a bien disparu. Pas le temps de chercher plus loin, tant pis pour le trajet, j’enfourne le disque dur externe dans mon sac et prend mes jambes à mon cou pour ne pas rater mon bus.

8h30: Je suis au boulot depuis presque 1h maintenant, les tests de la nuit sont Ok, je charge les derniers builds officiels et le temps que mes “vues” se mettent à jour, je branche le disque externe pour charger un peu de musique… pour voir. Je me récupère une floppée de messages d’erreur pendant le chargement “Impossible de Synchroniser blabla”… ca pue un peu vous trouvez pas? A la fin de la synchro iTunes m’affiche tout comme si les morceaux étaient bien présent dans l’iPod malgré les erreurs de chargement. Je débranche l’iPod… il est vide. Je le rebranche et me paye une erreur Windows “Periphérique USB non reconnu”. Depuis, il est bloqué sur “Do not disconnect”… et j’ai des trucs à faire.

8h45: Pas mieux, toujours en mode “Do not disconnect” et je doute qu’il en sorte de si peu. Après un poil de Googleing je trouve comment effectuer un hard-reset et relance l’animal, clique directement sur “restore” sous iTunes pour recharger le firmware et remettre tout à plat… puis recharger de la musique! Tout a l’air d’être revenu à la normale… j’ai même perdu les 250Mo de documents inconnus que je n’arrivais pas à supprimer. Tout est bien qui (apparemment) finit bien. Je suis bon pour recharger “toute la musique que j’aime” (lala la la) et passer la journée (qui sera courte bytheway) sans mes podcasts préférés.

Un instant j’ai cru que j’allais devoir me séparer de mon iPod préféré… les boules.