Pourquoi je prends du temps lors de la prise en main d'une technologie ?
Tags: webdev, beginners, computerscience, softwaredev
Published: 2020-09-13 18:29:05

_Hi. Je m'appelle Tawaliou et ceci est mon premier article en tant que développeur logiciel(**junior** 😎). Alors je vous explique un peu pourquoi je prends parfois 1 à 2 mois voire plus pour apprendre une nouvelle technologie, les avantages de cette manière de faire. Dans la suite techno fait référence à language de programmation ou bibliothèque._

#### Une nouvelle techno ? Un nouveau language de programmation ? 
Parfois à cause de ses orientations en tant que développeur, l'on choisit d'apprendre de nouveaux languages, de nouveaux frameworks, bref rester productif, être à la page et pour le fun 🤗. Dans mon cas c'est simple: je peux prendre 2 mois et bannalement 4 mois pour apprendre une nouvelle techno(language ou bibliothèque). Pourquoi?
1. Pour avoir assez d'informations sur la techno:
   * communauté et popularité,
   * projets l'utilisant,
   * l'historique de la techno;
2. Pour me familiariser avec les concepts de base du language, la syntaxe et la manière de présenter le code dans cette techno; 
3. Pour avoir une vue panoramique des fonctionnalités de la techno et de ce qu'elle est habiletée à faire et donc adaptée à mes besoins ou pas;
4. Pour (**très important**) me familiariser avec sa documentation officielle.

##### 1. Avoir des informations sur la techno
Souvent étant donné la popularité + communauté + l'historique d'une bibliothèque on se lance dans son apprentissage parce qu'elle répond déjà à certains de nos besoins. Prenons l'exemple de **ReactJS**. Je cherchais une bibliothèque front-end assez puissante, légère et pas trop compliquée. Donc fallait choisir entre: VueJS - React - Angular. Je me suis alors basé sur la communauté très grande autour de ReactJS et le fait qu'il soit supporté par une des entreprises que j'apprécie, Facebook. Mais Angular aussi est supporté par Google. Simple j'ai passé plusieurs semaines à faire des confrontations de commentaires et disons que j'ai commencé avec de petits bouts de code mais rapidement j'ai trouvé React plus abordable. Donc imaginez le temps mis. De plus, pour moi l'historique derrière une techno est source de motivation car tu essaies d'imaginer le niveau de ses développeurs, du travail abattu et des échecs et corrections apportées pour avoir une version stable et tu te dis waooh j'aimerais être comme eux: une techno utilisée par des milliers de dev, cela doit être fait par des développeurs très bons. _Cela te pousse à vouloir comprendre en profondeur la techno, à réaliser des petits TPs avec et donc à prendre du temps avec!_

##### 2. Se familiariser avec les concepts de bases du language et sa syntaxe
Première remarque à ce niveau: quand je fais une prise en main en moins d'un mois (*sans oublier les cours à l'université*); c'est sûr que je ne vais pas apprécier le language soit à cause de la syntaxe soit à cause de la manière de faire certaines fonctions.
Preuve vivante: PHP et Go 🤣. Parce que j'avais un background en C++ (mon language préféré) j'ai fait la prise en main du PHP en moins de 3 semaines. Super et tout mais bof j'ai détesté plusieurs choses dans ce language ce qui m'a fait perdre de vue la richesse de ce language:
* précéder **$** du nom des variables à tout moment (la galère 😫)
* une masse incroyable de fonctions prédéfinies dans le language pour résoudre des problèmes et l'inconformité dans la syntaxe de certaines fonctions: les fonctions exécutant des rôles similaires devraient être nommées de la même manière....
Gbich, Erreur de erreur. J'ai négligé le language. Il m'a fallut m'orienter en premier lieu dans l'IoT pour voir qu'il est très important et utile et même facile à utiliser (avec des précautions) et en deuxième lieu dans le web pour voir que je ne pouvais pas l'éviter facilement. Pour Go même chose: moins d'un mois je pouvais compiler des codes de calculs mais j'ai vite lacher prise à cause de la syntaxe que je traitais dans le temps de **Guingois**. Comment un language comparé au C pouvait avoir une telle syntaxe assez moche, c'était mon avis il y a 1 an. Mais maintenant je me dis que j'aurais mieu fait de me familiariser avec ce language pour mieu le découvrir. En 3 semaines tu ne comprends pas forcément le bien fondé d'une techno.
Par contre avec le C++ dont la réputation en terme de difficulté n'est plus à démontrer, j'ai avec le temps apprécié le language et continué à le suivre: j'ai pris 1an pour sa prise en main. _Ce qui m'a permis de comprendre le pourquoi de certaines syntaxes soit pour cause de compatibilité avec le C soit pour dissiper des doutes, bref faciliter la vie du dev._

##### 3. Pour avoir une vue panoramique des fonctionnalités de la techno 
Je ne vous demande pas de tout savoir sur le language ou la bibliothèque, non. Je ne vous demande pas d'en devenir des Chuck Norris en 1 an, non et de toute façon c'est pas possible 🤣. Mais je demande d'en savoir assez sur la techno: ses **pros** et **cons**. Ses atouts, et une idée de jusqu'où elle peut vous amener. Et pour ça faudra beaucoup lire, se documenter sur la techno et s'exercer et ceci lors de la prise en main. Peut être que ce que vous apprendrez ne vous sera pas utile dans 1 an mais elle vous permettra de vite vous en sortir devant des situations compliquées. 
Exemple: Récemment durant mon stage à [**YoupiLab**](http://youpilab.com/) (Bénin 😎) je devrais faire un petit dashboard en HTMl+CSS+JS pour un projet IoT. Je devais afficher une liste de donner que l'utilisateur allait envoyer à une base de données. Pour ne pas me fatiguer j'ai basculé la majorité du code vers le JS (affaire de front-end 🤣). Mais un problème se posait: Je voudrais supprimer une liste d'éléments pour en afficher une autre mais avec des propriétés similaires sans recharger la page. Bref je voulais garder une référence sur l'élément supprimé: Basique direz-vous, je sais. Mais je ne savais pas trop comment faire la recherche sur Google et comment m'y prendre. Alors de proche en proche j'y suis arrivé sans Googler.:
* j'utilise **removeChild()** pour supprimer les éléments.
* il y a 2 ans dans un TP lors de la prise en main de JS j'avais lu que **removeChild()** garde une référence de l'élément du dom supprimé. Bref ce que je cherchais était en ma possession et avec quelques **console.log()** j'ai eu ma réponse. C'est suite à ce fait que j'ai décidé d'écrire cet article 🤣. _Parce que j'avais lu ça il y a deux ans, je savais qu'il avait un comportement pareil; je ne l'ai néanmoins jamais testé. J'ai fait au moins 4 mois avec le JS._

##### 4. Le plus gros point: me familiariser avec sa documentation officielle
Pour moi la documentation d'un language est la meilleure chose que j'ai trouvée en programmation informatique. Même quand j'ai la flemme de coder, de travailler; il y a la documentation des technos que j'utilise. Donc simple je m'amuse à les ouvrir, à les lire, à comprendre comment cette documentation est structurée et comment m'y retrouvée facilement si j'ai des besoins. Je lisais même des notions que je n'aborderai alors que 2 ans plus tard; comme les templates et la STL il y a 3 ans avec le C++. Une documentation est je dirai ce que les auteurs ont légué aux utilisateurs pour atteindre leur but. En plus de donner réponse à des questions profondes, elle fournit des exemples de code qui éclairsissent dans beaucoup de situations. De plus la docmentation te montre qu'il faut bien faire son travail à tel point de décrire en détail toutes les fonctionnalités de la techno, ce qui n'est pas aisée; car une chose est de créer la techno pour résoudre un problème, l'autre chose est de l'expliquer à ceux qui doivent l'utiliser, comment l'utiliser pour résoudre leur problème.
###### Vous allez me demander mais s'il y a google pourquoi se gêner avec la doc qui peut être difficle à comprendre ?
Simple: je suis au Bénin (Afrique) la connexion internet ne facilite pas vraiment le taf en tant que dev, un peu chèrs, puis _lente_ à tel point que la création d'un projet CRA en React peut échouer à cause de **Timeout** 🤣🤣🤣. Donc quand on a l'occasion d'avoir les documentations offline, alors on les prends et se les approprie pour qu'elles soient notre google en cas de petits besoins. Big up à **Zeal** qui fait un travail formidable pour qu'on ait en offline dans un même logiciel la documentation de la plupart des technos 😎😎😎.

#### Conclusion
Voilà j'en suis à la fin, certes cet article est long mais je ne voulais pas le diviser en deux parties car je trouve que les informations sont complémentaires. En gros certaines pratiques vous font aimer le métier de software developer et vous facilites la vie même si elles sont lentes à donner le résultat. 
A bientôt pour un new article.