Greg's Devblog Par un développeur, pour les développeurs

18déc/102

Comment reconnait-on un programmeur ?

L'autre jour sur stackoverflow quelqu'un a posé une question assez marrante : comment reconnait-on un programmeur (ie, sans connaître la personne, juste à partir de petites manies/habitudes).

J'ai regardé les réponses par curiosité, et je dois avouer que certaines me correspondent bien. J'ai testé avec ma copine, et dans l'ensemble elle approuve (avec une mention spéciale pour une réponse en particulier). Voici donc un petit panel rapide et non exhaustif :

  • Utilisation des parenthèses imbriquées (je dois admettre que je le fais assez souvent (et même dans ce billet !))
  • Temps de latence anormalement long pour répondre à des questions pourtant très simples, du style "tu veux du thé ?". Ma copine râle beaucoup à propos de ça... Certains disent que c'est parce qu'il faut le temps de faire le pre-processing, l'analyse lexicale et syntaxique, et l'optimisation de la réponse, mais pour ma part je dirai que c'est juste que quand je suis concentré sur du code (ou un domaine relatif à la programmation) je suis un peu dans un mode de particulier (logique et proche de la machine, on va dire), et que du coup, effectivement, ça interrompt un peu le fil de ma pensée et il me faut un temps pour me "reconnecter". D'ailleurs, dans ma tête, souvent je suis en train de taper du code, et là ça fait "tiens, on me parle"... je continue à taper un peu, et puis au bout d'un même je switch sur le mode "social" et je réponds. Mais ça énerve ma copine d'attendre plus d'1 seconde pour ça.
  • Numérotation qui commence à 0. Je ne comprends d'ailleurs toujours pas pourquoi dans les éditeurs de code on numérote à partir de 1...
  • Pour un programmeur, 256 est un chiffre rond. Là je ne dirai que ce n'est pas forcément vrai pour tous les programmeurs, mais en tout cas pour ceux qui font pas mal de C/C++. En Java, je le vois beaucoup moins.
  • Le fait de revenir en arrière dans la call stack de la conversation. Ca j'ai tendance à le faire et c'est vrai que les gens n'aiment pas beaucoup, dans l'ensemble. Du style si je pensais à quelque chose à dire à un moment donné et qu'entre temps quelqu'un a parlé et que la conversation à avancé, dans ma tête c'est toujours présent, et à tout moment s'il y a un blanc je vais avoir tendance à revenir en arrière dans la conversation pour repartir de là où j'avais quelque chose à dire.

Il y a pas mal d'autres réponses sympas sur le site, donc si vous avez un peu de temps à perdre, je vous invite à aller voir ça :)

Taggé comme: , 2 Commentaires
27sept/104

Qu’affiche le code suivant ?

Sous ce titre un peu racoleur se cache pourtant un phénomène assez étrange, qui fait qu'en C il n'est pas toujours facile de déterminer le résultat d'une instruction...

Voici donc un petit programme rapide, de quelques lignes ; je vous invite à essayer de deviner ce qu'il affiche...

#include <stdio.h>

int main(int argc, char **argv){
	int w = 0, x = 0, y = 0, z = 0;

	printf("w : %i %i\n", w++, w);
	printf("x : %i %i\n", x++, x+1);
	printf("y : %i %i\n", y, y++);
	printf("z : %i %i\n", z+1, z++);
	return 0;
}

Ca va paraître bizarre, mais en compilant le code sous OSX avec GCC je n'ai pas obtenu le même résultat que sous Windows (pourtant toujours avec GCC, mais probablement avec des options de compilation différentes). En utilisant cygwin et en compilant en ligne de commande (sous Windows, donc), j'obtiens bien le même résultat que sous OSX et Linux... Voici donc les 2 résultats obtenus :

Avec Code::Blocks

w : 0 0
x : 0 1
y : 1 0
z : 2 0

Ici, le résultat parait dans l'ensemble cohérent, si en tient compte d'un élément bizarre : on dirait que les opérations sont effectuées de droite à gauche : si dans la partie de droite on incrémente la variable, alors dans la partie de gauche la valeur sera (valeur+1), comme en témoignent les lignes 3 et 4.

Avec GCC sans option

w : 0 1
x : 0 1
y : 1 0
z : 2 0

Autre résultat, autre constant : cette fois-ci le résultat parait moins cohérent. En effet, les lignes 1 et 2, affichent le même résultat, alors que dans un cas on affiche "w", et dans l'autre "x+1"... L'explication semblerait être qu'on effectue en premier les opérations, de droite à gauche, puis on met les valeurs. Donc pour "w++, w", on incrémente d'abord w, puis on met les valeurs dans les arugments, alors que pour "x++, x+1", on calcule en premier x+1, puis on incremente avec x++, et les 2 valeurs stockées sont utilisées pour les arguments.

Que peut-on déduire de cet exemple foireux ?

  • Savoir exactement ce que fait un code n'est pas forcément simple.
  • Les warnings ne sont pas là pour rien... En l’occurrence, en activant les warnings on obtient ici "warning: operation on `w' may be undefined"... Pourtant, pas mal de monde semble considérer que "si ça compile, c'est que c'est bon", et on se retrouve avec des programmes bourrés de warnings (et donc potentiellement de bugs dans ce genre).

D'ailleurs, j'utilise souvent Code::Blocks, qui a une manie assez bizarre : si on compile avec "build and run" et qu'il n'y a pas d'erreur, et même s'il y a des centaines de warnings, Clode::Blocks vide le log de compilation et n'affiche rien... Il faut alors recompiler (sans exécuter) pour voir apparaître les warnings (pour peu qu'on ait fait une modification rapide dans un des fichiers pour "forcer" la recompilation...).

Méfiance !

Taggé comme: , , 4 Commentaires
21sept/100

Lambda Calcul pour les nuls

Hier j'ai eu un cours (Typage et Polymorphisme) où ça parlait à nouveau de Lambda Calcul. Dit comme ça, tout le monde s'en fout :) Mais en fait ce qui était sympa c'est le TD/TME qui a suivi, au cours duquel on avait un lien à aller voir :

http://worrydream.com/AlligatorEggs/

Je vous l'accorde, rien que le nom du lien est déjà suspect... Mais en fait c'est une méthode pour apprendre le Lambda Calcul sans jamais utiliser aucun terme de ce dernier. En gros une méthode purement visuelle, avec des alligators et des oeufs. C'est plutôt bien fait (en tout cas à mes yeux de pauvre petit codeur qui ne sait rien dessiner), et assez marrant à lire (même si on sait déjà en faire).

Excellent, non ?

15sept/100

La routine…

Voici une image très sympa sur laquelle je suis tombée, je vous en fait donc profiter...

Source : korben.info

Taggé comme: , , Aucun commentaire
13juil/101

Blague à 2 balles…

En partant tout à l'heure le boss sort "Bon, j'm'eclipse." Je me suis retenu de faire une des blagues les plus pourries de ma vie, du coup... Une fois partie, comme mes collègues étaient toujours là, je l'ai quand même sortie ^^

"De nos jours on dit plutôt "bon, j'me Netbeans..."  "   (on bosse sous Netbeans plutôt qu'Eclipse).

Sans commentaire ^^

Taggé comme: , 1 commentaire
9juil/100

Champ de distorsion de la réalité

Voici un de mes articles de Wikipedia préféré... L'article sur le Champ de distorsion de la réalité !

http://fr.wikipedia.org/wiki/Champ_de_distorsion_de_la_r%C3%A9alit%C3%A9

En fait ce que je trouve génial c'est que c'est très vrai et très original à la fois. Bon, on va dire que je peste toujours contre Steve Jobs et Apple, mais là pour le coup l'article est très juste. Et ce n'est pas péjoratif ni rien, au contraire, ça démontre tout le savoir-faire d'Apple au niveau marketing :)

9juil/100

Commentaires douteux

J'ai commencé mon stage aujourd'hui, et en farfouillant dans les sources d'une grande boite (dont je tairais le nom ^^), je suis tombé sur des commentaires pour le moins étrange. Ces commentaires concernaient 2 fonctions, déclarées de la sorte :

void XXXXX(void)
{
// Doesn't matter
}
void YYYYY(void)
{
// You should never get here
}

Et histoire de parfaire le tout, un peu plus loin j'ai trouvé un petit bout de code en commentaire avec un TODO associé :

// XXXX->ZZZZ();
// TODO : delete this

Ca fait plaisir de voir qu'on fait du code foireux même chez les grands :p Le moins que l'on puisse dire, c'est que des commentaires comme ça, c'est de la daube ^^ ;)