<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Benjamin De Mot</title>
    <description>The latest articles on DEV Community by Benjamin De Mot (@bdemot).</description>
    <link>https://dev.to/bdemot</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F693126%2F139218b7-ad98-4cfb-bba3-89a2576acf8b.png</url>
      <title>DEV Community: Benjamin De Mot</title>
      <link>https://dev.to/bdemot</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bdemot"/>
    <language>en</language>
    <item>
      <title>Aperçus sur la Call Stack, La face cachée de la pile</title>
      <dc:creator>Benjamin De Mot</dc:creator>
      <pubDate>Fri, 27 Aug 2021 15:19:55 +0000</pubDate>
      <link>https://dev.to/bdemot/apercus-sur-la-call-stack-la-face-cachee-de-la-pile-4opo</link>
      <guid>https://dev.to/bdemot/apercus-sur-la-call-stack-la-face-cachee-de-la-pile-4opo</guid>
      <description>&lt;h3&gt;
  
  
  Call Stack
&lt;/h3&gt;

&lt;p&gt;JavaScript est un langage &lt;em&gt;single/mono-thread&lt;/em&gt; (mono-tâche) et synchrone. C'est-à-dire que l'interpréteur JS exécutera le code ligne par ligne, de la première à la dernière ligne.&lt;br&gt;
Pourquoi ? Parce qu'il n'a qu'une seule &lt;em&gt;call stack&lt;/em&gt; (pile d'exécution).&lt;/p&gt;

&lt;p&gt;Voyons ce qu'on peut lire sur le &lt;a href="https://developer.mozilla.org/fr/docs/Glossary/Call_Stack"&gt;MDN&lt;/a&gt; à ce sujet : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Une pile d'exécution est le mécanisme d'un interpréteur (comme l'interpréteur de JavaScript sur un navigateur web) pour conserver la trace de son emplacement dans un script qui appelle plusieurs fonctions depuis d'autres fonctions — quelle fonction est en cours d'exécution, quelles fonctions sont appelées depuis cette fonction et doivent être appelées ensuite, etc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://felixgerschau.com/"&gt;Felix Gerschau&lt;/a&gt; dans son article &lt;a href="https://felixgerschau.com/javascript-event-loop-call-stack/"&gt;JavaScript Event Loop And Call Stack Explained&lt;/a&gt; résume ainsi : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;La &lt;em&gt;call stack&lt;/em&gt; est un mécanisme qui aide l'interpréteur JavaScript à &lt;strong&gt;garder la trace des fonctions que le script appelle.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Garder la trace des fonctions que le script appelle&lt;/em&gt; pour y retourner une fois la fonction terminée.&lt;/p&gt;
&lt;h3&gt;
  
  
  Comment ça se passe ?
&lt;/h3&gt;

&lt;p&gt;Lorsqu'une fonction est appelée, l'interpréteur l'ajoute à la &lt;em&gt;call stack&lt;/em&gt; et l'exécute.&lt;/p&gt;

&lt;p&gt;Toutes les fonctions appelées par cette première fonction sont ajoutées ou plutôt empilées sur la &lt;em&gt;call stack&lt;/em&gt; pour être exécutées le moment venu.&lt;/p&gt;

&lt;p&gt;Quand une fonction est terminée, celle-ci est retirée de la &lt;em&gt;call stack&lt;/em&gt; et l'interpréteur retourne à la fonction précédente de la pile.&lt;/p&gt;
&lt;h3&gt;
  
  
  Un exemple concret
&lt;/h3&gt;

&lt;p&gt;Je vais reprendre et traduire l'exemple donné sur la version en-US du &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Call_Stack"&gt;MDN&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function greeting() {
   // [1] du code par ici
   sayHi();
   // [2] du code par là
}
function sayHi() {
   return "Hi!";
}

// appelle la fonction 'greeting'
greeting();

// [3] Du code ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bon alors, comment ça se passe ici ? Le code sera exécuté ainsi :&lt;/p&gt;

&lt;p&gt;1 - L'interpréteur atteint l'appelle de la fonction greeting().&lt;/p&gt;

&lt;p&gt;2 - greeting() est ajouté dans la &lt;em&gt;call stack&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Call stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;greeting&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;3 - Le code de la fonction greeting() est exécuté jusqu'à sayHi().&lt;/p&gt;

&lt;p&gt;4 - La fonction sayHi() est appelée.&lt;/p&gt;

&lt;p&gt;5 - La fonction sayHi() est empilée sur la &lt;em&gt;call stack&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Call stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sayHi&lt;/li&gt;
&lt;li&gt;greeting&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;6 - Le code de la fonction sayHi() est exécuté jusqu'à sa fin.&lt;/p&gt;

&lt;p&gt;7 - Retour à la ligne où la fonction sayHi() a été appelée pour exécuter le reste de la fonction greeting().&lt;/p&gt;

&lt;p&gt;8 - sayHi() est retirée de la pile.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Call stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;greeting&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;9 - Une fois toute la fonction greeting() exécutée, retour à la ligne où elle a été appelée pour exécuter la suite du code.&lt;/p&gt;

&lt;p&gt;10 - La fonction greeting() est retirée de la pile.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Call stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EMPTY&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Taille limite de la &lt;em&gt;call stack&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;On rappelait au début de ce court article que le JS est single thread et synchrone. Le script n'exécutera une instruction que l'une après l'autre. Si une fonction, par exemple, met du temps à retourner un résultat, c'est tout le code qui sera bloqué pour autant de temps. Et dans l'hypothèse d'une fonction récursive telle que celle-ci :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function a() {
    b();
}

function b() {
    a();
}

a();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...on se retrouverait avec une page qui freeze indéfiniment.&lt;/p&gt;

&lt;p&gt;C'est pour empêcher cela que les navigateurs ont une &lt;em&gt;call stack&lt;/em&gt; de taille limitée. Limite, qui, lorsqu'elle est atteinte, nous gratifie de cette erreur qu'on a tous rencontrée un jour: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Uncaught RangeError: Maximum call stack size exceeded&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>french</category>
    </item>
    <item>
      <title>Un Dev Junior parle aux Dev Juniors</title>
      <dc:creator>Benjamin De Mot</dc:creator>
      <pubDate>Thu, 26 Aug 2021 11:32:55 +0000</pubDate>
      <link>https://dev.to/bdemot/un-dev-junior-parle-aux-dev-juniors-46bh</link>
      <guid>https://dev.to/bdemot/un-dev-junior-parle-aux-dev-juniors-46bh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Ta-da-da-daaam!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Commençons déjà par se présenter.
&lt;/h3&gt;

&lt;p&gt;Je me nomme Benjamin De Mot, &lt;em&gt;aucun lien de parenté&lt;/em&gt;. Si vous captez les ref', vous pouvez probablement en déduire mon âge (i.e., 42-7).&lt;/p&gt;

&lt;p&gt;Je suis en reconversion dans le développement web. Et d'ailleurs, ça y est, je suis officiellement diplômé Dev Web 👏 après une formation de 6 mois chez OpenClassrooms.&lt;br&gt;
Tournée de Champomy! 🎉&lt;/p&gt;

&lt;p&gt;J'adore créer des machins avec mes gros doigts, mon clavier et ma cervelle (parfois). J'aime vraiment chercher et trouver (parfois) des solutions à des problèmes logiques ou esthétiques.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey d'ailleurs j'viens de trouver une &lt;a href="https://flaviocopes.com/merge-sort-javascript/"&gt;implémentation JS giga-easy&lt;/a&gt; du &lt;a href="https://fr.wikipedia.org/wiki/Tri_fusion"&gt;Merge Sort Algorythm&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mais surtout, j'aime apprendre et comprendre. On en reparlera plus bas.&lt;/p&gt;

&lt;p&gt;Mon kiff à moi, c'est le JavaScript. Mais je ne suis pas sectaire. Une fois que je serai Dev JS Senior (&lt;em&gt;il est l'ooooor&lt;/em&gt;) ou avant, je me pencherai sur d'autres langages, ne serait-ce que pour ma culture perso et la compréhension plus profonde de l'informatique. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bref.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Suivant les conseils de &lt;a href="https://blog.nicolas.brondin-bernard.com/pourquoi-vous-devriez-creer-un-blog-en-tant-que-developpeur-junior/"&gt;Nicolas Brondin-Bernard&lt;/a&gt;, je me lance dans l'écriture d'un blog. Je vais y partager mon expérience de la reconversion, de la formation que j'ai suivie et de ma recherche d'emploi. Mais pas que.&lt;/p&gt;

&lt;h3&gt;
  
  
  Je veux tenter de produire un contenu de Junior pour Juniors.
&lt;/h3&gt;

&lt;p&gt;Durant ma formation, pour compléter les cours, j'ai dû faire pas mal de recherches sur le net. Parfois pour approfondir un sujet vu en cours, parfois simplement parce que l'explication donnée ne correspondait pas à la façon dont mon cerveau appréhende les choses🤯.&lt;br&gt;
 Et il y a deux choses qui m'ont beaucoup frustré:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Le manque de ressources pour les "faux-débutants". C'est-à-dire, ceux qui connaissent déjà les bases du développement mais sont encore loin d'être experts.&lt;br&gt;
M'est avis qu'il y a un vide à combler entre les cours "introduction aux variables" et la documentation froide et ésotérique.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;La surabondance de tuto et le manque de théorie. Okay, y'a sûrement un intérêt à ces centaines de tutoriels sur "comment réaliser une restful API en Node.js, Express et MongoDB", mais à long terme, ne serait-ce pas plus intéressant d'insister plus sur le "pourquoi" que sur le "comment" ?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Si tu donnes un poisson à un homme, il mangera un jour, si tu lui apprends à pêcher, il mangera toujours.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Plus haut, je disais "tenter de produire un contenu". Je n'ai pas le niveau d'expertise suffisant pour faire des cours. Mais je peux déjà partager ce que j'ai lu et compris à mon niveau de Junior. Et avec votre aide, tenter &lt;strong&gt;d'expliquer simplement des choses compliquées.&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;En vrai, ça m'obligera à bien comprendre les sujets abordés car le but n'est pas de passer pour une 🍌 sur le net (je joue à LoL pour ça).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ah puis on fera de la veille aussi.&lt;br&gt;
Parce que les histoires de veille, c'est classe.&lt;/p&gt;

</description>
      <category>junior</category>
      <category>javascript</category>
      <category>french</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
