Mes aventures avec Qt¶
Au début était le code,¶
Un jour, un mail comminatoire du responsable de projet nous informe que désormais les logiciels du Terrier seront développés en Qt C++ avec à la clé tout un tas de justifications : vous verrez c'est facile, on fait les interfaces à la souris, c'est multiplateforme, multilingue (multitout là c'est moi qui rajoute). C++, c'est de la POO Ah, bien, et alors ? Ben , c'est simple il y a des objets avec des fonctions membres privées, publiques, des signaux, des slots privés, publiques et puis tiens, les objets héritent les uns des autres. Tout est super documenté... Et là il nous sort un pdf de 600 pages "QT 4 et C++ programmation d'interfaces GUI" (c'est en français en plus !)
Quelque temps après, réunion du groupe, puisqu'on change de langage, on en profite pour changer de Forge, on va utiliser Redmine (J'ai testé c'est super ! qu'il nous fait le chef) et puis comme dépôt, on va passer à Bazaar (J'ai testé c'est super ! qu'il nous re-fait le chef) Alors nous on est gentil, on le croit, mais les dos se voutent, on échange des regards en coin. Alors il nous explique tout sur son paperboard (comme ils disent dans les grosses boites). Et nous, on repart gonflé à bloc en se disant que de toute façon TCL-TK c'est dépassé, pas beau, bouh que c'est vilain !
De retour à la maison, je lance Qt Creator : chouette, il y a plein d'exemples, il y en a même des simples que je comprends. Bon ! que je me dis, c'est le moment de se lancer. Je décide donc (innocent que je suis) de porter en Qt C++ la calculette capricieuse que David Lucardi a réalisée en TCL-TK. Ça n'a pas l'air trop complexe à concevoir...
Première ligne, l'éditeur crache tout rouge. Il dit des trucs en anglais mais c'est un idiome que je ne connais pas ! Ah oui, il faut déclarer les fonctions dans un fichier d'entête (là, je fais le malin : avant je ne rigolais pas). Bon l'éditeur se calme, on tente une compilation : alors là, c'est Versailles le 14 juillet, il y a du rouge (plein) et du jaune (beaucoup : le jaune ça à l'air moins grave donc je laisse). Là, les oreilles du chef ont du siffler car je connais au moins autant d'imprécations que le compilateur...
après vint le projet...¶
Petit à petit, les choses se mettent en place : on a un accès à Redmine, puis des codes pour commiter son code, la calculette commence à calculer, et grâce à Qt Designer elle a pris des couleurs. Mais, je sens le malaise poindre : mon code ne ressemble à rien ou plutôt il ressemble à un gros paquet de nouilles (la honte soit sur moi).
Malgré tout, je progresse et la calculette aussi ! Jusqu'à ce que toutes les fonctions prévues soient implantées.
Pendant ce temps, j'ai beaucoup lu, la doc de Qt bien sûr, mais aussi des trucs plus théoriques sur la programmation. Lors RMLL 2010, l'équipe s'est retrouvée et on a pu échanger nos expériences. Là, François m'a fichu un coup en me demandant à quoi elle pouvait bien servir cette calculette bleue et jaune que j'étais tout fier d'exhiber. Il a bien failli manger un clavier ! Je m'en suis sorti en disant que c'était plus un exercice pour apprendre à programmer. Lui, il fait autrement pour apprendre : il suit un tuto (bien fait d'ailleurs !). Voilà deux façons d'apprendre à programmer. Il y en a une autre : Philippe est en stage de fin de formation IUT, ça a l'air d'avoir du bon quand même : il va plus vite que nous et peut nous expliquer plein de choses (ce qui au passage lui fait du bien de pouvoir les formuler à nous autres pauvres béotiens).
Donc, après avoir beaucoup lu et échanger avec mes coreligionnaires, je sens que le sort de ma calculette va être vite réglé...
puis le doute !¶
Copie d'un mail envoyé à la liste de dev (donc, il y a des redites (en italique) avec ce qui est plus haut )
Dans le train ! J'ai perdu 4 heures à la gare Montparnasse à cause d'un arbre tombé sur les voies...
Enfin pas vraiment perdu car suite aux différentes expériences que j'ai pu accumuler depuis que le développement des logiciels du Terrier est passé à QT C++, je n'ai pas le temps de m'ennuyer :-$
Les pointeurs et autres concepts comme l'héritage et le polymorphisme m'ayant un peu fatigué les neurones aujourd'hui, je prends le temps, entre Bordeaux et Dax, d'écrire quelques pensées.
Dans le développement de ma foutue calculette, dont je ne suis même pas sûr qu'elle soit très intéressante(merci François), il y a eu plusieurs étapes. Je citerai en vrac : la découverte de QT créator, l'apprentissage de la syntaxe, la familiarisation avec les concept de C++...
Dans mon cas, qui diffère de la façon de faire de François, je suis parti d'un projet à réaliser : la calculette capricieuse (d'après David Lucardi TCL-TK). Si dessiner l'interface graphique ne fut pas trop difficile avec Qt Designer, la première ligne de code m'en a fait baver : un compilateur, c'est pire qu'un adjudant ! Je me suis méfié pour la deuxième, mais bon C++ ne se laisse pas faire sans sueur !
Petit à petit, (tout petit) j'ai progressé O:-) Alleluia ! J'arrive à produire du code qui fonctionne : c'est déjà pas si mal, non ? Mais plus je lis de bouquins et tuto sur le sujet, plus je m'aperçois que mon truc, même s'il est fonctionnel n'est qu'un plat de nouilles (ceux qui ont déjà programmé en Basic me comprendront !)
Alors, n'étant pas très fier de mon travail, quand Éric me tanne avec QSettings, je me dis qu'il est temps de tout bazaarder. Enfin, non ! Je reprends tout à zéro (pas de copier-coller) et je recode ma ..... de calculette. Et là, magie de l'apprentissage, (ou autre chose), j'arrive à faire des trucs qui ressemblent à ce que je vois ailleurs. Quatre à cinq fois moins de code pour la même chose, les variables globales disparaissent, des signaux qui appellent des slots, les pushbutton qui stockent des attributs dans des "variables dynamiques"... (je ne sais pas où!). Et le compilateur qui me fout la paix (enfin pas toujours, faut pas rêver !)
Je peux en profiter pour documenter le code, pour moi, mais aussi pour les autres (j'espère !) et faire des commit dans mon dépôt local (de toute façon, il n'y a pas de wifi dans le train).
Je sens que pour moi, une étape a été franchie, il y en aura d'autres et des ardues... Mais il me reste un petit goût d'inachevé : en effet, je fais ça tout seul dans mon coin (malgré les dépôts) et il me manque le travail en binôme tel que décrit dans les concepts d'eXtrême Programming... (Je ne mets pas de liens exprès). Mais il y a quand même les listes dev et QTfr.
Et l'espoir !¶
J'aime bien ce que m'a dit Éric (c'est lui le chef) :
Super Jean-Louis,
le chemin parcouru est tout aussi important que le résultat ! Tu
comprends sans aucun doute mieux mon concept de "prototype fonctionnel"
qui fait horreur à tout développeur "officiel"
Oui, c'est un concept qui me va bien !
Et ensuite, je me sens important !
celà dit, tant que t'es encore un peu "neuf" dans le domaine, n'hésite
pas à rédiger exactement ce genre de mail pour qu'on puisse faire une
sorte de petite histoire du développeur qui vient à qt/c++ pour tous les
prochains histoire qu'ils ne se découragent pas au bout de quelques
nouilles (indigestes) et qu'ils comprennent que l'étape "plat de
nouilles" est une étape possible puisque certains de leur illustres
ainés sont passés par là (imagine toi dans 4 ans) :o) je dis ça d'une
manière humoristique mais je suis tout de même sérieux, ça aide de
savoir par où sont passés les autres quand on n'est qu'un petit scarabée.
Bon alors, je vais essayer de continuer sur cette voie pendant que Philippe nous donne ses tours de mains dans une autre rubrique (ça aussi c'est important !)