<?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>Forem: Hosana Barcelos</title>
    <description>The latest articles on Forem by Hosana Barcelos (@hosana).</description>
    <link>https://forem.com/hosana</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%2F1131708%2Fa618f61e-b332-4e28-a507-696cfd6c1291.jpg</url>
      <title>Forem: Hosana Barcelos</title>
      <link>https://forem.com/hosana</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hosana"/>
    <language>en</language>
    <item>
      <title>Compiling 2025: My Professional Roadmap ✨</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Mon, 27 Jan 2025 02:34:32 +0000</pubDate>
      <link>https://forem.com/hosana/compiling-2025-my-professional-roadmap-44i</link>
      <guid>https://forem.com/hosana/compiling-2025-my-professional-roadmap-44i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/newyear"&gt;2025 New Year Writing challenge&lt;/a&gt;: Compiling 2025.&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;code&gt;C:hosana\journey\milestones&amp;gt; npm i 2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ⚒️ Setting up the environment
&lt;/h3&gt;

&lt;p&gt;The year 2025 has already started with some exciting news for me: I’m on vacation! For many people, this might not seem like big news, but for me, it’s one of the most significant milestones in my professional life, simply because I’ve never experienced taking time off work before—this is my very first time. As a lover of writing, I created a vacation journal to document what it feels like to experience each day away from work for the first time. I’m fascinated by the idea of reading these entries in the future. Taking advantage of this well-deserved rest, I’ve been focusing on my personal and professional goals in a relaxed and thoughtful way. During this time, I’ve been reflecting on and meditating on everything I hope to achieve this year: professional aspirations, interests, academic goals, and resources. I want to nourish myself with enriching content that will bring me closer to the professional I aspire to become.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;C:hosana\journey\milestones&amp;gt; npm run 2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🎯 Getting to work
&lt;/h3&gt;

&lt;p&gt;So far, I’m focusing on the following items to achieve my main interests and goals:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Postgraduate Studies in Software Engineering&lt;/strong&gt;: At the end of 2024, I started a postgraduate program in Software Engineering at UFRJ, and I want to absorb as much knowledge as possible from the course throughout 2025.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Systems Development&lt;/strong&gt;: 2024 was the most active year of my software development career so far. I developed systems for areas such as aesthetics, financial markets, social networks, and more. Along the way, I identified key areas for improvement in my career as a developer, especially after earning a higher seniority role. This year, I want to strengthen best development practices to &lt;strong&gt;stand out within my stack&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Micro-SaaS&lt;/strong&gt;: I began a course focused on micro-SaaS to better understand the market, and I want to complete the project I’m currently working on.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automations&lt;/strong&gt;: In 2024, I learned a lot about Atlassian products (especially Jira Software). I’ve realized how broad and comprehensive this tool is in daily use, and I want to further strengthen my skills by creating efficient automations that turn problems into productive ideas in practice.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design System&lt;/strong&gt;: I aim to continue developing a component library that I started last year. Depending on the outcome, I might revisit some steps I skipped during the process, including the entire Style Guide phase.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UX Writing&lt;/strong&gt;: I’ve selected a UX Writing course offered by FIAP after actively contributing to documentation and tone-of-voice guidelines at work. I’ve always been passionate about writing, and I find it fascinating to contribute professionally using textual techniques, usability in texts, semantics, microcopy, and information architecture.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agile Certification&lt;/strong&gt;: After a long time working in leadership roles and delivering consistent, quality-focused results using Scrum, I plan to enroll in and earn a significant certification in the field of agile methodologies.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are just a few (a preview) of my professional goals for 2025. In addition, I have personal goals that will help me face challenges with greater maturity.  &lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;http://localhost:2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🚀 Focus on results
&lt;/h3&gt;

&lt;p&gt;I have many goals and dreams for my career, and this will be another year where I’ll give my best to achieve everything I aspire to in the future as a technology professional.  &lt;/p&gt;




&lt;p&gt;Liked it? Connect with me through my social networks at: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfu88j9gwb5w34h6ukbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfu88j9gwb5w34h6ukbs.png" alt="line" width="800" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🇧🇷
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Esta é uma submissão para o &lt;a href="https://dev.to/challenges/newyear"&gt;Desafio de Escrita de Ano Novo 2025&lt;/a&gt;: Compilando 2025.&lt;/em&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;code&gt;C:hosana\journey\milestones&amp;gt; npm i 2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ⚒️ Preparando o ambiente
&lt;/h3&gt;

&lt;p&gt;O ano de 2025 já iniciou com novidades na minha vida: Estou de férias! Para muitas pessoas isso não é exatamente uma novidade, mas pra mim é uma das maiores novidades profissionais que já tive, simplesmente porque nunca soube o que era tirar férias do trabalho antes, é a primeira vez que posso fazer isso. E como uma boa amante de escrita, criei um diário de férias para deixar registrado sobre como foi viver cada dia durante a primeira vez que fiquei offline do trabalho, sou fascinada na ideia de pegar essas escritas para ler no futuro. Aproveitando esse bom tempo de descanso, tenho focado nos meus objetivos pessoais e profissionais de forma leve. Durante esse tempo, tenho me dedicado em entender e meditar em tudo o que espero para esse ano. Objetivos profissionais, interesses, objetivos acadêmicos, recursos... Quero me nutrir de muito conteúdo que me aproxime cada vez mais da profissional que desejo ser.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;C:hosana\journey\milestones&amp;gt; npm run 2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🎯 Colocando a mão na massa
&lt;/h3&gt;

&lt;p&gt;Até o presente momento, estou buscando me concentrar nos itens abaixo para alcançar meus interesses e objetivos principais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pós-graduação em Engenharia de Software&lt;/strong&gt;: Ao final do ano de 2024 dei início à Pós-graduação de Engenharia de Software pela UFRJ e quero absorver o máximo de conteúdo do curso em 2025. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Desenvolvimento de Sistemas&lt;/strong&gt;: 2024 foi o ano mais ativo em desenvolvimento de software da minha carreira até o momento. Desenvolvi sistemas para a área de estética, mercado financeiro, redes sociais, entre outros. Durante esse longo caminho, pude coletar principais pontos de melhoria na minha carreira como desenvolvedora, principalmente por conquistar um cargo de senioridade maior. A partir disso, neste ano, quero fortalecer boas práticas de desenvolvimento para me &lt;strong&gt;destacar dentro da minha stack&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Micro-SaaS&lt;/strong&gt;: Iniciei um curso focado em micro-saas para entender mais sobre o mercado e quero finalizar o projeto que estou desenvolvendo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automações&lt;/strong&gt;: Em 2024 aprendi muito sobre os produtos da Atlassian (em especial o Jira Software). No dia a dia percebo que é uma ferramenta extremamente ampla e completa, quero fortalecer mais ainda minhas habilidades realizando automações eficientes e que transformam problemas em ideias produtivas na prática.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design System&lt;/strong&gt;: Desejo continuar implementando uma biblioteca de componentes que comecei a desenvolver no ano passado. Dependendo do resultado, poderei dar atenção para algumas etapas que pulei durante o desenvolvimento que consiste em toda a parte de Style Guide.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UX Writing&lt;/strong&gt;: Separei o curso de UX Writing oferecido pela FIAP depois de ter colaborado ativamente em documentações e manual de tom e voz no ambiente de trabalho. Mergulho no universo da escrita desde sempre e acho fantástico poder colaborar profissionalmente com técnicas textuais, usabilidade em textos, semântica, microrredação e arquitetura da informação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Certificação Ágil&lt;/strong&gt;: Após muito tempo trabalhando em posição de liderança e entregas consistentes com foco em qualidade utilizando o Scrum, desejo realizar minha inscrição para tirar uma certificação importante no mundo das metodologias.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esses são alguns (uma prévia) dos meus objetivos profissionais para 2025. Além deles, possuo metas pessoais que possam me ajudar a enfrentar os desafios com mais maturidade.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;code&gt;http://localhost:2025&lt;/code&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🚀 Foco em resultado
&lt;/h3&gt;

&lt;p&gt;Tenho muitos objetivos e sonhos para minha carreira e será mais um ano em que darei o meu melhor para alcançar tudo o que almejo no futuro como uma profissional de tecnologia.&lt;/p&gt;




&lt;p&gt;Curtiu? Se conecte comigo onde preferir acessando minhas redes em: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>newyearchallenge</category>
      <category>career</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Alien game: traveling through space in a flying saucer 👽🛸🚀</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Sun, 22 Sep 2024 21:18:10 +0000</pubDate>
      <link>https://forem.com/hosana/alien-game-traveling-through-space-in-a-flying-saucer-3km3</link>
      <guid>https://forem.com/hosana/alien-game-traveling-through-space-in-a-flying-saucer-3km3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/webgame"&gt;Web Game Challenge&lt;/a&gt;, Build a Game: Alien Edition&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;An alien who needs to dodge obstacles to travel in their flying saucer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feyvf19ljxyu0de9svidw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feyvf19ljxyu0de9svidw.png" alt="Game Printscreen" width="800" height="568"&gt;&lt;/a&gt;&lt;br&gt;
Game: &lt;a href="https://aliengame-ten.vercel.app" rel="noopener noreferrer"&gt;https://aliengame-ten.vercel.app&lt;/a&gt;&lt;br&gt;
Repository: &lt;a href="https://github.com/hosanabarcelos/alien-game" rel="noopener noreferrer"&gt;https://github.com/hosanabarcelos/alien-game&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;A game inspired by the famous dinosaur game that shows up when we're offline. It was fun to think of items that could fit into the scenario because I'm a big fan of aliens hahaha. Additionally, I really enjoyed choosing sounds to add to the logic of my game while I was working through some bugs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensource.org/license/mit" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;Liked it? Connect with me through my social networks at: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>GitHub Foundations certification is now free!💲</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Tue, 17 Sep 2024 21:44:49 +0000</pubDate>
      <link>https://forem.com/hosana/github-foundations-certification-is-free-1mlk</link>
      <guid>https://forem.com/hosana/github-foundations-certification-is-free-1mlk</guid>
      <description>&lt;p&gt;Verified students on &lt;a href="https://github.com/education" rel="noopener noreferrer"&gt;GitHub Education&lt;/a&gt; can now take the &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;GitHub Foundations&lt;/a&gt; certification exam for free!&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;p&gt;You read that correctly at the beginning of this article! GitHub certifications were costing US$99 earlier this year, but starting today (09/17/2024), those who wish to pursue an official &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;GitHub Foundations&lt;/a&gt; certification can do so at no cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Do You Need?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Be a Verified Student
&lt;/h3&gt;

&lt;p&gt;You need to be a verified student at &lt;a href="https://education.github.com/pack/join" rel="noopener noreferrer"&gt;GitHub Education&lt;/a&gt;.&lt;br&gt;
GitHub verifies this to confirm that you are a student. They require candidates to use a school or university-issued email address to register.&lt;/p&gt;

&lt;h3&gt;
  
  
  Have Two-Factor Authentication Enabled on Your GitHub Account
&lt;/h3&gt;

&lt;p&gt;Your GitHub account must have two-factor authentication enabled to access this benefit. Just log in to your account, go to settings and enable 2FA authentication at &lt;a href="https://github.com/settings/security" rel="noopener noreferrer"&gt;Password and authentication&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  What Content Should You Know?
&lt;/h2&gt;

&lt;p&gt;The exam tests basic skills with fundamental GitHub concepts such as repositories, commits, branches, markdowns, and project management. You should be familiar with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction to Git and GitHub&lt;/li&gt;
&lt;li&gt;GitHub Repositories&lt;/li&gt;
&lt;li&gt;Contributor Features&lt;/li&gt;
&lt;li&gt;Modern Development&lt;/li&gt;
&lt;li&gt;Project Management&lt;/li&gt;
&lt;li&gt;Privacy, Security, and Administration&lt;/li&gt;
&lt;li&gt;GitHub Community Benefits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Register for the Exam?
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;https://education.github.com/experiences/foundations_certificate&lt;/a&gt; or step-by-step instructions on taking the exam:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Introduction Video: Watch the video available at &lt;a href="https://youtu.be/M3IZLIvr7GA" rel="noopener noreferrer"&gt;https://youtu.be/M3IZLIvr7GA&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Certification Study Guide: Access the study guide at &lt;a href="https://github.com/LadyKerr/github-certification-guide/blob/main/study-guides/gh-foundations.md" rel="noopener noreferrer"&gt;https://github.com/LadyKerr/github-certification-guide/blob/main/study-guides/gh-foundations.md&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource Repository: Access the repository with guides and resources to help you prepare at &lt;a href="https://github.com/LadyKerr/github-certification-guide" rel="noopener noreferrer"&gt;https://github.com/LadyKerr/github-certification-guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⭐️ Register for the Exam: After reviewing all the guides and resources and feeling prepared, register at &lt;a href="https://examregistration.github.com/certification/GHF" rel="noopener noreferrer"&gt;https://examregistration.github.com/certification/GHF&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;Remember, this exam will be free if you are a verified student. Although you might see a $99 fee on the screen, GitHub makes it clear that a voucher will be applied during checkout, reducing the cost to $0. See below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcefv6m8r8mitla6f3vb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcefv6m8r8mitla6f3vb2.png" alt="valor da prova"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Credly Badge and Certification
&lt;/h2&gt;

&lt;p&gt;After completing the exam, you will receive a #Credly badge to showcase your skills, a badge for completing specific courses or certifications. This acts as a digital proof of your achievements.&lt;/p&gt;

&lt;p&gt;So, will you take advantage of this opportunity?&lt;/p&gt;




&lt;p&gt;Liked it? Connect with me through my social networks at: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmudichvh8q1rs9tvbqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmudichvh8q1rs9tvbqu.png" alt="line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🇧🇷
&lt;/h1&gt;

&lt;p&gt;Os alunos verificados na &lt;a href="https://github.com/education" rel="noopener noreferrer"&gt;GitHub Education&lt;/a&gt; agora podem fazer o exame de certificação da &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;GitHub Foundations&lt;/a&gt; de forma gratuita!&lt;/p&gt;




&lt;h2&gt;
  
  
  Qual a novidade?
&lt;/h2&gt;

&lt;p&gt;É isso mesmo que você leu no início desse artigo! As certificações da GitHub estavam custando US$99 no início do ano, mas a partir de hoje (17/09/2024) quem quiser se aventurar em busca de uma certificação oficial da &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;GitHub Foundations&lt;/a&gt;, poderá fazer isso gratuitamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que precisa?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ser um estudante verificado
&lt;/h3&gt;

&lt;p&gt;Você precisa ser um aluno verificado em &lt;a href="https://education.github.com/pack/join" rel="noopener noreferrer"&gt;GitHub Education&lt;/a&gt;. &lt;br&gt;
O GitHub faz essa verificação para confirmar que você é um estudante. Sendo assim, exigem que os candidatos usem um endereço de e-mail emitido pela escola ou universidade para se inscrever. &lt;/p&gt;

&lt;h3&gt;
  
  
  Ter sua conta do GitHub com 2FA habilitada
&lt;/h3&gt;

&lt;p&gt;Sua conta do GitHub deve ter a autenticação de dois fatores habilitada para ter acesso ao benefício. Basta fazer login na sua conta, acessar as configurações e habilitar a autenticação 2FA em &lt;a href="https://github.com/settings/security" rel="noopener noreferrer"&gt;Senha e autenticação&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual conteúdo você deve saber?
&lt;/h2&gt;

&lt;p&gt;A prova mede habilidades de nível básico com noções básicas do GitHub, como repositórios, commits, ramificações, markdowns e gerenciamento de projetos. Então é esperado que você saiba como funciona:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introdução ao Git e GitHub&lt;/li&gt;
&lt;li&gt;Repositórios do GitHub&lt;/li&gt;
&lt;li&gt;Recursos de colaborador&lt;/li&gt;
&lt;li&gt;Desenvolvimento moderno&lt;/li&gt;
&lt;li&gt;Gerenciamento de projetos&lt;/li&gt;
&lt;li&gt;Privacidade, Segurança e Administração&lt;/li&gt;
&lt;li&gt;Benefícios da Comunidade GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Como me inscrever para a prova?
&lt;/h2&gt;

&lt;p&gt;Em &lt;a href="https://education.github.com/experiences/foundations_certificate" rel="noopener noreferrer"&gt;https://education.github.com/experiences/foundations_certificate&lt;/a&gt; há o passo a passo de como realizar o exame, que é:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Vídeo de apresentação: Veja o vídeo disponível em &lt;a href="https://youtu.be/M3IZLIvr7GA" rel="noopener noreferrer"&gt;https://youtu.be/M3IZLIvr7GA&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guia de estudo para a certificação: Acesse o guia de estudo em &lt;a href="https://github.com/LadyKerr/github-certification-guide/blob/main/study-guides/gh-foundations.md" rel="noopener noreferrer"&gt;https://github.com/LadyKerr/github-certification-guide/blob/main/study-guides/gh-foundations.md&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Repositório de recursos: Acesse o repositório com guias e recursos que te ajudarão a se preparar em: &lt;a href="https://github.com/LadyKerr/github-certification-guide" rel="noopener noreferrer"&gt;https://github.com/LadyKerr/github-certification-guide&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⭐️ Cadastrar-se para a prova: Depois de revisar todos os guias e recursos e se sentir preparado, se registre em: &lt;a href="https://examregistration.github.com/certification/GHF" rel="noopener noreferrer"&gt;https://examregistration.github.com/certification/GHF&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Valor
&lt;/h2&gt;

&lt;p&gt;Lembre-se, essa prova não terá custos se você for um estudante verificado. Por mais que você veja o valor de US$99 em tela, o GitHub deixa claro que o voucher será aplicado durante a finalização da compra e o valor se reduz a US$0. Observe:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcefv6m8r8mitla6f3vb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcefv6m8r8mitla6f3vb2.png" alt="valor da prova"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Selo Credly e Certificação
&lt;/h2&gt;

&lt;p&gt;Depois de concluir a prova, você ganhará um selo #Credly para mostrar suas habilidades, um selo para quem completa cursos ou certificações específicas. Isso funciona como uma prova digital para fornecer suas conquistas.&lt;/p&gt;

&lt;p&gt;E aí, vai aproveitar essa oportunidade?&lt;/p&gt;




&lt;p&gt;Curtiu? Se conecte comigo onde preferir acessando minhas redes em: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>devjournal</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Purple Theme space animation with Saturn planet 🪐🌠👾</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Wed, 11 Sep 2024 16:14:34 +0000</pubDate>
      <link>https://forem.com/hosana/purple-theme-space-animation-with-saturn-planet-4ho</link>
      <guid>https://forem.com/hosana/purple-theme-space-animation-with-saturn-planet-4ho</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2024-09-04"&gt;Frontend Challenge v24.09.04&lt;/a&gt;, CSS Art: Space.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;A space-themed project in purple, inspired by my website &lt;a href="https://hosana.me" rel="noopener noreferrer"&gt;hosana.me&lt;/a&gt;, created for the Frontend Challenge. It features a space background with subtle animation and a Saturn-like planet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Code and result on CodePen. &lt;br&gt;
&lt;iframe height="600" src="https://codepen.io/hosanabarcelos/embed/gONEdME?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The idea behind the project for the Challenge:
&lt;/h3&gt;

&lt;p&gt;A simple project that came to mind as soon as I saw the Challenge, since this time the theme is space. Not only do I really like this theme, but my portfolio website also has a complete space vibe. Combining both resulted in the project shown above. The smooth CSS animation on the orbit surprised me because I realized it was much simpler than I thought.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inspiration Website:
&lt;/h3&gt;

&lt;p&gt;None other than my portfolio website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggqavq02orttdeewrepo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggqavq02orttdeewrepo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Liked it? Connect with me through my social networks at: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Clean Code: Exerça a habilidade de escrever código simples e eficiente🔥</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Sun, 08 Sep 2024 18:41:58 +0000</pubDate>
      <link>https://forem.com/hosana/clean-code-exerca-a-habilidade-de-escrever-codigo-simples-e-eficiente-3pjf</link>
      <guid>https://forem.com/hosana/clean-code-exerca-a-habilidade-de-escrever-codigo-simples-e-eficiente-3pjf</guid>
      <description>&lt;p&gt;Hoje eu trago alguns métodos e técnicas simples de Clean Code, mas que fazem toda a diferença na hora de escrevermos nosso código. &lt;/p&gt;




&lt;h2&gt;
  
  
  O que veremos?
&lt;/h2&gt;

&lt;p&gt;Você vai acompanhar comigo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Código limpo? O que é isso?&lt;/li&gt;
&lt;li&gt;Funções&lt;/li&gt;
&lt;li&gt;Nomes significativos&lt;/li&gt;
&lt;li&gt;Comentários&lt;/li&gt;
&lt;li&gt;Formatação&lt;/li&gt;
&lt;li&gt;Benefícios&lt;/li&gt;
&lt;li&gt;Dicas&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Código limpo? O que é isso?
&lt;/h2&gt;

&lt;p&gt;Resumidamente, Clean Code é uma filosofia de desenvolvimento de software que auxilia programadores a aplicarem técnicas e métodos simples ao escrever código. Se você é programador, provavelmente já se deparou com códigos de difícil compreensão que acabaram dificultando e atrasando seu trabalho. Essas técnicas tem como objetivo facilitar a escrita, leitura e compreensão tanto de quem escreveu o código, quanto de quem possa pegá-lo no futuro.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“…escrever um código limpo é como pintar um quadro. A maioria de nós sabe quando a figura foi bem ou mal pintada.&lt;/p&gt;

&lt;p&gt;Mas ser capaz de distinguir uma boa arte de uma ruim não significa que você saiba pintar.&lt;/p&gt;

&lt;p&gt;Assim como distinguir um código limpo de um ruim não quer dizer que saibamos escrever um código limpo.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Livro Clean Code — Página 6&lt;/p&gt;

&lt;p&gt;Se preferir, você pode entender mais sobre a definição de Clean Code &lt;a href="https://www.youtube.com/watch?v=ln6t3uyTveQ" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;. A seguir, veremos algumas técnicas de Clean Code na prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  Funções
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Usar responsabilidade única
&lt;/h3&gt;

&lt;p&gt;É uma boa prática criar funções com responsabilidade única. Abaixo é possível visualizar um exemplo simples de uma função que faz soma, subtração e exibe o resultado, tudo em um mesmo lugar:&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de código sujo:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateAndDisplay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;operation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;operation&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;operation&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;subtract&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;DisplayResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DisplayResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa implementação pode ser aprimorada se mantermos uma responsabilidade única para cada função. Vamos ver como ficaria fazendo o uso de Clean Code? Se liga:&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Exemplo de código limpo:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DisplayResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;O resultado é: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalSum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DisplayResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalSum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalSubtract&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;DisplayResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;totalSubtract&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se ligou? Agora vemos que separamos as responsabilidades, fizemos reutilização de código, usamos flexibilidade pois podemos facilmente adicionar novas operações criando novas funções, sem alterar o código existente, o que segue o princípio "aberto para extensão, fechado para modificação" e além disso, fazemos o bom uso de menor complexidade condicional. &lt;/p&gt;

&lt;p&gt;A primeira versão usa condicionais (if e else if) para determinar a operação, o que adiciona um pouco mais de complexidade, né? Já na segunda versão, cada operação é isolada, e o código que chama essas operações (totalSum e totalSubtract) é simples e direto, sem necessidade de lógica condicional.&lt;/p&gt;

&lt;h3&gt;
  
  
  Usar técnicas para nomes de funções
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;VERBO&lt;/strong&gt; + &lt;strong&gt;PALAVRA-CHAVE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa técnica é ideal para deixar nomes de funções mais claras e explicativas. Vejamos alguns exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;removeUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;createNewUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;createPdfTicket&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;updateUserProfile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Evitar repetições
&lt;/h3&gt;

&lt;p&gt;Quem trabalha com programação sabe que quando percebe-se que um código está grande demais, significa que algo dá pra ser melhorado (refatorado). Nesse caso, muitas vezes acabamos repetindo códigos que poderiam ser aproveitados em outros lugares. Vejamos um exemplo prático:&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de código sujo e repetitivo:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Width must be positive.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Height must be positive.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ✅ Exemplo de código limpo:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;validatePositive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; must be positive.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;validatePositive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;width&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;validatePositive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;height&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observe que o valor recebido pela condicional, possui a mesma regra de validação. Com isso, não é necessário criarmos duas regras de validação para que tudo ocorra como o esperado e ainda conseguimos manter a função clara. Essa refatoração torna o código mais modular e reutilizável, eliminando a necessidade de repetir a verificação em diferentes partes do código. Massa, né?&lt;/p&gt;

&lt;h2&gt;
  
  
  Nomes significativos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Responder questões para definir um nome
&lt;/h3&gt;

&lt;p&gt;Uma boa técnica para se pensar na hora de definir um nome para variáveis, funções e etc, é usar a &lt;strong&gt;habilidade de descrição&lt;/strong&gt;. Pense:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Por que existe? O que faz? Como é usado? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Responder essas três questões pode ajudar o programador a definir um nome significativo e que esteja claro para quem pegar esse código no futuro. Por exemplo:&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de nome não significativo:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// tempo decorrido em dias&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sabemos que é uma boa prática evitar comentários no código. Esse exemplo acima mostra que mesmo recebendo um comentário, essa variável não possui um nome significativo. Porque esse tempo existe? O que esse tempo faz? Como esse tempo é usado? A getnte não faz ideia!&lt;/p&gt;

&lt;p&gt;Agora veja alguns exemplos de nomes significativos parecidos com o objetivo do exemplo anterior:&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Exemplo de nomes significativos:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;daysSinceAccountCreation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;daysSinceLastPostModification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;daysSinceLastLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos pegar a primeira variável e usar a técnica de responder as três questões: &lt;/p&gt;

&lt;p&gt;-&amp;gt; Por que existe? Para saber há quanto tempo a conta existe. &lt;br&gt;
-&amp;gt; O que faz? Exibe a quantidade de dias desde a criação de conta. &lt;br&gt;
-&amp;gt; Como é usado? Pode ser usado como um campo de exibição na seção de informações da conta, por exemplo.&lt;/p&gt;

&lt;p&gt;Agora ficou mais simples e claro, não é?&lt;/p&gt;

&lt;h3&gt;
  
  
  Não usar números mágicos
&lt;/h3&gt;

&lt;p&gt;Como programadora, por diversas vezes me deparei com números em que eu não fazia ideia do porquê existiam. A função existe, funciona perfeitamente e tudo ocorre como o esperado. Mas por que é esperado esse tal número? Ou por que não é esperado esse tal número? Vejamos um exemplo prático:&lt;/p&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de uso de número mágico:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Atendimento indisponível.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A cafeteria fecha às 18h. Após esse horário, atendimentos não são mais realizados na loja. Podemos transformar essa informação em código, usando Clean Code:&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Exemplo de código limpo sem uso de número mágico:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currentHour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;closingHour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentHour&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;closingHour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Atendimento indisponível.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora é explícito para qualquer reviewer que esse número 18 presente no código, é equivalente ao horário de fechamento da loja.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evitar informações confusas
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de informação confusa:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;groupName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user02&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa variável faria mais sentido se estivesse recebendo diretamente um array com TODOS os tipos de usuários, concorda? Esse nome pode acabar causando confusão, pois o objeto retorna apenas usuários do tipo Admin.&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Exemplo de informação clara:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;adminUserGroup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;groupName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user01&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user02&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora fica claro que o uso dessa variável retorna apenas usuários do tipo Admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fazer distinção significativa
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ❌ Exemplo de distinção suja:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getActiveAccount&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;getActiveAccounts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se você é programador ou programadora, muito provavelmente já teve problemas com um ponto e vírgula pelo menos alguma vez na vida. Dá pra compararmos um ponto e vírgula com esse exemplo acima. A letra &lt;strong&gt;S&lt;/strong&gt; ao final da função, pode causar um erro difícil de ser percebido rapidamente, atrasando todo o trabalho do programador.&lt;/p&gt;

&lt;p&gt;A partir disso, é importante lembrarmos de fazer distinção significativa ao escrever código que tenha funções diferentes mas no mesmo contexto:&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Exemplo de distinção significativa:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;getActiveAccount&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;getAllActiveAccounts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Comentários
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Nome claro &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; comentários
&lt;/h3&gt;

&lt;p&gt;O que você quer escrever no comentário? Por que não dizer a mesma coisa em nome de funções ou variáveis? Sempre que sentir a necessidade de fazer um comentário, tente fazer isso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comente só o necessário
&lt;/h3&gt;

&lt;p&gt;Muitos comentários poluem e confundem o código. Não comente o óbvio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comentários absoletos
&lt;/h3&gt;

&lt;p&gt;O código evolui com o tempo, mas nem sempre os comentários são atualizados. Ao surgir necessidade de deixar um comentário no código, é importante lembrarmos de atualizá-lo também.&lt;/p&gt;

&lt;h3&gt;
  
  
  Não usar como versionamento
&lt;/h3&gt;

&lt;p&gt;EXCLUIR código não usado ao invés de comentar, é uma boa prática. Já me deparei com alguns colegas dizendo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas iremos usar no futuro.&lt;br&gt;
É muito simples, não foi trabalho a mais e a gente pode precisar depois.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Já temos o versionamento com GIT para nos ajudar nisso, não é? Ao precisar desse código, é só consultarmos nosso código em versões passadas. Sendo assim, sempre que o código não estiver sendo mais usado, exclua-o.&lt;/p&gt;

&lt;h2&gt;
  
  
  Formatação
&lt;/h2&gt;

&lt;p&gt;Lembre-se de três pontos importantes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Padronização&lt;/li&gt;
&lt;li&gt;Consistência&lt;/li&gt;
&lt;li&gt;Definição do time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Padronização
&lt;/h3&gt;

&lt;p&gt;Escolher um estilo de indentação, ponto e vírgula, aspas simples ou dupla, idioma e etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consistência
&lt;/h3&gt;

&lt;p&gt;Ser consistente no código, traz facilidade aos desenvolvedores para identificar a estrutura e a lógica do código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definição do time
&lt;/h3&gt;

&lt;p&gt;É uma boa prática seguir o que for decidido pelo time, mesmo se não for a sua preferência pessoal. Algumas vezes já aderi à formatações específicas de um framework, mesmo preferindo outro tipo de formatação.&lt;/p&gt;

&lt;p&gt;Dentro de um time, em ambiente de trabalho, não é diferente. Por isso, é importante que o time faça uma definição de formatação que faça sentido para os projetos em que estiverem trabalhando. Todos do time devem seguir esse padrão definido. &lt;/p&gt;

&lt;h2&gt;
  
  
  Benefícios
&lt;/h2&gt;

&lt;p&gt;"E pra que eu vou usar Clean Code no dia a dia, Hosana?" Se você não quiser ter facilidade na manutenção do seu código, melhorar a legibilidade dele, previnir erros, aumentar sua produtividade, facilitar os testes e aumentar a qualidade, nem precisa usar mesmo. :D&lt;/p&gt;

&lt;h2&gt;
  
  
  Dicas adicionais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Revise&lt;/strong&gt; seu próprio código antes de entregar a tarefa, torne isso um hábito como parte do esforço que você vai ter nela.&lt;/li&gt;
&lt;li&gt;Pense antes de nomear e exerça a &lt;strong&gt;habilidade de descrição&lt;/strong&gt;. Como você explicaria o que está acontecendo no código para outra pessoa?&lt;/li&gt;
&lt;li&gt;Faça o uso de ferramentas que facilitam a padronização, como: &lt;strong&gt;ESLint&lt;/strong&gt; e &lt;strong&gt;Prettier&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Exerça refatoração. Deixe o código sempre &lt;strong&gt;mais limpo&lt;/strong&gt; do que quando encontrou, sempre que possível.&lt;/li&gt;
&lt;li&gt;Livro sobre &lt;strong&gt;Clean Code&lt;/strong&gt; em português disponível para compra na &lt;a href="https://a.co/d/3P2jH7I" rel="noopener noreferrer"&gt;Amazon&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Curtiu? Se conecte comigo onde preferir acessando minhas redes em: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>backend</category>
    </item>
    <item>
      <title>Como rodar seu projeto Nuxt em um container Docker? 🐳</title>
      <dc:creator>Hosana Barcelos</dc:creator>
      <pubDate>Sat, 31 Aug 2024 16:09:00 +0000</pubDate>
      <link>https://forem.com/hosana/pt-br-rodando-projeto-nuxt-em-um-container-docker-2gl5</link>
      <guid>https://forem.com/hosana/pt-br-rodando-projeto-nuxt-em-um-container-docker-2gl5</guid>
      <description>&lt;p&gt;Oi! Nesse guia, vou te mostrar como é bem simples e rápido &lt;em&gt;dockerizar&lt;/em&gt; uma aplicação Nuxt. Bora lá?&lt;/p&gt;




&lt;h2&gt;
  
  
  Nuxt
&lt;/h2&gt;

&lt;p&gt;O objetivo e foco desse guia é entender como podemos adicionar um projeto Nuxt dentro de um container &lt;strong&gt;Docker&lt;/strong&gt;. Inicialmente, para criar e rodar o seu projeto Nuxt, consulte a &lt;a href="https://nuxt.com/docs/getting-started/installation" rel="noopener noreferrer"&gt;documentação oficial do Nuxt&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O arquivo YAML
&lt;/h3&gt;

&lt;p&gt;Na raiz do seu projeto Nuxt, precisamos criar um arquivo YAML chamado docker-compose.yml.&lt;/p&gt;

&lt;p&gt;Dentro desse arquivo, iremos adicionar nossa configuração para &lt;em&gt;dockerizar&lt;/em&gt; a nossa aplicação. Abaixo, você consegue visualizar como ficou o meu arquivo de configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node:14.18.2-buster-slim&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docnux&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/var/www/html&lt;/span&gt;
    &lt;span class="na"&gt;working_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/var/www/html&lt;/span&gt;
    &lt;span class="na"&gt;stdin_open&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;tty&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;3007:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode usar essa configuração para o seu projeto também, mas é importante entender o que cada carinha presente nesse arquivo faz:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;version&lt;/code&gt;→ Versão do docker-compose que você quer utilizar;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;services&lt;/code&gt;→ Instanciar os serviços (containers) que você quer subir;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app&lt;/code&gt;→ Nome do serviço;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;image&lt;/code&gt;→ Declara a imagem que vai ser utilizada para subir o container em questão (é possível pegar essa imagem em &lt;a href="https://hub.docker.com/search?image_filter=official&amp;amp;type=image&amp;amp;q=" rel="noopener noreferrer"&gt;https://hub.docker.com/search?image_filter=official&amp;amp;type=image&amp;amp;q=&lt;/a&gt;);&lt;/p&gt;

&lt;p&gt;&lt;code&gt;container_name&lt;/code&gt; → Declara o nome do container (para não gerar um aleatório);&lt;/p&gt;

&lt;p&gt;&lt;code&gt;volumes&lt;/code&gt; → Atrelar diretórios de fora do container (ou seja, na sua máquina) para algum diretório dentro do container (&lt;strong&gt;&lt;em&gt;diretório de fora : diretório de dentro&lt;/em&gt;&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;working_dir&lt;/code&gt; → Diretório de entrada a partir do momento em que o container é inicializado;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;stdin_open&lt;/code&gt; → Quando true, permite que a entrada padrão de dados (standard input ou stdin) esteja "aberta". Isso serve para poder rodar o container interativo, ou seja, você poderá acessar o seu &lt;em&gt;shell&lt;/em&gt;, executar comandos e etc;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tty&lt;/code&gt; → (TeleTypeWriter);&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ports&lt;/code&gt; → Expor portas para uso posterior. Nesse contexto, podemos atrelar portas de fora do container à portas de dentro do container (&lt;strong&gt;&lt;em&gt;porta de fora : porta de dentro&lt;/em&gt;&lt;/strong&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Subindo nosso container Docker
&lt;/h3&gt;

&lt;p&gt;Após definir as configurações do seu container, basta executar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se a mensagem no terminal retornar &lt;strong&gt;…done&lt;/strong&gt; significa que seu container foi upado e está pronto!&lt;/p&gt;

&lt;h3&gt;
  
  
  Usando nosso projeto Nuxt com Docker
&lt;/h3&gt;

&lt;p&gt;Agora, para rodar comandos dentro do container, é necessário seguir o padrão de comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nb"&gt;exec&lt;/span&gt; &amp;lt;nome &lt;span class="k"&gt;do &lt;/span&gt;serviço&amp;gt; &amp;lt;comando&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a nossa aplicação Nuxt, podemos rodar dois comandos iniciais:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nb"&gt;exec &lt;/span&gt;app npm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nb"&gt;exec &lt;/span&gt;app npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Repare, o docker-compose executa os comandos do Nuxt dentro do meu serviço nomeado como &lt;code&gt;app&lt;/code&gt;, assim como vimos na criação do YAML.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Pronto! Você pode visualizar a aplicação no navegador em &lt;a href="http://localhost:3007" rel="noopener noreferrer"&gt;http://localhost:3007&lt;/a&gt; e agora seu projeto Nuxt está &lt;em&gt;dockerizado&lt;/em&gt;. Massa, né? 🚀&lt;/p&gt;

&lt;p&gt;Lembre-se: Esse guia é produzido de maneira rápida e objetiva. Para saber mais sobre imagens e qual escolher ou usar no seu container, consulte a &lt;a href="https://hub.docker.com" rel="noopener noreferrer"&gt;documentação oficial do Docker Hub&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Curtiu? Se conecte comigo onde preferir acessando minhas redes em: &lt;a href="https://www.hosana.me" rel="noopener noreferrer"&gt;https://www.hosana.me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>nuxt</category>
      <category>vue</category>
      <category>containers</category>
    </item>
  </channel>
</rss>
