Ruby Full Stack - Semaine 2 chez THP

# Jour 1

Aujourd’hui, c’est le premier jour de la formation "Ruby Full Stack". Après une première semaine d’intro où on a appris le HTML et CSS, on passe maintenant aux choses sérieuses : Ruby.

Comme d’habitude, je me connecte à 9H00 sur le Discord pour retrouver mon groupe après un premier week-end reposant.

Cependant, il nous manque une personne. Un membre du groupe ne s’est pas connecté. Tant pis, on continue à 5.

Tout le monde se dit bonjour, et la journée peut commencer.

Aujourd’hui, c’est une journée plutôt tranquille. On doit seulement installer Ruby, Ruby on Rails, ajouter une clé SSH sur notre compte Github et installer Heroku CLI (mais on doit aussi se créer un compte sur Heroku).

Pour ça, THP nous donne toutes les indications… que je n’ai pas suivi, bien évidemment.

J’avais déjà trouvé, avant de commencer la formation, un super tutoriel sur le site GoRails (opens new window) qui explique tout bien comme il faut. Je savais que je n’avais pas de problème avec ce tutoriel que j’avais déjà suivi à la lettre de nombreuses fois.

J’en avais parlé à mon groupe, et finalement, tout le monde l’a utilisé. Ça c’est très bien passé !

Alors par contre, j’ai été étonné de voir que dans THP, on nous propose d’installer Rails 5. Je me demande pourquoi avoir choisi cette version alors que la version 6 est disponible. Peut-être que j’aurais pas réponse plus tard !

En attendant, on a bien rigolé quand j’ai indiqué les commandes à entrer dans le terminal pour installer tout ça. Alors qu’un membre du groupe disait qu’il fallait faire les commandes une à une, moi je lui disais qu’on pouvait les faire toute à la suite (en copiant-collant les commandes présentes sur le site), que ça irait plus vite. Un autre disait qu’il ne fallait jamais faire des commandes que l’on ne connaissait pas, que ça pouvait être dangereux. Du coup, celui qu’on aidait, à pas eu super confiance et hésitait. Mais au final, tout c’est bien passé et on a bien rigolé. Surtout quand il entrait son mot de passe et que, trois fois de suite, le terminal lui disait "Sorry, try again!".

Ah oui, parce qu’aussi, je ne sais pas comment il a fait pour installer sa machine virtuelle Xubuntu, mais quand il a redémarré, il n’avait plus aucun fichier. Heureusement qu’on sauvegarde nos travaux sur Github !

Bref, la journée se termine, j’ai dû partir un peu plus tôt parce que j’avais un rendez-vous, mais tout le monde avait une installation de Ruby et Rails.

Prêt pour demain !

# Jour 2

On se connecte à 9H00, et la personne que l’on avait pas vue hier n’était toujours pas là. On commence à se dire qu’elle ne viendra plus.

Mais c’est embêtant, car aujourd’hui, c’est un jour validant. Et pour ces exercices, il faut être par duo. Un qui code, l’autre qui regarde, tout en échangeant. Ensuite on inverse sur les exercices suivants. C’est très intéressant comme exercice. Bien sûr, il fallait se mettre avec des personnes qui avaient à peu près le même niveau que nous pour que ce soit efficace.

On s’est donc séparé en groupe de 2. Mais voilà, on était 5 dans notre groupe… Il y en a donc un qui a dû chercher sur le Discord quelqu’un de disponible.

Heureusement, il a très vite trouvé. Beaucoup d’autres Moussaillons étaient dans le même cas. Ils ont donc pu travailler ensemble.

Avec mon coéquipier, nous travaillons sur les exercices du jour. Il fallait faire des petits programmes en Ruby. Bien sûr, on avait des liens vers des cours sur ce langage, qu’il fallait étudier avant de commencer.

Et là, je me dis que THP, c’est vraiment super pour l’aspect communautaire, où tout le monde travail et progresse ensemble.

Mais revenons sur ces exercices. Les premiers étaient assez basiques : afficher un message via puts, écrire certains scripts qui contiennent volontairement les erreurs indiquées (l'oubli d'une apostrophe par exemple) et voir les erreurs retournées, faire des calculs mathématiques, demander le nom de la personne pour lui dire "Bonjour !", etc.

Bref, des exercices assez simples, mais qui permettent de se faire la main.

Ensuite, ça se complique un petit peu. Par exemple, un programme qui demande l'année de naissance de l'utilisateur et lui retourne l'âge qu'il avait en 2017, ou encore un programme qui demande l'année de naissance de l'utilisateur et qui va afficher chaque année depuis son année de naissance jusqu'à aujourd'hui tout en annonçant l'âge qu'il avait cette année-là.

Mais ceux qui m'ont le plus intéressé, c'est les deux derniers où il fallait, pour le premier, faire une moitié de pyramide de X étages (à demander à l'utilisateur), et pour le second, faire une moitié de pyramide de X étages, mais cette fois-ci, inversée.

Quelques exemples de rendu :

Exercice 1

#
##
###
####

Exercice 2

   #
  ##
 ###
####

On a fini les exercices assez rapidement. On en a profité pour discuter de choses diverses et variés. Mon coéquipier m'a aussi proposé de travailler sur son projet pour la fin de formation. Parce que oui, à la fin de la formation, on doit proposer un projet, trouver un groupe, et réaliser le site.

Comme je n'avais pas de projet en tête, et que le sien était très intéressant, j'ai dit "OK !". Reste à voir si on trouvera d'autres personnes ensuite... Mais restons concentrés sur la formation !

Après une longue discussion, on a rejoint les membres de notre groupe qui sont partis de leur côté pour dire au revoir, et se donner rendez-vous le lendemain à 9H.

La journée s'est donc très bien passée. En revanche, je regrette un peu que notre groupe se soit séparé en plusieurs petits groupes. C'est peut-être plus efficace pour apprendre, et même si j'apprécie beaucoup mon coéquipier, je trouve ça moins sympas que d'être tous en groupe et avancer ensemble. Ça avait plutôt bien fonctionné pour la semaine d'intro.

# Jour 3

Aujourd'hui, comme à chaque fois après une journée validant, c'est le jour des corrections !

Je rejoins donc le Discord à 9H00, comme à mon habitude.

Cette fois-ci, on a pas beaucoup eu le temps de parler, car chacun avait des Moussaillons à corriger assez rapidement.

Je lance un avis de recherche sur la chaîne dédiée et je reçois des messages privés en même temps. Ce sont les Moussaillons que je dois corriger !

Je corrige donc une première personne, puis une seconde. Encore une fois, les participants à THP sont très sympas et tout le monde s'entend bien. J'ai pu apprendre des trucs.

Vient ensuite mon tour, ou je dois être corrigé. Je crois cependant que j'ai pris une mauvaise habitude : celle d'avoir constamment peur d'avoir oublié de rendre le projet et de perdre un Joker. C'est bête, mais je vérifie au moins 3 ou 4 fois que j'ai bien rendu le projet et que le lien est valide.

Cette fois-ci, tout est OK ! Les correcteurs ont pu accéder à mon code, le tester, et tout s'est très bien passé. J'ai eu des "Oui" partout !

Mais mon coéquipier n'y est pas pour rien, il faut bien l'avouer. Merci à toi !

Comme la dernière fois, les corrections ont pris la matinée.

À midi, on se retrouve, on parle des corrections rapidement, puis chacun part manger et on se donne rendez-vous à 14H00.

Après une petite sieste, je me reconnecte à 14H00 et je rejoins mon coéquipier (Oui, c'est toujours le même – il faut croire qu'il m'aime beaucoup 🙃 ).

Le cours d'aujourd'hui reprend les bases de Ruby, puis explique les "méthodes", que je connaissais déjà sous le nom de "fonctions" en PHP. D'ailleurs, le fait que ça s'appelle "méthode" en Ruby me dérange un peu, car pour moi, une "méthode", c'est dans une classe !

Mais si j'ai bien compris, c'est parce qu'en Ruby, tout est objet !

Prochaine étape, demander les accès API à Twitter. Bon, c'est bien indiquer dans le cours qu'on est pas sûr de les avoir, car Twitter n'accepte pas n'importe qui. J'ai donc rempli le formulaire Twitter, sans trop savoir ce que je devais répondre. Il y avait plein de questions du genre "Allez-vous faire ceci ?". Bah... heu... peut-être ? J'en sais rien moi ! On m'a pas dit ce que j'allais faire avec ces accès. Enfin si, un bot. Mais moi, j'ai jamais fait ça, donc je sais pas ce que je devais répondre.

J'ai répondu un peu au hasard, et maintenant, je croise les doigts.

Pour terminer la journée, on devait, en groupe de deux (donc toujours avec le même coéquipier), faire des exercices en Ruby, comme afficher une pyramide complète, afficher un losange, et créer un semblant de système d'authentification.

C'était super sympa ! Et le travail en équipe, j'adore !

Voilà une autre journée de terminer.

# Jour 4

Vous connaissez le rituel : 9H00, je rejoins le groupe.

Encore une fois, on discute un peu, puis on se sépare de nouveau pour former des groupes de deux.

Et là, je me dis que mon coéquipier, il doit vraiment beaucoup m'aimer !

Non, en vrai, c'est juste qu'on s'est mis ensemble parce qu'on a à peu près le même niveau, et que ça marche très bien ensemble.

La ressource du jour, c'est "Comment aborder un problème en développement informatique". L'algorithmique en fait.

On nous explique comment découper un problème en plusieurs problèmes plus petits.

Ça, c'est un cours que j'attendais avec impatience ! Ça fait des années que je code, du matin au soir, que je teste des trucs, que je vais jouer avec des technos à droite et à gauche, mais de tout ce temps-là, je ne me suis jamais entraîné à résoudre des problèmes.

Ah oui, dans le métier de dev', le code c'est pas le principal. Un dev', il résout des problèmes. Le code, lui, n'est qu'un moyen d'y parvenir. Et je sais coder (je crois) mais je ne sais pas résoudre des problèmes.

La seule comparaison qui me vient en tête, c'est "Je sais taper avec un marteau, mais je sais pas enfoncer des clous". Ouais, c'est pas terrible comme phrase…

Mais justement, maintenant, je sais enfoncer des clous ! Enfin, je veux dire, je sais résoudre des problèmes (du moins ceux qui sont pas trop compliqués).

En lisant le cours, je m'aperçois qu'on nous explique comment on aurait pu résoudre le problème de la pyramide.

Et en utilisant la technique de "J'ai un gros problème, paf ! Je l'explose en plus petits problèmes", ça marche super bien !

Après un rapide cours sur les Hash, il y a le projet du jour. Et devinez quoi ? C'est encore un jour validant !

Là, on travaille avec un nombre assez important de données, et on doit effectuer plusieurs opérations sur celles-ci.

Les trier, les compter, récupérer la position d'un élément, etc.

C'était sympa ! Et à deux, on a bien avancé.

Finalement, on a terminé assez tôt. On a été voir les autres membres du groupe pour demander comment ça allait.

Tout allait bien !

Je suis donc parti, mais je leur ai dit que s'ils avaient besoin d'aide, je serais là !

On est un groupe soudé ou pas ?

# Jour 5

Pour ce dernier jour de la semaine 2 à THP, on se retrouve encore une fois à 9H00.

Cette fois-ci, le cours nous présente plusieurs sites pour faire des Katas. CodeKata, CodeWars, CodingGame, ...

Les Katas, ce sont simplement des exercices en programmation pour s'entraîner avec un langage et pour s'améliorer dans la résolution de problèmes.

C'est parfait pour moi !

Le projet du jour et donc de faire 11 Katas. Pour cela, THP nous les a sélectionnés avec soin. On nous recommande les Katas de niveau 7 sur Codewars. Avec mon coéquipier, on a fait les 4 premiers, puis on a décidé d'arrêter là et de continuer ce weekend.

La journée était donc assez coole. Mais j'ai pu quand même apprendre un truc important : Que je fonce toujours tête baissée sur le code, sans réfléchir un minimum avant.

Quand je vois un problème à résoudre en programmation, j'ai toujours une idée de comment le résoudre. Mais mon coéquipier m'a expliqué quelque chose qui parait bête, mais qui est tout le même important à comprendre.

En effet, lorsqu'on a une idée de comment résoudre un problème, on se focalise sur celle-ci sans jamais la remettre en question. Pour ces exercices, j'avais toujours une idée et j'attaquais directement le code sans me demander si cette solution était vraiment bonne, où si je pouvais faire mieux en faisant autrement.

Le soir, quand j'ai continué seul de faire des Katas, j'ai encore une fois fait la même erreur. Mais cette fois-ci, je m'en rends compte. Maintenant, je n'ai plus qu'à suivre ses conseils et à me dire, avant de commencer : "OK, donc je dois avoir ce résultat. Que devra faire mon programme pour y parvenir ?".

En fait, il faut essayer d'écrire en français les étapes que doit faire notre programme pour parvenir au résultat, avant de commencer à coder quoi que ce soit. Et ça, c'est super efficace comme technique !

La journée se termine, et j'arrête de faire les Katas.

Le soir, je reçois un message sur Discord d'un des membres du groupe. Il n'arrive pas à trouver comment faire un des Katas présenté dans le cours. Je l'aide donc à le résoudre, sans lui donner la solution (sinon il ne progresse pas).

Après l'avoir aidé, je termine la journée, vers 23H30. Bon, j'ai pas codé jusqu'à cette heure-là hein, j'ai fait une longue pause entre deux.

Maintenant, c'est le Week-end, je vais pouvoir faire plein de Katas avant d'attaquer la prochaine semaine !