<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Rafael D. Hernandez - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Rafael D. Hernandez - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 15 May 2026 22:29:39 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/author/rafaeldavish/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ freeCodeCamp is Launching a Podcast in Spanish ]]>
                </title>
                <description>
                    <![CDATA[ Hello! My name is Rafael Hernandez and I'm excited to announce the launch of our new podcast: El Podcast de freeCodeCamp en Español.  ‌‌‌‌In this podcast, we'll dive into the stories of inspiring people in the world of technology and content creation... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/freecodecamp-podcast-in-spanish/</link>
                <guid isPermaLink="false">66bae5f1e2f22beb3be3a52f</guid>
                
                    <category>
                        <![CDATA[ Español ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp.org ]]>
                    </category>
                
                    <category>
                        <![CDATA[ podcast ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael D. Hernandez ]]>
                </dc:creator>
                <pubDate>Fri, 28 Jul 2023 15:33:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2023/07/fcc-podcast-cover.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Hello! My name is Rafael Hernandez and I'm excited to announce the launch of our new podcast: <strong><a target="_blank" href="https://freecodecamp-en-espanol.transistor.fm/">El Podcast de freeCodeCamp en Español</a></strong>. </p>
<p>‌‌‌‌In this podcast, we'll dive into the stories of inspiring people in the world of technology and content creation. Our goal is to bring you closer to the experiences of those who are making their mark in the Spanish-speaking developer community.</p>
<p>To start off on the right note, I'm pleased to share with you our first three episodes:</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/matiasB.jpeg" alt="Image" width="600" height="400" loading="lazy">
<em>Matías Baldanza</em></p>
<h2 id="heading-episode-1-matias-baldanza-retaking-programming-and-building-in-publichttpswwwfreecodecamporgespanolnewsmatias-baldanza-retomando-la-programacion-y-construyendo-en-publico-matiasbaldanzahttpstwittercommatiasbaldanza"><a target="_blank" href="https://www.freecodecamp.org/espanol/news/matias-baldanza-retomando-la-programacion-y-construyendo-en-publico/">Episode 1 – Matías Baldanza: Retaking Programming and Building in Public</a> (<a target="_blank" href="https://twitter.com/matiasbaldanza">@matiasbaldanza</a>)</h2>
<p>In this episode, Matias shares with us his unique career path, his shift in focus to web development, and how he deals with challenges in learning programming. </p>
<p>This is an episode full of valuable tips and a unique perspective on the world of web development.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/kelvinS.jpg" alt="Image" width="600" height="400" loading="lazy">
<em>Kelvin Sanchez</em></p>
<h2 id="heading-episode-2-kelvin-sanchez-testimony-of-perseverance-and-determinationhttpswwwfreecodecamporgespanolnewskelvin-sanchez-testimonio-de-perseverancia-y-determinacion-kelvinsanchezhttpstwittercomkelvinsanchez"><a target="_blank" href="https://www.freecodecamp.org/espanol/news/kelvin-sanchez-testimonio-de-perseverancia-y-determinacion/">Episode 2 – Kelvin Sanchez: Testimony of Perseverance and Determination</a> (<a target="_blank" href="https://twitter.com/kelvin_sanchez">@kelvin_sanchez</a>)</h2>
<p>Kelvin talks about his fascinating professional transformation and his significant contribution to freeCodeCamp as a translator and proofreader. </p>
<p>He also gives us an in-depth insight into his experience with publishing a original article on Next.js.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2023/07/Estefania-Cassingena-Navone.png" alt="Image" width="600" height="400" loading="lazy">
<em>Estefania Cassingena Navone</em></p>
<h2 id="heading-episode-3-estefania-cassingena-navone-from-mitx-student-to-freecodecamp-content-creatorhttpswwwfreecodecamporgespanolnewsestefania-despertando-la-pasion-por-la-programacion-y-la-ensenanza-online-con-el-curso-de-python-de-mitx-estefaniacassnhttpstwittercomestefaniacassn"><a target="_blank" href="https://www.freecodecamp.org/espanol/news/estefania-despertando-la-pasion-por-la-programacion-y-la-ensenanza-online-con-el-curso-de-python-de-mitx/">Episode 3 – Estefania Cassingena Navone: From MITx Student to freeCodeCamp Content Creator</a> (<a target="_blank" href="https://twitter.com/EstefaniaCassN">@EstefaniaCassN</a>)</h2>
<p>Estefania shares with us her passion for programming, her teaching experience, and how she keeps up to date in such a dynamic field. </p>
<p>Get ready to learn about her content creation process and how she has managed to spark interest in programming in many through her online courses.</p>
<h2 id="heading-check-out-freecodecamps-new-spanish-language-podcast">Check Out freeCodeCamp's New Spanish Language Podcast</h2>
<p>We hope these episodes provide you with a fresh perspective, inspiration, and a greater understanding of the world of technology. ‌‌‌‌</p>
<p>We invite you to join us on this adventure and look forward to seeing you on our new freeCodeCamp podcast.‌‌‌‌</p>
<p>If you find our content useful, please share it with your friends to help more people discover it. Also, we would greatly appreciate it if you could leave us a five-star review on the platform you use to listen to us. ‌‌‌‌</p>
<p>Your support is invaluable and helps us continue to provide educational programming resources for free.</p>
<p>See you soon!</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ World Translation Month – Help Us Translate freeCodeCamp into Your Native Language ]]>
                </title>
                <description>
                    <![CDATA[ We believe that everyone deserves to have free programming education in their own native language. So we are expanding International Translation Day (September 30th) into a full month-long effort. Over the past few years, hundreds of volunteer contri... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/world-translation-month-event/</link>
                <guid isPermaLink="false">66bae5f92c1f85b4545c8bc7</guid>
                
                    <category>
                        <![CDATA[ community ]]>
                    </category>
                
                    <category>
                        <![CDATA[ language ]]>
                    </category>
                
                    <category>
                        <![CDATA[ localization ]]>
                    </category>
                
                    <category>
                        <![CDATA[ translation ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael D. Hernandez ]]>
                </dc:creator>
                <pubDate>Tue, 07 Sep 2021 17:37:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/09/WTM_BG-yt-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>We believe that everyone deserves to have free programming education in their own native language. So we are expanding International Translation Day (September 30th) into a full month-long effort.</p>
<p>Over the past few years, hundreds of volunteer contributors have worked to translate freeCodeCamp into major world languages. In February, <a target="_blank" href="https://www.freecodecamp.org/news/world-language-translation-effort/">Quincy announced</a> that freeCodeCamp had successfully launched both Spanish and Chinese editions. And Portuguese and Italian soon followed.</p>
<p>During World Translation Month, we will celebrate what we have achieved collectively – and what we will accomplish for everybody around the world<em>.</em> Watch this one-minute announcement video:</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/i2XjBz_U28E" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<p><em>If you are interested in participating in translating freeCodeCamp into any world language, you can <a target="_blank" href="https://chat.freecodecamp.org/channel/contributors">visit our contributors channel and learn more</a>.</em></p>
<h2 id="heading-latest-translation-accomplishments">Latest Translation Accomplishments</h2>
<p>Today, we have successfully launched the Italian and Brazilian Portuguese curriculum. We are eager to see what is to come for these active communities.</p>
<p>And the Ukrainian community has really taken off in their translation efforts. They have eight certifications fully translated and two close to 100%, almost all completed within a month. It is remarkable to witness the dedication and perseverance every language community has shown.</p>
<p>We have multiple other communities and individuals who are translating the curriculum to their native languages. You can take a look at the current statuses of all the active translations and their progress here.</p>
<h2 id="heading-current-translation-progress">Current Translation Progress</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>World Language</td><td>Curriculum %</td><td>Docs %</td></tr>
</thead>
<tbody>
<tr>
<td>Afrikaans</td><td>1%</td><td>59%</td></tr>
<tr>
<td>Arabic</td><td>11%</td><td>29%</td></tr>
<tr>
<td>Azerbaijani</td><td>2%</td><td>1%</td></tr>
<tr>
<td>Bengali</td><td>27%</td><td>1%</td></tr>
<tr>
<td>Catalan</td><td>3%</td><td>1%</td></tr>
<tr>
<td>Chinese</td><td>65%</td><td>56%</td></tr>
<tr>
<td>Czech</td><td>1%</td><td>17%</td></tr>
<tr>
<td>Danish</td><td>1%</td><td>18%</td></tr>
<tr>
<td>Dutch</td><td>4%</td><td>23%</td></tr>
<tr>
<td>Finissh</td><td>1%</td><td>17%</td></tr>
<tr>
<td>French</td><td>20%</td><td>45%</td></tr>
<tr>
<td>German</td><td>31%</td><td>98%</td></tr>
<tr>
<td>Greek</td><td>1%</td><td>1%</td></tr>
<tr>
<td>Hebrew</td><td>1%</td><td>1%</td></tr>
<tr>
<td>Hindi</td><td>1%</td><td>11%</td></tr>
<tr>
<td>Hungarian</td><td>1%</td><td>1%</td></tr>
<tr>
<td>Indonesian</td><td>7%</td><td>30%</td></tr>
<tr>
<td>Italian</td><td>80%</td><td>100%</td></tr>
<tr>
<td>Japanese</td><td>79%</td><td>99%</td></tr>
<tr>
<td>Korean</td><td>1%</td><td>1%</td></tr>
<tr>
<td>Norwegian</td><td>1%</td><td>17%</td></tr>
<tr>
<td>Persian</td><td>12%</td><td>5%</td></tr>
<tr>
<td>Polish</td><td>1%</td><td>19%</td></tr>
<tr>
<td>Portuguese-BR</td><td>79%</td><td>100%</td></tr>
<tr>
<td>Romainian</td><td>48%</td><td>31%</td></tr>
<tr>
<td>Russian</td><td>15%</td><td>95%</td></tr>
<tr>
<td>Spanish</td><td>44%</td><td>84%</td></tr>
<tr>
<td>Swahili</td><td>1%</td><td>1%</td></tr>
<tr>
<td>Swedish</td><td>1%</td><td>19%</td></tr>
<tr>
<td>Tamil</td><td>!%</td><td>34%</td></tr>
<tr>
<td>Telugu</td><td>1%</td><td>4%</td></tr>
<tr>
<td>Turkish</td><td>3%</td><td>4%</td></tr>
<tr>
<td>Ukrainian</td><td>77%</td><td>74%</td></tr>
<tr>
<td>Vietnamese</td><td>1%</td><td>4%</td></tr>
</tbody>
</table>
</div><p>Currently, volunteers around the world are in the process of translating freeCodeCamp's curriculum into 28 world languages.</p>
<p>And many of these world languages are showing significant progress, especially the French, Romanian, Japanese, and German-speaking communities. Keep up the great work!</p>
<h2 id="heading-what-is-the-goal-of-the-world-translation-month-event">What is the Goal of the World Translation Month Event?</h2>
<p>freeCodeCamp's goal is to give every individual the tools to translate the curriculum into their native language. Also, we will dedicate all our efforts and time to this event to reach significant progress for every world language. </p>
<p>We have witnessed what a handful of contributors can do together with a singular purpose. And we hope that World Translation Month will become a yearly event when all world languages can celebrate having access to free programming education translated by their community for their community.</p>
<h2 id="heading-our-reward-system">Our Reward System 🥇</h2>
<p>freeCodeCamp wants to make this a memorable event for every contributor who participates.</p>
<p>During the WTM event, we will give all participants a World Translation Month Badge. Also, at the end of the event, we will present special badges to the Top Translators and Top Proofreaders who have made the most contributions. </p>
<p>You can display these badges on your freeCodeCamp curriculum and forum profiles if you want to do so.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/WTM_Badges.png" alt="Image" width="600" height="400" loading="lazy">
<em>2021 World Translation Month badges</em></p>
<h2 id="heading-the-freecodecamp-localization-roadmap">The freeCodeCamp Localization Roadmap</h2>
<p>The freeCodeCamp curriculum is already available in Chinese and Spanish. And beyond this, these communities have many other resources at their disposal, thanks to the efforts of hundreds of contributors.</p>
<p>For example, the Chinese-speaking community has translated nearly all the certifications into Chinese. They also have close to 600 articles translated, there are 10 of freeCodeCamp's video tutorials with subtitles on <a target="_blank" href="https://space.bilibili.com/335505768/video">Bilibili</a>, and they've organized hundreds of meetups, hackathons, conferences, live coding events, and coding workshops in universities and high schools.</p>
<p><img src="https://chinese.freecodecamp.org/news/content/images/2021/09/image-1.png" alt="Image" width="913" height="557" loading="lazy">
<em>freeCodeCamp bilibili 频道</em></p>
<p>The Spanish-speaking community has the first two certifications available in Spanish, and they've translated around 250 articles. Community members have also written about 20 original articles, created 3 original full-length video tutorials, and <a target="_blank" href="https://www.freecodecamp.org/news/p/fc63f178-c627-414a-8ae6-877eb3458261/@EstefaniaCassN">Estefania</a> has created 24 short videos for the Spanish YouTube channel. </p>
<p>The response from the Spanish-speaking community has been remarkable on <a target="_blank" href="https://www.youtube.com/c/freeCodeCampEspa%C3%B1ol/videos">YouTube</a> and <a target="_blank" href="https://twitter.com/freecodecampES">Twitter</a>. Thanks to the fantastic job Estefania has been doing by engaging with the community with posts and short videos on YouTube, the channel now has over 12,000 followers. And freeCodeCamp's Twitter account en Español has reached 7,300 followers while continuing to grow.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-06-at-2.23.41-AM.png" alt="Image" width="600" height="400" loading="lazy">
<em>YouTube Channel freeCodeCamp en Español</em></p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/09/Screen-Shot-2021-09-06-at-2.29.17-AM.png" alt="Image" width="600" height="400" loading="lazy">
<em>Twitter freeCodeCamp en Español</em></p>
<h2 id="heading-the-translation-blueprint">The Translation Blueprint</h2>
<p>As Quincy mentioned in the <a target="_blank" href="https://www.freecodecamp.org/news/world-language-translation-effort/">World Language Translation Effort</a> article, freeCodeCamp's "<em>...long-term goal is for each of these language communities to come into its own.</em>" </p>
<p>And we'll take the same steps as we took with the thriving Spanish-speaking and Chinese-speaking communities with other language communities around the world. </p>
<p>The plan is to launch a localized publication, YouTube Channel, sub-forum, and Twitter account for these language communities, each with their own contributors and staff.</p>
<h2 id="heading-thank-you-to-all-the-translators-contributors-and-proofreaders">Thank You to All the Translators, Contributors, and Proofreaders!</h2>
<p>I want to finish up by thanking the proofreaders and translators who have dedicated hours upon hours to translating and proofreading. </p>
<h3 id="heading-active-translators">Active Translators</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Name</td><td>World Language</td><td>Translated Strings</td></tr>
</thead>
<tbody>
<tr>
<td>Aziz Meknassi</td><td>Arabic</td><td>4</td></tr>
<tr>
<td>Damani Salah Eddin</td><td>Arabic</td><td>18</td></tr>
<tr>
<td>elmadhdi1962</td><td>Arabic</td><td>4</td></tr>
<tr>
<td>fatima</td><td>Arabic</td><td>2</td></tr>
<tr>
<td>Gehad Salem</td><td>Arabic</td><td>11</td></tr>
<tr>
<td>Khalid Benjelloun</td><td>Arabic</td><td>3</td></tr>
<tr>
<td>Rundi Wadi</td><td>Arabic</td><td>38</td></tr>
<tr>
<td>Modasser Billah</td><td>Bengali</td><td>5</td></tr>
<tr>
<td>nr072</td><td>Bengali</td><td>77</td></tr>
<tr>
<td>Pabitra Jana</td><td>Bengali</td><td>1</td></tr>
<tr>
<td>Raihan Mahmud</td><td>Bengali</td><td>70</td></tr>
<tr>
<td>Salman Shuvo</td><td>Bengali</td><td>47</td></tr>
<tr>
<td>Chengjun.L</td><td>Chinese</td><td>49</td></tr>
<tr>
<td>cocoder</td><td>Chinese</td><td>26</td></tr>
<tr>
<td>Simon Yang</td><td>Chinese</td><td>1</td></tr>
<tr>
<td>xhksun</td><td>Chinese</td><td>166</td></tr>
<tr>
<td>ztftrue</td><td>Chinese</td><td>1</td></tr>
<tr>
<td>Hana Klingová</td><td>Czech</td><td>28</td></tr>
<tr>
<td>johmar</td><td>Dutch</td><td>339</td></tr>
<tr>
<td>cbnrd</td><td>French</td><td>43</td></tr>
<tr>
<td>David Heusler</td><td>French</td><td>109</td></tr>
<tr>
<td>Flo</td><td>French</td><td>1</td></tr>
<tr>
<td>Julien Li</td><td>French</td><td>449</td></tr>
<tr>
<td>Mariefay</td><td>French</td><td>14</td></tr>
<tr>
<td>MNE</td><td>French</td><td>29</td></tr>
<tr>
<td>Rémy Beumier</td><td>French</td><td>1</td></tr>
<tr>
<td>srasay2</td><td>French</td><td>1</td></tr>
<tr>
<td>Andrew Russell</td><td>German</td><td>28</td></tr>
<tr>
<td>AW</td><td>German</td><td>84</td></tr>
<tr>
<td>Julia Wegmayr</td><td>German</td><td>248</td></tr>
<tr>
<td>Martin Seibert</td><td>German</td><td>1</td></tr>
<tr>
<td>Philipp R. Proksch</td><td>German</td><td>3</td></tr>
<tr>
<td>Philipp S</td><td>German</td><td>312</td></tr>
<tr>
<td>Vairus</td><td>Greek</td><td>10</td></tr>
<tr>
<td>Jod Louis</td><td>Haitian Creole</td><td>1</td></tr>
<tr>
<td>Ami</td><td>Hebrew</td><td>28</td></tr>
<tr>
<td>bachdor24</td><td>Hebrew</td><td>4</td></tr>
<tr>
<td>Curiosity_17</td><td>Hindi</td><td>1</td></tr>
<tr>
<td>Japmohan kumar</td><td>Hindi</td><td>1</td></tr>
<tr>
<td>adh</td><td>Indonesian</td><td>299</td></tr>
<tr>
<td>Arief Darmawan</td><td>Indonesian</td><td>503</td></tr>
<tr>
<td>Danang Aprias Noor Fadilla</td><td>Indonesian</td><td>46</td></tr>
<tr>
<td>Dicky Giancini</td><td>Indonesian</td><td>94</td></tr>
<tr>
<td>Dyah Achwatiningrum</td><td>Indonesian</td><td>368</td></tr>
<tr>
<td>Fahmi Aditia</td><td>Indonesian</td><td>50</td></tr>
<tr>
<td>Hendra Bangun Dwi R</td><td>Indonesian</td><td>8</td></tr>
<tr>
<td>Rifqi</td><td>Indonesian</td><td>1</td></tr>
<tr>
<td>Tjandra Darmo</td><td>Indonesian</td><td>6</td></tr>
<tr>
<td>wardhen</td><td>Indonesian</td><td>115</td></tr>
<tr>
<td>iuri86</td><td>Italian</td><td>10</td></tr>
<tr>
<td>TOMMASO DI COSTANZO</td><td>Italian</td><td>35</td></tr>
<tr>
<td>Emi</td><td>Japanese</td><td>7</td></tr>
<tr>
<td>Julie Park</td><td>Korean</td><td>19</td></tr>
<tr>
<td>San</td><td>Korean</td><td>9</td></tr>
<tr>
<td>Sewook Han</td><td>Korean</td><td>6</td></tr>
<tr>
<td>Zergro</td><td>Norwegian</td><td>3</td></tr>
<tr>
<td>m_golzar</td><td>Persian</td><td>8</td></tr>
<tr>
<td>najme</td><td>Persian</td><td>571</td></tr>
<tr>
<td>Jakub Siwik</td><td>Polish</td><td>27</td></tr>
<tr>
<td>BrainMath</td><td>Portuguese, Brazilian</td><td>10</td></tr>
<tr>
<td>Clovis Goulart</td><td>Portuguese, Brazilian</td><td>340</td></tr>
<tr>
<td>Cássio Barth</td><td>Portuguese, Brazilian</td><td>1</td></tr>
<tr>
<td>fcc_javascript_4linux</td><td>Portuguese, Brazilian</td><td>1</td></tr>
<tr>
<td>Felipe Santos</td><td>Portuguese, Brazilian</td><td>8</td></tr>
<tr>
<td>Isabella Lima</td><td>Portuguese, Brazilian</td><td>3</td></tr>
<tr>
<td>Jualianaluzia</td><td>Portuguese, Brazilian</td><td>36</td></tr>
<tr>
<td>Lais Golin</td><td>Portuguese, Brazilian</td><td>1</td></tr>
<tr>
<td>luforain</td><td>Portuguese, Brazilian</td><td>1</td></tr>
<tr>
<td>Rick</td><td>Portuguese, Brazilian</td><td>2</td></tr>
<tr>
<td>Silvano RM</td><td>Portuguese, Brazilian</td><td>17</td></tr>
<tr>
<td>Clovis Goulart</td><td>Portuguese, Portugal</td><td>37</td></tr>
<tr>
<td>Pedro Goncalves</td><td>Portuguese, Portugal</td><td>65</td></tr>
<tr>
<td>Ghenadie Tofan</td><td>Romanian</td><td>422</td></tr>
<tr>
<td>Alexander Filëv</td><td>Russian</td><td>114</td></tr>
<tr>
<td>Beloze</td><td>Russian</td><td>26</td></tr>
<tr>
<td>Cherepnin</td><td>Russian</td><td>97</td></tr>
<tr>
<td>Corrector</td><td>Russian</td><td>87</td></tr>
<tr>
<td>Farid</td><td>Russian</td><td>2</td></tr>
<tr>
<td>Helge Kim</td><td>Russian</td><td>5</td></tr>
<tr>
<td>Knopentiya</td><td>Russian</td><td>3</td></tr>
<tr>
<td>Pavel Ryazantsev</td><td>Russian</td><td>7</td></tr>
<tr>
<td>Rita Shinger</td><td>Russian</td><td>25</td></tr>
<tr>
<td>vekotov</td><td>Russian</td><td>28</td></tr>
<tr>
<td>Виктор Сударинен</td><td>Russian</td><td>1</td></tr>
<tr>
<td>Тимофей Рассолов</td><td>Russian</td><td>198</td></tr>
<tr>
<td>daca</td><td>Serbian</td><td>6</td></tr>
<tr>
<td>Abel Campos</td><td>Spanish</td><td>13</td></tr>
<tr>
<td>Aldair Avalos</td><td>Spanish</td><td>86</td></tr>
<tr>
<td>Alvaro Agamez</td><td>Spanish</td><td>159</td></tr>
<tr>
<td>Andres</td><td>Spanish</td><td>2</td></tr>
<tr>
<td>Atilio Garcia Pezo</td><td>Spanish</td><td>4</td></tr>
<tr>
<td>Christian Caracach</td><td>Spanish</td><td>13</td></tr>
<tr>
<td>DavitBoo</td><td>Spanish</td><td>1</td></tr>
<tr>
<td>devsiderio</td><td>Spanish</td><td>23</td></tr>
<tr>
<td>Drifting Live</td><td>Spanish</td><td>1</td></tr>
<tr>
<td>Erik</td><td>Spanish</td><td>4</td></tr>
<tr>
<td>Hernan David Cuy Salcedo</td><td>Spanish</td><td>20</td></tr>
<tr>
<td>Javier Coronado Velasquez</td><td>Spanish</td><td>377</td></tr>
<tr>
<td>JorgeT</td><td>Spanish</td><td>2</td></tr>
<tr>
<td>Karlos Arroyo Fernandez</td><td>Spanish</td><td>8</td></tr>
<tr>
<td>Laura</td><td>Spanish</td><td>1</td></tr>
<tr>
<td>Luis Carlos Figueroa Veliz</td><td>Spanish</td><td>10</td></tr>
<tr>
<td>Marco Segura</td><td>Spanish</td><td>5</td></tr>
<tr>
<td>Mariano Esquivel</td><td>Spanish</td><td>20</td></tr>
<tr>
<td>Martin Diaz</td><td>Spanish</td><td>1</td></tr>
<tr>
<td>Maximiliano Romero</td><td>Spanish</td><td>4</td></tr>
<tr>
<td>Nestor Plasencia</td><td>Spanish</td><td>1</td></tr>
<tr>
<td>Renzo-Chong</td><td>Spanish</td><td>2</td></tr>
<tr>
<td>Rumen Zaechki</td><td>Spanish</td><td>6</td></tr>
<tr>
<td>Santiago Correa Alvarez</td><td>Spanish</td><td>18</td></tr>
<tr>
<td>Sergio Fdez</td><td>Spanish</td><td>21</td></tr>
<tr>
<td>Sofiapicco</td><td>Spanish</td><td>2</td></tr>
<tr>
<td>Ulises Lopez</td><td>Spanish</td><td>12</td></tr>
<tr>
<td>Chaandha Raghav</td><td>Tamil</td><td>128</td></tr>
<tr>
<td>Raviraj Subramanian</td><td>Tamil</td><td>7</td></tr>
<tr>
<td>Eren Byxlarge</td><td>Turkish</td><td>8</td></tr>
<tr>
<td>Kubilaycitak</td><td>Turkish</td><td>18</td></tr>
<tr>
<td>Mehmet Emin Eraslan</td><td>Turkish</td><td>2</td></tr>
<tr>
<td>Alina Bovsunivska</td><td>Ukrainian</td><td>217</td></tr>
<tr>
<td>alina_farafonova</td><td>Ukrainian</td><td>15</td></tr>
<tr>
<td>alx<em>man</em></td><td>Ukrainian</td><td>122</td></tr>
<tr>
<td>Anastasia Trius</td><td>Ukrainian</td><td>304</td></tr>
<tr>
<td>Anastasia_k</td><td>Ukrainian</td><td>131</td></tr>
<tr>
<td>andrii.bodnar</td><td>Ukrainian</td><td>2</td></tr>
<tr>
<td>Angelina Yaremchuk</td><td>Ukrainian</td><td>242</td></tr>
<tr>
<td>Anna Verbytska</td><td>Ukrainian</td><td>183</td></tr>
<tr>
<td>anna.linevych</td><td>Ukrainian</td><td>106</td></tr>
<tr>
<td>anya_filipchuk</td><td>Ukrainian</td><td>1</td></tr>
<tr>
<td>coolakova</td><td>Ukrainian</td><td>185</td></tr>
<tr>
<td>Cофія Назарчук</td><td>Ukrainian</td><td>199</td></tr>
<tr>
<td>Daria Deinekina</td><td>Ukrainian</td><td>156</td></tr>
<tr>
<td>Darina Gorichenko</td><td>Ukrainian</td><td>373</td></tr>
<tr>
<td>DarinaMilova</td><td>Ukrainian</td><td>168</td></tr>
<tr>
<td>Daryna</td><td>Ukrainian</td><td>270</td></tr>
<tr>
<td>Diana</td><td>Ukrainian</td><td>169</td></tr>
<tr>
<td>Dmytro Zubenko</td><td>Ukrainian</td><td>534</td></tr>
<tr>
<td>Doctorplague</td><td>Ukrainian</td><td>110</td></tr>
<tr>
<td>Inga Usenko</td><td>Ukrainian</td><td>1</td></tr>
<tr>
<td>Iryna Lobko</td><td>Ukrainian</td><td>212</td></tr>
<tr>
<td>Ivan Adamchuk</td><td>Ukrainian</td><td>366</td></tr>
<tr>
<td>Ivanka_Kvasna</td><td>Ukrainian</td><td>202</td></tr>
<tr>
<td>Julia Serbinenko</td><td>Ukrainian</td><td>283</td></tr>
<tr>
<td>K_Katrina_A</td><td>Ukrainian</td><td>36</td></tr>
<tr>
<td>Kateryna_sk</td><td>Ukrainian</td><td>410</td></tr>
<tr>
<td>Katya Belikova</td><td>Ukrainian</td><td>190</td></tr>
<tr>
<td>Khristina Konvaliuk</td><td>Ukrainian</td><td>91</td></tr>
<tr>
<td>Liubov Kot</td><td>Ukrainian</td><td>9</td></tr>
<tr>
<td>Maria Gaidarzhy</td><td>Ukrainian</td><td>162</td></tr>
<tr>
<td>Mariana Minko</td><td>Ukrainian</td><td>319</td></tr>
<tr>
<td>Maryna Moroz</td><td>Ukrainian</td><td>124</td></tr>
<tr>
<td>minkaffe</td><td>Ukrainian</td><td>262</td></tr>
<tr>
<td>Nata</td><td>Ukrainian</td><td>143</td></tr>
<tr>
<td>Nataliia Mykolyshyn4</td><td>Ukrainian</td><td>314</td></tr>
<tr>
<td>nathuzovata</td><td>Ukrainian</td><td>257</td></tr>
<tr>
<td>ol_kvasna</td><td>Ukrainian</td><td>198</td></tr>
<tr>
<td>Olena Tyshkevych</td><td>Ukrainian</td><td>321</td></tr>
<tr>
<td>olena.karpina</td><td>Ukrainian</td><td>209</td></tr>
<tr>
<td>olia-k</td><td>Ukrainian</td><td>228</td></tr>
<tr>
<td>Pavlo Tiupa</td><td>Ukrainian</td><td>320</td></tr>
<tr>
<td>Roksolana Khanas</td><td>Ukrainian</td><td>313</td></tr>
<tr>
<td>Solomia2108 Kotiai</td><td>Ukrainian</td><td>330</td></tr>
<tr>
<td>Solomiia Stupak</td><td>Ukrainian</td><td>228</td></tr>
<tr>
<td>SOPHIE_20861</td><td>Ukrainian</td><td>17</td></tr>
<tr>
<td>Sophiya</td><td>Ukrainian</td><td>349</td></tr>
<tr>
<td>tetiana_kinashchuk</td><td>Ukrainian</td><td>272</td></tr>
<tr>
<td>vdenyssko</td><td>Ukrainian</td><td>164</td></tr>
<tr>
<td>Viktoriia Farenyk</td><td>Ukrainian</td><td>353</td></tr>
<tr>
<td>Viktoriia_Shoptenko</td><td>Ukrainian</td><td>79</td></tr>
<tr>
<td>vitka-kvitka</td><td>Ukrainian</td><td>199</td></tr>
<tr>
<td>Yaroslav Stryhun</td><td>Ukrainian</td><td>291</td></tr>
<tr>
<td>yulialutsenko</td><td>Ukrainian</td><td>2</td></tr>
<tr>
<td>Zhandm</td><td>Ukrainian</td><td>26</td></tr>
<tr>
<td>Аліна Соловій</td><td>Ukrainian</td><td>334</td></tr>
<tr>
<td>Андрій Андрійович Сукнацький</td><td>Ukrainian</td><td>271</td></tr>
<tr>
<td>Андрій Біленко</td><td>Ukrainian</td><td>275</td></tr>
<tr>
<td>Богдана Вознюк</td><td>Ukrainian</td><td>6</td></tr>
<tr>
<td>Вікторія Мельник</td><td>Ukrainian</td><td>145</td></tr>
<tr>
<td>Дарія Фадєєва</td><td>Ukrainian</td><td>210</td></tr>
<tr>
<td>Кристина Єщенко</td><td>Ukrainian</td><td>59</td></tr>
<tr>
<td>Таня Щадило</td><td>Ukrainian</td><td>339</td></tr>
<tr>
<td>Тимофей Рассолов</td><td>Ukrainian</td><td>1</td></tr>
<tr>
<td>Тоня Маркиш</td><td>Ukrainian</td><td>98</td></tr>
<tr>
<td>Ілона Єщенко</td><td>Ukrainian</td><td>67</td></tr>
<tr>
<td>Anushah Nadir</td><td>Urdu</td><td>17</td></tr>
<tr>
<td>Muhammad Ali</td><td>Urdu</td><td>54</td></tr>
<tr>
<td>Sharaf A</td><td>Urdu</td><td>12</td></tr>
</tbody>
</table>
</div><h3 id="heading-active-proofreaders">Active Proofreaders</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Name</td><td>World Language</td><td>Translated Strings</td><td>Approved Strings</td></tr>
</thead>
<tbody>
<tr>
<td>Miya Liu</td><td>Chinese</td><td>18</td><td>2547</td></tr>
<tr>
<td>Alan Luo</td><td>Chinese</td><td>567</td><td>480</td></tr>
<tr>
<td>Christophe Thomas</td><td>French</td><td>537</td><td>372</td></tr>
<tr>
<td>Gaelle Tjat</td><td>French</td><td>572</td><td>1492</td></tr>
<tr>
<td>Stephan Düsterhöft</td><td>German</td><td>1070</td><td>1144</td></tr>
<tr>
<td>Michaelsndr</td><td>German</td><td>586</td><td>809</td></tr>
<tr>
<td>Dicky Giancini</td><td>Indonesian</td><td>83</td><td>492</td></tr>
<tr>
<td>Andrea Ros</td><td>Italian</td><td>875</td><td>52</td></tr>
<tr>
<td>Ilenia Magoni</td><td>Italian</td><td>405</td><td>18</td></tr>
<tr>
<td>alevanni19</td><td>Italian</td><td>11</td><td></td></tr>
<tr>
<td>sidemt</td><td>Japanese</td><td>162</td><td>175</td></tr>
<tr>
<td>Daniel Rosa</td><td>Portuguese, Brazil</td><td>1427</td><td>1839</td></tr>
<tr>
<td>Ricardo Passos</td><td>Portuguese, Brazil</td><td>77</td><td></td></tr>
<tr>
<td>fcc_javascript_4linux</td><td>Portuguese, Brazil</td><td>1</td><td></td></tr>
<tr>
<td>Sam_3877</td><td>Romanian</td><td>1696</td><td></td></tr>
<tr>
<td>Juan Carrillo</td><td>Spanish</td><td>241</td><td>1951</td></tr>
<tr>
<td>choidavid4</td><td>Spanish</td><td>357</td><td>349</td></tr>
<tr>
<td>Bohdana Vozniuk</td><td>Ukrainian</td><td>103</td><td>137</td></tr>
</tbody>
</table>
</div><p>Also, thank you to all the proofreaders and participants in the World Translation Month video:</p>
<ul>
<li>Andrea Ros - Italian Proofreader</li>
<li><a target="_blank" href="https://twitter.com/Daniel__Rosa">Daniel Rosa</a> - Portuguese-BR Proofreader</li>
<li><a target="_blank" href="https://twitter.com/stephandue">Stephan Düsterhöft</a> and Michael Franz - German Proofreaders</li>
<li><a target="_blank" href="https://twitter.com/sideyoks">Sidemt (Yoko)</a> - Japanese Proofreader</li>
<li>Adina Solomon - Romanian Proofreader</li>
<li>Khalid - Arabic Proofreader</li>
<li><a target="_blank" href="https://twitter.com/juancarrillofl">Juan Carrillo</a> - Spanish Proofreader</li>
<li><a target="_blank" href="https://github.com/S1ngS1ng">S1ng S1ng</a>，<a target="_blank" href="https://github.com/iLtc">Alan Luo</a>，<a target="_blank" href="https://github.com/ZhichengChen">Zhicheng Chen</a>，<a target="_blank" href="https://github.com/zhannicholas">Nicholas Zhan</a>，<a target="_blank" href="https://twitter.com/miyaliu666">Miya Liu</a> - Translators/Proofreaders</li>
</ul>
<p><em>If you are interested in participating in translating freeCodeCamp's curriculum into any world language, you can <a target="_blank" href="https://chat.freecodecamp.org/channel/contributors">visit our contributors channel and learn more</a>.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Model View Controller Pattern – MVC Architecture and Frameworks Explained ]]>
                </title>
                <description>
                    <![CDATA[ The MVC architecture pattern turns complex application development into a much more manageable process. It allows several developers to simultaneously work on the application. When I first learned about MVC patterns, I was intimidated by all the jarg... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-model-view-controller-pattern-mvc-architecture-and-frameworks-explained/</link>
                <guid isPermaLink="false">66bae5f5fea3aa95c7620fad</guid>
                
                    <category>
                        <![CDATA[ design patterns ]]>
                    </category>
                
                    <category>
                        <![CDATA[ programing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software design ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software design patterns ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Rafael D. Hernandez ]]>
                </dc:creator>
                <pubDate>Mon, 19 Apr 2021 14:13:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2021/04/BG.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>The MVC architecture pattern turns complex application development into a much more manageable process. It allows several developers to simultaneously work on the application.</p>
<p>When I first learned about MVC patterns, I was intimidated by all the jargon. And even more so when I started applying these concepts to an actual application.</p>
<p>By taking a step back to focus on what MVC is and what it can accomplish, it's much easier to understand and apply the pattern to any web application.</p>
<h2 id="heading-what-is-mvc">What is MVC?</h2>
<p>MVC stands for model-view-controller. Here's what each of those components mean:</p>
<ul>
<li><strong>Model</strong>: The backend that contains all the data logic</li>
<li><strong>View</strong>: The frontend or graphical user interface (GUI)</li>
<li><strong>Controller</strong>: The brains of the application that controls how data is displayed</li>
</ul>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/MVC3.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>The concept of MVCs was first introduced by Trygve Reenskaug, who proposed it as a way to develop desktop application GUIs.</p>
<p>Today the MVC pattern is used for modern web applications because it allows the application to be scalable, maintainable, and easy to expand.</p>
<h2 id="heading-why-should-you-use-mvc">Why Should You Use MVC?</h2>
<p>Three words: <strong>separation of concerns</strong>, or SoC for short.</p>
<p>The MVC pattern helps you break up the frontend and backend code into separate components. This way, it's much easier to manage and make changes to either side without them interfering with each other. </p>
<p>But this is easier said than done, especially when several developers need to update, modify, or debug a full-blown application simultaneously.</p>
<h2 id="heading-how-to-use-mvc">How to Use MVC</h2>
<p>To better illustrate the MVC pattern, I've included a web application that shows how these concepts all work.</p>
<p>My Car Clicker application is a variation of a well-known Cat Clicker app.</p>
<p>Here are some of the major differences in my app:</p>
<ol>
<li>No cats, <strong>only</strong> muscle cars images (sorry cat lovers!)</li>
<li>Multiple car models are listed</li>
<li>There are multiple click counters</li>
<li>It only displays the selected car</li>
</ol>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/04/Screen-Recording-2021-04-11-at-11.31.27.07-PM.gif" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Now let's dive into these three components that make up the MVC architecture pattern.</p>
<h3 id="heading-model-data">Model (data)</h3>
<p>The model's job is to simply manage the data. Whether the data is from a database, API, or a JSON object, the model is responsible for managing it.</p>
<p>In the Car Clicker application, the model object contains an array of car objects with all the information (data) needed for the app.</p>
<p>It also manages the current car being displayed with a variable that's initially set to <code>null</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> model = {
    <span class="hljs-attr">currentCar</span>: <span class="hljs-literal">null</span>,
    <span class="hljs-attr">cars</span>: [
        {
            <span class="hljs-attr">clickCount</span>: <span class="hljs-number">0</span>,
            <span class="hljs-attr">name</span>: <span class="hljs-string">'Coupe Maserati'</span>,
            <span class="hljs-attr">imgSrc</span>: <span class="hljs-string">'img/black-convertible-coupe.jpg'</span>,
        },
        {
            <span class="hljs-attr">clickCount</span>: <span class="hljs-number">0</span>,
            <span class="hljs-attr">name</span>: <span class="hljs-string">'Camaro SS 1LE'</span>,
            <span class="hljs-attr">imgSrc</span>: <span class="hljs-string">'img/chevrolet-camaro.jpg'</span>,
        },
        {
            <span class="hljs-attr">clickCount</span>: <span class="hljs-number">0</span>,
            <span class="hljs-attr">name</span>: <span class="hljs-string">'Dodger Charger 1970'</span>,
            <span class="hljs-attr">imgSrc</span>: <span class="hljs-string">'img/dodge-charger.jpg'</span>,
        },
        {
            <span class="hljs-attr">clickCount</span>: <span class="hljs-number">0</span>,
            <span class="hljs-attr">name</span>: <span class="hljs-string">'Ford Mustang 1966'</span>,
            <span class="hljs-attr">imgSrc</span>: <span class="hljs-string">'img/ford-mustang.jpg'</span>,
        },
        {
            <span class="hljs-attr">clickCount</span>: <span class="hljs-number">0</span>,
            <span class="hljs-attr">name</span>: <span class="hljs-string">'190 SL Roadster 1962'</span>,
            <span class="hljs-attr">imgSrc</span>: <span class="hljs-string">'img/mercedes-benz.jpg'</span>,
        },
    ],
};
</code></pre>
<h3 id="heading-views-ui">Views (UI)</h3>
<p>The view's job is to decide what the user will see on their screen, and how.</p>
<p>The Car Clicker app has two views: <code>carListView</code> and <code>CarView</code>.</p>
<p>Both views have two critical functions that define what each view wants to initialize and render.</p>
<p>These functions are where the app decides what the user will see and how.</p>
<h4 id="heading-carlistview">carListView</h4>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> carListView = {
    init() {
        <span class="hljs-comment">// store the DOM element for easy access later</span>
        <span class="hljs-built_in">this</span>.carListElem = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'car-list'</span>);

        <span class="hljs-comment">// render this view (update the DOM elements with the right values)</span>
        <span class="hljs-built_in">this</span>.render();
    },

    render() {
        <span class="hljs-keyword">let</span> car;
        <span class="hljs-keyword">let</span> elem;
        <span class="hljs-keyword">let</span> i;
        <span class="hljs-comment">// get the cars to be render from the controller</span>
        <span class="hljs-keyword">const</span> cars = controller.getCars();

        <span class="hljs-comment">// to make sure the list is empty before rendering</span>
        <span class="hljs-built_in">this</span>.carListElem.innerHTML = <span class="hljs-string">''</span>;

        <span class="hljs-comment">// loop over the cars array</span>
        <span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; cars.length; i++) {
            <span class="hljs-comment">// this is the car we've currently looping over</span>
            car = cars[i];

            <span class="hljs-comment">// make a new car list item and set its text</span>
            elem = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">'li'</span>);
            elem.className = <span class="hljs-string">'list-group-item d-flex justify-content-between lh-condensed'</span>;
            elem.style.cursor = <span class="hljs-string">'pointer'</span>;
            elem.textContent = car.name;
            elem.addEventListener(
                <span class="hljs-string">'click'</span>,
                (<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">carCopy</span>) </span>{
                    <span class="hljs-keyword">return</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
                        controller.setCurrentCar(carCopy);
                        carView.render();
                    };
                })(car)
            );
            <span class="hljs-comment">// finally, add the element to the list</span>
            <span class="hljs-built_in">this</span>.carListElem.appendChild(elem);
        }
    },
};
</code></pre>
<h4 id="heading-carview">CarView</h4>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> carView = {
    init() {
        <span class="hljs-comment">// store pointers to the DOM elements for easy access later</span>
        <span class="hljs-built_in">this</span>.carElem = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'car'</span>);
        <span class="hljs-built_in">this</span>.carNameElem = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'car-name'</span>);
        <span class="hljs-built_in">this</span>.carImageElem = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'car-img'</span>);
        <span class="hljs-built_in">this</span>.countElem = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'car-count'</span>);
        <span class="hljs-built_in">this</span>.elCount = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'elCount'</span>);


        <span class="hljs-comment">// on click, increment the current car's counter</span>
        <span class="hljs-built_in">this</span>.carImageElem.addEventListener(<span class="hljs-string">'click'</span>, <span class="hljs-built_in">this</span>.handleClick);

        <span class="hljs-comment">// render this view (update the DOM elements with the right values)</span>
        <span class="hljs-built_in">this</span>.render();
    },

    handleClick() {
        <span class="hljs-keyword">return</span> controller.incrementCounter();
    },

    render() {
        <span class="hljs-comment">// update the DOM elements with values from the current car</span>
        <span class="hljs-keyword">const</span> currentCar = controller.getCurrentCar();
        <span class="hljs-built_in">this</span>.countElem.textContent = currentCar.clickCount;
        <span class="hljs-built_in">this</span>.carNameElem.textContent = currentCar.name;
        <span class="hljs-built_in">this</span>.carImageElem.src = currentCar.imgSrc;
        <span class="hljs-built_in">this</span>.carImageElem.style.cursor = <span class="hljs-string">'pointer'</span>;
    },
};
</code></pre>
<h3 id="heading-controller-brain">Controller (Brain)</h3>
<p>The controller's responsibility is to pull, modify, and provide data to the user. Essentially, the controller is the link between the view and model.</p>
<p>Through getter and setter functions, the controller pulls data from the model and initializes the views.</p>
<p>If there are any updates from the views, it modifies the data with a setter function.</p>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> controller = {
    init() {
        <span class="hljs-comment">// set the current car to the first one in the list</span>
        model.currentCar = model.cars[<span class="hljs-number">0</span>];

        <span class="hljs-comment">// tell the views to initialize</span>
        carListView.init();
        carView.init();
    },

    getCurrentCar() {
        <span class="hljs-keyword">return</span> model.currentCar;
    },

    getCars() {
        <span class="hljs-keyword">return</span> model.cars;
    },

    <span class="hljs-comment">// set the currently selected car to the object that's passed in</span>
    setCurrentCar(car) {
        model.currentCar = car;
    },

    <span class="hljs-comment">// increment the counter for the currently-selected car</span>
    incrementCounter() {
        model.currentCar.clickCount++;
        carView.render();
    },
};

<span class="hljs-comment">// Let's goooo!</span>
controller.init();
</code></pre>
<h2 id="heading-mvc-frameworks">MVC Frameworks</h2>
<p>JavaScript has grown in popularity, and it's taken over the backend in recent years. More and more full-blown JavaScript applications have opted for the MVC architecture pattern in one way or another.</p>
<p>Frameworks come and go, but what has been constant are the concepts borrowed from the MVC architecture pattern.</p>
<p>Some of the early frameworks that applied these concepts were <strong>KnockoutJS</strong>, <strong>Django</strong>, and <strong>Ruby on Rails.</strong></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The most attractive concept of the MVC pattern is separation of concerns.</p>
<p>Modern web applications are very complex, and making a change can sometimes be a big headache.</p>
<p>Managing the frontend and backend in smaller, separate components allows for the application to be scalable, maintainable, and easy to expand.</p>
<p><em><strong>If you want to take a look at the Car Clicker app, the code is available on <a target="_blank" href="https://github.com/RafaelDavisH/car-clicker/blob/main/README.md">GitHub</a> or checkout the live version <a target="_blank" href="https://rafaeldavish.github.io/car-clicker/">here</a>.</strong></em> </p>
<p>🌟Thank you for reading this far!🌟</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
