XD blog

blog page

programmation


2013-12-14 Quelques exercices de préparation à l'examen (4)

On reprend le même texte que celui de l'exercice précédent. On veut connaître le nombre maximum de mots qu'on peut trouver entre deux mots commençant par une voyelle.

# source du texte : http://www.gutenberg.org/files/1567/1567-h/1567-h.htm#link2H_4_0017
texte = """They are rattling breakfast plates in basement kitchens,
And along the trampled edges of the street
I am aware of the damp souls of housemaids
Sprouting despondently at area gates.
The brown waves of fog toss up to me
Twisted faces from the bottom of the street,
And tear from a passer-by with muddy skirts
An aimless smile that hovers in the air
And vanishes along the level of the roofs.""".replace("\n"," ").lower().split()

def nombre_de_mot_maximum(mots) :
    ...
    return un_nombre 

more...

2013-12-13 Quelques exercices de préparation à l'examen (3)

On veut calculer la longueur moyenne des mots ayant le même nombre de voyelles. Le résultat est un dictionnaire où chaque élément vérifie :

La fonction qui compte le nombre de voyelles d'un mot est décrite sur cette page : exercice 2.

# source du texte : http://www.gutenberg.org/files/1567/1567-h/1567-h.htm#link2H_4_0017
texte = """They are rattling breakfast plates in basement kitchens,
And along the trampled edges of the street
I am aware of the damp souls of housemaids
Sprouting despondently at area gates.
The brown waves of fog toss up to me
Twisted faces from the bottom of the street,
And tear from a passer-by with muddy skirts
An aimless smile that hovers in the air
And vanishes along the level of the roofs.""".replace("\n"," ").lower().split()

def moyenne_longueur_pour_chaque_nombre_de_voyelles(mots) :
    ...
    return un dictionnaire 

more...

2013-12-12 Quelques exercices de préparation à l'examen (2)

On veut écrire une fonction qui compte le nombre de voyelles dans un mot.

def compte_voyelles(mot):
    ...
    return le nombre de voyelles
    
print (compte_voyelles("oui"))  # doit afficher 3
print (compte_voyelles("non"))  # doit afficher 1

more...

2013-12-11 Quelques exercices de préparation à l'examen (1)

On veut écrire une fonction qui détermine si une lettre est une voyelle.

def est_voyelle(c):
    ...
    return 0 ou 1
    
print (est_voyelle("a"))  # doit afficher 1
print (est_voyelle("b"))  # doit afficher 0
Il faut écrire cette fonction de trois manières différentes :


more...

2013-08-03 La paperasserie administrative

Kate Middleton portait une robe d'une créatrice française d'après cet article La styliste française Séraphine vend ses robes tous azimuts grâce à Kate. Passé l'anecdote l'article retranscrit les propos de la créatrice à propos d'un sujet connexe : "Je travaille aujourd'hui avec cinquante employés, mais je ne sais pas si j'aurais eu le courage d'en avoir autant en France (...) côté administratif : le rapport entre les papiers que je dois remplir pour John Lewis/Peter Jones et les Galeries Lafayette est de un à dix."

Les chiffres simples raisonnent toujours plus longtemps. La France est dix fois plus administrative que le Royaume-Uni. On savait qu'elle l'était plus mais de là à l'être dix fois plus, je me demande ce que cela représente.

On nous promet ou on nous a promis de simplifier tout ça. Simplifier comment... Lorsque la complexité s'installe de manière durable, on s'en accomode et on crée des raccourcis. L'un des moyens et d'écrire des logiciels qui vous précisent ces démarches et leurs coûts associés. Simplifier voudrait dire réécrire ces logiciels... Pas si simple. Les grosses entreprises devraient investir du temps et de l'argent pour cette migration. L'Etat français aussi. On ne passe pas d'un système complexe mais en quelque sorte digéré à un système plus simple mais pour lequel il faut tout adapter. Et puis tout système complexe a ses conseillers qui en ont optimisé l'utilisation, qui en ont cherché les failles. Il a ses avantages aussi.

Toutefois, il apparaît que le temps d'apprentissage nécessaire pour appréhender les règles administratives nécessaires à la création d'une compagnie est plus court en Angleterre qu'en France. Ce savoir complexe est peut-être une barrière à l'entrée, peut être aussi une source d'inégalité entre ceux qui savent et ceux qui doivent apprendre.

Maintenant, comment fait-on pour simplifier si telle est la direction souhaitée ? Comment remplacer le moteur d'un bateau en marche ? A moins d'en créer un en parallèle pendant que l'autre tourne encore... Il faudra former de nombreuses personnes sur le nouveau système (il y a avait environ 18 400 experts comptables en France en 2007).

Ou alors, on garde le sytème actuel qu'on considère un peu comme une boîte noire et on crée des chemins balisés pour les usages les plus fréquents comme par exemple : guide création. On crée des pages Facebook pour la plupart des organismes administratifs, des flux RSS pour informer les gens (et sans doute pour les connaître aussi). Une fois les usages changés, on changera peut-être la boîte noire en boîte claire.

2013-06-23 Internet et la programmation

Je ne me souviens plus de ce qu'était la programmation avant internet. Aujourd'hui, je passe beaucoup de temps à comprendre comment marche un truc précis, je fais une centaine de requête en espérant qu'un autre fou comme moi ait un jour fait face au même problème et qu'il ait de surcroît penser à décrire sa solution. Les forums de discussions sont une source plutôt utiles. Il y a dix ans, internet n'était pas aussi fourni, on cherchait moins et on codait plus. Aujourd'hui, on passe la première partie d'un projet à chercher des briques qu'on pourrait réutiliser. Une fois qu'on les a trouvées, on passe à la seconde phase qui se résume à coder comme un fou. C'est un peu ce que résume le graphe qui suit.

A la fin, il est possible que tout se déroule comme prévu ou que, comme il arrive souvent, vous ne butiez sur un nouveau problème. Rebelotte, nouvelles séries de requêtes pour comprendre que ce petit détail qu'on n'avait pas gardé pour plus tard en n'anticipant pas sur le fait qu'il pourrait s'avérer redoutable... Et bizarrement, armé de nouveaux mots-clé, on finit par trouver la librairie qui aurait pu vous faire économiser pas mal de temps.

Cela explique la troisème partie. A ce stade, trois options s'offrent à vous. La première est de tout laisser tomber en vous disant qu'un jour quelqu'un aura le courage de surmonter ces épreuves mais que là, étant donné que la vie est courte, on va tout laissant en plan pour aller s'amuser. Ca finit par une bonne cuite pour oublier le temps perdu dans des trucs de geek inutile (la cuite va souvent de paire avec le dénigrement). La seconde est de se plonger dans la documentation du nouvel outil puis de repartir presque de zéro pour se dire finalement qu'au bout de toutes ces épreuves, vous aurez enfin sur les yeux ce que vous aviez en tête au départ, à moins qu'un nouvel obstacle n'apparaisse, un nouvel outil, l'enfer... Dans ce cas, la première tentation refait surface et en général l'emporte. La troisième option est celle des temps anciens : l'ignorance. On s'obstine à poursuivre le chemin déjà commencé et on se dit ce n'est pas une petite difficulté qui va tout remettre en question. Quand il n'y avait pas internet, j'avais souvent tendance à choisir cette dernière option. J'ai codé beaucoup de trucs inutiles mais l'essentiel était de ne pas l'apprendre trop tôt. Et puis ce n'était pas tout-à-fait perdu, j'ai appris pas mal aussi. Mais l'ignorance était vraiment le point important.

C'était pas mal sans internet. Je butais contre une machine pour trouver une solution. Aujourd'hui, je passe plus de temps à déchiffrer des explications succintes trouvées sur des blogs écrites par un développeur qui affirme avoir un bousin qui marche. Une heure après, convaincu que cela marche, je m'aperçois que mon truc et le sien ne fonctionnent pas sur la même version de Python. Ca ne m'étonne pas qu'on y perdent des nuits sur ces conneries.

Je me demande ce que tous ceux qui ont bossé sur le Vasa ont pensé au moment où ils ont vu leur oeuvre couler juste après la mis à l'eau.

2013-06-13 A template to create a Python module including Sphinx documentation and a setup

My students often struggle to debug their programs when two or three students need to synchronize their versions. A good way to avoid wasting too much time is to use a tool to keep track of the modifications such as github. It then becomes easy to synchronize multiple versions.

However, students still need to debug the program after a synchronization. A good practice is to write unit tests. Every time, you write a complex function or an easy one, a unit test should be written to ensure its behaviour will not change after many changes. But it means to add a file, to spend some time to do it right, and to frequently run all the unit tests. This is usually too painful when the project will only last a couple of months. Plus, you usually commit yourself to do it only after you went through the nightmare of debugging once.

Last but not least, my students usually do not add documentation to their code. Most of the time, they do not need it because the project is too short to lose track of the modifications and too small to not know it completely. Maybe another reason is because they cannot see a compiled version of the documentation. The best way is to use Sphinx ut using it means spending a couple of hours at least (a lot of more if you do it for the first time). Documentation can also be used to navigate through the program.

For those reasons, I made a kind of template for a Python module. It includes an easy mechanism to add a unit test and to run it. It generates with the documentation with no change and it also generated a setup (gz, exe) with no change either. You can get it here: Pieces of codes, libraries (section Code). After you downloaded it, a page gives the short list of instructions to tweak the template in order to make it yours: README.

2013-06-08 Apprendre la programmation avec la souris (avec Scratch)

Je cherchais des livres récents sur Python et je suis tombé là dessus : Super Scratch Programming Adventure!: Learn to Program by Making Cool Games!. Le livre est en anglais mais il présente un outil qui se décline dans toutes les langues et qu'on peut trouver ici : Scratch et qu'on peut télécharger sur toutes les plateformes ici : téléchargement.

Je suis toujours un peu sceptique sur les outils comme celui-ci. Ils sont soit très simples mais on ne peut pas faire grand chose, soit aussi complexe que d'autres (Apprendre à coder en Python : illustration) avec le désavantage de ne pas pouvoir utiliser plus tard ce qu'on apprend aujourd'hui (tout du moins pas en l'état car c'est une autre syntaxe). Malgré tout, c'est un outil intéressant, il offre une vue plus visuelle sur ce qu'est un algorithme comme cet exemple sur le calcul du PGCD (plus grand diviseur commun) : PGCD avec Scratch. Avec Scratch, on peut créer une scène et animer relativement facilement plusieurs objets dans cette scène : minotaure. On peut y ajouter des extensions : S4A : un projet pédagogique. On peut même trouver une traduction française du tutoriel : tutoriel en français. Et si vous avez la flemme de l'installer, vous pouvez l'utiliser en ligne : Scratch en ligne.

Tout est fait pour y être intuitif et ça marche plutôt bien. Cela dit, comme tout langage de programmation, il faudra quelques heures pour arriver à faire vraiment ce qu'on avait en tête au moment de commencer. Il manque selon mon avis deux fonctionnalités. La première serait de pouvoir aisément animer un personnage avec une séquence d'images. Dans scratch, chaque image serait un objet ce qui rend les choses un peut compliquées. L'autre option est de créer des costumes différents mais je ne sais pas trop comment Scratch gère la transparence des images. Il manque aussi les fonctions même s'il est encore possible de contourner l'obstacle : Creating a Function in Scratch using a Variable. Ce n'est pas l'idéal. L'autre option est d'utiliser Snap qui permet de créer ses propres blocs. Je n'ai pas réussi à télécharger l'outil, il est seulement disponible en ligne pour le moment (et en anglais). J'attendrais un peu.

Il n'est pas facile d'apprendre à programmation. Je n'ai pas encore trouvé de représentation qui ne soit pas abstraite. On comprend aisément ce que veut dire répéter une suite d'opérations mais un algorithme comprend souvent plusieurs répétitions, chacune d'entre elles pilotée par une condition différente. Les premiers pas sont plutôt simples comparés à l'assemblage de pas d'un programme qui fait quelque chose d'utile. Cette multitude devient nécessairement abstraite au-delà d'un certain point.

Il y a vingt ans, on enseignait la programmation au lycée avec le LSE dont la syntaxe était en français. Il n'a pas survécu probablement parce qu'il était dédié l'enseignement mais ne permettait pas vraiment de faire quoi que ce soit d'utile. Espérons que Scratch suive un destin différent. Et si on n'est pas convaincu, il est toujours possible de créer son propre langage A simple interpreter from scratch in Python, part 2, part 3, part 4.

2013-04-14 La dimension créative du métier de développeur

Je suis tombé sur cette vidéo What most schools don't teach (depuis Le Figaro Etudiant) qui incite les jeunes à choisir le métier de développeur. D'après cet autre article Ces métiers dont personnes ne veut, cette voie n'a pas les faveurs des étudiants. La vidéo présente un métier incontournable, présent partout depuis la table de mixage jusqu'à la voiture. On y voit des hommes et des femmes parler de ce métier et de tout ce que les sociétés font pour attirer les talents (cantine bio, cadre de travail design, salle de repos...), de l'intérêt qu'ils portent à leur travail, du fait que ce travail est bien rémunéré. Bill Gates est interviewé par CNN à ce sujet. Le patron de Facebook milite aussi pour que les Etats-Unis assouplissent les règles d'immigration pour pouvoir recruter des ingénieurs que l'éducation américaine n'arrive pas à fournir (Courrier International). Il a monté un lobby pour influencer les politiques.

Cette réalité est sans doute quelque peu édulcorée, la proportion de femmes travaillant dans l'informatique est toujours très faible, passer un temps conséquent devant un écran ne favorise pas les échanges. Le fait est que ce métier est en grande partie abstrait. Les applications informatiques ont la plupart du temps une interface concrète mais à l'intérieur, les milliers de lignes de code le sont beaucoup moins. Je me dis que parfois se promener dans ces montagnes de symboles revient à joueur une partie d'échec en aveugle.

Beaucoup d'ordinateurs utilisent Linux aujourd'hui. Son créateur s'est inspiré d'Unix inventé en 1969. Il s'est écoulé 40 ans depuis et c'est un assemblage gigantesque de morceaux de codes de tous âges. Il y a probablement plus de personnes qui ont contribué à Linux que de travailleurs ayant posé une pierres sur la Cathédrale Notre-Dame. Une drôle d'aventure.

De mon point de vue, on oublie souvent la partie créative de ce métier. Il ne consiste pas simplement à envoyer des instructions à une machine pour qu'elle exécute plus rapidement ce qu'on faisait manuellement auparavant, c'est aussi imaginer de nouvelles façons d'utiliser des outils existants (comme ici) de créer des algorithmes qui vont chercher de l'information dans un océan de données. Vous ne trouverez pas de manuel pour vous dire comment faire.

2012-12-22 ENSAE, initiation à la programmation, suggestions de projets

Voici la liste des suggestions de projets. proposées cette année dans le cadre du projet informatique du second semestre. Ce projet doit être effectué de préférence par groupe de deux élèves. Chaque groupe sera suivi par un enseignant, à raison de quatre suivis d'une demi-heure entre février et avril. Une soutenance aura lieu au mois de mai.

Le projet consiste en la réalisation d'un programme informatique, d'un rapport expliquant la démarche et les résultats obtenus et d'une soutenance orale. La note dépend de ces trois exercices (elle ne dépend pas de la taille du programme informatique). Le programme peut être réalisé dans un autre langage que Python. Chaque groupe est encouragé à proposer un sujet de son choix.

Le document lié plus haut contient toutes les références nécessaires autour des sujets suivants :


<--

Xavier Dupré