{"id":2490,"date":"2013-11-01T18:39:52","date_gmt":"2013-11-01T16:39:52","guid":{"rendered":"http:\/\/j-mad.com\/blog\/?p=2490"},"modified":"2013-11-01T18:39:52","modified_gmt":"2013-11-01T16:39:52","slug":"code-retreat","status":"publish","type":"post","link":"https:\/\/j-mad.com\/blog\/2013\/11\/01\/code-retreat\/","title":{"rendered":"Code Retreat"},"content":{"rendered":"<p>Il y a quelques mois (en juin), j&#8217;ai particip\u00e9 \u00e0 une code retreat sur Lyon. Autant dire que pour prendre un TGV a 6h du mat, je devais \u00eatre motiv\u00e9\u00a0!<\/p>\n<p>Avant de vous parler plus du pourquoi c&#8217;est bien une code retreat, je vais quand m\u00eame vous expliquez ce que c&#8217;est.<\/p>\n<p>Prenez un nombre pair de personnes. Prenez un probl\u00e8me d&#8217;algo simple mais pas trop. Faites des sessions de 45 minutes, o\u00f9 les gens travaillent par paire (mais avec une seule machine, du vrai pair programming quoi) pour essayer de &#8216;r\u00e9soudre&#8217; le probl\u00e8me en TDD. La premi\u00e8re session faite la simple, sans contrainte, puis rajouter des contraintes genre &#8216; pas de boucle, vous ne pouvez pas parler , vous ne communiquez qu&#8217;\u00e0 travers les tests, une fonction fait 5 lignes max&#8217;, etc etc ..<\/p>\n<p>A la fin des 45 minutes, vous supprimez votre code, faites une r\u00e9trospective, vous trouvez un\/une nouveau bin\u00f4me et recommen\u00e7ait l&#8217;op\u00e9ration, avec un nouvelle contrainte.<\/p>\n<p>Ce qu&#8217;il y a de rigolo, c&#8217;est qu&#8217;\u00e0 chaque session vous pouvez (c&#8217;est conseill\u00e9) changer de langage de programmation. Vous pouvez commencer avec du python, puis faire une session PHP, puis ruby, puis C#, etc \u2026<\/p>\n<p>Pour tout dire, lors de la code retreat que j&#8217;ai fait, je me suis m\u00eame retrouv\u00e9 \u00e0 faire, pendant une de mes sessions du C# (et ben j&#8217;ai pas aim\u00e9:) ) .<\/p>\n<p>mais \u00e7a sert \u00e0 quoi de passer 1 journ\u00e9e \u00e0 faire X fois la m\u00eame chose, avec des gens diff\u00e9rents, et de jeter son travail \u00e0 chaque fin de session\u00a0?<\/p>\n<p>Alors, si vous lisez de la doc sur la question ( o\u00f9 ce<a href=\"https:\/\/jeremy.wordpress.com\/2013\/10\/27\/participer-a-une-coderetreat\/\" target=\"_blank\"> billet<\/a> de j\u00e9r\u00e9my qui pr\u00e9sente bien les choses), vous comprendrez que c&#8217;est une excellente forme d\u2019entra\u00eenement. Pas de pression de la livraison (vu qu&#8217;on jette tout), pas de pression du &#8216;\u00e7a va partir en prod&#8217; , vu que l&#8217;on jette tout. Pas du pression de &#8216;il faut finir&#8217;, vu que bon, tout va \u00eatre jeter et qu&#8217;il de toute fa\u00e7ons, ce que vous diront les orga au tout d\u00e9but, c&#8217;est qu&#8217;il ne faut pas chercher \u00e0 finir, parce qu&#8217;en 45 minutes, on ne peut pas. Ce n&#8217;est pas le but de toute fa\u00e7on, le but c&#8217;est de s&#8217;exercer.<\/p>\n<p>Donc oui, vous allez voir, ca sera une excellente forme d\u2019entra\u00eenement. Mais pas seulement. Enfin, pour moi, cela ne fut pas seulement une session d&#8217;entra\u00eenement super int\u00e9ressante.<\/p>\n<p>J&#8217;ai trouv\u00e9 que cela apprenait des choses sur soi m\u00eame, pas mal et sur notre m\u00e9tier en g\u00e9n\u00e9ral. Histoire de ne pas faire trop long, je vais simplement donner deux exemples de ce que j&#8217;ai appris lors de cette journ\u00e9e.<\/p>\n<p>Sur moi m\u00eame tout d&#8217;abord.\u00a0 Ben oui. La premi\u00e8re session, je l&#8217;ai faite avec quelqu&#8217;un qui n&#8217;avait fait que tr\u00e8s tr\u00e8s peu de python et qui voulait s&#8217;y &#8216;remettre&#8217; le temps d&#8217;une session. Du coup on avait pas trop la barri\u00e8re du langage de prog qui est connu que par l&#8217;un des deux et on sait dit allez on y va. On a commenc\u00e9 en TDD comme c&#8217;est impos\u00e9. Et puis on voyait le temps d\u00e9filer et le code avan\u00e7ait et \u00e0 un moment, ben c&#8217;\u00e9tait possible d&#8217;aller vite et de finir. Oui le but est pas de finir, c&#8217;est pas fait pour, bla bla bla. Mais on pouvait finir. Et du coup, ben on sait dit &#8216;ok, on finit et on \u00e9crit les tests apr\u00e8s&#8217;. Et on a finit.. mais quand les 45 minutes ont sonn\u00e9s, ils nous manquait .. 5 ou 6 lignes de tests pour prouver qu&#8217;on avait fini \u2026&#8217; Et on a du faire un rm -rf * \u2026 Donc on a pas fini. Et on \u00e9tait d\u00e9go\u00fbt\u00e9. Parce qu&#8217;on \u00e9tait si proche ..\u00a0 Mais pour arriver si proche du but (qui n&#8217;est m\u00eame pas le but \u00e0 atteindre), on avait du contourner les r\u00e8gles. En se disant &#8216;bon tant pis allez, on fait comme si&#8217;.<\/p>\n<p>Je ne pensais pas qu&#8217;il me serait aussi facile de l\u00e2cher la consigne pour le plaisir d&#8217;atteindre un but auto fix\u00e9, juste par &#8216;\u00e9go&#8217;.<br \/>\nEt sur notre m\u00e9tier et la fa\u00e7on de le faire. Il y a quelques temps, j&#8217;avais suivi \/ lu quelques conf\u00e9rences qui parlait de l&#8217;importance de la documentation pour du code (mais de la vrai doc, pas juste des commentaires dans le code). Et sur le fait que la doc pouvait m\u00eame \u00eatre plus importante que des tests. Et qu&#8217;\u00e0 choisir entre pas de tests ou pas de doc, il valait encore mieux ne pas avoir de doc.<\/p>\n<p>Sur le coup, j&#8217;avais trouv\u00e9 \u00e7a bizarre, voir plus. Apr\u00e8s tout la doc c&#8217;est le code non\u00a0? Et les tests\u00a0? Mais j&#8217;avais entam\u00e9 une r\u00e9flexion sur le sujet.<\/p>\n<p>Et cette code retreat a \u00e9t\u00e9 un des \u00e9l\u00e9ments qui m&#8217;a fait comprendre que rien ne pouvait remplacer la doc. Et s\u00fbrement pas les tests. Nous avons en effet du faire une session en muet, o\u00f9 la seule communication entre moi et mon bin\u00f4me c&#8217;\u00e9tait les tests. C&#8217;est \u00e0 dire qu&#8217;un des membres du bin\u00f4me \u00e9crivait un test, passait le clavier \u00e0 son comp\u00e8re, celui-ci devait \u00e9crire le code qui passait le test puis un nouveau test, et ainsi de suite \u2026.<br \/>\nCe fut pour notre bin\u00f4me, mais pour tout les bin\u00f4mes en g\u00e9n\u00e9ral, une vraie b\u00e9r\u00e9zina. Et pourtant le probl\u00e8me a r\u00e9soudre \u00e9tait simple, on le connaissait tout les deux. Mais l&#8217;enfer ..<\/p>\n<p>Au final, les tests c&#8217;est bien pour tester. Pour expliciter des d\u00e9cisions de design de code, des choix d&#8217;algo, un parti pri m\u00e9thodologique, j&#8217;en suis de plus en plus convaincu, c&#8217;est tout pourri et une vrai doc, c&#8217;est mieux\u00a0!<\/p>\n<p>Pourquoi je vous parle de cela maintenant, en octobre\u00a0? Parce que j&#8217;ai pas vraiment eu (pris) le temps d&#8217;\u00e9crire ce billet avant mais que l\u00e0,\u00a0 une code retreat s&#8217;organise \u00e0 Marseille, le 14 d\u00e9cembre. Cette retreat du 14\/12 \u00e9tait le petit aiguillon qui me manquait pour \u00e9crire un billet sur le sujet.<\/p>\n<p>Parce que m\u00eame si je ne pourrais malheureusement pas y \u00eatre pr\u00e9sent (et \u00e7a me chagrine \u00e9norm\u00e9ment), je ne pouvais pas ne pas expliquer pourquoi c&#8217;est bien et pourquoi il faut y aller \ud83d\ude42<\/p>\n<p>(Juste une derni\u00e8re chose, les code retreat sont des moments o\u00f9 il faut savoir preuve d&#8217;humilit\u00e9. Y aller en mode &#8216;ninja&#8217;, &#8216;je vais leur apprendre comment il faut coder moi \u00e0 ces codeurs du dimanche&#8217;, sans arriver \u00e0 se questionner sur ses pratiques et sur leur am\u00e9liorations possible, n&#8217;est pas une bonne chose. Voir une tr\u00e8s mauvaise. Parce que vous allez vous y ennuyer et ne rien en apprendre, mais en plus vous allez occuper la place de quelqu&#8217;un qui aurait pu en ressortir avec un vrai gain \u2026 )<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Il y a quelques mois (en juin), j&#8217;ai particip\u00e9 \u00e0 une code retreat sur Lyon. Autant dire que pour prendre un TGV a 6h du mat, je devais \u00eatre motiv\u00e9\u00a0! Avant de vous parler plus du pourquoi c&#8217;est bien une code retreat, je vais quand m\u00eame vous expliquez ce que c&#8217;est. Prenez un nombre pair &hellip; <a href=\"https:\/\/j-mad.com\/blog\/2013\/11\/01\/code-retreat\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Code Retreat<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4],"tags":[],"class_list":["post-2490","post","type-post","status-publish","format-standard","hentry","category-developpement"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p12cdp-Ea","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/2490","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/comments?post=2490"}],"version-history":[{"count":1,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/2490\/revisions"}],"predecessor-version":[{"id":2491,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/posts\/2490\/revisions\/2491"}],"wp:attachment":[{"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/media?parent=2490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/categories?post=2490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/j-mad.com\/blog\/wp-json\/wp\/v2\/tags?post=2490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}