<?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[ Daniel Rosa - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Daniel Rosa - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 21 May 2026 10:00:06 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/daniel/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ O freeCodeCamp faz 10 anos – atualizações sobre as certificações ]]>
                </title>
                <description>
                    <![CDATA[ Há 10 anos, eu me sentava no closet do meu apartamento em São Francisco e programava as primeiras centenas de linhas do freeCodeCamp. Eu não sabia na época, mas o fCC rapidamente se tornaria uma comunidade global de adultos ocupados aprendendo programação juntos. Muitos desses campers – como nos chamamos ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-freecodecamp-faz-10-anos-atualizacoes-sobre-as-certificacoes/</link>
                <guid isPermaLink="false">672bc419436d4204b3e53a95</guid>
                
                    <category>
                        <![CDATA[ freeCodeCamp ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 07 Nov 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/767f41f9-70e6-4e1c-b0d5-1927a925c9cc.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/freecodecamp-turns-10-major-curriculum-updates/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">freeCodeCamp Turns 10 + Major Certification Updates</a>
      </p><p>Há 10 anos, eu me sentava no closet do meu apartamento em São Francisco e programava as primeiras centenas de linhas do freeCodeCamp.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/a29ae1ca-0350-4e94-b57a-296eb35dae6f.jpeg" class="kg-image" alt="a29ae1ca-0350-4e94-b57a-296eb35dae6f" width="485" height="485" loading="lazy"></figure><p>Eu não sabia na época, mas o fCC rapidamente se tornaria uma comunidade global de adultos ocupados aprendendo programação juntos.</p><p>Muitos desses <em>campers</em> – como nos chamamos agora – conseguiram empregos como engenheiros de software. Muitos deles também contribuíram com código para a base de código aberto do fCC.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/9fe0f108-361f-4384-bbb9-774b9bbe7fe2.jpg" class="kg-image" alt="9fe0f108-361f-4384-bbb9-774b9bbe7fe2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/9fe0f108-361f-4384-bbb9-774b9bbe7fe2.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/9fe0f108-361f-4384-bbb9-774b9bbe7fe2.jpg 960w" sizes="(min-width: 720px) 720px" width="960" height="528" loading="lazy"></figure><p>Nos últimos 10 anos, construímos:</p><ol><li>Um currículo interativo de 3 mil horas que ensina Matemática, Programação e Ciência da Computação.</li><li>Uma biblioteca com mais de 12 mil tutoriais de programação – e dezenas de livros completos – em nossa <a href="https://www.freecodecamp.org/news/">publicação em inglês</a>.</li><li>Um canal no YouTube com mais de mil cursos completos gratuitos. Acabamos de atingir 10 milhões de inscritos há poucos dias.</li><li>O fórum de programação mais gentil e solidário do planeta. Temos também um servidor no Discord igualmente gentil.</li></ol><p>A equipe cresceu de apenas eu para um grupo de 35 professores e engenheiros. Essa é apenas a ponta do iceberg. Uma grande parte do trabalho é feita pela própria comunidade <em>open source</em>. Todos os dias, voluntários surgem para melhorar nossa base de código, criar recursos de aprendizado abertos e ajudar uns aos outros no fórum.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/089e4ec6-16aa-49df-81c3-6b27c3001ed4.jpeg" class="kg-image" alt="089e4ec6-16aa-49df-81c3-6b27c3001ed4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/089e4ec6-16aa-49df-81c3-6b27c3001ed4.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/089e4ec6-16aa-49df-81c3-6b27c3001ed4.jpeg 607w" width="607" height="515" loading="lazy"></figure><p>Estamos apenas começando. Então, em vez de um texto sentimental sobre os <strong>primeiros</strong> 10 anos do freeCodeCamp, vamos focar em nossos planos para os <strong>próximos</strong> 10 anos à nossa frente.</p><p>Afinal, a missão da nossa instituição beneficente é criar recursos de aprendizado gratuitos que ajudem as pessoas a aprender matemática, programação e ciência da computação. Ainda há <strong>muito</strong> trabalho a ser feito.</p><p>Neste artigo, detalharei nossas principais iniciativas para a próxima década. Vou mostrar algumas grandes melhorias – algumas das quais estão chegando a tempo para o Natal.</p><h2 id="uma-certifica-o-para-governar-todas-elas">Uma certificação para governar todas elas</h2><p>A maior melhoria é que estamos combinando a maior parte do nosso currículo atual em uma única certificação abrangente de <em>Desenvolvedor Full-Stack Certificado</em> (CFSD). Estamos desenvolvendo várias novas certificações igualmente abrangentes do zero.</p><p>Buscamos inspiração em organizações sem fins lucrativos de certificação de desenvolvedores estabelecidas, como a CompTIA e a (ISC)². Estamos reformulando nossas certificações para se assemelharem mais de perto às certificações estabelecidas no setor.</p><p>Nossas novas certificações:</p><ul><li>Serão ainda mais abrangentes</li><li>Envolverão um exame final</li><li>Envolverão um projeto final</li><li>Serão válidas por 3 anos, com um caminho para renovação</li></ul><p>Como tudo o que o freeCodeCamp cria, essas certificações continuarão sendo <strong>completamente gratuitas</strong>.</p><p>O currículo de preparação para a certificação de <em>Desenvolvedor Full-Stack Certificado</em> cobrirá:</p><ul><li>HTML semântico</li><li>Acessibilidade</li><li>Fundamentos de CSS</li><li>CSS Flexbox</li><li>Design para desenvolvedores</li><li>Tipografia</li><li>Editores de código</li><li>Fundamentos de JavaScript</li><li>Programação funcional</li><li>Funções de ordem superior e <em>callbacks</em></li><li>Manipulação do DOM e eventos</li><li>Padrões da web</li><li>Fundamentos de React</li><li>Fundamentos de TypeScript</li><li>Conceitos de testes</li><li>Criação de <em>scripts</em> no Bash</li><li>SQL e bancos de dados relacionais</li><li>Git e GitHub</li><li>Segurança e privacidade</li><li>Node.js</li><li>Express.js</li><li>Fundamentos de Python</li><li>Pensamento algorítmico</li><li>Estruturas de dados</li><li>Programação orientada a objetos</li><li>Programação dinâmica</li><li>Segurança para desenvolvedores para a Web</li><li>Ferramentas e implantação</li><li>Trabalho com APIs</li><li>Fundamentos de engenharia de IA</li><li>Como conseguir um emprego de desenvolvedor</li><li>e mais</li></ul><p>A pedido popular, vamos cobrir muito mais teoria – diretamente no currículo principal.</p><p>Anteriormente, nossas certificações eram 100% focadas na construção de projetos. Recebemos muitos <em>feedbacks</em> dos <em>campers</em> de que fomos longe demais na direção de "aprender fazendo" – e que muitos <em>campers</em> desejam mais explicação da teoria também.</p><p>Isso mesmo – você não precisará mais complementar o currículo principal do freeCodeCamp com vídeos teóricos do nosso YouTube ou livros da nossa publicação. De agora em diante, vamos cobrir toda a teoria essencial ao longo do caminho.</p><p>Estamos fazendo isso adicionando breves palestras em vídeo ministradas pela equipe de design instrucional do freeCodeCamp, incluindo Beau Carnes e Ania Kubów. Cada uma delas também terá uma transcrição completa, para os <em>campers</em> que preferem ler a assistir.</p><p>Vamos inserir você nos laboratórios de programação ao estilo "tela em branco" muito mais cedo no currículo, para minimizar a necessidade de ajuda.</p><p>Aqui está o conteúdo completo do novo caminho para <strong>Desenvolvedor Full-Stack Certificado</strong>. É bastante extenso:</p><ul><li><strong>64 workshops</strong> – cursos interativos passo-a-passo sobre ferramentas que vão de HTML a SQL e Python</li><li><strong>513 palestras</strong> – vídeos curtos cobrindo conceitos de ciência da computação, com perguntas de múltipla escolha para verificar sua compreensão</li><li><strong>83 laboratórios</strong> – projetos onde você começa com um editor em branco e um conjunto de testes e precisa desenvolver seu projeto para que todos os testes sejam aprovados</li><li><strong>62 páginas de revisão</strong> – listas abrangentes de tópicos de cada módulo que você pode revisar para se preparar para questionários e exames</li><li><strong>66 questionários</strong> e <strong>6 exames de preparação</strong> – para afirmar sua compreensão dos conceitos e ferramentas de desenvolvimento full-stack</li><li><strong>1 projeto final</strong> – um grande projeto único que você construirá para seu portfólio, revisado por professores dentro da comunidade do freeCodeCamp</li><li><strong>1 exame final</strong> – um exame abrangente com 90 questões, supervisionado, realizado dentro do ambiente de exame do freeCodeCamp</li></ul><p>Após concluir todo o trabalho deste curso, você estará qualificado para fazer o exame final. Criamos nosso próprio ambiente de exame de código aberto, onde você pode fazer um exame aprofundado sobre tudo o que aprendeu ao longo de todo o nosso trabalho preparatório.</p><p>Se você não passar no exame, poderá refazê-lo uma vez a cada 24 horas até conseguir passar. A cada vez, o exame será gerado aleatoriamente de um grande <em>corpus</em> de perguntas de exame.</p><p>Você pode ter ouvido histórias horríveis sobre pessoas que fazem exames <em>on-line</em> e são acusadas falsamente de trapaça. Pensamos bastante em como vamos aplicar nosso código de conduta acadêmico. Sempre haverá um humano no <em>loop</em> para essas decisões.</p><p>Não haverá desqualificações automáticas por "você se levantou da cadeira porque seu bebê começou a chorar". Consideraremos todas essas coisas ao administrar esses exames.</p><p>Uma vez que você consiga passar, receberá uma certificação gratuita, verificada e serializada que poderá adicionar ao seu currículo ou CV, além de inserir em sua conta do LinkedIn. A certificação permanecerá válida por 3 anos – momento em que você poderá realizar um processo gratuito de educação continuada para re-certificar.</p><p>Aqui está um vídeo de 5 minutos que vai guiá-lo por algumas das grandes atualizações do currículo do freeCodeCamp.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/1fZ0hTX-ut4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" title="freeCodeCamp Turns 10 &amp; Major Certification Updates" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="estamos-desenvolvendo-tr-s-outras-certifica-es">Estamos desenvolvendo três outras certificações</h2><p>Uma vez que a nova certificação de <em>Desenvolvedor Full-Stack Certificado</em> esteja ativa, nossa equipe de design instrucional voltará sua atenção para a construção de três certificações adicionais:</p><h3 id="a-certifica-o-de-engenheiro-de-aprendizado-de-m-quina-certificado-fcc-cmle-">A certificação de engenheiro de aprendizado de máquina certificado (fCC-CMLE)</h3><p>Esta certificação envolverá o aprendizado de Python e suas muitas bibliotecas. Você também aprenderá uma quantidade enorme de matemática e teoria. Muitos dos projetos envolverão a criação de seus próprios modelos. Kylie Ying já está trabalhando com engenheiros de aprendizado de máquina para ajudar a projetar isso. Estamos planejando lançar parte dessa certificação em 2025.</p><h3 id="a-certifica-o-de-engenheiro-de-sistemas-de-software-certificado-fcc-csse-">A certificação de engenheiro de sistemas de software certificado (fCC-CSSE)</h3><p>Esta certificação envolverá programação de baixo nível e computação de alto desempenho. Você aprenderá a programar em C e C++ e desenvolverá vários projetos – como seu próprio compilador e seu próprio mecanismo de busca. Estamos planejando lançar parte disso para 2026.</p><h3 id="a-certifica-o-de-cientista-de-dados-certificado-fcc-cds-">A certificação de cientista de dados certificado (fCC-CDS)</h3><p>Estamos trabalhando em um currículo abrangente de Ciência de Dados há vários anos. Como você deve saber, o freeCodeCamp já possui muitos cursos populares sobre ferramentas de Ciência de Dados como Python, R e pacotes estatísticos no canal do YouTube da comunidade do freeCodeCamp.</p><p>O desafio de ensinar Ciência de Dados é ensinar a grande quantidade de matemática envolvida na área. Também precisamos montar um aprendizado orientado a projetos que possamos avaliar de maneira programada.</p><p>Nosso objetivo é oferecer a melhor educação em Ciência de Dados disponível fora de um programa de doutorado. Este será o maior desafio de todos, mas estamos preparados para isso.</p><p>Estamos planejando lançar parte dessa certificação em 2027.</p><h2 id="quando-teremos-mais-informa-es-sobre-essas-certifica-es-e-seus-cursos">Quando teremos mais informações sobre essas certificações e seus cursos?</h2><p>Estamos trabalhando em esboços abrangentes de currículo para essas certificações e planejamos tornar algumas delas públicas em 2025.</p><h2 id="o-que-acontecer-com-as-certifica-es-atuais-do-freecodecamp">O que acontecerá com as certificações atuais do freeCodeCamp?</h2><p>O freeCodeCamp tem uma longa tradição de preservar materiais antigos dos certificados legados. Desta vez, não será diferente.</p><p>Recomendamos que você migre para o novo currículo do certificado de <em>Desenvolvedor Full-Stack Certificado</em> assim que ele estiver ativo neste Natal. Você já pode ter concluído alguns dos projetos, já que muitos deles vêm de nossos certificados antigos.</p><p>Dito isso, se você estiver na metade de um certificado antigo e quiser continuar seu progresso nele, pode fazê-lo.</p><h2 id="as-certifica-es-legadas-v-o-expirar">As certificações legadas vão expirar?</h2><p>Queríamos dar a todos bastante tempo para usar seus certificados atuais antes que precisassem conquistar a nova certificação de Desenvolvedor Full-Stack Certificado. Achamos que 3 anos é suficiente.</p><p>Adicionamos essa data de validade a todas as certificações do freeCodeCamp.</p><p>Daqui em diante, sempre que você obtiver a certificação de <em>Desenvolvedor Full-Stack Certificado</em> ou dos outros 3 certificados que estão por vir, ela permanecerá válida por 3 anos a partir da data em que você a conquistou.</p><p>Novamente, estamos desenvolvendo um programa de educação continuada que você poderá usar três anos depois para renovar sua certificação. Tudo isso será completamente grátis.</p><h2 id="por-que-o-freecodecamp-est-exigindo-exames-e-adicionando-datas-de-validade-s-certifica-es">Por que o freeCodeCamp está exigindo exames e adicionando datas de validade às certificações?</h2><p>Estamos fazendo isso para alinhar essas certificações com outras certificações do setor de tecnologia. Todas essas certificações principais exigem passar em um exame de certificação e expiram após 3 anos.</p><p>Nosso objetivo é que as certificações do freeCodeCamp sejam o mais convencionais possível, para facilitar a compreensão delas por parte dos empregadores.</p><h2 id="o-freecodecamp-se-expandir-para-recrutamento-ou-emprego">O freeCodeCamp se expandirá para recrutamento ou emprego?</h2><p>Não temos planos de fazer isso. A missão da nossa instituição beneficente é simples: criar recursos de aprendizagem gratuitos. Planejamos manter nossa equipe de professores pequena e focada, em vez de trazer diversos pessoas que não são professores.</p><h2 id="quanto-do-conte-do-se-sobrepor-de-uma-certifica-o-para-outra">Quanto do conteúdo se sobreporá de uma certificação para outra?</h2><p>Algumas das certificações compartilharão alguns projetos e aulas comuns. Por exemplo, se você já completou o curso introdutório de Python durante a certificação de <em>Desenvolvedor Full-Stack Certificado</em>, não precisará completá-lo novamente para a certificação de engenheiro de aprendizagem de máquina certificado.</p><h2 id="meus-certificados-antigos-permanecer-o-on-line-os-links-de-verifica-o-continuar-o-funcionando">Meus certificados antigos permanecerão <em>on-line</em>? Os links de verificação continuarão funcionando?</h2><p>Certificados expirados ainda aparecerão no seu perfil. Links diretos para eles ainda continuarão funcionando. Eles serão claramente marcados como "Expirado em [data]" até que você os renove. Novamente, isso não acontecerá com nenhum certificado do fCC até 31 de dezembro de 2027, no mínimo.</p><h2 id="o-que-acontecer-com-as-11-certifica-es-atualmente-listadas-em-freecodecamp-org-learn">O que acontecerá com as 11 certificações atualmente listadas em <a href="http://freecodecamp.org/learn">freecodecamp.org/learn</a>?</h2><p>Elas continuarão disponíveis lá por pelo menos mais alguns anos – listadas como certificações legadas. A maior parte do conteúdo dentro delas será reaproveitada e melhorada para fazer parte dessas novas certificações.</p><h2 id="terei-que-refazer-projetos-que-j-fiz">Terei que refazer projetos que já fiz?</h2><p>Alguns dos conteúdos das certificações antigas permanecerão nessas novas certificações. Na maioria dos casos, você não deverá ter que refazer os projetos que já fez. Se você já construiu alguns projetos, há uma boa chance de que algumas seções das novas certificações já sejam marcadas como completas para você quando as visualizar.</p><h2 id="fale-mais-sobre-o-ensino-de-linguagens-de-programa-o-como-rust-e-java-ou-ferramentas-de-banco-de-dados-nosql-">Fale mais sobre o ensino de linguagens de programação como Rust e Java, ou ferramentas de banco de dados NoSQL.</h2><p>Estamos mantendo nosso currículo focado nas ferramentas mais populares para ajudar a colocar os alunos no melhor lugar para trabalhar como desenvolvedores. Isso significa Python, JavaScript, SQL e ferramentas como Git e Linux.</p><p>Temos muitos cursos em vídeo sobre outras ferramentas populares no canal da comunidade do freeCodeCamp no YouTube, bem como tutoriais na publicação do freeCodeCamp. Continuaremos a ensinar esses tópicos como extracurriculares para quem quiser aprendê-los.</p><h2 id="como-est-o-progresso-do-curr-culo-de-ingl-s">Como está o progresso do currículo de inglês?</h2><p>Estamos trabalhando arduamente para criar um currículo interativo de inglês para ajudar os alunos a melhorar seu inglês.</p><p>Ensinamos por meio de uma combinação de vídeos e exercícios interativos, seguidos por um exame formal de certificação.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/450940c6-2799-48ac-8f8d-dbc4eece8951.jpeg" class="kg-image" alt="450940c6-2799-48ac-8f8d-dbc4eece8951" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/450940c6-2799-48ac-8f8d-dbc4eece8951.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/450940c6-2799-48ac-8f8d-dbc4eece8951.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/450940c6-2799-48ac-8f8d-dbc4eece8951.jpeg 1274w" sizes="(min-width: 720px) 720px" width="1274" height="792" loading="lazy"></figure><p>Estamos atualmente terminando o nível A2 (pré-intermediário) e começando a trabalhar no nível B1 (intermediário).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/206d46e8-7a31-4229-b673-5c11e386cfee.png" class="kg-image" alt="206d46e8-7a31-4229-b673-5c11e386cfee" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/206d46e8-7a31-4229-b673-5c11e386cfee.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/206d46e8-7a31-4229-b673-5c11e386cfee.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/206d46e8-7a31-4229-b673-5c11e386cfee.png 1024w" sizes="(min-width: 720px) 720px" width="1024" height="768" loading="lazy"></figure><h2 id="como-est-avan-ando-o-programa-de-gradua-o-universit-ria-gratuito">Como está avançando o programa de graduação universitária gratuito?</h2><p>Estamos fazendo um progresso constante rumo à oferta de um curso Associado em Matemática e de um Bacharelado em Ciência da Computação. Já desenvolvemos 2 dos cursos de matemática e estamos trabalhando duro nos 38 cursos de nível universitário restantes e suas aulas, laboratórios e exames.</p><p>O freeCodeCamp tem uma pequena equipe de designers instrucionais. Agora, estamos focados principalmente no conteúdo da certificação de <em>Desenvolvedor Full-Stack Certificado</em> e no programa de certificação de inglês. Quando terminarmos esses, alocaremos mais recursos para os programas de graduação para acelerar ainda mais seu desenvolvimento.</p><h2 id="10-anos-n-o-nada-">10 Anos não é nada.</h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/8869e9f9-b714-4efb-a324-19f23ba931d1.jpeg" class="kg-image" alt="8869e9f9-b714-4efb-a324-19f23ba931d1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/8869e9f9-b714-4efb-a324-19f23ba931d1.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/8869e9f9-b714-4efb-a324-19f23ba931d1.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/8869e9f9-b714-4efb-a324-19f23ba931d1.jpeg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="1200" loading="lazy"></figure><p>É incrível o quanto conquistamos como comunidade em apenas 10 anos.</p><ul><li>Um currículo gratuito com três mil horas de recursos de aprendizagem interativa</li><li>Milhares de cursos em vídeo extracurriculares, livros e tutoriais</li><li>Dezenas de milhares de alunos que conseguiram empregos como desenvolvedores</li><li>Dezenas de milhares de colaboradores que estão adquirindo experiência ao voluntariar seu tempo e talentos por meio de código aberto e ao ajudar outros alunos</li></ul><p>Eu encorajo você a se envolver na comunidade global do freeCodeCamp. Você pode navegar por nossos <a href="https://www.freecodecamp.org/news/freecodecamps-top-open-source-contributors-of-2024/">principais colaboradores de código aberto de 2024</a> (em inglês). Aqui está <a href="https://contribute.freecodecamp.org">nosso guia do colaborador</a> (em inglês), se você quiser se aprofundar.</p><p>Também encorajo você <a href="https://www.freecodecamp.org/donate">a se tornar um apoiador</a>. Se você já nos apoia todo mês e quer fazer uma doação de fim de ano para nossa organização, fique à vontade. Aqui estão algumas <a href="https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp/">formas dedutíveis de imposto que você pode apoiar nossa missão</a> (texto em inglês).</p><p>Se você tiver qualquer dúvida sobre formas de apoiar a missão da nossa organização, ou simplesmente precisar de um recibo de doação para seus impostos, <a href="mailto:quincy@freecodecamp.org">envie-me um e-mail diretamente</a></p><p>Um brinde aos próximos 10 anos.</p><p>– Quincy</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como aprender a programar e conseguir um emprego como desenvolvedor [livro completo] ]]>
                </title>
                <description>
                    <![CDATA[ Se você quer aprender a programar e conseguir um emprego como desenvolvedor, você está no lugar certo. Este livro vai mostrar a você como fazer isso. Sim, este é o livro completo – de graça – bem aqui, nesta página do freeCodeCamp. Além disso, gravei uma versão completa em audiolivro ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/</link>
                <guid isPermaLink="false">66f14f12d8806d04502478dd</guid>
                
                    <category>
                        <![CDATA[ Aprender a programar ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 06 Nov 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Learn-to-Code-and-Get-a-Developer-Job-Book.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-to-code-book/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Learn to Code and Get a Developer Job [Full Book]</a>
      </p><p>Se você quer aprender a programar e conseguir um emprego como desenvolvedor, você está no lugar certo. Este livro vai mostrar a você como fazer isso.</p><p>Sim, este é o livro completo – de graça – bem aqui, nesta página do freeCodeCamp.</p><p>Além disso, gravei uma versão completa em audiolivro GRATUITA deste livro (em inglês), que publiquei como o episódio de número 100 do podcast do freeCodeCamp. Você pode procurá-lo no seu <em>player</em> de podcast favorito. Não se esqueça de se inscrever. Também adicionei o episódio logo abaixo para sua conveniência.</p><figure class="kg-card kg-embed-card"><iframe src="https://play.libsyn.com/embed/episode/id/28380047/height/192/theme/modern/size/large/thumbnail/yes/custom-color/2a4061/time-start/00:00:00/playlist-height/200/direction/backward/download/yes" height="192" width="100%" title="Embedded content" loading="lazy" data-darkreader-inline-border-top="" data-darkreader-inline-border-right="" data-darkreader-inline-border-bottom="" data-darkreader-inline-border-left="" style="scrollbar-color: rgb(69, 74, 77) rgb(32, 35, 36); color-scheme: dark !important; box-sizing: inherit; margin: 0px; padding: 0px; border: none; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; --darkreader-inline-border-top: none; --darkreader-inline-border-right: none; --darkreader-inline-border-bottom: none; --darkreader-inline-border-left: none;"></iframe></figure><p><br>Há alguns anos, uma das cinco maiores editoras de livros de Nova York entrou em contato comigo sugerindo um contrato para que eu escrevesse um livro. Eu me encontrei com eles, mas não tinha tempo para escrever um livro.</p><p>Bem, agora eu finalmente tive tempo e decidi simplesmente publicar este livro de graça, bem aqui no freeCodeCamp.</p><p>A informação merece ser livre, certo? 🙂</p><p>Você levará algumas horas para ler todo ele. São minhas percepções sobre como aprender a programar e sobre conseguir um emprego como desenvolvedor.</p><p>Eu aprendi tudo isso enquanto:</p><ul><li>aprendia a programar aos 30 anos de idade</li><li>trabalhava como engenheiro de software</li><li>e, por fim, dirigia o freeCodeCamp.org, o que venho fazendo nos últimos oito anos. Hoje, mais de um milhão de pessoas visitam este site todos os dias para aprender sobre matemática, programação e ciência da computação.</li></ul><p>Eu era um professor de inglês que nunca havia programado antes. Consegui aprender o suficiente sobre programação para arranjar meu primeiro emprego como desenvolvedor de software em apenas um ano.</p><p>Tudo isso sem gastar dinheiro em livros ou cursos (eu gastei dinheiro, sim, para viajar para cidades próximas e participar de eventos de tecnologia. Como você verá mais adiante no livro, esse foi um dinheiro bem gasto).</p><p>Depois de trabalhar como engenheiro de software por alguns anos, eu me senti pronto. Queria ensinar outras pessoas a fazer essa transição de carreira também.</p><p>Criei várias ferramentas de educação tecnológica as quais ninguém estava interessado em usar. Foi então que, em um fim de semana, criei o freeCodeCamp.org. Uma comunidade ativa rapidamente se formou em torno dele.</p><p>Ao longo do caminho, todos nós ajudamos uns aos outros. Hoje, pessoas em todo o mundo usam o freeCodeCamp para se preparar para seu primeiro emprego em tecnologia.</p><p>Você pode estar pensando: não sei se tenho tempo para ler todo este livro.</p><p>Sem problemas. Você pode marcá-lo como favorito. Pode voltar a ele e lê-lo em quantas sessões precisar.</p><p>Você também pode compartilhá-lo nas redes sociais. Diga aos outros: "dê uma olhada neste livro que estou lendo". Compartilhe o link dele. É uma maneira surpreendentemente eficaz de convencer a si mesmo a terminar de ler um livro.</p><p>Digo isso porque não estou tentando vender a você este livro. Você já "comprou" este livro quando abriu esta página da web. Agora, meu objetivo é tranquilizá-lo de que <strong>será</strong> um bom investimento de seu tempo terminar de lê-lo. 😉</p><p>Prometo respeitar o seu tempo. Não há exagero ou enfeite aqui – apenas dicas diretas e práticas.</p><p>Vou incluir o máximo de percepção possível em cada capítulo deste livro.</p><p>O que me lembra: onde está o índice?</p><p>Ah, está aqui:</p><h2 id="-ndice">Índice</h2><ol><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#pref-cio-para-quem-este-livro">Prefácio: para quem é este livro?</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#resumo-em-500-palavras">Resumo em 500 palavras</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#cap-tulo-1-como-desenvolver-suas-habilidades">Capítulo 1: como desenvolver suas habilidades</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#cap-tulo-2-como-construir-sua-rede-de-contatos">Capítulo 2: como construir sua rede de contatos</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#cap-tulo-3-como-construir-sua-reputa-o">Capítulo 3: como construir sua reputação</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#cap-tulo-4-como-ser-pago-para-programar-clientes-freelance-e-a-busca-por-emprego">Capítulo 4: como ser pago para programar – clientes freelance e a busca por um emprego</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#cap-tulo-5-como-ter-sucesso-no-seu-primeiro-emprego-de-desenvolvedor">Capítulo 5: como ter sucesso no seu primeiro emprego de desenvolvedor</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/como-aprender-a-programar-e-conseguir-um-emprego-como-desenvolvedor-livro-completo/#ep-logo-voc-consegue">Epílogo: você consegue</a></li></ol><h2 id="pref-cio-para-quem-este-livro">Prefácio: para quem é este livro?</h2><p>Este livro é para qualquer pessoa que esteja considerando uma carreira em desenvolvimento de software.</p><p>Se você está procurando uma carreira que seja flexível, bem remunerada e que envolva muita resolução criativa de problemas, o desenvolvimento de software pode ser para você.</p><p>Claro, cada um de nós aborda sua própria jornada em programação com certos recursos: <strong>tempo</strong>, <strong>dinheiro</strong> e <strong>oportunidade</strong>.</p><p>Você pode ser mais velho e ter filhos ou pais idosos de quem cuida. Então, você pode ter menos <strong>tempo</strong>.</p><p>Você pode ser mais jovem e não ter tido tempo suficiente para economizar ou adquirir habilidades que aumentem sua renda. Então, você pode ter menos <strong>dinheiro</strong>.</p><p>Você também pode morar longe das principais cidades da tecnologia, como São Francisco, Berlim, Tóquio ou Bengaluru.</p><p>Você pode ter de viver com empecilhos, físicos ou mentais. O preconceito com a idade, o racismo e o sexismo são reais. O status de imigração pode complicar a busca por emprego, assim como antecedentes criminais.</p><p>Em resumo: você pode ter menos <strong>oportunidades</strong>.</p><p>Aprender a programar e conseguir um emprego como desenvolvedor será mais difícil para algumas pessoas do que para outras. Todos abordam esse desafio a partir de seu próprio ponto de partida, com os recursos que tiverem à mão.</p><p>Independentemente de onde você esteja começando, no entanto – em termos de tempo, dinheiro e oportunidade – farei o meu melhor para dar a você conselhos práticos.</p><h4 id="uma-nota-r-pida-sobre-terminologia">Uma nota rápida sobre terminologia</h4><p>Sempre que eu usar termos novos, farei o máximo para defini-los.</p><p>Há alguns termos, porém, que direi o tempo todo.</p><p>Usarei a palavra "programação" tanto no sentido amplo ("<em>programming</em>", em inglês), como no sentido estrito ("<em>coding</em>", em inglês) de modo intercambiável.</p><p>Usarei a palavra "<em>app</em>" como se planejou usá-la originalmente – como uma abreviação para qualquer tipo de aplicação, independentemente de rodar em um telefone, laptop, console de jogos ou geladeira (perdão, Steve Jobs, mas o iPhone não tem monopólio sobre a palavra <em>app</em>).</p><p>Também usarei as palavras "engenheiro de software" e "desenvolvedor de software" de modo intercambiável.</p><p>Você pode encontrar pessoas na tecnologia que não concordam com isso. Como se engenharia de software fosse algum campo chique com um legado multicentenário, como são a engenharia mecânica ou a engenharia civil. Quem sabe – talvez isso seja verdade para seus netos. Agora, porém, ainda estamos nos primeiros dias do desenvolvimento de software como um campo.</p><p>Vou deixar esta citação aqui para você, caso se sinta desconfortável em se chamar de engenheiro de software:</p><blockquote>"Se os construtores construíssem edifícios como os programadores escrevem programas, o primeiro pica-pau que aparecesse destruiria a civilização." – Gerald Weinberg, programador, autor e professor universitário</blockquote><h3 id="qualquer-pessoa-pode-aprender-a-programar">Qualquer pessoa pode aprender a programar?</h3><p>Sim. Eu acredito que qualquer pessoa suficientemente motivada pode aprender a programar. No final das contas, aprender a programar é um desafio motivacional – não é uma questão de aptidão.</p><p>Nas savanas da África – onde os primeiros humanos viveram por milhares de anos antes de se espalharem pela Europa, Ásia e América – havia computadores?</p><p>Habilidades de programação nunca foram algo selecionado ao longo dos milênios. Computadores como os conhecemos (desktops, laptops, smartphones) surgiram nos anos 1980, 1990 e 2000.</p><p>Sim – eu acredito que a aptidão desempenha um papel. Porém, no final, qualquer pessoa que queira se tornar um desenvolvedor profissional precisará passar tempo no teclado.</p><p>A grande maioria das pessoas que tenta aprender a programar ficará frustrada e desistirá.</p><p>Eu, certamente, desisti. Fiquei frustrado e desisti várias vezes.</p><p>Como outras pessoas que no fim tiveram sucesso, no entanto, continuei voltando depois de alguns dias e tentava novamente.</p><p>Eu digo tudo isso porque quero reconhecer: aprender a programar e conseguir um emprego de desenvolvedor é difícil, ainda mais para algumas pessoas do que para outras, devido às circunstâncias.</p><p>Não vou fingir ter enfrentado verdadeiras dificuldades ao aprender a programar. Sim, eu estava na casa dos 30 anos e não tinha formação formal em programação ou ciência da computação, mas considere isto:</p><p>Eu cresci na classe média nos Estados Unidos – um americano de 4ª geração de uma casa de língua inglesa. Eu fui para a universidade. Meu pai foi para a universidade. O pai dele foi para a universidade (os pais dos pais dele eram fazendeiros na Suécia),</p><p>Eu me beneficiei de uma espécie de privilégio intergeracional. Um impulso que algumas famílias são capazes de captar ao longo do tempo quando não são dilaceradas por guerra, fome ou escravidão.</p><p>Então, esse é meu grande aviso para você: eu não sou uma figura motivacional para incentivar a superar as adversidades.</p><p>Se você precisa de inspiração, há muitas pessoas na comunidade de desenvolvedores que superaram adversidades reais. Você pode procurá-las.</p><p>Não estou tentando elevar o campo do desenvolvimento de software. Não vou pintar quadros de utopias de ficção científica que podem surgir se todos aprenderem a programar.</p><p>Em vez disso, vou apenas dar dicas práticas de como você pode adquirir essas habilidades e de como você pode conseguir um bom emprego, para que possa sustentar sua família.</p><p>Não há nada de errado em aprender a programar porque você quer um bom e estável emprego.</p><p>Não há nada de errado em aprender a programar para que você possa começar um negócio.</p><p>Você pode encontrar pessoas que dizem que você deve ser tão apaixonado por programação a ponto de sonhar com isso, que você se desligue do seu trabalho de tempo integral e passe o fim de semana todo contribuindo para projetos de código aberto.</p><p>Eu conheço pessoas que são <em>muito</em> apaixonadas por programação. Conheço também muitas pessoas que, após uma semana de trabalho árduo, só querem passar um tempo nos parques ou jogar jogos de tabuleiro com amigos.</p><p>As pessoas geralmente gostam de fazer coisas em que são boas. Você pode desenvolver um nível razoável de paixão por programação apenas melhorando nela.</p><p>Então, resumindo: para quem é este livro? Para quem quer ficar melhor em programação e conseguir um emprego como desenvolvedor. Pronto.</p><p>Você não precisa se autodeclarar um "geek", ser um introvertido ou um ativista ideologicamente motivado. Nenhum desses estereótipos é necessário.</p><p>Se você for um desses, está ok, mas você não precisa ser.</p><p>Então, se é esse o seu caso – se você está seriamente pensando em aprender a programar o suficiente para ser pago para programar – este livro é para você.</p><p>Comece lendo este resumo rápido do livro. Depois, leia o resto.</p><h2 id="resumo-em-500-palavras">Resumo em 500 palavras</h2><p>Aprender a programar é difícil. Conseguir um emprego como desenvolvedor de software é ainda mais difícil. Para muitas pessoas, porém, vale o esforço.</p><p>A programação é um campo bem pago, intelectualmente desafiador e criativamente recompensador. Há uma progressão clara de carreira à sua frente: desenvolvedor sênior, líder técnico, gerente de engenharia, CTO e, talvez, até CEO.</p><p>Você pode encontrar trabalho em praticamente qualquer setor. Cerca de dois terços dos empregos de desenvolvedores estão fora do que tradicionalmente chamamos de área da "tecnologia" – em agricultura, manufatura, no governo e nos setores de serviços, como bancos e saúde.</p><p>A automação vai impactar a programação. Já impacta há décadas.</p><p>Ferramentas de IA generativa, como o GPT-4 e o Copilot, podem nos ajudar a passar da Programação Imperativa – onde você diz exatamente o que os computadores devem fazer – para a Programação Declarativa – onde você dá aos computadores objetivos de nível superior. Em outras palavras: programação ao estilo de Jornada nas Estrelas.</p><p>Você ainda deve aprender matemática, embora agora tenhamos calculadoras. Você ainda deve aprender a programar, embora agora tenhamos ferramentas de IA que possam escrever código.</p><p>Convenci você a considerar a programação como uma carreira?</p><p>Ótimo. Aqui está como se inserir no campo.</p><h3 id="desenvolva-suas-habilidades">Desenvolva suas habilidades</h3><p>Você precisa aprender:</p><ul><li>Desenvolvimento de front-end: HTML, CSS e JavaScript</li><li>Desenvolvimento de back-end: SQL, Git, Linux e servidores da Web</li><li>Computação científica: Python e suas muitas bibliotecas</li></ul><p>Essas são todas tecnologias maduras, com mais de 20 anos de existência. Qualquer que seja a empresa em que você trabalhe, você quase certamente usará a maioria dessas ferramentas.</p><p>A melhor maneira de aprender essas ferramentas é criando projetos. Tente programar pelo menos um pouco todos os dias. Se você seguir o currículo do freeCodeCamp de cima a baixo, aprenderá tudo isso e criará dezenas de projetos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/image.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/image.png 820w" sizes="(min-width: 720px) 720px" width="820" height="844" loading="lazy"><figcaption><em>Algumas das certificações no currículo principal do freeCodeCamp.</em></figcaption></figure><h3 id="construa-sua-rede-de-contatos">Construa sua rede de contatos</h3><p>Muito de se conseguir um emprego depende de quem você conhece.</p><p>Está tudo bem ser introvertido, mas você precisa expandir seus limites.</p><p>Crie contas no GitHub, X, LinkedIn e Discord.</p><p>Vá a encontros e conferências de tecnologia. Viaje, se precisar (a maior parte do seu orçamento dedicado a "aprender a programar" deve estar alocado para viagens e ingressos para eventos – não para livros e cursos).</p><p>Cumprimente pessoas que estão sozinhas. Deixe que os outros façam a maior parte da conversa e realmente ouça. Lembre-se dos nomes das pessoas.</p><p>Adicione pessoas no LinkedIn, siga-as no X e vá a festas pós-eventos.</p><h3 id="construa-sua-reputa-o">Construa sua reputação</h3><p>Compartilhe demonstrações de vídeo curtas de seus projetos.</p><p>Continue se inscrevendo para falar em conferências cada vez maiores.</p><p>Frequente <em>hackerspaces </em>e ajude pessoas que são ainda mais novas na programação do que você.</p><p>Contribua para o código aberto. O trabalho é semelhante ao desenvolvimento de software profissional.</p><p><strong>Desenvolva suas habilidades, rede de contatos e reputação ao mesmo tempo.</strong> Não deixe que você mesmo evite e deixe para mais tarde as partes mais assustadoras.</p><p>Em vez de se candidatar a empregos pela "porta da frente", use sua rede de contatos para conseguir entrevistas de emprego pela "porta lateral". Recrutadores podem ajudar também.</p><p>Continue fazendo entrevistas até começar a receber ofertas de emprego. Você não precisa, porém, aceitar a primeira oferta que receber. Seja paciente.</p><p>Seu primeiro trabalho como desenvolvedor será o mais difícil. Tente ficar lá por pelo menos 2 anos e, essencialmente, ser pago para aprender.</p><p>O verdadeiro aprendizado começa assim que você está no emprego, trabalhando ao lado de uma equipe e com grandes bases de código legadas.</p><p>Mais importante ainda, durma e se exercite.</p><p>Qualquer pessoa suficientemente motivada pode aprender a programar bem o suficiente para conseguir um emprego como desenvolvedor.</p><p>É apenas uma questão da intensidade com a qual você deseja isso e do seu nível de persistência na busca por emprego.</p><p>Lembre-se: você consegue.</p><h2 id="este-livro-dedicado-comunidade-global-do-freecodecamp-">Este livro é dedicado à comunidade global do freeCodeCamp.</h2><p>Obrigado a todos vocês que apoiaram nossa instituição beneficente e nossa missão nos últimos anos.</p><p>Foi através do seu voluntariado e da sua filantropia que pudemos ajudar tantas pessoas a aprender a programar e a conseguir seu primeiro emprego como desenvolvedor.</p><p>A comunidade cresceu tanto a partir do humilde projeto de código aberto que implantei pela primeira vez em 2014. Agora, sou apenas uma pequena parte desta comunidade global.</p><p>É um privilégio ainda estar aqui, trabalhando ao lado de todos vocês. Juntos, enfrentamos os problemas fundamentais do nosso tempo: acesso à informação, acesso à educação e acesso às ferramentas que estão moldando o futuro.</p><p>Estes ainda são os primeiros dias. Não tenho a ilusão de que todos saberão programar durante a minha vida, mas, assim como a Bíblia de Gutenberg acelerou a alfabetização em 1455, podemos continuar acelerando a alfabetização tecnológica por meio de recursos de aprendizado gratuitos e abertos.</p><p>Mais uma vez, obrigado a todos.</p><p>Um agradecimento especial a Abbey Rennemeyer, por seu feedback editorial, e a Estefania Cassingena Navone, por desenhar a capa do livro.</p><p>Agora, vamos ao livro.</p><h2 id="cap-tulo-1-como-desenvolver-suas-habilidades">Capítulo 1: como desenvolver suas habilidades</h2><blockquote>"Todo artista foi primeiro um amador." ― Ralph Waldo Emerson</blockquote><p>O caminho para saber programar é longo.</p><p>Para mim, foi um caminho ambíguo, mas não precisa ser assim para você.</p><p>Neste capítulo, vou compartilhar algumas estratégias para aprender a programar da maneira mais tranquila possível.</p><p>Primeiro, permita-me falar sobre como aprendi a programar em 2011.</p><p>Depois, compartilharei o que aprendi com esse processo.</p><p>Vou mostrar a você como aprender de modo muito mais eficiente do que eu.</p><h3 id="hora-da-hist-ria-como-um-professor-de-ingl-s-nos-seus-30-anos-de-idade-aprendeu-a-programar-sozinho">Hora da história: como um professor de inglês nos seus 30 anos de idade aprendeu a programar sozinho?</h3><p>Eu era um professor administrando uma escola de inglês. Tínhamos cerca de 100 alunos adultos que haviam viajado para a Califórnia vindos de todo o mundo. Eles estavam aprendendo inglês avançado para poderem ingressar na pós-graduação.</p><p>A maioria dos professores da nossa escola adorava ensinar. Eles adoravam passar o tempo com os alunos pela cidade e ajudá-los a melhorar seu inglês conversacional.</p><p>Eu queria que nossos professores pudessem passar mais tempo com os alunos e menos tempo presos à mesa fazendo papelada.</p><p>Eu, no entanto, não sabia nada sobre computadores.</p><p>Programação? Não era preciso ser inteligente para programar? Eu mal conseguia configurar um roteador Wi-Fi e era péssimo em matemática.</p><p>Bem, um dia coloquei tudo isso de lado e pensei "Quer saber? Vou tentar. O que eu tenho a perder?"</p><p>Comecei a pesquisar no Google "como clicar automaticamente em sites" e "como importar dados de sites para o Excel".</p><p>Não percebi na época, mas estava aprendendo a automatizar fluxos de trabalho.</p><p>A aprendizagem, então, começou. Primeiro, com macros do Excel. Depois, com uma ferramenta chamada AutoHotKey, onde você pode programar o <em>mouse</em> para se mover para determinadas coordenadas da tela, clicar, copiar texto, depois se mover para coordenadas diferentes e colar.</p><p>Depois de algumas semanas tateando no escuro, descobri como automatizar algumas tarefas. Eu podia abrir uma planilha do Excel e um site, executar meu script, retornar 10 minutos depois e a planilha estaria totalmente preenchida.</p><p>Era o trabalho de um amador, o que os desenvolvedores podem chamar de "gambiarra", mas o trabalho era feito.</p><p>Usei minhas habilidades recém adquiridas de automação para continuar agilizando a escola.</p><p>Logo, os professores mal precisavam tocar em um computador. Eu estava fazendo o trabalho de vários professores, apenas com minhas habilidades rudimentares.</p><p>Isso teve um impacto visível na escola. Muito do nosso tempo estava preso em trabalho rotineiro no computador. Agora, estávamos livres.</p><p>Os professores estavam mais felizes. Eles passavam mais tempo com os alunos.</p><p>Os alunos estavam mais felizes. Eles diziam a todos os seus amigos em seus países de origem: "vocês precisam conhecer essa escola."</p><p>Logo, éramos uma das escolas mais bem-sucedidas de todo o sistema escolar.</p><p>Isso me encorajou ainda mais. Lembro-me de pensar comigo mesmo: "Talvez eu <strong>possa</strong> aprender a programar."</p><p>Eu conhecia alguns engenheiros de software do meu grupo de jogos de tabuleiro. Eles tinham formações tradicionais, com diplomas da Cal Tech, da Harvey Mudd e de outros programas famosos em Ciência da Computação.</p><p>Na época, era muito menos comum que pessoas na casa dos 30 anos aprendessem a programar.</p><p>Criei coragem para compartilhar meus sonhos com alguns desses amigos.</p><p>Eu queria aprender a programar corretamente. Eu queria poder escrever código para viver como eles faziam. Queria até escrever <em>software </em>que pudesse alimentar escolas.</p><p>Eu compartilhava esses sonhos com meus amigos desenvolvedores. "Eu quero fazer o que vocês fazem."</p><p>Eles meio que davam de ombros. Então, diziam algo como:</p><p>"Claro, você pode <em>tentar</em>, mas terá que aprender muita coisa."</p><p>Ou "É um campo bastante competitivo. Como você vai competir com pessoas que cresceram programando desde cedo?"</p><p>Ou ainda "Você já está indo bem como professor. Por que não continua naquilo em que é bom?"</p><p>Isso me tirava do rumo por algumas semanas. Eu fazia longas caminhadas introspectivas à noite. Eu pensava sobre meu futuro sob as estrelas. Será que essas pessoas estavam certas? Digo – elas conhecem o caminho, certo?</p><p>Todas as manhãs, porém, eu voltava à minha mesa. Ficava vendo meus scripts rodarem e vendo meus relatórios se compilarem a velocidades sobre-humanas. Via tudo isso enquanto meu computador fazia minhas vontades.</p><p>Um pensamento me ocorria: talvez esses amigos estivessem apenas tentando me poupar de um desgosto. Talvez eles simplesmente não conheçam ninguém que tenha aprendido a programar na casa dos 30 anos. Então, eles não acham que é possível.</p><p>É como... por anos, os médicos acharam que seria impossível para alguém correr um quilômetro e meio em 4 minutos. Eles achavam que seu coração explodiria de correr tão rápido.</p><p>Foi aí que alguém conseguiu fazer isso – e seu coração não explodiu.</p><p>Depois que Roger Bannister – um estudante de Oxford de 25 anos – rompeu essa barreira psicológica, várias outras pessoas também conseguiram. Até hoje, mais de mil pessoas correram uma milha em menos de 4 minutos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Roger-Bannister-1951_jpg__1269-1600_.png" class="kg-image" alt="Roger-Bannister-1951_jpg__1269-1600_" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Roger-Bannister-1951_jpg__1269-1600_.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/Roger-Bannister-1951_jpg__1269-1600_.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Roger-Bannister-1951_jpg__1269-1600_.png 1566w" sizes="(min-width: 720px) 720px" width="1566" height="1962" loading="lazy"><figcaption><em>Roger Bannister correndo como um campeão. (Imagem: Britannica)</em></figcaption></figure><p>Não é como se eu estivesse fazendo algo tão ousado e sem precedentes como correr um quilômetro e meio em 4 minutos aqui. Muitos desenvolvedores famosos conseguiram ensinar a si mesmos a programar ao longo dos anos.</p><p>Caramba, Ada Lovelace ensinou a si mesma a programar na década de 1840. Ela nem tinha um computador funcionando. Ela apenas tinha um entendimento de como o computador de seu amigo, Charles Babbage, funcionaria na teoria.</p><p>Ela escreveu vários dos primeiros algoritmos de computador. Ela é considerada por muitos a primeira programadora de computadores do mundo. Ninguém a ensinou porque não havia ninguém para ensiná-la. As dúvidas que ela poderia ter tido, ela claramente superou.</p><p>Óbvio, eu não era a Ada Lovelace. Eu era apenas um professor que já tinha um computador funcionando, uma conexão decente com a internet e a habilidade de pesquisar bilhões de páginas da web com o Google.</p><p>Estalei os dedos e estabeleci minha meta. Eu conseguiria aprender.</p><h3 id="preso-no-inferno-dos-tutoriais">Preso no inferno dos tutoriais</h3><blockquote>"Se você trabalha há 10 anos, você ganha 10 anos de experiência ou ganha 1 ano de experiência 10 vezes? Você tem que refletir sobre suas atividades para obter experiência verdadeira. Se você fizer do aprendizado um compromisso contínuo, obterá experiência. Se não fizer, não importa quantos anos você tenha de carreira." – Steve McConnell, engenheiro de software</blockquote><p>"Olha só, um tutorial de Ruby."</p><p>"Xiii, está começando a ficar difícil. Estou recebendo mensagens de erro que não foram mencionadas no tutorial. Hmm... o que está acontecendo aqui..."</p><p>"Olha só, um tutorial de Python."</p><p>A psicologia humana é uma coisa engraçada. No momento em que algo começa a ficar difícil, perguntamos: estou fazendo isso certo?</p><p>Talvez o tutorial esteja desatualizado. Talvez o autor não soubesse do que estava falando. Alguém ainda usa essa linguagem de programação?</p><p>Quando você está enfrentando mensagens de erro ambíguas horas após iniciar uma sessão de programação, a grama do outro lado parece sempre muito mais verde.</p><p>Era fácil fingir que eu havia feito progresso. Hora de almoçar.</p><p>Eu encontrava um amigo no café. "Como está indo na programação?", ele perguntava.</p><p>"Estou indo muito bem. Já programei por 4 horas hoje."</p><p>"Incrível. Gostaria muito de ver o que você está criando algum dia."</p><p>"Claro," eu dizia, sabendo que eu não tinha criado nada. "Em breve."</p><p>Talvez eu fosse à biblioteca e pegasse um novo livro sobre JavaScript.</p><p>Há um ditado que diz que comprar livros dá a melhor sensação do mundo porque também parece que você está comprando o tempo para lê-los.</p><p>Foi exatamente onde me encontrei algumas semanas após começar a aprender a programar.</p><p>Eu havia lido as primeiras 100 páginas de vários livros de programação, mas não terminei nenhum.</p><p>Eu havia escrito as primeiras 100 linhas de código de vários tutoriais de programação, mas não terminei nenhum.</p><p>Eu não sabia, mas estava preso em um lugar que os desenvolvedores carinhosamente chamam de "inferno dos tutoriais".</p><p>O inferno dos tutoriais é onde você pula de um tutorial para outro, aprendendo e depois reaprendendo as mesmas coisas básicas, mas nunca indo além dos fundamentos.</p><p>Por que ir além dos fundamentos? Bem, isso requer trabalho de verdade.</p><h3 id="-preciso-uma-comunidade-para-criar-um-programador">É preciso uma comunidade para criar um programador</h3><p>Aprender a programar estava absorvendo todo o meu tempo livre, mas eu não estava fazendo muito progresso. Agora, eu podia digitar os caracteres <code>{</code> e <code>*</code> sem olhar para o teclado, mas era só isso.</p><p>Eu sabia que precisava de ajuda. Talvez algum mentor do tipo o mestre Yoda, que pudesse me ensinar os caminhos. Sim – se tal pessoa existisse, certamente faria toda a diferença.</p><p>Descobri um lugar nas proximidades chamado "<em>hackerspace</em>". Quando ouvi o nome pela primeira vez, fiquei um pouco apreensivo. Os <em>hackers</em> não são aqueles caras que fazem coisas ilegais? Eu era um professor de inglês que gostava de jogos de tabuleiro. Não estava procurando encrenca.</p><p>Bem, liguei para o número listado e falei com um cara chamado Steve. Perguntei nervosamente: "Vocês não fazem nada ilegal, fazem?". Steve riu.</p><p>Acontece que a palavra "<em>hack</em>" é o que ele chamava de um termo sobrecarregado. Sim – "hackear" pode significar invadir maliciosamente um sistema de <em>software</em>, mas "hackear" também pode significar algo mais simples: escrever código de computador.</p><p>Algo pode ser "<em>hacky</em>" significando que não é uma solução elegante, nossa famosa "<em>gambiarra</em>". Ainda assim, você pode ter "um <em>hack</em> engenhoso" – um truque engenhoso para fazer seu código funcionar de modo mais eficiente.</p><p>Em resumo: não tenha medo do termo "<em>hack</em>".</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1200x-1_jpg__1200-797_.png" class="kg-image" alt="1200x-1_jpg__1200-797_" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1200x-1_jpg__1200-797_.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/1200x-1_jpg__1200-797_.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/1200x-1_jpg__1200-797_.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1200x-1_jpg__1200-797_.png 2380w" sizes="(min-width: 720px) 720px" width="2380" height="1568" loading="lazy"><figcaption><em>O campus corporativo do Facebook tem a palavra "hack" escrita em letras gigantes no concreto. (Imagem: Bloomberg)</em></figcaption></figure><p>Eu, por exemplo, dificilmente uso o termo porque é muito confuso. Acho que recentemente muitos <em>hackerspaces </em>perceberam a ambiguidade. Muitos deles, agora, se chamam "<em>makerspaces</em>" em vez disso.</p><p>É disso que se trata um <em>hackerspace</em> – fazer coisas.</p><p>Steve me convidou para visitar o <em>hackerspace</em> no sábado à tarde. Ele disse que vários desenvolvedores da área estariam lá.</p><p>A primeira vez que passei pelas portas do <em>Hackerspace</em> de Santa Barbara, fiquei impressionado.</p><p>O lugar cheirava a fogo elétrico. Suas mesas improvisadas estavam repletas de ferros de solda, tiras de luzes de LED, placas de circuito de Arduino para hobbistas e pilhas de robôs aspiradores Roomba.</p><p>O mesmo Steve com quem eu havia falado ao telefone estava lá e me cumprimentou. Ele usava óculos, cabelo penteado para trás e uma barba com cavanhaque. Ele estava sempre sorrindo. Quando você fazia uma pergunta a ele, em vez de responder rapidamente, ele balançava a cabeça e pensava por alguns segundos primeiro.</p><p>Steve era um programador apaixonado, que estudou matemática e filosofia na Universidade da Califórnia – Santa Barbara. Ele ainda era apaixonado por esses assuntos, mas sua verdadeira paixão era o Python.</p><p>Steve ligou o projetor e deu uma "palestra relâmpago" informal. Ele estava demonstrando uma aplicação que havia escrito, que reconheceria códigos QR em um vídeo e os substituiria por imagens.</p><p>Alguém na plateia puxou um código QR em seu laptop e o segurou na frente da câmera. A aplicação de Steve, então, substituiu o código QR por uma foto de uma pizza.</p><p>Alguém na plateia gritou: "Você pode fazer a pizza girar?"</p><p>Steve abriu seu código em um editor de código, chamado Emacs, e começou a fazer alterações em tempo real. Ele alternava sem esforço entre seu editor de código, sua linha de comando e o navegador em que a aplicação estava sendo executada, "carregando diretamente" as atualizações do código.</p><p>Para mim, aquilo era feitiçaria. Eu não conseguia acreditar que Steve havia acabado de criar aquela aplicação em questão de algumas horas. Agora, ele estava adicionando novos recursos na hora, conforme o público pedia.</p><p>Eu pensei: "Esse cara é um gênio."</p><p>Naquela noite, depois que o evento terminou, ele e eu ficamos conversando depois e eu disse isso a ele.</p><p>Comemos sanduíches juntos. Então, eu disse a ele: "Eu poderia programar por toda minha carreira e não seria tão bom como você. Eu adoraria se, daqui a uns 10 anos, eu programasse com a metade da sua capacidade."</p><p>Steve resistiu. Ele disse: "Eu não sou nada especial. Não se limite. Se você continuar programando, poderá me superar facilmente."</p><p>Naquele momento, eu não acreditei nem por um segundo nas palavras que ele me disse, mas só o fato de ele ter dito isso me deixou emocionado.</p><p>Lá estava ele: um desenvolvedor que acreditava em mim. Ele me enxergava – um professor qualquer – a própria definição de "novato dos scripts" – e achava que eu poderia conseguir.</p><p>Steve e eu conversamos até tarde da noite. Ele me mostrou seu <em>netbook </em>de 200 dólares, que, mesmo para os padrões de 2011, era extremamente defasado.</p><p>"Você não precisa de um computador poderoso para desenvolver <em>software</em>," Steve me disse. "O <em>hardware</em> de hoje é incrivelmente poderoso. Os computadores são lentos porque o <em>software</em> inchado que eles rodam os torna lentos. Compre um laptop comum, limpe o disco rígido, instale o Linux e comece a programar."</p><p>Anotei o modelo do laptop que ele tinha e encomendei exatamente o mesmo quando cheguei em casa naquela noite.</p><p>Depois de alguns dias depurando meu novo computador com o Stack Overflow, consegui instalar o Ubuntu com sucesso. Comecei a aprender a usar o editor de código Emacs. No sábado seguinte, já conhecia alguns comandos e estava ansioso para mostrá-los.</p><p>Steve acenou com a cabeça em aprovação. Ele disse, "Incrível, mas o que você está criando?"</p><p>Eu não entendi o que ele quis dizer. "Estou aprendendo a usar o Emacs. Veja, eu memorizei..."</p><p>Steve parecia pensativo. "Isso é legal, mas você precisa de um projeto. Sempre tenha um projeto. Então, aprenda o que você precisa aprender no caminho para terminar esse projeto."</p><p>Além de alguns scripts que eu tinha escrito para ajudar os professores da minha escola, eu nunca tinha terminado nada, mas comecei a entender o que ele estava dizendo.</p><p>Foi aí que começou a me ocorrer: esse tempo todo eu estava preso no inferno dos tutoriais, andando em círculos, sem terminar nada.</p><p>Steve disse, "Quero que você crie um projeto usando HTML5. No próximo sábado, quero que você o apresente no <em>hackerspace</em>."</p><p>Fiquei apavorado com suas palavras, mas me levantei e disse: "Combinado. Estou dentro."</p><h3 id="ningu-m-pode-fazer-de-voc-um-desenvolvedor-al-m-de-voc-mesmo">Ninguém pode fazer de você um desenvolvedor, além de você mesmo</h3><blockquote>"Estou tentando libertar sua mente, Neo, mas só posso mostrar a porta. É você quem tem que atravessá-la." – Morpheus, no filme Matrix (1999)</blockquote><p>Na manhã seguinte, acordei mais cedo do que de costume e procurei algo como "tutorial de HTML5" no Google. Eu já sabia muita coisa disso do meu tempo anterior no inferno dos tutoriais, mas ao invés de pular partes, desacelerei e segui exatamente como estava, digitando cada comando.</p><p>Geralmente, depois de terminar um tutorial, eu simplesmente procurava outro. Dessa vez, comecei a brincar com o código do tutorial. Tive uma ideia simples para um projeto. Eu faria uma página de documentação de HTML5, depois faria a página puramente em HTML5.</p><p>Deixe-me explicar rapidamente o HTML5. É apenas uma versão mais nova do HTML, que existe desde as primeiras páginas da web nos anos 90.</p><p>Se um site fosse um corpo, o HTML seria os ossos. Tudo o mais repousa sobre esses ossos (você pode pensar no JavaScript como os músculos e no CSS como a pele, mas vamos voltar à história.)</p><p>Eu sabia que, no HTML, você podia linkar para diferentes partes da mesma página web usando propriedades de ID. Então, pensei: e se eu colocasse um índice no lado esquerdo? Depois, clicando nos diferentes itens à esquerda, a página rolaria até mostrar esses itens.</p><p>Dentro de meia hora, eu tinha criado o protótipo bruto.</p><p>Era hora de ir para o trabalho na escola. O dia todo, só conseguia pensar no meu projeto e em como deveria terminá-lo.</p><p>Corri para casa, abri meu laptop e passei a noite inteira programando.</p><p>Copiei a documentação oficial (e licenciada sob o <em>creative commons</em>) do HTML diretamente para a minha página, colocando no HTML a documentação por "<em>hard coding</em>" (quando você coloca os valores de variáveis diretamente no código).</p><p>Então, passei cerca de uma hora no CSS, ajustando tudo para ficar certo e usando posicionamento absoluto para manter a barra lateral no lugar.</p><p>Fiz questão de usar o máximo das novas tags "semânticas" do HTML5 que pude.</p><p>Logo, o projeto estava terminado.</p><p>Uma onda de realização me preencheu. Corri até um campo de futebol próximo e dei voltas ao redor do campo, comemorando. Eu consegui. Terminei um projeto.</p><p>Foi naquele momento que decidi: de agora em diante, tudo que eu fizer será um projeto. A partir de agora, vou trabalhar para finalizar os produtos.</p><p>Na noite seguinte, caminhei até o centro da sala, pluguei meu laptop e apresentei minha página em HTML5. Respondi às perguntas dos desenvolvedores presentes sobre o HTML5.</p><p>Às vezes, cometia um erro e alguém na plateia dizia, "isso não parece estar certo – vamos conferir a documentação."</p><p>As pessoas não tinham medo de me corrigir, mas eram educadas e prestativas. Nem parecia que estavam me corrigindo – parecia que estavam corrigindo o registro público – para que ninguém saísse com informações incorretas.</p><p>Eu não senti a ansiedade que talvez sentisse ao dar uma palestra em uma reunião de serviço para professores.</p><p>Na verdade, quase me senti parte dos espectadores, aprendendo junto com eles.</p><p>Afinal, essas ferramentas eram novas e emergentes. Todos nós estávamos tentando entender como usá-las juntos.</p><p>Depois da minha apresentação, Steve veio até mim e me disse: "Nada mal."</p><p>Eu sorri para ele de um modo meio estranho por bastante tempo, sem dizer nada. Estava apenas feliz comigo mesmo.</p><p>Então, Steve apertou os olhos e franziu os lábios. Ele disse: "Comece seu próximo projeto hoje a noite."</p><h3 id="li-es-da-minha-jornada-de-programa-o">Lições da minha jornada de programação</h3><p>Vamos acompanhar a jornada de programação do jovem Quincy em cada um dos capítulos seguintes, mas agora eu quero detalhar algumas das lições aqui. Quero responder a algumas das perguntas que você possa ter.</p><h3 id="por-que-aprender-a-programar-t-o-dif-cil">Por que aprender a programar é tão difícil?</h3><p>Aprender qualquer nova habilidade é difícil, seja driblar com uma bola de futebol, trocar o óleo de um carro ou falar um novo idioma.</p><p>Aprender a programar é difícil por algumas razões específicas. Algumas delas são exclusivas da programação.</p><p>A primeira é que a maioria das pessoas não entende exatamente o que é programação. Bem, aí vai.</p><h3 id="o-que-programa-o">O que é programação?</h3><p>Programação é dizer a um computador o que fazer, de um modo que o computador possa entender.</p><p>É isso. Isso é tudo que a programação realmente é.</p><p>Agora, não se engane. Comunicar-se com computadores é difícil. Eles são "burros" pelos padrões humanos. Eles farão exatamente o que você disser a eles que façam. A menos que você seja bom em programação, porém, eles provavelmente não farão o que você <strong>quer</strong> que eles façam.</p><p>Você pode estar pensando: e os servidores, os bancos de dados e as redes?</p><p>No final, tudo isso é controlado por camadas de <em>software</em>. Código. É código o tempo todo. Eventualmente, você chega ao <em>hardware</em> físico, que está movendo elétrons pelas placas de circuito.</p><p>Nas primeiras décadas da computação, os desenvolvedores escreviam código que estava "próximo ao metal" – muitas vezes operando no <em>hardware </em>diretamente, alterando bits de 0 para 1 e vice-versa.</p><p>O desenvolvimento de <em>software </em>contemporâneo, contudo, envolve tantas "camadas de abstração" – programas rodando em cima de programas – que apenas algumas linhas de código em JavaScript já podem fazer coisas realmente poderosas.</p><p>Nos anos de 1960, um "<em>bug</em>" poderia ser um inseto rastejando dentro de um computador do tamanho de uma sala e sendo frito em um dos circuitos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/First_Computer_Bug-_1945.jpeg" class="kg-image" alt="First_Computer_Bug-_1945" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/First_Computer_Bug-_1945.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/First_Computer_Bug-_1945.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/First_Computer_Bug-_1945.jpeg 1516w" sizes="(min-width: 720px) 720px" width="1516" height="1199" loading="lazy"><figcaption><em>O primeiro bug de computador, descoberto em 1945, era uma mariposa que ficou presa nos painéis de um computador de calculadora do tamanho de uma sala em Harvard. (Imagem: domínio público)</em></figcaption></figure><p>Hoje, estamos escrevendo código com muitas camadas de abstração acima do <em>hardware</em> físico.</p><p>Essa é a programação. É muito mais fácil do que era no passado e está ficando mais fácil a cada ano.</p><p>Eu não estou exagerando quando digo que, em algumas décadas, programar será tão fácil e tão comum que a maioria das pessoas mais jovens saberá fazer isso.</p><h2 id="por-que-aprender-a-programar-ainda-t-o-dif-cil-ap-s-todos-esses-anos">Por que aprender a programar ainda é tão difícil após todos esses anos?</h2><p>Existem três grandes razões pelas quais aprender a programar é tão difícil, mesmo hoje:</p><ol><li>As ferramentas ainda são primitivas.</li><li>A maioria das pessoas não é boa em lidar com a ambiguidade – e aprender a programar é ambíguo. As pessoas se perdem.</li><li>A maioria das pessoas não é boa em lidar com <em>feedback</em> negativo constante. Aprender a programar é uma mensagem de erro fatal após a outra. As pessoas ficam frustradas.</li></ol><p>Vamos discutir cada uma dessas dificuldades em mais detalhes. Vou ensinar a você algumas estratégias práticas para superar cada uma delas.</p><h3 id="as-ferramentas-ainda-s-o-primitivas">As ferramentas ainda são primitivas</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/TNG-S4E19-171.jpeg" class="kg-image" alt="TNG-S4E19-171" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/TNG-S4E19-171.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/TNG-S4E19-171.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/TNG-S4E19-171.jpeg 1424w" sizes="(min-width: 720px) 720px" width="1424" height="1072" loading="lazy"><figcaption><em>Um Barclay Possuído de Star Trek: A Nova Geração, programando no Holodeck.</em></figcaption></figure><blockquote>"Computador. Começar novo programa. Criar conforme o seguinte. Cadeira de estação de trabalho. Agora criar um console alfanumérico padrão posicionado à esquerda. Agora um console de display icônico para a mão direita. Ligar ambos os consoles ao núcleo do computador principal da Enterprise, utilizando a interface de neuralscan." - Barclay de Star Trek: A Nova Geração, temporada 4, episódio 19: "O enésimo grau"</blockquote><p>É assim que as pessoas podem programar no futuro. Esse é um exemplo da minha série de TV de ficção científica favorita, Star Trek: A Nova Geração.</p><p>Todo personagem em Star Trek pode programar. Médicos, oficiais de segurança, pilotos. Até o pequeno Wesley Crusher (interpretado pelo ator mirim Wil Wheaton) consegue fazer o computador da nave obedecer suas ordens.</p><p>Claro, uma das razões pelas quais todos podem programar é que eles vivem em uma sociedade pós-escassez do século 24, com acesso à educação gratuita e de alta qualidade.</p><p>Outra razão é que, no futuro, programar será muito, muito mais fácil. Você só diz a um computador exatamente o que fazer e – se for suficientemente preciso – o computador fará o que você quer.</p><p>Que tal seria se programar fosse tão fácil quanto dar instruções para um computador em linguagem simples?</p><p>Bem, já fizemos progressos significativos em direção a esse objetivo. Pense em nossas avós, correndo entre computadores <em>mainframe</em> do tamanho de uma sala com pilhas de cartões perfurados.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/naca-computer-operates-an-ibm-telereader-5b6f9f-1024.jpeg" class="kg-image" alt="naca-computer-operates-an-ibm-telereader-5b6f9f-1024" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/naca-computer-operates-an-ibm-telereader-5b6f9f-1024.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/naca-computer-operates-an-ibm-telereader-5b6f9f-1024.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/naca-computer-operates-an-ibm-telereader-5b6f9f-1024.jpeg 1024w" sizes="(min-width: 720px) 720px" width="1024" height="768" loading="lazy"><figcaption><em>Trabalhando com um computador baseado em cartões perfurados nos anos 1950 (Imagem: NASA)</em></figcaption></figure><p>Antigamente, programar até mesmo uma aplicação simples exigia instruções meticulosas.</p><p>Aqui estão dois exemplos de uma "Cifra de César", o clássico projeto de tema de casa da ciência da computação.</p><p>Ele também é conhecido como "ROT-13" porque você ROTaciona as letras em 13 posições. Por exemplo, A se torna N (13 letras após A) e B se torna O (13 letras após B).</p><p>Vou mostrar dois exemplos deste programa.</p><p>Primeiro, aqui está o programa em Assembly x86:</p><pre><code>format     ELF     executable 3
entry     start

segment    readable writeable
buf    rb    1

segment    readable executable
start:    mov    eax, 3        ; syscall "read"
    mov    ebx, 0        ; stdin
    mov    ecx, buf    ; buffer for read byte
    mov    edx, 1        ; len (read one byte)
    int    80h

    cmp    eax, 0        ; EOF?
    jz    exit

    xor     eax, eax    ; load read char to eax
    mov    al, [buf]
    cmp    eax, "A"    ; see if it is in ascii a-z or A-Z
    jl    print
    cmp    eax, "z"
    jg    print
    cmp    eax, "Z"
    jle    rotup
    cmp    eax, "a"
    jge    rotlow
    jmp    print

rotup:    sub    eax, "A"-13    ; do rot 13 for A-Z
    cdq
    mov    ebx, 26
    div    ebx
    add    edx, "A"
    jmp    rotend

rotlow:    sub    eax, "a"-13    ; do rot 13 for a-z
    cdq
    mov    ebx, 26
    div    ebx
    add    edx, "a"

rotend:    mov    [buf], dl

print:     mov    eax, 4        ; syscall write
    mov    ebx, 1        ; stdout
    mov    ecx, buf    ; *char
    mov    edx, 1        ; string length
    int    80h

    jmp    start
</code></pre><p>Esse exemplo de Assembly x86 vem do projeto <em>Rosetta Code</em>, licenciado sob a <em>Creative Commons</em>.</p><p>Aqui temos o mesmo programa, mas escrito em Python:</p><pre><code>def rot13(text):
    result = []

    for char in text:
        ascii_value = ord(char)

        if 'A' &lt;= char &lt;= 'Z':
            result.append(chr((ascii_value - ord('A') + 13) % 26 + ord('A')))
        elif 'a' &lt;= char &lt;= 'z':
            result.append(chr((ascii_value - ord('a') + 13) % 26 + ord('a')))
        else:
            result.append(char)

    return ''.join(result)

if __name__ == "__main__":
    input_text = input("Digite o texto a ser codificado/decodificado com ROT-13: ")
    print("Texto Codificado/Decodificado:", rot13(input_text))
</code></pre><p>Parece mais simples e fácil de ler?</p><p>Esse exemplo em Python vem diretamente do GPT-4. Eu pedi da mesma maneira que o Capitão Picard pediria ao computador da nave em Jornada nas Estrelas.</p><p>Aqui está exatamente o que eu disse: "Computador. Novo programa. Pegue cada letra da palavra que eu disser e substitua pela letra que aparece 13 posições depois no alfabeto inglês. Então, leia o resultado para mim. A palavra é Banana."</p><p>O GPT-4 produziu este código em Python, e então leu o resultado para mim: "Onanan."</p><p>O que estamos fazendo aqui é chamado de Programação Declarativa. Estamos declarando "computador, você deve fazer isto". O computador é inteligente o suficiente para entender nossas instruções e executá-las.</p><p>O estilo de programação que a maioria dos desenvolvedores usa hoje, contudo, é a Programação Imperativa. Estamos dizendo ao computador exatamente o que fazer, passo a passo. Historicamente, os computadores têm sido bem burrinhos. Então, tivemos que ajudá-los a dar um passo de cada vez.</p><p>A área de desenvolvimento de <em>software </em>ainda não está madura.</p><p>Porém, assim como as ferramentas humanas antigas avançaram – da pedra ao bronze e depois ao ferro – o mesmo está acontecendo com as ferramentas de <em>software</em>, só que muito mais rápido.</p><p>Provavelmente, ainda estejamos no equivalente da Idade do Bronze da programação agora, mas podemos chegar à Idade do Ferro ainda nesta época em que vivemos. Ferramentas de IA generativa como o GPT estão rapidamente se tornando mais poderosas e mais confiáveis.</p><p>A comunidade de desenvolvedores ainda está dividida sobre a utilidade de ferramentas como o GPT para o desenvolvimento de <em>software</em>.</p><p>De um lado, você tem os influenciadores empreendedores ("torne-se seu próprio chefe"), que dizem coisas como: "Você não precisa mais aprender a programar. O ChatGPT pode escrever todo o seu código para você. Você só precisa de uma ideia de aplicação."</p><p>Do outro lado do espectro, você tem desenvolvedores da "velha guarda" com décadas de experiência em programação – muitos dos quais são céticos de que ferramentas como o GPT são realmente tão úteis para produzir código de qualidade em produção.</p><p>Como na maioria das coisas, a resposta real provavelmente está em algum lugar no meio.</p><p>Não é difícil encontrar vídeos no YouTube de pessoas que começam com uma ideia de aplicação, depois pedem ao ChatGPT o código de que precisam. Algumas pessoas podem até pegar esse código e transformá-lo em uma aplicação que funciona.</p><p>Grandes Modelos de Linguagem (em inglês, LLMs, ou <em>Large Language Models</em>), como o GPT-4, são impressionantes. A velocidade com que estão melhorando é ainda mais impressionante.</p><p>Ainda assim, muitos desenvolvedores são céticos sobre a utilidade dessas ferramentas. Eles questionam se seremos capazes de fazer com que as IAs parem de "alucinar" informações falsas.</p><p>Este é o problema fundamental da "interpretabilidade". Pode levar décadas antes que entendamos realmente o que está acontecendo dentro de uma IA como o GPT-4. Até que consigamos, devemos verificar tudo o que ele diz e assumir que haverá <em>bugs</em> e falhas de segurança no código que ele nos dá.</p><p>Há uma grande diferença entre conseguir fazer um computador fazer algo para você e realmente entender como o computador está fazendo isso.</p><p>Muitas pessoas sabem conduzir um carro, mas muito menos pessoas podem consertar um carro – quanto mais desenhar um novo carro do zero.</p><p>Se você quer ser capaz de desenvolver sistemas de <em>software </em>poderosos que resolvam novos problemas – e quer que esses sistemas sejam rápidos e seguros – ainda vai precisar aprender a programar corretamente.</p><p>Isso significa sentir qual é o seu caminho e lidar com muita ambiguidade.</p><h3 id="aprender-a-programar-um-processo-amb-guo">Aprender a programar é um processo ambíguo</h3><p>Quando você está aprendendo a programar, você constantemente se pergunta: "Estou usando meu tempo com sabedoria? Estou aprendendo as ferramentas certas? Esses autores de livros/criadores de cursos sabem do que estão falando?"</p><p>A ambiguidade embaça todas as suas sessões de estudo. "Meu caso de teste falhou porque o tutorial está desatualizado e porque houve mudanças no <em>framework </em>que estou usando? Ou será que eu estou fazendo algo de errado?"</p><p>Como mencionei anteriormente com o inferno dos tutoriais, você também precisa lidar com a doença do "a grama é mais verde do outro lado".</p><p>Isso é agravado pelo fato de que alguns desenvolvedores se acham muito espertos ao responderem perguntas com um "RTFM" (que significa, em português, algo como "Leia a droga do manual". Nada super útil. Que manual? Que seção?</p><p>Outro problema é que você não sabe o que não sabe. Muitas vezes você não consegue nem articular a pergunta que está tentando fazer.</p><p>Se você não consegue nem mesmo fazer a pergunta certa, vai se debater.</p><p>Isso é ainda mais difícil com a programação porque é possível que ninguém tenha tentado construir exatamente a mesma aplicação que você está construindo.</p><p>Assim, alguns dos problemas que você encontra podem não ter precedentes. Pode não haver ninguém a quem recorrer.</p><p>15% das consultas que as pessoas digitam no Google todos os dias jamais foram pesquisadas antes. Essa é uma má notícia se você é a pessoa que está fazendo essas pesquisas.</p><p>Minha teoria é de que a maioria dos desenvolvedores descobrirá como resolver um problema e simplesmente seguirá em frente, sem jamais documentá-lo em qualquer lugar. Então, você pode ser parte dos incontáveis desenvolvedores que teve de inventar sua própria solução para o mesmo problema específico.</p><p>Claro, há os tópicos de fóruns antigos e as páginas do StackOverflow.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/wisdom_of_the_ancients_png__485-270_.png" class="kg-image" alt="wisdom_of_the_ancients_png__485-270_" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/wisdom_of_the_ancients_png__485-270_.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/10/wisdom_of_the_ancients_png__485-270_.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/10/wisdom_of_the_ancients_png__485-270_.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/wisdom_of_the_ancients_png__485-270_.png 1926w" sizes="(min-width: 720px) 720px" width="1926" height="1062" loading="lazy"><figcaption><em>Quadrinho criado por XKCD</em></figcaption></figure><h3 id="como-n-o-se-perder-ao-aprender-a-programar">Como não se perder ao aprender a programar</h3><p>A boa notícia é: <strong>competência</strong> e <strong>confiança</strong> vêm com a prática.</p><p>Em breve, você saberá exatamente o que buscar no Google. Você terá uma espécie de sexto sentido para como a documentação é geralmente estruturada e onde procurar por o quê. Também saberá onde perguntar determinadas perguntas.</p><p>Eu gostaria que houvesse uma solução mais simples para o problema da ambiguidade, mas você só precisa aceitá-la. Aprender a programar é um processo ambíguo. Mesmo os desenvolvedores mais experientes precisam lidar com a ambiguidade.</p><p>Afinal, programar é uma das raras profissões onde você pode reutilizar infinitamente soluções para problemas que já encontrou antes.</p><p>Assim, como desenvolvedor, você está sempre fazendo algo que nunca fez antes.</p><p>As pessoas pensam que desenvolvimento de <em>software</em> tem a ver com digitar código em um computador. Na verdade, é mais a ver com aprender.</p><p>Você vai passar uma grande parte da sua carreira apenas pensando muito intensamente ou inserindo comandos às cegas em um <em>prompt</em>, tentando entender como um sistema funciona.</p><p>Você também vai passar muito tempo em reuniões com outras pessoas: gerentes, clientes, colegas desenvolvedores, aprendendo sobre o problema que precisa ser resolvido, para que você possa construir uma solução para ele.</p><p>Fique confortável com a ambiguidade e você vai longe.</p><h3 id="aprender-a-programar-uma-mensagem-de-erro-ap-s-a-outra">Aprender a programar é uma mensagem de erro após a outra</h3><p>Muitas pessoas que estão aprendendo a programar sentem como se batessem em um muro. O progresso não vem tão rapidamente quanto esperam.</p><p>Uma grande razão para isso é que, na programação, o ciclo de feedback é muito mais apertado do que em outras áreas.</p><p>Na maioria das escolas, seu professor vai dar a você as tarefas, depois avaliará essas tarefas e as devolverá para você. Ao longo de um semestre, você pode ter apenas uma dúzia de situações onde receberá feedback.</p><p>"Oh, não, eu realmente fui mal nessa prova," você pode dizer a si mesmo. "Eu preciso estudar mais para a próxima prova".</p><p>Talvez seu professor deixe anotações em tinta vermelha no seu trabalho para ajudar você a melhorá-lo.</p><p>Receber uma nota ruim em um teste ou trabalho pode realmente arruinar seu dia.</p><p>É assim que geralmente pensamos sobre feedback como seres humanos.</p><p>Se você passou muito tempo programando, saberá que os computadores são bastante rápidos. Eles podem executar seu código em alguns milissegundos.</p><p>Na maioria das vezes, seu código vai falhar.</p><p>Se você tiver sorte, receberá uma mensagem de erro.</p><p>Se tiver MUITA sorte, receberá um "rastreamento de pilha" – tudo o que o computador estava tentando fazer quando encontrou o erro – junto com um número de linha do trecho de código que causou a falha do programa.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/oh-my-zsh-stack-trace-error.jpg" class="kg-image" alt="oh-my-zsh-stack-trace-error" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/oh-my-zsh-stack-trace-error.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/10/oh-my-zsh-stack-trace-error.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/10/oh-my-zsh-stack-trace-error.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/oh-my-zsh-stack-trace-error.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1200" loading="lazy"></figure><p>Esse é um feedback negativo direto de um computador. Nem todo mundo consegue lidar com ele, vendo isso repetidamente o dia todo.</p><p>Imagine se cada vez que você entregasse seu trabalho ao seu professor, ele o devolvesse com um grande "F" vermelho escrito nele. Imagine se ele fizesse isso antes que você pudesse sequer piscar e repetidamente.</p><p>É assim que programar pode parecer às vezes. Você quer agarrar o computador e gritar, "por que você simplesmente não entende o que estou tentando fazer?".</p><h3 id="como-n-o-se-frustrar">Como não se frustrar</h3><p>A chave, novamente, é a prática.</p><p>Com o tempo, você desenvolverá uma tolerância para as mensagens de erro vagas e rastreamentos de pilha do tamanho de uma tela inteira.</p><p>Programar nunca será mais difícil do que é quando você está apenas começando.</p><p>Não só você não sabe o que está fazendo, como também não está acostumado a receber um feedback negativo tão impessoal e rápido.</p><p>Aqui vão algumas dicas:</p><h4 id="dica-n-1-saiba-que-voc-n-o-o-pior-dos-piores-em-programa-o">Dica nº 1: saiba que você não é o pior dos piores em programação</h4><p>Todos que aprendem a programar lutam com a frustração de tentar realizar uma fusão mental com um computador e fazer com que ele o entenda (outra referência a Star Trek).</p><p>Claro, algumas pessoas começaram a programar quando eram apenas crianças. Elas podem agir como se sempre fossem boas em programação, mas, muito provavelmente, elas lutaram da mesma forma que nós, adultos, lutamos, e com o tempo simplesmente esqueceram as horas de frustração.</p><p>Pense no computador como seu amigo, não seu adversário. Ele está apenas pedindo que você esclareça suas instruções.</p><h4 id="dica-n-2-respire">Dica nº 2: respire</h4><p>A reação natural de muitas pessoas quando recebem uma mensagem de erro é ranger os dentes. Depois, voltar ao editor de código e começar a alterar o código cegamente, esperando ter sorte e passar pelo erro.</p><p>Isso não funciona, e eu vou te dizer o porquê.</p><p>O universo é complexo. <em>Software</em> é complexo. Você, provavelmente, não terá a sorte de um Forest Gump de simplesmente esbarrar em algo bom no final.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/gump.jpeg" class="kg-image" alt="gump" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/gump.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/10/gump.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/gump.jpeg 1280w" sizes="(min-width: 720px) 720px" width="1280" height="720" loading="lazy"><figcaption><em>Forest Gump fazendo o que ele faz e se dando bem de maneira improvável ao pescar os camarões.</em></figcaption></figure><p>Você pode ter ouvido falar do Teorema do macaco infinito. É um experimento mental onde você imagina chimpanzés digitando em máquinas de escrever.</p><p>Se você tivesse uma sala cheia de chimpanzés digitando em máquinas de escrever, quanto tempo levaria até que um deles digitasse a frase "ser ou não ser" por acaso?</p><p>Vamos supor que cada chimpanzé digite um caractere aleatório por segundo. Provavelmente, levaria 1 quintilhão de anos para um deles digitar "ser ou não ser". Isso é 10 elevado à 18ª potência. Um bilhão de bilhões.</p><p>Mesmo assumindo que os chimpanzés permaneçam saudáveis e que as máquinas de escrever sejam regularmente mantidas – a galáxia seria um vazio frio e escuro até que um deles conseguisse digitar "ser ou não ser".</p><p>Por que estou falando disso? Porque você não quer ser um desses chimpanzés.</p><p>Nesse tempo, você certamente descobriria uma maneira de ensinar esses chimpanzés a digitar palavras em inglês. Eles provavelmente conseguiriam digitar todo Hamlet – não apenas sua linha mais famosa.</p><p>Mesmo que, de alguma maneira, você dê sorte e passe pelo <em>bug</em>, o que você terá aprendido?</p><p>Então, em vez de brigar com o código, você deve dar um tempo. Entenda o código. Entenda o que está acontecendo e, então, corrija o erro.</p><p>Sempre dedique um tempo para entender o código que está falhando. Não seja um chimpanzé quintilionário (acho que isso significa alguém com 1 quintilhão de anos, embora, segundo o Google, ninguém jamais tenha digitado essa palavra antes).</p><p>Em vez de tentar fazer as coisas cegamente, esperando que a mensagem de erro pare de aparecer, desacelere.</p><p>Respire fundo. Alongue-se. Levante-se e pegue uma bebida quente.</p><p>Seu futuro eu será grato por ter aproveitado esse momento para aprender algo.</p><h4 id="dica-n-3-use-a-depura-o-com-o-patinho-de-borracha">Dica nº 3: use a depuração com o patinho de borracha</h4><p>Obtenha um patinho de borracha e coloque-o ao lado do seu computador. Toda vez que você encontrar uma mensagem de erro, tente explicar ao patinho o que você acha que está acontecendo.</p><p>Claro, isso é bobo. Como isso poderia ser útil?</p><p>Por incrível que pareça, é.</p><p>A depuração com o patinho de borracha (em inglês, <em>rubber duck debugging</em>) é uma ótima ferramenta para desacelerar e falar sobre o problema em questão.</p><p>Você não precisa usar um patinho de borracha, é claro. Você poderia explicar sua aplicação em Python para o seu cacto de estimação e sua consulta SQL ao gato que continua pulando no seu teclado.</p><p>O próprio ato de explicar seu raciocínio em voz alta parece ajudá-lo a processar melhor a situação.</p><h3 id="como-a-maioria-das-pessoas-aprende-a-programar">Como a maioria das pessoas aprende a programar?</h3><p>Vamos falar sobre os caminhos tradicionais que levam ao primeiro emprego como desenvolvedor.</p><p>Por que você deveria se importar com o que todos os outros fazem? <em>Spoiler</em>: você não precisa fazer isso, na verdade.</p><p>Você faz <strong>você</strong>.</p><p>Dito isso, você pode duvidar de si mesmo e das decisões que tomou sobre seu aprendizado. Pode ansiar pelo caminho não trilhado.</p><p>Meu objetivo com esta seção é acalmar qualquer ansiedade que você possa ter.</p><h4 id="a-import-ncia-dos-diplomas-em-ci-ncia-da-computa-o">A importância dos diplomas em Ciência da Computação</h4><p>Os diplomas universitários ainda são o padrão de ouro para se preparar para uma carreira em desenvolvimento de <em>software</em>, especialmente os bacharelados em Ciência da Computação.</p><p>Antes de começar a dizer "mas eu não tenho um diploma em Ciência da Computação" – relaxe. <strong>Você não precisa de um diploma em Ciência da Computação para se tornar um desenvolvedor</strong>.</p><p>A utilidade do curso, porém, é inegável – e eu vou explicar o porquê.</p><p>Primeiro, você pode se perguntar: por que os desenvolvedores devem estudar Ciência da Computação? Afinal, um dos desenvolvedores mais proeminentes de todos os tempos disse o seguinte sobre o campo:</p><blockquote>"A educação em ciência da computação não pode fazer ninguém se tornar um especialista em programação, assim como estudar pincéis e pigmentos não pode fazer alguém se tornar um especialista em pintura." – Eric Raymond, desenvolvedor, cientista da computação e autor</blockquote><p>Os departamentos de Ciência da Computação eram tradicionalmente parte do departamento de matemática. Universidades nos anos 1960 e 1970 não sabiam ao certo onde colocar essa coisa toda de computação.</p><p>Em outras universidades, a Ciência da Computação era considerada uma extensão da Engenharia Elétrica. Até recentemente, mesmo a Universidade da Califórnia – Berkeley – uma das maiores universidades públicas do mundo – só oferecia diplomas de Ciência da Computação como uma espécie de dupla graduação com Engenharia Elétrica.</p><p>A maioria das universidades, agora, compreende a importância da Ciência da Computação como campo de estudo.</p><p>No momento em que escrevo, a Ciência da Computação é o diploma mais bem remunerado que você pode obter, com salários mais altos até do que o de áreas focadas em dinheiro, como Finanças e Economia.</p><p><a href="https://www.glassdoor.com/blog/50-highest-paying-college-majors/">De acordo com o Glassdoor</a>, a graduação em Ciência da Computação nos EUA garante mais dinheiro em seu primeiro emprego do que qualquer outra graduação. São 70 mil dólares. Isso é muito dinheiro para alguém que acabou de se formar na faculdade.</p><p>Mais do que graduações em Enfermagem (59 mil dólares), Finanças (55 mil dólares) e arquitetura (50 mil dólares).</p><p>Certo – então, obter um diploma em Ciência da Computação pode ajudá-lo a conseguir um emprego de nível básico bem remunerado. Isso provavelmente não é novidade para ninguém, mas por que as coisas são assim?</p><h4 id="como-os-empregadores-pensam-sobre-diplomas-de-bacharelado">Como os empregadores pensam sobre diplomas de bacharelado</h4><p>Você pode ter ouvido alguns grandes empregadores em tecnologia dizerem coisas como "não exigimos mais que os candidatos a vagas de emprego tenham um diploma de bacharelado".</p><p>O Google disse isso. A Apple disse isso.</p><p>Eu acredito neles, que eles não exigem mais diplomas de bacharelado.</p><p>Tivemos muitos ex-alunos do freeCodeCamp conseguindo empregos nessas empresas, alguns dos quais não tinham diplomas de bacharelado.</p><p>Esses ex-alunos do freeCodeCamp, porém, que conseguiram esses empregos, provavelmente, tiveram de ser candidatos muito fortes para superar o fato de não terem diplomas de bacharelado.</p><p>Você pode ver essas vagas de emprego como tendo uma variedade de critérios pelos quais os candidatos são julgados:</p><ol><li>Experiência de trabalho</li><li>Educação</li><li>Portfólio e projetos</li><li>Eles têm uma recomendação de alguém que já trabalha na empresa? (discutiremos <em>networking</em> em profundidade no capítulo 2)</li><li>Outras considerações relacionadas à reputação (discutiremos construção de uma reputação no capítulo 3)</li></ol><p>Para esses empregadores que não exigem um diploma de bacharelado, a educação formal é apenas uma das várias coisas a serem consideradas. Se você for muito forte em outras áreas, eles podem escolher entrevistar você – independentemente de você ter pisado ou não em alguma universidade em algum momento da vida.</p><p>Apenas observe que ter um diploma de bacharelado tornará mais fácil conseguir uma entrevista, mesmo nesses empregadores "que não exigem diploma".</p><h4 id="por-que-tantos-empregos-de-desenvolvedor-exigem-especificamente-um-diploma-em-ci-ncia-da-computa-o">Por que tantos empregos de desenvolvedor exigem especificamente um diploma em Ciência da Computação?</h4><p>Um bacharelado é um bacharelado, eu costumo dizer às pessoas, porque, para a maioria dos casos e propósitos, é isso mesmo.</p><p>Quer entrar nas forças armadas dos EUA como oficial, em vez de passar pelo alistamento? Você precisará de um diploma de bacharelado, mas qualquer especialidade serve.</p><p>Quer obter um visto de trabalho para trabalhar no exterior? Provavelmente, precisará de um diploma de bacharelado, mas qualquer especialidade serve.</p><p>Para tantas vagas de emprego que dizem "necessário diploma de bacharelado" – qualquer especialidade serve.</p><p>Por que funciona assim? O assunto que você estuda na universidade não importa?</p><p>Bem, aqui está minha teoria sobre isso: o que você aprende na universidade é menos importante do que <strong>se</strong> você concluiu a universidade.</p><p>Os empregadores estão tentando selecionar pessoas que possam encontrar meios de passar por esse "rito de passagem".</p><p>É certamente verdade que você pode estar entre os piores da sua turma, repetindo cursos em que não conseguiu passar, e estar fazendo aulas de recuperação a metade do seu tempo, mas um diploma é um diploma.</p><p>Sabe como eles chamam o estudante que terminou em último lugar na sua turma na escola de medicina? "Doutor".</p><p>Para a maioria dos empregadores, o mesmo se aplica.</p><p>Em muitos casos, as pessoas de RH estão apenas marcando uma caixa no <em>software </em>de filtragem de candidaturas a um emprego. Eles estão filtrando candidatos que não têm um diploma. Nesses casos, eles podem sequer olhar para as candidaturas a emprego de pessoas sem diplomas.</p><p>Novamente, nem todo empregador é assim. Muitos deles são, no entanto. Aqui nos EUA, com certeza, e talvez ainda mais em outros países.</p><p>Isso é ruim, mas é como o mercado de trabalho funciona agora. Pode mudar nas próximas décadas. Pode não mudar.</p><p>É por isso que eu sempre encorajo pessoas que estão na adolescência e chegando aos 20 anos de idade a considerarem seriamente obter um diploma de bacharelado.</p><p>Não é por causa de nenhuma das coisas que as universidades fazem propaganda a respeito:</p><ul><li>A própria educação (você pode fazer cursos de algumas das melhores universidades <em>on-line</em> de graça, então isso por si só não justifica o alto custo da mensalidade).</li><li>A "experiência universitária" de morar em um dormitório, fazer novos amigos e autodescoberta (a maioria dos estudantes universitários dos EUA nunca moram no campus, então eles realmente não têm isso de qualquer forma).</li><li>Cursos de educação geral que ajudam a deixar um indivíduo "redondinho" (já ouviu falar das "<em>Freshman 15</em>"? É uma piada, é claro, mas muitos calouros universitários realmente ganham peso devido ao estresse da experiência).</li></ul><blockquote>Nota da tradução: "Freshman 15" pode ser traduzido livremente como "as 15 do calouro". "As 15", nesse caso, refere-se as 15 libras (cerca de 7 quilos) que o calouro ganha de peso devido ao estresse do primeiro ano da faculdade.</blockquote><p>Novamente, o verdadeiro valor de obter um diploma de bacharelado – a verdadeira razão pela qual os americanos pagam 100 mil dólares ou mais por 4 anos de universidade – é porque muitos empregadores exigem diplomas.</p><p>Claro, existem outros benefícios de se ter um diploma de bacharelado, como os que mencionei: opções maiores na carreira militar e maior facilidade de se obter vistos de trabalho.</p><p>Um desses benefícios é: se você quiser se tornar um médico, dentista, advogado ou professor, você primeiro precisará de um diploma de bacharelado. Você pode, então, usá-lo para entrar na pós-graduação.</p><p>OK – isso é muita informação de fundo. Permita-me responder suas perguntas de maneira mais direta.</p><h3 id="voc-precisa-de-um-diploma-universit-rio-para-trabalhar-como-desenvolvedor-de-software">Você precisa de um diploma universitário para trabalhar como desenvolvedor de <em>software</em>?</h3><p>Não. Existem muitos empregadores que o contratarão sem um diploma de bacharelado.</p><p>Um diploma de bacharelado tornará muito mais fácil conseguir uma entrevista em muitos empregadores. Também pode ajudá-lo a exigir um salário mais alto.</p><h3 id="nos-eua-existem-tamb-m-os-associate-degrees-eles-valem-alguma-coisa">Nos EUA, existem também os <em>Associate Degrees</em>... eles valem alguma coisa?</h3><blockquote>Nota da tradução: de uma maneira MUITO resumida, quando falamos de Associate Degrees, estamos falando de algo semelhante a um curso técnico no Brasil.</blockquote><p>Em teoria, sim. Existem alguns campos em tecnologia onde ter um <em>Associate Degree</em> pode ser necessário. Eu acho que sempre aumenta suas chances de conseguir uma entrevista.</p><p>Dito isso, eu não recomendaria ir para a universidade com o objetivo específico de obter um <em>Associate Degree</em>. Eu encorajaria 100% a permanecer na faculdade até obter um diploma de bacharelado, que é infinitamente mais útil.</p><p>De acordo com o Departamento de Educação dos EUA, ao longo de sua carreira, ter um diploma de bacharelado fará você ganhar 31% mais do que apenas ter um <em>Associate Degree</em>.</p><p>Confio no fato de que essa diferença é muito maior com um bacharelado em Ciência da Computação.</p><h3 id="vale-a-pena-ir-para-a-universidade-para-obter-um-diploma-de-bacharelado-mais-tarde-na-vida-se-voc-ainda-n-o-tiver-um">Vale a pena ir para a universidade para obter um diploma de bacharelado mais tarde na vida, se você ainda não tiver um?</h3><p>Digamos que você está na casa dos 30 anos. Talvez você tenha frequentado alguns cursos de faculdade ou universidade. Talvez você tenha concluído os primeiros dois anos e tenha conseguido um <em>Associate Degree</em>.</p><p>Faz sentido voltar "às aulas" no sentido formal?</p><p>Sim, pode fazer sentido.</p><p>Não acho que faça sentido, porém, largar o emprego para voltar a estudar em tempo integral.</p><p>O estilo de vida de estudante em tempo integral é realmente projetado para estudantes "tradicionais" em mente. Ou seja, pessoas entre 18 e 22 anos (ou um pouco mais velhas se serviram nas forças armadas), que ainda não entraram na força de trabalho senão em empregos que exigem apenas o ensino médio ou nos conhecidos empregos de verão.</p><p>Universidades tradicionais custam muito dinheiro para frequentar. A suposição é a de que os estudantes pagarão por meio de uma combinação de bolsas de estudo, fundos familiares e empréstimos estudantis.</p><p>Como adulto trabalhador, você terá menos acesso a essas fontes de financiamento. Além disso, você terá menos tempo livre do que alguém que recém saiu do ensino médio teria.</p><p>Em vez de frequentar uma universidade tradicional, recomendo que pessoas com mais de 30 anos frequentem uma das universidades <em>on-line</em> sem fins lucrativos. Duas que têm boas reputações e cujas taxas são bastante razoáveis são a Western Governor's University e a University of the People.</p><p>Você também pode encontrar uma <em>community college</em> local ou um programa de extensão universitária estadual que ofereça diplomas. Muitos desses programas são <em>on-line</em>. Alguns deles são até autoguiados, para que você possa concluir os cursos conforme sua agenda de trabalho permitir.</p><p>Faça sua pesquisa. Se uma escola parecer promissora, recomendo encontrar um ex-aluno dela no LinkedIn e entrar em contato. Pergunte a ele sobre suas experiências e se acha que valeu a pena.</p><p>Recomendo não contrair nenhuma dívida para financiar seu diploma. É muito melhor frequentar uma escola mais barata. Afinal, um diploma é um diploma. Contanto que seja de uma instituição credenciada, deve ser suficiente para a maioria das finalidades.</p><h3 id="se-voc-j-tem-um-bacharelado-faz-sentido-voltar-e-conseguir-um-segundo-bacharelado-em-ci-ncia-da-computa-o">Se você já tem um bacharelado, faz sentido voltar e conseguir um segundo bacharelado em Ciência da Computação?</h3><p>Não. Segundos bacharelados quase nunca valem o tempo e o dinheiro.</p><p>Se você tem qualquer bacharelado – mesmo que seja em uma área não relacionada às ciências exatas – você já obteve a maior parte do valor que obteria da universidade.</p><h3 id="que-tal-um-mestrado-em-ci-ncia-da-computa-o">Que tal um mestrado em Ciência da Computação?</h3><p>Eles podem ser úteis para o avanço na carreira, mas você deve buscá-los mais tarde, depois de já estar trabalhando como desenvolvedor.</p><p>Muitos empregadores pagarão pela educação contínua de seus funcionários.</p><p>Um programa que muitos dos meus amigos na área de tecnologia frequentaram é o mestrado em Ciência da Computação da Georgia Tech.</p><p>O departamento de Ciência da Computação da Georgia Tech está entre os melhores dos EUA. Esse programa de mestrado não é apenas totalmente <em>on-line</em>, mas também é bastante acessível.</p><p>Eu não recomendaria fazer isso agora. Primeiro, concentre-se em conseguir um emprego como desenvolvedor (falaremos sobre isso mais detalhadamente mais adiante neste livro).</p><h3 id="os-diplomas-continuar-o-a-ser-importantes-no-futuro">Os diplomas continuarão a ser importantes no futuro?</h3><p>Sim, acredito que os diplomas universitários continuarão a ser importantes por décadas – e possivelmente séculos – no futuro.</p><p>Os diplomas universitários existem há mais de mil anos.</p><p>Muitas das principais universidades dos EUA são mais antigas do que os próprios EUA (Harvard tem mais de 400 anos).</p><p>A morte do diploma universitário é muito exagerada.</p><p>Tornou-se popular em alguns círculos criticar as universidades e dizer que os diplomas não importam mais.</p><p>Se você observar as estatísticas, no entanto, isso claramente não é verdade. Eles têm um impacto nos ganhos ao longo da vida.</p><p>Além disso, eles podem abrir carreiras que são mais seguras, mais estáveis e, no final das contas, mais gratificantes.</p><p>Claro, você pode ganhar muito dinheiro trabalhando em plataformas de petróleo em alto mar, por exemplo.</p><p>Você, porém, pode ganhar um ótimo dinheiro igualmente trabalhando como desenvolvedor em um escritório com controle de clima, assistindo servidores e corrigindo bases de código.</p><p>Um desses trabalhos é perigoso e exaustivo. O outro é um trabalho que você poderia fazer confortavelmente por 40 anos.</p><p>Muitos dos "líderes de pensamento" que criticam as universidades tiraram proveito de uma educação universitária.</p><p>Uma razão pela qual muitas pessoas acham que os diplomas são "inúteis" é o fato de que é difícil separar o aprendizado do impulso no status que você recebe.</p><p>A universidade é apenas uma forma de sinalização de classe – uma maneira para os ricos continuarem a passar vantagem para seus filhos, talvez. Afinal, há três vezes mais chances de se encontrar uma criança rica em Harvard do que uma criança pobre.</p><p>O fato é que a vida é fundamentalmente injusta, mas isso não muda o funcionamento do mercado de trabalho.</p><p>Você pode escolher o modo fácil e terminar um diploma que dará a você mais opções no futuro.</p><p>Ou você pode escolher o modo difícil, potencialmente economizar tempo e dinheiro, e apenas ser mais seletivo sobre os empregadores para os quais você se candidata.</p><p>Tenho muitos amigos que usaram as duas abordagens com grande sucesso.</p><h3 id="quais-s-o-as-alternativas-a-um-diploma-universit-rio">Quais são as alternativas a um diploma universitário?</h3><p>Trabalho com educação de adultos há quase duas décadas e ainda não vi um substituto convincente para um diploma universitário.</p><p>Claro – existem programas de certificação e <em>bootcamps</em>.</p><p>Eles, porém, não têm o mesmo peso com os empregadores e raramente são tão rigorosos.</p><p><em>Nota: quando digo "programas de certificação" refiro-me a um programa onde você participa de um curso e depois obtém uma certificação no final. Eles têm valor limitado, mas certificações baseadas em exames de empresas como a Amazon e a Microsoft são bastante valiosas. Discutiremos isso detalhadamente mais adiante.</em></p><p>O que digo às pessoas é: graduar-se ou não graduar-se – essa é a questão.</p><p>Conheço muitas pessoas que são mecânicos, eletricistas ou que fazem algum outro tipo de serviço e que não têm um bacharelado. Eles claramente podem aprender um conjunto de habilidades, aplicá-las e manter um emprego.</p><p>Conheço muitas pessoas que são contadores, assistentes jurídicos e outros "trabalhadores do conhecimento" que não têm um bacharelado. Eles claramente podem aprender um conjunto de habilidades, aplicá-las e manter um emprego.</p><p>Em muitos casos, essas pessoas podem simplesmente aprender a programar sozinhas, usando recursos de aprendizado gratuitos e interagindo com pessoas de mentalidade semelhante.</p><p>Algumas dessas pessoas sempre tiveram o objetivo pessoal de voltar e concluir seu bacharelado. Esse é um bom motivo para fazê-lo.</p><p>Se você quer uma educação formal, vá para a graduação. Se você não quer uma educação formal, não a faça. Apenas aprenda por conta própria.</p><p>A principal coisa que <em>bootcamps </em>e outros programas de certificação vão dar a você é estrutura e um pouco de pressão dos colegas. Isso não é uma coisa ruim, mas vale a pena pagar milhares de dólares por isso?</p><h3 id="como-ser-um-autodidata-em-programa-o">Como ser um autodidata em programação</h3><p>A maioria dos desenvolvedores são autodidatas. Mesmo os desenvolvedores que se formaram em Ciência da Computação ainda frequentemente se descrevem como "autodidatas" em pesquisas do setor, como a pesquisa anual do Stack Overflow.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/stack-overflow.jpeg" class="kg-image" alt="stack-overflow" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/stack-overflow.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/stack-overflow.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="731" loading="lazy"><figcaption><em>A maioria dos desenvolvedores em atividade se considera "autodidata" (Imagem: pesquisa do Stack Overflow, 2016)</em></figcaption></figure><p>Isso acontece porque aprender a programar é um processo de vida inteira. Há constantemente novas ferramentas para aprender, novos códigos legados para mapear e novos problemas para resolver.</p><p>Então, quer você busque uma educação formal ou não, saiba disso: você precisará se tornar um bom autodidata.</p><h4 id="o-que-significa-ser-um-desenvolvedor-autodidata">O que significa ser um desenvolvedor "autodidata"?</h4><p>Não querendo ser pedante, mas quando me refiro a autodidatismo, quero dizer aprendizagem autodirigida – aprendizado fora da educação formal.</p><p>Muito poucas pessoas são verdadeiramente "autodidatas" em qualquer coisa. Por exemplo, Isaac Newton aprendeu Cálculo sozinho porque não havia livros de Cálculo. Ele teve que descobrir e inventar à medida que avançava.</p><p>Da mesma forma, Ada Lovelace aprendeu programação sozinha porque, antes dela, não havia programação. Ela a inventou.</p><p>Alguém pode te dizer: "Você não é realmente autodidata porque aprendeu com livros ou cursos <em>on-line</em>. Então, você teve professores". Eles estão corretos, mas apenas no sentido mais estrito.</p><p>Se alguém tiver problemas com você se chamando de autodidata, basta dizer: "Pelos seus padrões, ninguém que não foi criado por lobos pode alegar ser autodidata em qualquer coisa".</p><p>Indique a eles esta seção do livro e diga: "Quincy antecipou seu esnobismo." Depois, siga em frente com sua vida.</p><p>Afinal, a vida é muito curta, certo?</p><p>Você é autodidata.</p><h4 id="o-que-aprendizagem-autodirigida">O que é aprendizagem autodirigida?</h4><p>Como autodidata, você vai selecionar seus próprios recursos de aprendizagem. Você vai escolher o que aprender e de onde. Essa é a essência da "aprendizagem autodirigida."</p><p>Como saber, porém, se você está aprendendo as habilidades certas e usando os recursos adequados?</p><p>Bem, é aí que entra a comunidade.</p><p>Existem muitas comunidades de aprendizes ao redor do mundo, todas ajudando umas às outras a expandir suas habilidades.</p><p>Comunidade é uma palavra difícil de definir. A parte do Twitter de tecnologia é uma comunidade? O fórum do freeCodeCamp é? Que tal os muitos grupos do Discord e subreddits dedicados a conjuntos de habilidades específicas em programação?</p><p>Considero todas essas comunidades. Se há pessoas que regularmente frequentam e se ajudam mutualmente, acho que estamos falando de uma comunidade.</p><p>Os eventos presenciais também são? O encontro mensal de desenvolvedores Ruby em Oakland é? O encontro da comunidade de startups de Nova York? O grupo de usuários de Linux do Texas Central?</p><p>Essas comunidades podem ser <em>on-line</em>, presenciais ou uma combinação de ambos.</p><p>Falaremos mais sobre comunidades no capítulo sobre como construir sua rede de contatos. O ponto mais importante é: os novos amigos que você encontra nessas comunidades podem ajudar você a restringir suas opções sobre o que aprender e sobre quais recursos utilizar.</p><h3 id="qual-linguagem-de-programa-o-devo-aprender-primeiro">Qual linguagem de programação devo aprender primeiro?</h3><p>A resposta curta é: não importa, na verdade. Uma vez que você aprendeu bem uma linguagem de programação, fica muito mais fácil aprender a sua segunda linguagem.</p><p>Existem diferentes tipos de linguagens de programação, mas hoje a maioria do desenvolvimento é feito usando "linguagens de script de alto nível", como JavaScript e Python. Essas linguagens trocam a eficiência bruta que você obtém com "linguagens de programação de baixo nível", como C, pelo que elas ganham em troca: o benefício de serem muito mais fáceis de usar.</p><p>Os computadores de hoje são bilhões de vezes mais rápidos do que eram nos anos 1970 e 1980, quando as pessoas escreviam a maioria de seus programas em linguagens como o C. Esse poder mais do que compensa a relativa ineficiência das linguagens de script.</p><p>Vale notar que tanto JavaScript quanto Python são escritos em C, e estão ficando mais rápidos a cada ano, graças às suas grandes comunidades de contribuintes de código aberto.</p><p>O Python é uma linguagem poderosa para computação científica (Ciência de Dados e Aprendizado de Máquina).</p><p>O JavaScript... bem, o JavaScript pode fazer de tudo. É a linguagem de programação canivete suíço definitiva. JavaScript é a fita adesiva que mantém a World Wide Web unida.</p><blockquote>"Qualquer aplicação que possa ser escrita em JavaScript, eventualmente será escrita em JavaScript." – Lei de Atwood (Jeff Atwood, fundador do Stack Overflow e Discourse)</blockquote><p>Você poderia programar sua carreira inteira em JavaScript e nunca precisaria aprender uma segunda linguagem. (Dito isso, você vai querer aprender Python mais tarde, e talvez algumas outras linguagens também.)</p><p>Então, eu recomendo começar com JavaScript. Além de ser muito mais fácil de usar do que linguagens como Java e C++, é mais fácil de aprender, também. Há muito, muito mais vagas de emprego para pessoas que sabem JavaScript.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/Find_Javascript_Jobs_with_great_pay_and_benefits_in_United_States___Indeed_com_--.png" class="kg-image" alt="Find_Javascript_Jobs_with_great_pay_and_benefits_in_United_States___Indeed_com_--" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/Find_Javascript_Jobs_with_great_pay_and_benefits_in_United_States___Indeed_com_--.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/Find_Javascript_Jobs_with_great_pay_and_benefits_in_United_States___Indeed_com_--.png 918w" sizes="(min-width: 720px) 720px" width="918" height="942" loading="lazy"><figcaption><em>Uma captura de tela do site de busca de empregos Indeed. Minha busca por "javascript" para os EUA rendeu 68.838 vagas de emprego.</em></figcaption></figure><p>Você pode aprender um pouco de HTML e CSS em uma única tarde. Como a maioria das ferramentas que menciono aqui, são fáceis de aprender, mas difíceis de dominar.</p><p>Você também vai querer aprender a usar <strong>Linux</strong>. O Linux alimenta a grande maioria dos servidores do mundo, e você passará grande parte da sua carreira executando comandos na linha de comando do Linux.</p><p>Se você tem um Mac, o MacOS tem um terminal que aceita quase todos os mesmos comandos que o Linux (MacOS e Linux têm um ancestral comum no Unix).</p><p>Se você está em um PC com Windows, você vai querer instalar o WSL, o <em>Windows Subsystem for Linux</em>. Você poderá então executar comandos do Linux no seu PC. Se você estiver querendo arriscar, pode até usar <em>dual boot</em> nos sistemas operacionais Windows e Linux no mesmo computador.</p><p>Se você vai instalar Linux em um computador, eu recomendo começar pelo Ubuntu. É a distribuição Linux mais amplamente usada (e amplamente documentada). Portanto, deve ser a mais indulgente.</p><p>Não se engane – o Linux é um pouco mais difícil de usar do que o Windows e o MacOS, mas o que você ganha em troca de seus esforços é um sistema operacional extremamente rápido, seguro e altamente personalizável.</p><p>Além disso, você nunca mais precisará pagar por uma licença de sistema operacional. A menos que você queira. A Red Hat é uma empresa de bilhões de dólares, embora seu <em>software </em>seja de código aberto, porque as empresas pagam por sua ajuda na manutenção e suporte dos servidores Linux.</p><p>Você também vai querer aprender <strong>Git</strong>. Esse sistema de controle de versão é como equipes de desenvolvedores coordenam suas mudanças em uma base de código.</p><p>Você pode ter ouvido falar do GitHub. É um site que facilita a colaboração de desenvolvedores em projetos de código aberto. Ele também estende algumas das funcionalidades do Git. Você aprenderá mais sobre o GitHub no capítulo sobre "como construir sua reputação" mais adiante.</p><p>Você vai querer aprender <strong>SQL</strong> e como funcionam os bancos de dados relacionais. Eles são os pilares da economia da informação.</p><p>Você também ouvirá muito sobre bancos de dados NoSQL (bancos de dados não relacionais, como bancos de dados de grafos, bancos de dados de documentos e armazenamento de pares chave-valor). Você pode aprender mais sobre eles mais tarde, mas foque no SQL primeiro.</p><p>Finalmente, você vai querer aprender como <strong>servidores web</strong> funcionam. Você vai querer começar com Node.js e Express.js.</p><p>Quando você ouvir o termo "desenvolvimento <em>full-stack</em>", ele se refere a ligar o <em>front-end</em> (HTML, CSS e JavaScript) com o <em>back-end</em> (Linux, bancos de dados SQL e Node + Express).</p><p>Existem muitas outras ferramentas que você vai querer aprender, como React, NGINX, Docker e bibliotecas de testes. Você pode aprender essas conforme avançar.</p><p>As habilidades fundamentais em que você deve gastar 90% do seu tempo de aprendizado pré-emprego, no entanto, são:</p><ol><li>HTML</li><li>CSS</li><li>JavaScript</li><li>Linux</li><li>Git</li><li>SQL</li><li>Node.js</li><li>Express.js</li></ol><p>Se você aprender essas ferramentas, pode criar a maioria das principais aplicações web e móveis. Também estará capacitado para a maioria dos empregos de desenvolvedor de nível iniciante (claro, muitas descrições de trabalho incluirão outras ferramentas, mas discutiremos essas mais tarde no livro).</p><p>Então, você deve estar pensando: ótimo. Como eu aprendo essas?</p><h3 id="onde-eu-aprendo-a-programar">Onde eu aprendo a programar?</h3><p>Engraçado você perguntar. Existe um currículo completo projetado por engenheiros de software e professores experientes. Ele é projetado com adultos ocupados em mente. É completamente gratuito e autopautado.</p><p>Isso mesmo. Estou falando do <a href="https://www.freecodecamp.org/portuguese/learn">currículo principal do freeCodeCamp</a>. Ele ajudará você a aprender:</p><ul><li>Desenvolvimento para <em>front-end</em></li><li>Desenvolvimento para <em>back-end</em></li><li>Matemática de engenharia</li><li>e computação científica (com Python para Ciência de Dados e <em>Machine Learning</em>)</li></ul><p>Até o momento, milhares de pessoas passaram por esse currículo principal e conseguiram um emprego como desenvolvedor. Eles não precisaram largar seus empregos diários, contrair empréstimos ou realmente arriscar qualquer coisa além de algumas de suas noites e finais de semana.</p><p>Na prática, o freeCodeCamp se tornou o caminho padrão para a maioria das pessoas que estão aprendendo a programar sozinhas.</p><p>Se nada mais, o currículo principal do freeCodeCamp pode ser sua "base" para aprender – e você pode se ramificar a partir daí. Você pode aprender as habilidades fundamentais que a maioria dos empregos exige, além de se aventurar em tecnologias que interessem a você.</p><p>Há décadas de livros e cursos para aprender. Alguns estão disponíveis na sua biblioteca pública, ou através de serviços de assinatura mensal. Você também pode acessar alguns desses serviços de assinatura gratuitamente através da sua biblioteca.</p><p>Além disso, o freeCodeCamp agora tem quase mil cursos gratuitos de longa duração sobre tudo, desde preparação para certificação da AWS até desenvolvimento de aplicações móveis e Kali Linux.</p><p>Nunca foi tão fácil aprender programação por conta própria.</p><h3 id="construir-suas-habilidades-um-esfor-o-cont-nuo">Construir suas habilidades é um esforço contínuo</h3><p>Conversamos sobre por que o autodidatismo provavelmente é o melhor caminho, e sobre como seguir por ele.</p><p>Conversamos sobre as alternativas ao autodidatismo, como obter um bacharelado em Ciência da Computação ou um mestrado.</p><p>Conversamos também sobre quais ferramentas específicas você deve se concentrar em aprender primeiro.</p><p>Agora, vamos mudar de assunto e falar sobre como construir a segunda perna do seu tripé: sua rede de contatos.</p><h2 id="cap-tulo-2-como-construir-sua-rede-de-contatos">Capítulo 2: como construir sua rede de contatos</h2><blockquote>"Se você quer ir rápido, vá sozinho. Se você quer ir longe, vá acompanhado." – provérbio africano</blockquote><p>"<em>Networking</em>" – você pode fazer uma careta ao ouvir essa palavra.</p><p><em>Networking</em> pode trazer à mente festas com muito álcool – onde você finge estar interessado em um esporte que você nem segue.</p><p><em>Networking </em>pode trazer à mente desejar "feliz aniversário" para pessoas que você mal conhece no LinkedIn, ou curtir suas atualizações de status esperando que elas percebam você.</p><p>O <em>networking</em>, contudo, não precisa ser assim.</p><p>Neste capítulo, vou contar tudo o que aprendi sobre conhecer pessoas. Vou mostrar como ganhar sua confiança e estar no topo de suas mentes quando estiverem procurando por ajuda.</p><p>Pois, no fim das contas, é disso que se trata: ajudar as pessoas a resolverem seus problemas, ser útil para as pessoas.</p><p>Vou mostrar para você como construir uma rede pessoal robusta e que apoiará você por décadas.</p><h3 id="hora-da-hist-ria-como-um-professor-na-casa-dos-30-anos-construiu-uma-rede-de-contatos-em-tecnologia">Hora da história: como um professor na casa dos 30 anos construiu uma rede de contatos em tecnologia?</h3><p><em>No capítulo anterior, em Hora da História: Quincy aprendeu um pouco de programação lendo livros, assistindo a cursos on-line gratuitos e passando tempo com desenvolvedores no Hackerspace local. Ele tinha acabado de construir seu primeiro projeto e dado sua primeira palestra técnica...</em></p><p>OK – então, eu já tinha algumas habilidades rudimentares em programação. Eu podia programar para além da minha zona de conforto.</p><p>Qual era o próximo passo? Afinal, eu era totalmente estranho ao mundo da tecnologia.</p><p>Bem, embora eu fosse novo em tecnologia, eu não era novo no trabalho. Eu coloquei comida na mesa por quase uma década trabalhando em escolas e ensinando inglês.</p><p>Como professor, eu era pago para transmitir conhecimento. Como desenvolvedor, eu seria pago para programar.</p><p>Eu já sabia uma verdade muito importante sobre a natureza do trabalho: o que importa é quem você conhece.</p><p>Eu conhecia o poder das redes. Eu sabia que o caminho para a oportunidade passava diretamente pelos porteiros.</p><p>Tudo o que estava entre mim e um emprego lucrativo de desenvolvedor era um gerente de contratação que pudesse dizer: "Sim. Esse cara, o Quincy, parece alguém digno de se juntar à nossa equipe."</p><p>Claro, sendo um estranho na tecnologia, eu não conhecia a cultura.</p><p>A cultura acadêmica é muito mais formal.</p><p>Você usa um terno.</p><p>Você usa uma terminologia acadêmica sofisticada para demonstrar que faz parte do "grupo de elite."</p><p>Você acha maneiras de inserir em todas as conversas que você foi para a universidade X, ou que foi assistente do Dr. Y, ou que foi publicado na Revista Científica Z.</p><p>Progressões de carreira são diferentes. Conferências são diferentes. Estruturas de poder são diferentes.</p><p>Eu não percebi isso imediatamente.</p><p>Nos primeiros eventos tecnológicos em que fui, eu usei um terno.</p><p>Eu mantinha cópias do meu currículo no meu bolso o tempo todo.</p><p>Eu até carregava cartões de visita. Eu tinha encomendado folhas de alumínio anodizado e usado um cortador a laser para gravar meu nome, endereço de e-mail e até uma citação do lendário educador John Dewey:</p><blockquote>"Qualquer pessoa que tenha começado a pensar coloca uma parte do mundo em risco." – John Dewey</blockquote><p>Ainda é minha citação favorita até hoje – mas um pouco exagerada, não?</p><p>"Oi, eu sou o Quincy. Aqui está meu cartão de visita de alumínio vermelho. Desculpe antecipadamente – ele pode disparar o detector de metais no seu voo de volta para casa."</p><p>Eu estava forçando muito a barra. Provavelmente, isso era dolorosamente aparente para todos com quem eu falava.</p><p>Fui no Meetup.com e confirmei presença em todos os eventos de desenvolvedores que pude encontrar. Santa Bárbara é uma cidade pequena, mas fica perto de Los Angeles. Então, fiz a viagem para eventos lá também.</p><p>Rapidamente, me tornei mais esperto e troquei meu terno por jeans e um moletom com capuz. Percebi que ninguém mais distribuía cartões de visita. Então, parei de carregá-los.</p><p>Peguei dicas dos desenvolvedores que conheci no <em>hackerspace</em>: Seja apaixonado, mas discreto. Mantenha um pouco do seu entusiasmo guardado.</p><p>Li muitos livros para entender melhor a cultura dos desenvolvedores.</p><p><a href="https://www.amazon.com/Coders-Work-Reflections-Craft-Programming/dp/B092R8RQM3?crid=13BTAQ7TH9YSN&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=32d14a148c54f36f5ef701578a2abd8e&amp;language=en_US&amp;ref_=as_li_ss_tl">The Coders at Work</a> é um bom livro dos anos 1980.</p><p><a href="https://www.amazon.com/Hackers-Computer-Revolution-Steven-Levy/dp/1449388396?&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=0c216f2cd4cc2d2090b8c9b50b0befee&amp;language=en_US&amp;ref_=as_li_ss_tl">Hackers: Heroes of the Revolution</a> é um bom livro dos anos 1990.</p><p>Para um recurso cultural mais contemporâneo, confira a série de TV <a href="https://www.amazon.com/Mr-Robot-Complete-Rami-Malek/dp/B0833WXXL6?crid=188UUOE6ZT0W3&amp;keywords=mr+robot&amp;qid=1673746625&amp;sprefix=mr+robot%2Caps%2C111&amp;sr=8-6&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=a896ab7630fadc332c2696d3a4b8e85d&amp;language=en_US&amp;ref_=as_li_ss_tl">Mr. Robot</a>. Seus personagens são um pouco extremos, mas fazem um bom trabalho ao capturar a mentalidade e os modos de muitos desenvolvedores.</p><p>Logo, eu estava falando menos como um professor e mais como um desenvolvedor. Eu não destoava de maneira tão constrangedora.</p><p>Várias vezes por semana eu participava de eventos locais relacionados à tecnologia. Meu evento favorito nem era um evento de desenvolvedores. Era a noite das startups de Santa Bárbara. Uma vez a cada poucas semanas, eles tinham um evento onde desenvolvedores apresentavam seus protótipos. Alguns dos desenvolvedores que demonstravam seu código até conseguiram financiamento de investidores-anjo – pessoas ricas que investem em empresas em estágio inicial.</p><p>O cara que organizava o evento se chamava Mike. Ele devia conhecer todos os desenvolvedores e empreendedores de Santa Bárbara.</p><p>Quando finalmente criei coragem para me apresentar ao Mike, fiquei deslumbrado. Ele era um ultramaratonista com um batimento cardíaco em repouso na casa dos 40, cabelo e barba perfeitamente cortados. Para mim, ele era o cara mais legal do planeta. Sempre impecável. Sempre respeitoso.</p><p>Mike era "não técnico". Ele trabalhava como gerente de produto. Embora soubesse muito sobre tecnologia e design de experiência do usuário, ele não sabia programar.</p><p>Às vezes, desenvolvedores desconsideravam pessoas não técnicas. "Ele é apenas um cara de negócios", diziam. Ou ainda: "ela é só uma executiva de terninho". Nunca ouvi ninguém dizer isso sobre Mike. Ele tinha o respeito de todos.</p><p>Fiz questão de observar como Mike interagia com desenvolvedores. Afinal de contas, eu não estava tão distante de ser "não técnico" eu mesmo. Eu só estava programando há alguns meses.</p><p>Vez que outra, meus velhos hábitos apareciam. Durante conversas, eu tinha a tentação de me exibir com relação ao que já havia aprendido ou criado.</p><p>Muitos desenvolvedores são modestos sobre suas habilidades ou conquistas. Eles podem dizer: "Eu brinco um pouco com Python." O pequeno e inseguro eu já abria a grande boca e dizia: "Ah, é. Eu programei muita coisa em Python. Eu escrevo em Python até dormindo."</p><p>Depois, eu ia para casa e pesquisava no Google o nome do desenvolvedor com quem havia conversado, e percebia que ele era um colaborador principal de uma grande biblioteca em Python – e me repreenderia pelo resto do dia.</p><p>Eu rapidamente aprendi a não me vangloriar das minhas conquistas ou habilidades. Há uma boa chance de que a pessoa com quem você está falando possa programar muito melhor que você, mas a maioria deles nunca fala sobre esse fato.</p><p>Não há nada pior do que abrir o laptop com confiança, mostrar seu código e então alguém te fazer uma série de perguntas para as quais você está totalmente despreparado para responder.</p><p>Meus primeiros meses participando de eventos foram uma experiência humilhante, mas esses eventos me energizaram para continuar avançando com minhas habilidades.</p><p>Logo as pessoas no sul da Califórnia começaram a me reconhecer. Elas diziam: "Eu continuo te encontrando nesses eventos. Qual é o seu nome mesmo?"</p><p>Certa noite, uma desenvolvedora me disse: "Vamos nos seguir no Twitter". Eu tinha criado uma conta no Twitter a contragosto alguns dias antes, achando que era um site bobo. Quanto você realmente poderia comunicar com apenas 140 caracteres? Eu mal tinha tuitado alguma coisa, mas eu tinha uma conta no Twitter pronta, e ela de fato me seguiu.</p><p>Isso me inspirou a gastar mais tempo refinando minha presença <em>on-line</em>. Tornei meu LinkedIn menos formal e mais amigável. Olhei como outros desenvolvedores na comunidade se apresentavam <em>on-line</em>.</p><p>Dentro de alguns meses, eu conhecia pessoas de muitos campos:</p><ul><li>desenvolvedores experientes</li><li>pessoas não técnicas ou semitécnicas que trabalhavam em empresas de tecnologia</li><li>gerentes de contratação e recrutadores</li><li>e, mais importante, meus pares que também estavam no meio da carreira e tentando entrar na tecnologia</li></ul><p>Por que os pares eram os mais importantes? Certamente, eles seriam os menos capazes de me ajudar a conseguir um emprego, certo?</p><p>Bem, deixe-me contar um segredo para você: digamos que um gerente de contratação contrate um novo desenvolvedor, o treine, e ele se mostre realmente bom em seu trabalho. Aquele gerente de contratação vai perguntar: onde posso encontrar mais pessoas como você?</p><p>Seus pares são uma das peças mais importantes da sua rede. Muitas das minhas oportunidades de <em>freelancer </em>e oportunidades de entrevistas de emprego vieram de pessoas que começaram a aprender a programar na mesma época que eu.</p><p>Avançamos juntos. Éramos irmãos e irmãs de luta. Esses laços são os mais fortes.</p><p>De qualquer modo, todo esse <em>networking </em>ao longo dos meses acabaria resultando em uma noite em que eu entrei no bar de um hotel elegante no centro da cidade para um evento de desenvolvedores.</p><p>Isso é assunto para o próximo capítulo. Agora, vamos falar mais sobre a arte e a ciência de construir sua rede.</p><h3 id="tem-realmente-a-ver-com-quem-voc-conhece">Tem realmente a ver com quem você conhece?</h3><p>Você pode ter ouvido a expressão de que o sucesso é "menos sobre o que você sabe, e mais sobre quem você conhece."</p><p>Na prática, é uma combinação de ambos.</p><p>Sim – suas conexões podem te ajudar a conseguir o emprego dos seus sonhos. Mas se você estiver fora do que pode alcançar e se não tiver as habilidades para ter sucesso, não se sairá bem nesse papel.</p><p>Vamos assumir, contudo, que você está proativamente construindo suas habilidades. Você seguiu meu conselho do Capítulo 1. Quando é o momento certo para começar a construir sua rede?</p><p>O melhor momento para começar a construir sua rede é <strong>ontem</strong>.</p><p>Você não precisa, porém, de uma máquina do tempo para fazer isso, porque você já tem uma rede. É provavelmente muito menor do que você gostaria que fosse, mas você <strong>conhece</strong> pessoas.</p><p>Elas podem ser amigos da sua cidade natal, ou os colegas de seus pais. Qualquer pessoa que você conheça do seu passado – ainda que pouco – pode ser de grande ajuda.</p><p>Então, o primeiro passo é fazer um inventário completo das pessoas que você conhece. Não se preocupe – não estou pedindo para você entrar em contato com ninguém ainda, ou explorar seus relacionamentos pessoais.</p><p>Pense antes de agir. Formule uma estratégia.</p><p>Primeiro, vamos fazer um inventário de todas as pessoas que você conhece.</p><h3 id="como-construir-um-quadro-de-redes-pessoais">Como construir um quadro de redes pessoais</h3><p>Você vai começar criando uma lista de pessoas que você conhece.</p><p>Você pode fazer isso com uma planilha ou com uma ferramenta de Gestão de Relacionamento com o Cliente (CRM, do inglês, <em>Client Relationship Manager</em>) como os vendedores usam, mas isso, provavelmente, é um exagero para o que estamos fazendo aqui.</p><p>Recomendo usar uma ferramenta de quadro de Kanban como o Trello, que é gratuita.</p><p>Você vai criar 5 colunas: "Em avaliação", "Para entrar em contato", "Esperando resposta", "Em contato recente" e "Ainda sem contato".</p><p>Depois, crie <em>tags</em>, para que você possa classificar as pessoas pelo modo como você as conhece. Aqui estão algumas ideias de <em>tags</em> para você: "Amigo de infância", "Amigo da família", "Ex-colega", "Colega de classe", "Amigos de eventos de tecnologia".</p><p>Agora, você pode começar a criar cartões. Cada cartão pode ser apenas o nome deles e, se você tiver tempo, pode adicionar uma foto ao cartão.</p><p>Aqui está o quadro do Trello que eu criei para dar a você uma ideia de como pode ser esse quadro de rede pessoal. Usei personagens do meu filme favorito da infância, o clássico "Tartarugas Ninja", de 1989.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/Personal_Network_Board___Trello_--.png" class="kg-image" alt="Personal_Network_Board___Trello_--" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/Personal_Network_Board___Trello_--.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/10/Personal_Network_Board___Trello_--.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/10/Personal_Network_Board___Trello_--.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/Personal_Network_Board___Trello_--.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1129" loading="lazy"><figcaption><em>Meu quadro de rede pessoal, com os amigos que conheci no meu trabalho paralelo de lutar contra o crime.</em></figcaption></figure><p>Você pode percorrer suas contas de mídia social – até mesmo seus antigos anuários escolares se os tiver – e começar a adicionar pessoas.</p><p>Esse processo pode levar um ou dois dias, mas saiba que é um investimento. Você poderá usar esse quadro para o resto de sua carreira.</p><p>Você pode pensar: "Não preciso fazer isso – já tenho uma conta no LinkedIn". Ter uma conta lá pode funcionar razoavelmente bem, mas lembre-se de que o LinkedIn é um instrumento bruto. Você quer maximizar o sinal e minimizar o ruído aqui. Por isso, estou incentivando você a criar esse quadro de rede pessoal dedicado.</p><p>À medida que adicionar pessoas ao seu quadro, você pode associar <em>tags</em> a elas. Reserve um momento para pesquisar sobre cada uma dessas pessoas. O que elas estão fazendo atualmente? Elas têm um trabalho? Gerenciam uma empresa?</p><p>Você pode adicionar notas a cada cartão, à medida que descobrir novos fatos sobre elas. Elas recentemente participaram de uma corrida de 5 km para arrecadar fundos? A avó delas recentemente comemorou 90 anos? Esses fatos podem parecer irrelevantes, mas se a pessoa está compartilhando esses fatos nas redes sociais, significa que são importantes para <strong>elas</strong>.</p><p>Esforce-se para se interessar pelas pessoas, suas vidas diárias e aspirações. Compreendendo suas motivações e objetivos, você terá uma visão mais profunda de como pode ajudá-las.</p><p>Como disse anteriormente, a melhor forma de forjar alianças é ajudar as pessoas. Falaremos sobre isso detalhadamente em breve.</p><p>Para cada uma das pessoas que adicionar ao seu quadro de rede pessoal, considere se vale a pena entrar em contato com elas. Depois, coloque-as na coluna "Para entrar em contato" ou "Ainda sem contato".</p><p>Você pode estar se perguntando: por que a coluna se chama "<strong>Ainda</strong> sem contato"? Porque nunca se sabe quando pode ser útil conhecer alguém. Nunca subestime uma amizade ou pessoa conhecida.</p><p>Depois de preencher o quadro, colocando <em>tags</em> em todos e organizando-os em colunas, você está pronto para começar a entrar em contato.</p><h3 id="como-se-preparar-para-entrar-em-contato-com-a-rede">Como se preparar para entrar em contato com a rede</h3><p>A coisa mais importante a se ter em mente ao entrar em contato e tentar causar uma boa impressão é: mantenha-se simples.</p><p>As pessoas estão ocupadas e só conseguem se lembrar de alguns poucos fatos sobre você. Você quer resumir quem você é naquilo que é mais básico a seu respeito. A melhor maneira de se fazer isso é escrever uma biografia pessoal.</p><h4 id="como-escrever-uma-biografia-pessoal-para-as-m-dias-sociais">Como escrever uma biografia pessoal para as mídias sociais</h4><p>Você quer que sua presença seja consistente em todas as suas contas de redes social.</p><p>Aqui está como eu me apresento:</p><p>"Me chamo Quincy e sou professor no freeCodeCamp. Eu moro em Dallas, no Texas. Posso ajudar você a aprender a programar."</p><p>É sua vez! Escreva a sua biografia. Veja se consegue reduzir para 100 caracteres ou menos. Tente evitar palavras complicadas ou jargões.</p><p>Pode ser difícil reduzir sua identidade a poucas palavras, mas esse é um processo importante.</p><p>Lembre-se: as pessoas estão ocupadas. Elas não precisam conhecer toda a sua história de vida. À medida que for conhecendo melhor essas pessoas, você gradualmente preencherá os detalhes de quem você é. À medida que elas fizerem perguntas, poderão conhecê-lo melhor com o tempo.</p><p>Falando nisso, você precisa de uma boa foto do seu rosto sorridente.</p><h4 id="como-fazer-uma-foto-para-as-redes-sociais">Como fazer uma foto para as redes sociais</h4><p>Se você tiver dinheiro, basta encontrar um fotógrafo local e pagar para tirar algumas fotos profissionais.</p><p>Você pode até ter um amigo que gosta de fotografia e pode tirar as fotos de graça.</p><p>Eu tirei minha foto sozinho, usando o Photobooth, que vem pré-instalado no MacOS. Meu amigo passou cerca de 10 minutos ajustando o fundo e a iluminação no Photoshop. Ele pode ter deixado meus dentes um pouco mais brancos. Aqui está como ficou:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/Michael_Headshot_B_W_Full_heic.png" class="kg-image" alt="Michael_Headshot_B_W_Full_heic" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/Michael_Headshot_B_W_Full_heic.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/Michael_Headshot_B_W_Full_heic.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/Michael_Headshot_B_W_Full_heic.png 1480w" sizes="(min-width: 720px) 720px" width="1480" height="1728" loading="lazy"><figcaption><em>Minha foto. Eu uso essa mesma foto em todos os lugares.</em></figcaption></figure><p>Certifique-se de sorrir com os olhos, para não parecer robótico. Melhor ainda, pense em algo realmente engraçado, como fiz aqui. O sorriso será genuíno.</p><p>Tire muitas fotos de diferentes ângulos e use a que parecer melhor em você.</p><p>Recomendo usar uma foto que se pareça com você em um dia qualquer. Não use uma foto muito <em>photoshopada</em> que tente maximizar sua atratividade. Você quer que as pessoas em eventos o reconheçam pela foto, não quer intimidar as pessoas com sua beleza. Você quer deixá-las à vontade.</p><p>Falando em deixar as pessoas à vontade: <strong>não</strong> use óculos escuros, nem tente parecer descolado demais. Você quer parecer amigável e acessível. Um bom teste para isso é: olhe para sua foto. Se você estivesse perdido e visse essa pessoa na rua, teria coragem de pedir informações?</p><p>Depois de escolher a foto do perfil, use a mesma foto em todos os lugares. Coloque-a em todas as suas contas de redes sociais.</p><p>Use-a no seu site pessoal. <a href="https://www.freecodecamp.org/news/gmail-profile-picture/">Adicione a foto de perfil à sua conta de e-mail</a> (texto em inglês).</p><p>Recomendo usar essa mesma foto por anos. Toda vez que você a mudar, corre o risco de algumas pessoas não o reconhecerem imediatamente. Mesmo mudanças sutis na iluminação, ângulo ou fundo podem atrapalhar a familiaridade das pessoas.</p><p>Certifique-se de manter uma versão em alta definição da foto. Assim, as pessoas podem usá-la para promover sua palestra na conferência delas ou sua aparição como convidado no <em>podcast </em>delas (não se preocupe – com o tempo, você chegará lá).</p><h3 id="como-entrar-em-contato-com-pessoas-de-seu-passado">Como entrar em contato com pessoas de seu passado</h3><p>Agora que você organizou sua biografia e fotos, está pronto para começar a falar com as pessoas.</p><p>Há 15 anos, eu diria que você deve ligar para as pessoas em vez de enviar mensagens, mas a cultura mudou muito com a introdução dos <em>smartphones</em>. A maioria das pessoas não responderá bem a uma ligação.</p><p>Você precisa ir direto ao ponto – e fazer isso rapidamente.</p><p>Então, qual é esse ponto ao qual você precisa chegar?</p><p>Essencialmente:</p><ol><li>Eu te conheço</li><li>Gosto de você</li><li>e respeito o trabalho que você está fazendo.</li></ol><p>É isso.</p><p>As pessoas gostam de ser conhecidas. Elas gostam de ser apreciadas. Gostam que seu trabalho e que sua vida que vivem sejam notados.</p><p>A maioria de nós recebe reconhecimento em nossos aniversários. Pessoas do nosso passado podem enviar mensagens de "feliz aniversário", fazer publicações nas redes sociais ou até nos ligar.</p><p>Porém, nos outros 364 dias do ano, as pessoas também gostam de ser reconhecidas.</p><p>Bem, aqui está uma maneira simples de você reconhecer as pessoas.</p><p>Passo 1: Pesquise a pessoa no Google. Leia suas publicações recentes nas redes sociais. Leia seu LinkedIn. Se eles publicarem fotos de família, realmente dedique um tempo para olhá-las.</p><p>Passo 2: Pense em algo que você poderia dizer que possa alegrar o dia deles um pouco mais.</p><p>Passo 3: Escolha uma plataforma de rede social na qual eles estiveram recentemente ativos. Envie uma mensagem direta.</p><p>Vou compartilhar um modelo, mas nunca use modelos literalmente, pois se o destinatário colocar sua mensagem no Google, ele descobrirá que é um modelo, e toda sua boa vontade será desperdiçada.</p><p>Se eu estivesse enviando uma mensagem para alguém com quem não falo há alguns meses ou anos, eu diria algo como:</p><p>"Oi [nome], espero que seu(s)/sua(s) [ano novo/férias/semana] esteja começando de uma maneira divertida. Parabéns pelo/pela [novo trabalho/promoção/novo bebê/projeto concluído]. É inspirador ver você fazendo as coisas acontecerem."</p><p>Algo curto e direto assim. Saudação + parabéns + elogio. Essa é a fórmula básica.</p><p>Não diga apenas por dizer. Queira realmente que essa pessoa se sinta reconhecida. Queira realmente alegrar o dia dela. Queira realmente encorajá-la a continuar progredindo em direção aos seus objetivos.</p><p>Os seres humanos são muito bons em detectar falta de sinceridade. Não tente exagerar. Não dê a eles qualquer razão para pensar "essa pessoa quer algo de mim".</p><p>É por isso que o mais importante é: seja breve. Respeite o tempo das pessoas. Ninguém quer uma carta longa que se sinta obrigado a responder longamente.</p><p>Isso ocorre porque – repita comigo novamente – <strong>as pessoas estão ocupadas.</strong></p><h3 id="como-construir-conex-es-ainda-mais-profundas">Como construir conexões ainda mais profundas</h3><p>Como as pessoas estão ocupadas, elas frequentemente são tentadas a ver estranhos mais pelo que esses estranhos podem fazer por elas:</p><ul><li>Essa pessoa dirige o ônibus que me leva ao trabalho.</li><li>Essa pessoa faz minha bebida exatamente do jeito que eu gosto.</li><li>Essa pessoa no RH responde minhas perguntas sobre folgas.</li><li>Essa pessoa montou uma <em>playlist </em>incrível de jazz para eu ouvir enquanto programo.</li><li>Essa pessoa me envia e-mails úteis todas as semanas com recursos grátis de programação.</li></ul><p>Até certo ponto, você é o que você faz pelas pessoas.</p><p>Eu sei, eu sei. Isso pode parecer excessivamente simplista. Cínico até. Isso definitivamente não é verdade para as amizades próximas e familiares na sua vida.</p><p>Porém, para as pessoas que mal conhecem você – que apenas encontram você e depois seguem com suas vidas – é provável que elas vejam você dessa maneira.</p><p>Você precisa dar às pessoas uma razão para se importarem com você. Você precisa inspirá-las a aprender mais sobre você.</p><p>Antes que você possa se tornar um amigo próximo de alguém – alguém com quem eles realmente se importam e em quem eles pensam quando você não está por perto – você precisa começar sendo uma pessoa útil para eles.</p><p>É isso que vamos fazer aqui. Vamos construir relacionamentos ainda mais profundos oferecendo ajuda às pessoas.</p><p>Será um processo longo. Você deve começar bem antes da sua busca por emprego. A última coisa que você quer é que alguém pense "Ah, você só está entrando em contato porque precisa de algo de mim".</p><p>Pelo contrário – você está entrando em contato porque tem algo a oferecer para eles.</p><p>Afinal de contas, você possui um dos conjuntos de habilidades mais poderosos que uma pessoa pode adquirir. A capacidade de fazer com que as máquinas obedeçam à sua vontade. Você é um programador.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/c_BasicProgramming_Picture_front.jpg" class="kg-image" alt="c_BasicProgramming_Picture_front" width="400" height="483" loading="lazy"><figcaption>Essa é a sensação de se sentir bom em programação!</figcaption></figure><p>Ou, pelo menos, você está no caminho para se tornar um.</p><p>Então, você já tem um bom pretexto para entrar em contato com as pessoas.</p><p>Você pode ter ouvido o termo "<em>cold call</em>" (ligação fria). É quando você liga para alguém sabendo quase nada sobre ela e tenta vender algo. Não é fácil. A grande maioria das <em>cold calls</em> termina com a outra parte desligando.</p><p>No entanto, quanto mais informações você souber sobre a outra pessoa, mais "quente" a ligação (ou contato) fica e mais chances você tem de ter sucesso.</p><p>Você não está vendendo nada nesse caso. Como mencionei antes, você também não está ligando. Você está enviando uma mensagem direta.</p><p>Talvez seja pelo Twitter, LinkedIn, Discord, Reddit – onde quer que seja. Você, porém, está entrando em contato com elas com um único parágrafo de texto.</p><p>Como eu disse, o movimento inicial mais forte – a abordagem que provavelmente terá mais chance de obter uma resposta – é oferecer ajuda casualmente.</p><p>Se eu estivesse fazendo isso, aqui está um modelo simples que eu usaria. Lembre-se de não usar esse modelo literalmente. Reescreva em sua própria voz, como você faria ao falar com um amigo:</p><blockquote>"Oi [nome], parabéns pelo/pela [novo trabalho/promoção/novo bebê]. Tenho aprendido um pouco de programação e estou construindo meu portfólio. Você foi uma das primeiras pessoas que veio à minha mente como alguém que realiza muitas coisas. Existe algum tipo de ferramenta ou aplicação que facilitaria sua vida? Talvez eu possa programá-la para você, como prática."</blockquote><p>Esse é o motivo pelo qual eu envio todas as minhas mensagens manualmente e não confio em automação. É melhor compor mensagens lentamente, uma a uma, do que tentar economizar tempo com um <em>script</em> ou uma mala direta.</p><p>A maneira mais rápida de ser bloqueado é enviar uma mensagem com "Oi, como está indo?" onde claramente falta um nome – evidência de que a mensagem é um modelo.</p><p>Às vezes, recebo uma mensagem usando meu sobrenome em vez do meu primeiro nome. "Oi, Larson." Fico pensando se estou em uma escola militar agora.</p><p>Muitas pessoas no LinkedIn começaram a colocar um emoji no início do nome. Isso facilita a detecção de mensagens automatizadas, porque ninguém incluiria esse <em>emoji</em> em uma mensagem direta.</p><p>Quando uma mensagem começa com: "Oi 🍜Sarah, você está procurando um novo emprego?" Aí, você sabe que é uma mensagem em massa.</p><p>Observe também que meu modelo acima não diz "estudamos juntos" ou algo assim. A menos que você tenha conhecido alguém há poucos dias, não deve especificar como vocês se conheceram.</p><p>Por quê? Porque o próprio ato de lembrar as pessoas de como vocês se conheceram vai fazer com que algumas delas recuem e pensem: "Caramba, eu mal conheço essa pessoa."</p><h3 id="como-manter-a-conversa">Como manter a conversa</h3><p>Novamente, seu objetivo é obter uma resposta deles, para que você possa iniciar uma conversa de fato.</p><p>Essas plataformas de mensagens têm uma sensação de informalidade. Mantenha essa sensação.</p><p>Não envie uma mensagem única e longa de vários parágrafos. Mantenha suas mensagens curtas e rápidas. Você não quer que pareça uma tarefa árdua responder a você.</p><p>Uma vez que estejam respondendo, comece a fazer anotações no seu quadro de rede pessoal para se lembrar desses fatos mais tarde.</p><p>Talvez eles tenham alguma ideia de aplicação ou ferramenta. Ótimo. Pergunte a eles sobre isso. Veja se consegue criar isso para eles.</p><p>Comece esboçando um <em>mock-up</em> simples da interface do usuário. Use papel quadriculado se quiser parecer ainda mais sofisticado. Tire uma foto e envie para eles. "Algo assim?"</p><p>Isso estabelecerá que você realmente quer em ajudar. Eu poderia apostar que, para a maioria das pessoas, isso seria uma experiência nova.</p><p>"Você está me ajudando? Está criando isso para mim?" Será lisonjeiro, e eles provavelmente se lembrarão disso. Mesmo que a aplicação em si não vá a lugar nenhum.</p><p>A partir daí, você pode seguir com o fluxo da conversa. Talvez a conversa esfrie. Tudo bem. Deixe. Você pode encontrar uma razão para retomar a conversa algumas semanas depois.</p><p>A grande vantagem dessas mensagens diretas em redes sociais é que todo o histórico da mensagem está ali. Na próxima vez que você enviar uma mensagem, eles podem simplesmente rolar para cima e ver "ah – essa é a pessoa que se ofereceu para criar aquela aplicação para mim". Não há mais aquelas inclinações de cabeça do tipo "quem é você mesmo?" que você pode receber em conversas presenciais.</p><p>Novamente, mantenha tudo informal e positivo. Se parecer que a conversa está indo devagar, não há problema. Você terá dezenas de outras conversas em andamento. Vai estar ocupado construindo sua rede.</p><h3 id="como-conhecer-pessoas-novas-e-ampliar-sua-rede-pessoal">Como conhecer pessoas novas e ampliar sua rede pessoal</h3><p>Falamos sobre como entrar em contato com pessoas que você já conhece. Essas conexões ainda estão lá, mesmo que tenham atrofiado um pouco ao longo dos anos.</p><p>Você pode se perguntar: como fazer novas conexões? </p><p>Essa não é uma tarefa fácil, mas eu tenho algumas dicas que tornarão esse processo um pouco menos assustador.</p><p>Antes de tudo, encontrar pessoas pela primeira vez pessoalmente é muito mais poderoso do que conhecê-las <em>on-line</em>.</p><p>Quando você conhece alguém pessoalmente, sua memória tem muito mais informações para se apegar:</p><ul><li>Como a pessoa se parece, sua postura e como ela se move pelo espaço</li><li>O som da voz dela e a maneira como ela fala</li><li>As luzes, sons, aromas, temperatura e a sensação geral do local</li><li>além de muitos outros pequenos detalhes que ficam gravados na sua memória</li></ul><p>Passar 10 minutos conversando pessoalmente com alguém pode criar uma conexão mais profunda do que dezenas de mensagens trocadas durante semanas de correspondência.</p><p>Por isso, eu recomendo fortemente: saia e conheça pessoas em eventos locais.</p><h3 id="como-conhecer-pessoas-em-eventos-locais-pela-cidade">Como conhecer pessoas em eventos locais pela cidade</h3><p>Quais eventos? Se você vive em uma cidade densamente populada, pode ter várias opções à sua disposição. Talvez você possa ir a eventos de tecnologia várias noites por semana, com deslocamento mínimo.</p><p>Se você vive em uma cidade pequena, pode ter que se contentar em conhecer pessoas em encontros locais. Feiras de livros, encontros sociais com sorvete, eventos esportivos.</p><p>Se você frequenta uma igreja, mesquita ou templo, conheça pessoas lá também.</p><p>Sim, eu percebo que isso pode soar ridículo. "Aquela pessoa em pé ao meu lado nas arquibancadas do jogo de futebol? De alguma forma, ela vai me ajudar a conseguir um emprego de desenvolvedor?"</p><p>Talvez. Talvez não. Apenas evite de descartar as pessoas.</p><p>Essa pessoa pode ter um pequeno negócio.</p><p>Ela pode ter estudado com um amigo que é VP de engenharia em uma empresa da Fortune 500.</p><p>Talvez – só talvez – ela também seja um engenheiro de software. Afinal, há milhões de nós, engenheiros de software, por aí – e nem todos nós vivemos no Vale do Silício. 😉</p><p>Quando você conhecer uma pessoa nova, não queira imediatamente pegar seu telefone e dizer "Posso adicionar você à minha rede profissional no LinkedIn?"</p><p><strong>Lembre-se do nome deles.</strong> Os nomes são essenciais para construir um relacionamento. Se você tem dificuldade em lembrar nomes, pratique essa habilidade. Você pode treinar apenas tentando lembrar o nome de cada personagem – não importa se são insignificantes ou não – quando estiver assistindo a programas de TV ou filmes.</p><p>Se você esquecer o nome de alguém, não adivinhe. Apenas diga "qual é o seu nome mesmo?" e certifique-se de lembrar na segunda vez.</p><p>Aperte a mão deles ou faça aquele cumprimento com os punhos. Converse com eles sobre o que parecer natural. Se a conversa acabar, tudo bem. Deixe acabar.</p><p>Você constrói relacionamentos ao longo do tempo. Não é sobre o tempo total gasto com alguém – é sobre o número de vezes que você encontra essa pessoa ao longo de um período maior.</p><p>Há uma boa chance de você ver essa pessoa novamente no futuro, talvez no mesmo local, algumas semanas depois. <strong>É nessa hora</strong> que você age:</p><p>"Oi [nome], como vai o [assunto que vocês conversaram na última vez]?"</p><p>Continue a conversa de onde parou. Se parecer que essa pessoa poderia ser uma adição útil à sua rede pessoal, pergunte "ei, o que você está fazendo na próxima [dia da semana]? Quer vir comigo a [outro evento local próximo]?"</p><p>Sempre tenha a sua semana de eventos em mente, para que você possa convidar pessoas a se juntar a você.</p><p>Essa é uma ótima maneira de fazer com que as pessoas passem tempo com você em um espaço seguro e público. Você estará oferecendo algo de valor – dando a eles conhecimento sobre um evento próximo.</p><p>Se parecerem interessados, você pode dizer "Ótimo. Qual é a melhor maneira de eu enviar uma mensagem para você e passar os detalhes do evento?"</p><p>Aí está – você agora tem o e-mail deles, rede social ou número de telefone. Seu relacionamento pode evoluir a partir daí.</p><p>Isso pode soar como uma abordagem lenta. Por que ser tão cauteloso?</p><p>Mais uma vez, as pessoas estão ocupadas. Pessoas inteligentes defendem seu tempo e suas informações pessoais.</p><p>Existem muitos "vampiros" por aí querendo tirar vantagem das pessoas – tentando vender algo, enganá-las, inseri-las em algum esquema de <em>marketing </em>multinível, ou de alguma outra maneira proselitista.</p><p>A melhor maneira de ajudar as pessoas a superar essa defesa reflexiva é já estar no radar delas a partir de encontros anteriores como uma pessoa que vale a pena conversar.</p><h3 id="como-aproveitar-sua-rede">Como aproveitar sua rede</h3><p>Falaremos mais sobre como aproveitar a sua rede no Capítulo 4. Por enquanto, veja sua rede puramente como um investimento de tempo e energia.</p><p>Gosto de pensar na minha rede como um pomar. Estou plantando relacionamentos. Cuidando deles e garantindo que estejam saudáveis.</p><p>Quem sabe quando esses relacionamentos crescerão e darão frutos? O objetivo é continuar plantando árvores e, em algum momento no futuro, essas árvores ajudarão a sustentar você.</p><p>Continue enviando energia positiva. Continue oferecendo ajuda às pessoas usando suas habilidades e até mesmo sua própria rede. Raramente é uma má ideia fazer uma apresentação educada entre duas pessoas que você conhece.</p><p>Seja uma pessoa gentil, atenciosa e prestativa.</p><p>Nunca se sinta impaciente com a lentidão na busca por um emprego.</p><p>Nunca se sinta desconsiderado ou esnobado.</p><p>Nunca se sinta ciumento com o sucesso de outra pessoa.</p><p>O que vai, volta. Um dia você colherá o que plantou. Se você está plantando energia positiva, está se preparando para uma colheita abundante.</p><h2 id="cap-tulo-3-como-construir-sua-reputa-o">Capítulo 3: como construir sua reputação</h2><blockquote>"A maneira de ganhar uma boa reputação é se esforçar para ser o que você deseja parecer." – Sócrates</blockquote><p>Agora que você começou a construir suas habilidades e sua rede, está pronto para começar a construir sua reputação.</p><p>Você pode estar começando do zero – um total novato em tecnologia – ou pode já ter alguma credibilidade que pode trazer consigo de outro emprego.</p><p>Neste capítulo, compartilharei dicas práticas sobre como você pode construir uma reputação impecável entre seus colegas. Isso será a chave para conseguir clientes <em>freelance</em>, um primeiro emprego e avançar na sua carreira.</p><p>Primeiro, aqui está como eu construí minha reputação.</p><h3 id="hora-da-hist-ria-como-um-professor-de-30-e-poucos-anos-construiu-uma-reputa-o-como-desenvolvedor">Hora da história: como um professor de 30 e poucos anos construiu uma reputação como desenvolvedor?</h3><p><em>Na última vez em Hora da história: Quincy começou a construir sua rede de desenvolvedores, empreendedores e gerentes de contratação em tecnologia. Ele frequentava hackerspaces e eventos de tecnologia pela cidade, mas ainda não havia entrado na arena para testar suas habilidades...</em></p><p>Eu já estava há vários meses em minha jornada em programação quando finalmente criei coragem para ir ao meu primeiro <em>hackathon</em>.</p><p>Um dia, encontrei um bug particularmente desagradável e não sabia como resolver. Então, fiz o que muita gente faria nessa situação: procrastinei navegando na web. Foi aí que vi o Startup Weekend EDU.</p><p>Startup Weekend é uma competição de 54 horas que envolve construir um aplicativo e depois apresentá-lo a um painel de juízes. Esses eventos recompensam seu conhecimento de codificação, design e empreendedorismo também.</p><p>Esse evento em particular – realizado no coração do Vale do Silício – tinha um painel de educadores e empreendedores da educação como juízes. Com minha experiência em educação de adultos, parecia ser o <em>hackathon</em> ideal para mim.</p><p>Contei a Steve sobre o evento. Então, disse as palavras mágicas: "Eu dirijo". O que foi bom, porque Steve não tinha carteira de motorista.</p><p>Passei semanas me preparando para o evento, pesquisando sobre os juízes e as empresas para as quais trabalhavam. Pesquisei sobre os patrocinadores. Claro, pratiquei programação como um monge Shaolin.</p><p>Finalmente, depois de um mês de preparação, chegou o grande fim de semana. Entramos no meu Toyota Corolla 2003 com o verniz descascando, colocamos uma música de alta energia e começamos nossa viagem de 5 horas.</p><p>No caminho, discutimos o que deveríamos criar. Seria focado em educação, é claro. Preferencialmente voltado para estudantes do ensino médio, já que essas eram as séries em que as empresas dos juízes estavam focadas.</p><p>O que, no entanto, a aplicação deveria fazer? Como ela tornaria a vida das pessoas mais fácil?</p><p>Pensei na minha própria época no ensino médio. Eu não tinha muito a oferecer, já que tinha abandonado os estudos depois de apenas um ano. (Consegui estudar e passar no GED – <em>Good Enough Degree</em>, como o chamávamos – enquanto trabalhava no Taco Bell, antes de finalmente ir para a faculdade, mas essa é outra história).</p><p>Algo que me incomodava e que eu me lembrava no ensino médio ainda ecoava depois de todos esses anos: trabalhos de inglês.</p><p>Eu adorava escrever, mas não gostava de escrever no formato MLA, com suas rígidas regras de citação. Eu costumava temer a preparação de uma página de trabalhos com citação. Meu professor sempre me descontava pontos por não formatar corretamente as citações.</p><p>Depois de ouvir muitas ideias razoáveis dos outros passageiros no carro, eu disse: "Eu tenho uma ideia. Devíamos programar uma aplicação que cria citações para você."</p><p>Alguém riu e disse: "Genial."</p><p>Steve disse: "Ei, esse é um bom nome. Poderíamos chamar de Out of Cite com 'C'."</p><p>Todos rimos e nos sentimos inteligentes. Então, começamos a discutir os detalhes da implementação.</p><p>Quando chegamos ao local, havia cerca de 100 outros desenvolvedores lá. Era um espaço de escritório de plano aberto, com cubículos baixos flanqueados por quadros brancos.</p><p>Ouvi sussurros sobre um daqueles desenvolvedores. "Ei, é aquele cara que venceu o evento no ano passado," ouvi as pessoas dizendo. Elas apontavam na direção de um desenvolvedor com uma expressão arrogante cercado de fãs. "Talvez ele me deixe fazer parte da equipe dele".</p><p>O evento começou com apresentações. Qualquer um poderia ir à frente da sala, pegar o microfone e fazer uma apresentação de 60 segundos sobre a aplicação que queria construir.</p><p>Eu estava tão nervoso que parecia que um <em>alien</em> estava prestes a explodir do meu peito. Então, naturalmente, fui o primeiro da fila. Resolver isso de uma vez, certo?</p><p>Eu estava suando e gesticulando freneticamente enquanto corria com minha apresentação. Eu disse algo assim: "Citações são um saco. Digo, elas não são um saco. São necessárias. Você precisa adicioná-las aos seus trabalhos, mas preparar citações é um saco. Vamos criar uma aplicação que preencha sua página de trabalhos com citação para você. Quem está comigo?"</p><p>A sala ficou quieta. Então, as pessoas perceberam que eu havia terminado de falar e me deram uma rodada de aplausos obrigatória. O MC tirou o microfone da minha mão e o entregou à próxima pessoa e eu voltei para meu assento saltitando.</p><p>Depois das apresentações, era hora de formar equipes. Nosso contingente de Santa Bárbara olhou um para o outro e disse: "Acho que somos uma equipe."</p><p>Descobrimos a senha do wi-fi e pegamos o melhor dos espaços de trabalho: um escritório de canto que tinha uma porta que você realmente podia fechar.</p><p>Comecei a rabiscar <em>mock-ups</em> de UI no quadro branco. Eu disse: "Queremos algo que esteja sempre a um clique de distância. Bem na barra de menu do seu navegador."</p><p>"Como um <em>plug-in</em> de navegador", disse Steve.</p><p>"Sim. Vamos criar um <em>plug-in</em> de navegador."</p><p>Mostrei a eles exemplos dos três formatos que os ensaios podem exigir: MLA, APA e Chicago.</p><p>"Poderíamos gerar todos os três de uma vez, para que possam simplesmente copiar e colar?" eu perguntei.</p><p>"Podemos fazer melhor que isso", disse Steve. "Podemos ter um botão para cada um deles que coloca a citação diretamente na área de transferência."</p><p>Trabalhamos rápido, criando um MVP (produto mínimo viável, do inglês <em>Minimum Viable Product</em>) simples até o final da sexta-feira à noite. Tudo o que fazia era pegar os metadados do site atual e estruturá-los como uma citação, mas funcionou.</p><p>Como era meu primeiro <em>hackathon</em>, eu não queria o estresse de ficar em um albergue. Então, exagerei e reservei um quarto de hotel. Tínhamos duas camas de solteiro, então, a cada noite, fazíamos rodízio para ver quem tinha que dormir no chão.</p><p>Na manhã de sábado, nossas ambições cresceram. Caminhei até o quadro branco e disse à equipe: "Citar sites é ótimo e tudo mais, mas muitas das coisas que os estudantes citam estão em livros ou trabalhos acadêmicos. Precisamos ser capazes de gerar citações para esses também."</p><p>Encontramos uma API que poderíamos usar para obter informações de citação com base no ISBN (um número de série usado para livros) e remendamos um script que poderia buscar trabalhos acadêmicos com base no DOI (um número de série usado para trabalhos acadêmicos). Em seguida, extraímos o dados da página de resultados.</p><p>Na noite de sábado, o código para nosso <em>plug-in</em> de navegador estava realmente ganhando forma. Então, sentei e comecei a preparar os slides de apresentação. Deixei muito da programação final para meus colegas de equipe enquanto eu ensaiava minha apresentação repetidamente por horas.</p><p>Mesmo sendo minha vez de dormir em uma cama, eu mal conseguia fechar os olhos devido ao nervosismo. Ali estava eu, bem no coração do ecossistema tecnológico. Vale do Silício.</p><p>Como professor, eu rotineiramente dava palestras na frente de meus colegas – às vezes dezenas deles – mas isso era diferente.</p><p>Incapaz de dormir, abri meu <em>e-mail</em>. A equipe do Startup Weekend havia enviado um <em>e-mail</em>, que incluía um PDF de um livro. Era uma mistura não oficial dos clássicos de startups de tecnologia <a href="https://www.amazon.com/Four-Steps-Epiphany-Successful-Strategies/dp/1119690358?_encoding=UTF8&amp;qid=&amp;sr=&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=662e9d222ccd9aa050d3ad29438e74e3&amp;language=en_US&amp;ref_=as_li_ss_tl"><em>4 Steps to the Epiphany</em></a> e <a href="https://www.amazon.com/The-Lean-Startup-Eric-Ries-audiobook/dp/B005MM7HY8?_encoding=UTF8&amp;qid=&amp;sr=&amp;linkCode=ll1&amp;tag=out0b4b-20&amp;linkId=13b3c19bdbda93658336cf7c69e27100&amp;language=en_US&amp;ref_=as_li_ss_tl"><em>The Lean Startup</em></a>.</p><p>Eu já tinha lido esses livros, porque eram leituras obrigatórias para quem queria criar <em>software </em>no início dos anos 2010, mas eu também tinha lido dezenas de outros livros sobre <em>startups</em>. Muitas de suas percepções meio que se juntavam em uma mistura de conselhos.</p><p>Eram 4 da manhã e eu não conseguia dormir. Então, comecei a ler. Uma coisa que esses livros realmente enfatizam é construir algo pelo qual as pessoas estejam dispostas a pagar. A forma máxima de validação do cliente.</p><p>Foi quando percebi: sabe o que realmente levaria minha apresentação até a linha de chegada? Prova de ajuste do produto ao mercado. Prova de que a aplicação que estávamos construindo resolveria um problema real que as pessoas tinham, tão real que elas comprariam um produto assim.</p><p>Isso me deu uma ideia. Deveria levar nossa aplicação para a rua e "vendê-la" para as pessoas.</p><p>Só que era domingo de manhã. Onde eu encontraria potenciais clientes? Bem, nosso hotel estava localizado perto do campus principal da Universidade de Stanford.</p><p>Levei minha equipe até o local do evento, acenei e disse: "Voltarei quando tiver dinheiro de verdade dos clientes."</p><p>Meus colegas riram. Não sei se eles acharam que eu estava falando sério. Eles disseram: "Só não se atrase para a apresentação."</p><p>Eu estava falando sério. Eu tinha um protótipo da aplicação rodando no meu laptop. Digitei Stanford no meu GPS e embarquei na minha missão.</p><p>Eu estudei numa universidade estadual realmente barata em Oklahoma. Então, eu me senti realmente fora do meu elemento quando cheguei a uma das universidades mais prestigiadas do mundo.</p><p>Stanford custa 50 mil dólares por ano para frequentar. Eu entrei no estacionamento deles dirigindo um carro que valia 1/10 disso.</p><p>O campus estava uma cidade fantasma naquela hora da semana, mas uma cidade fantasma palaciana, ainda assim. Estátuas de bronze. Arcos icônicos por toda parte.</p><p>Perguntei a mim mesmo: onde estão os alunos mais dedicados a essa hora do dia, aqueles que não têm tempo a perder criando suas páginas de trabalhos com citação manualmente?</p><p>Entrei na biblioteca principal, passei pela mesa de segurança e um sinal que dizia "proibido vender".</p><p>Andei pelas estantes, encontrando um pequeno punhado de pessoas estudando. Um garoto estava diligentemente fazendo anotações enquanto lia um livro grosso. Achei!</p><p>Sentei-me ao lado dele. "Ei. Você gosta de citações?"</p><p>"O quê?"</p><p>"Citações. Você sabe, como, páginas de trabalhos com citação."</p><p>"Hum..."</p><p>"Você sabe, a última página do seu trabalho, onde você tem que listar todos os..."</p><p>"Eu sei o que é uma página de trabalhos com citação."</p><p>"OK. Bem, veja isso." Abri meu casaco como um traficante, e tirei meu netbook de $200. Ele me deu um momento enquanto eu apresentava meu discurso de vendas desajeitado.</p><p>Eu disse: "Aqui. Eu tenho esse <em>plug-in</em> para navegador. Eu vou a qualquer site, clico no botão e pronto. Ele cria uma citação para mim."</p><p>O garoto levantou as sobrancelhas. "Ele faz em MLA?"</p><p>Contive minha empolgação e disse: "MLA, APA e até mesmo Chicago. Veja." Cliquei no botão e três citações apareceram – cada uma com seu próprio botão de copiar para área de transferência.</p><p>O garoto acenou com a cabeça, parecendo um pouco impressionado. Então, tentei fechar a venda.</p><p>"E se eu te dissesse que estou prestes a lançar essa aplicação com uma assinatura anual? Se você se inscrever agora, terá acesso ilimitado não por um ano, mas por toda a vida."</p><p>O garoto pensou por um momento.</p><p>Eu tinha ouvido que o silêncio era o melhor amigo do vendedor. Então, fiquei ali em silêncio absoluto por um tempo desconfortavelmente longo, encarando-o.</p><p>Finalmente, ele disse: "Legal, eu topo."</p><p>"Ótimo. Serão vinte dólares."</p><p>O garoto recuou. "O quê? Isso é caro."</p><p>Claro, esta era a era das startups subsidiadas por capital de risco, onde Uber e Lyft estavam perdendo dinheiro em cada corrida numa corrida por participação de mercado. Portanto, a reação do garoto não foi totalmente surpreendente.</p><p>Eu pensei rápido: "Bem, quanto dinheiro você tem?"</p><p>Ele mexeu na carteira e, então, disse: "cinco dólares."</p><p>Olhei para a nota amassada e dei de ombros. "Vendido."</p><p>Ele sorriu, e eu enviei a ele um <em>e-mail</em> com instruções sobre como instalá-lo. Então eu disse, "Mais uma coisa. Vamos tirar uma foto juntos."</p><p>Coloquei meu telefone no modo <em>selfie</em>. Ele começou a sorrir, e eu disse, "Aqui. Segure a nota de cinco dólares."</p><p>Passei mais uma hora apresentando para pessoas na biblioteca e consegui mais um cliente pagante também. Então, corri de volta para o local do evento para finalizar nosso protótipo com a equipe.</p><p>Naquela tarde, fiz o que ainda acho que foi a melhor apresentação da minha vida. Demonstramos ao vivo a aplicação funcionando – e ela funcionou perfeitamente.</p><p>Terminamos a apresentação com as fotos que tirei, posando com estudantes de Stanford que agora eram nossos clientes pagantes. Quando levantei o dinheiro que ganhamos, a audiência aplaudiu fervorosamente.</p><p>No geral, foi uma das experiências mais emocionantes da minha vida. Ficamos em segundo lugar e ganhamos algum crédito de API de uma das empresas que patrocinou o evento.</p><p>Na festa pós-evento, comi rapidamente algumas fatias de pizza, para ter mais tempo de fazer <em>networking </em>com todos que pudesse. Conectei-me no LinkedIn. Segui no Twitter. Tirei <em>selfies </em>com pessoas e usei bastante a hashtag do evento.</p><h3 id="correndo-o-circuito-de-hackathons">Correndo o circuito de <em>hackathons</em></h3><p>A partir daquele momento, eu fiquei viciado em <em>hackathons</em>. Aquele ano, participei de dezenas deles. Tornei-me um guerreiro das estradas, subindo e descendo a costa, participando de todas as competições que eu conseguia.</p><p>A partir daí, seria muito mais difícil. Eu não tinha mais uma equipe. Estava sozinho.</p><p>Eu chegava, conhecia o máximo de pessoas que podia, subia ao palco e fazia uma proposta de ideia que achava que poderia conquistar os jurados.</p><p>Às vezes, as pessoas entravam na minha equipe. Às vezes, eu me juntava a equipes de outras pessoas.</p><p>Eu não queria apenas projetar aplicações – eu queria programá-las também. Meu alcance frequentemente superava minha compreensão.</p><p>Houve muitos <em>hackathons</em> onde eu ainda estava tentando corrigir bugs nos minutos finais antes de subir ao palco. Às vezes, minhas aplicações travavam durante as demonstrações ao vivo.</p><p>Em um <em>hackathon </em>em Las Vegas, consegui danificar tanto a base de código que tivemos que usar apenas uma apresentação de slides. Sentei na plateia com a cabeça nas mãos, assistindo impotente enquanto meu colega de equipe demonstrava como nossa aplicação funcionaria hipoteticamente – se eu tivesse conseguido fazê-la funcionar. Não nos saímos bem com os jurados.</p><p>Eu continuei perseverando. Continuava chegando em novas cidades, fazendo <em>check-in</em> no albergue, indo ao local do evento e comendo o máximo de pizza grátis que conseguia.</p><p>Minhas equipes já tinham ficado em segundo ou terceiro lugar tantas vezes que eu mal conseguia contar, mas nunca tínhamos conseguido vencer um <em>hackathon</em>.</p><h3 id="a-primeira-vit-ria">A primeira vitória</h3><p>Fui, então, a um evento em San Diego. Nunca vou esquecer a sensação de criar algo que conquistou o público e os jurados a ponto de nossa vitória parecer uma conclusão inevitável.</p><p>Depois que anunciaram nossa vitória, lembro de sair sorrateiramente pela porta dos fundos para o estacionamento e ligar para meus avós. Disse a eles que finalmente tinha conseguido. Eu tinha ajudado a construir uma aplicação e a criar uma apresentação que havia vencido um <em>hackathon</em>.</p><p>Não sei o quanto meus avós entendiam sobre desenvolvimento de <em>software</em> ou sobre <em>hackathons</em>, mas eles disseram que estavam orgulhosos de mim.</p><p>Com eles não estando mais aqui, muitas vezes penso nessa conversa. Valorizo o incentivo deles. A fé que tiveram em um neto de 30 e poucos anos, professor, que se esforçava ao máximo para se tornar um desenvolvedor.</p><p>Continuei indo a <em>hackathons</em> depois disso. Continuei formando novas equipes e aprendendo novas ferramentas ao longo do caminho. Você nunca esquece a primeira vez que consegue fazer uma API funcionar. Nem quando finalmente entende como algum comando do Git funciona. Você também nunca esquece as pessoas que se esforçam ao seu lado, tentando manter a aplicação funcionando durante a demonstração.</p><p>TechCrunch Disrupt, DeveloperWeek, ProgrammableWeb, o Prêmio de 1 milhão de dólares da Salesforce: foram vários grandes <em>hackathons </em>e muito aprendizado. Foi aí que minhas habilidades de desenvolvedor foram forjadas.</p><p>Não só consegui desenvolver minhas habilidades e minha rede de contatos ao longo do caminho – agora eu tinha a fama de alguém que realmente podia vencer um <em>hackathon</em>.</p><p>Eu podia entregar.</p><p>Isso me tornou uma figura conhecida.</p><p>Essa reputação foi crucial para conseguir meus primeiros clientes <em>freelancers</em>, meu primeiro emprego de desenvolvedor e, o mais importante – confiar nos meus próprios instintos como desenvolvedor.</p><h3 id="por-que-sua-reputa-o-t-o-importante">Por que sua reputação é tão importante</h3><p>O papel da reputação na sociedade remonta, e muito, aos tempos pré-históricos da humanidade. Na maioria das tribos e assentamentos, havia algum sistema para rastrear quem devia o quê a quem.</p><p>Antes de haver dinheiro, havia crédito.</p><p>Isso podia ter sido por um registro escrito, ou um ancião que simplesmente mantinha todos esses registros em sua cabeça.</p><p>Além da contabilidade bruta, havia também uma vibração menos tangível, mas igualmente importante, que as pessoas carregavam consigo.</p><p>"John realmente sabe como ferrar um cavalo."</p><p>Ou "Jane é a melhor contadora de histórias do lugar."</p><p>Ou "A coragem de Jay na batalha nos salvou dos invasores três invernos atrás."</p><p>Você notará que esses exemplos envolvem alguém ser bom em algo. Não apenas ser uma boa pessoa, agradável.</p><p>Claro que ajuda ser uma pessoa tranquila e pé no chão, mas não estamos no Grande Lebowski e não vamos sobreviver só com nosso charme.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/image__2000-1338_.png" class="kg-image" alt="image__2000-1338_" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/image__2000-1338_.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/image__2000-1338_.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/11/image__2000-1338_.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/image__2000-1338_.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1312" loading="lazy"><figcaption><em>O Grande Lebowski (à esquerda). Ele não tinha emprego, não tinha habilidades, não tinha energia, mas tinha tranquilidade até não poder mais.</em></figcaption></figure><p>É fácil para um desenvolvedor dizer: "Ah é. Eu conheço JavaScript como a palma da minha mão. Posso criar qualquer tipo de aplicação em JavaScript que você precisar, rodando em qualquer dispositivo que você imaginar."</p><p>Ou ainda: "Eu entrego código dentro do orçamento e antes do prazo – o tempo todo."</p><p>Como saber, no entanto, se eles não estão exagerando em suas afirmações?</p><p>Afinal, um homem ardiloso uma vez disse:</p><blockquote>"Se você só pode ser bom em uma coisa, seja bom em mentir. Aí, você é bom em tudo."</blockquote><p>(A verdadeira procedência dessa citação é desconhecida, mas gosto de imaginar que foi dita por um vigarista dos anos 1920 usando uma cartola e um monóculo).</p><p>Qualquer um pode mentir – e algumas pessoas mentem.</p><p>No início da minha carreira, tive a desagradável tarefa de demitir um professor que havia mentido sobre ter um mestrado. Os anos se passaram e ninguém percebeu.</p><p>Todo ano, ele mentia em seu formulário anual para obter um aumento maior do que os outros professores. Todo ano, ele conseguia.</p><p>Um dia, porém, uma pequena discrepância me alertou. Revisei seu arquivo, liguei para alguns departamentos de registros universitários e descobri que ele nunca tinha terminado seu curso.</p><p>Era desanimador saber que essa pessoa estava ensinando na escola há anos e recebia mais do que muitos dos outros professores – apenas porque estava disposta a mentir.</p><p>Os frutos da mentira estão sempre lá, brilhando. Algumas pessoas estão dispostas a ceder a essa tentação.</p><p>Os empregadores sabem disso. Sabem que não se pode confiar em qualquer pessoa que afirma conhecer desenvolvimento<em> full-stack</em> em JavaScript. É preciso ser cauteloso sobre quem recebe um crachá da empresa, um endereço de e-mail corporativo e as chaves dos bancos de dados de produção.</p><p>É por isso que os empregadores usam perguntas de entrevista comportamental – para tentar pegar pessoas que são mais capazes de desonestidade.</p><p>Chame-me de ingênuo, mas acredito que a maioria das pessoas é inerentemente boa, que a maioria das pessoas está disposta a jogar pelas regras, desde que essas regras sejam razoavelmente justas.</p><p>Porém, se contratar até mesmo uma pessoa ruim em cada dez seria desastroso, isso significa que todos nós estamos sujeitos a uma maior verificação.</p><p>O pior cenário não é apenas alguém que mente para ganhar mais dinheiro. É alguém que vende segredos da empresa, destrói relações com clientes ou infringe leis em nome de inflar seus números.</p><p>A história está repleta de funcionários que causaram danos catastróficos aos seus empregadores, tudo para ganho pessoal.</p><p>Assim, o processo de contratação de desenvolvedores na maioria das grandes empresas é excessivamente paranoico. Talvez deva ser, mas, infelizmente, isso torna mais difícil para <em>todos</em> conseguirem um emprego de desenvolvedor – até mesmo os candidatos mais honestos.</p><p>Como desenvolvedores, precisamos de provas de que nossas habilidades são tão fortes quanto dizemos que são. Precisamos de provas de que nossa ética de trabalho é tão firme quanto nossos empregadores precisam que seja.</p><p>É aí que entra a reputação. Reduz a ambiguidade. Reduz a parte do risco. Torna mais seguro para os empregadores fazer uma oferta de emprego e assinar um contrato de trabalho com você.</p><p>Isso significa que – se você tiver uma reputação forte o suficiente – poderá até entrar na empresa por uma porta lateral – em vez da porta da frente pela qual outros candidatos fazem fila.</p><p>Algumas empresas têm até recrutadores internos que podem acelerar seu processo de entrevista. Uma reputação forte também pode ajudá-lo a obter mais poder de negociação durante as negociações salariais.</p><p>Então, vamos falar sobre como você pode construir uma reputação forte e se tornar procurado por gerentes.</p><h3 id="como-construir-sua-reputa-o-como-desenvolvedor">Como construir sua reputação como desenvolvedor</h3><p>Existem pelo menos seis maneiras comprovadas para construir sua reputação como desenvolvedor. São elas:</p><ol><li>Hackathons</li><li>Contribuições para o código aberto</li><li>Criação de conteúdo focado em desenvolvedores</li><li>Subir na hierarquia trabalhando em empresas com um "nome conhecido"</li><li>Construir um portfólio de clientes <em>freelance</em></li><li>Iniciar seu próprio projeto de código aberto, empresa ou instituição de caridade</li></ol><h4 id="como-encontrar-hackathons-e-outras-competi-es-de-desenvolvedores">Como encontrar <em>hackathons</em> e outras competições de desenvolvedores</h4><p><em>Hackathons </em>representam a maneira mais imediata de construir sua reputação, sua rede e suas habilidades de programação ao mesmo tempo.</p><p>A maioria dos <em>hackathons </em>é gratuita e aberta ao público. Você só precisa ter tempo e orçamento para viajar.</p><p>Se você mora em uma cidade com muitos <em>hackathons</em> – como São Francisco, Nova York, Bengaluru ou Pequim – pode ser capaz de ir até o evento, depois voltar para casa e dormir em sua própria cama.</p><p>Embora eu morasse em Santa Bárbara, que tinha <em>hackathons</em> apenas uma vez a cada poucos meses, eu tinha um antigo colega de classe em São Francisco que me deixava dormir no sofá dele. Isso me dava acesso a muitos eventos.</p><p><em>Hackathons </em>costumavam ser eventos pesados. As pessoas tomavam bebidas energéticas e dormiam no chão, tudo para terminar seu projeto a tempo da apresentação.</p><p>Porém, os organizadores de hackathons estão gradualmente se tornando mais conscientes sobre a saúde e sustentabilidade desses eventos. Afinal, muitos participantes têm filhos ou empregos de tempo integral exigentes e não podem programar o fim de semana inteiro sem parar.</p><p>A melhor maneira de encontrar eventos futuros é simplesmente procurar no google "<em>hackathon</em> [nome da sua cidade]" e navegar pelos vários calendários de eventos que surgem nos resultados da busca. Muitos desses serão organizados por universidades, empregadores locais ou até instituições de caridade focadas em educação.</p><p>Se você está jogando para ganhar, recomendo fazer sua pesquisa com antecedência.</p><p>Quem são os patrocinadores do evento? Normalmente serão empresas do tipo <em>Business-to-Developer</em> (B2D), com APIs, ferramentas de banco de dados ou várias ofertas de <em>Software</em> como Serviço.</p><p>Esses patrocinadores provavelmente terão um estande no evento onde você poderá conversar com seus defensores de desenvolvedores. Essas são pessoas pagas para ensinar aos outros como usar as ferramentas da empresa. Às vezes, você ainda encontrará funcionários chave ou fundadores nesses estandes, o que também pode ser uma ótima oportunidade de <em>networking</em>.</p><p>Frequentemente, o <em>hackathon</em> oferecerá prêmios específicos dos patrocinadores. "Melhor Uso da API [do patrocinador]." Pode ser mais fácil concentrar seu tempo em incorporar ferramentas específicas dos patrocinadores no seu projeto, em vez de tentar ganhar o grande prêmio. Você ainda pode listar essas vitórias no seu LinkedIn ou no currículo. Uma vitória é uma vitória.</p><p>Às vezes, o <em>hackathon</em> é tão de alto perfil – ou o prêmio é tão substancial – que faz sentido tentar ganhar a competição de qualquer forma.</p><p>Durante meu tempo participando de <em>hackathons</em>, consegui ganhar prêmios em dinheiro que cobriam o aluguel de vários meses, vários anos de espaço de <em>coworking</em> gratuito e até um tour privado pelo prédio das Nações Unidas em Nova York.</p><p>Não fique surpreso se algumas das pessoas que você encontrar frequentemente em <em>hackathons </em>fundarem empresas financiadas por capital de risco ou lançarem projetos de código aberto proeminentes.</p><p>O nível de ambição que você verá entre os frequentadores de <em>hackathons</em> é muito, muito mais alto do que o do desenvolvedor médio. Afinal, são pessoas que terminam uma semana de trabalho e vão direto para um fim de semana de trabalho. Essas pessoas não têm medo de pular da frigideira para o fogo.</p><h3 id="como-contribuir-para-o-c-digo-aberto">Como contribuir para o código aberto</h3><p>Contribuir para o código aberto é uma das maneiras mais imediatas de se construir sua reputação. A maioria dos empregadores vai olhar para o seu perfil no GitHub, que exibirá de maneira destacada seu histórico de <em>commits </em>do Git.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/raisedadead__Mrugesh_Mohapatra__--.png" class="kg-image" alt="raisedadead__Mrugesh_Mohapatra__--" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/raisedadead__Mrugesh_Mohapatra__--.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/raisedadead__Mrugesh_Mohapatra__--.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/11/raisedadead__Mrugesh_Mohapatra__--.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w2400/2024/11/raisedadead__Mrugesh_Mohapatra__--.png 2400w" sizes="(min-width: 720px) 720px" width="2568" height="1918" loading="lazy"><figcaption><em>O perfil GitHub de Mrugesh Mohapatra, que faz uma grande quantidade de desenvolvimento de plataforma e DevOps para o freeCodeCamp.org. Note como sua barra de atividades está verde. Foram 2.208 contribuições apenas no ano passado.</em></figcaption></figure><p>Muitos mantenedores de projetos de código aberto, como a Linux Foundation, Mozilla (Firefox) e, claro, nós mesmos do freeCodeCamp, têm padrões elevados para a qualidade do código.</p><p>Você pode ler as <em>issues</em> abertas no GitHub para encontrar <em>bugs</em> conhecidos ou pedidos de funcionalidades. Depois, você pode fazer as alterações no código e abrir um <em>pull request</em>. Se os mantenedores fizerem <em>merge </em>do seu <em>pull request</em>, será uma grande vantagem para você.</p><p>Uma das melhores maneiras de se conseguir um emprego em uma empresa de tecnologia é se tornar um colaborador produtivo de código aberto nos repositórios delas.</p><p>Contribuir para o código aberto é uma ótima maneira de se construir sua reputação porque tudo o que você faz está aberto ao público. Você obtém a <strong>prova social</strong> de ter outros desenvolvedores revisando e aceitando seu trabalho.</p><p>Se você está interessado em construir sua reputação através do código aberto, aqui está como começar: leia o guia de Hillary Nyakundi sobre <a href="https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/">como começar com o código aberto</a> (texto em inglês).</p><h3 id="como-criar-conte-do-voltado-para-desenvolvedores">Como criar conteúdo voltado para desenvolvedores</h3><p>Desenvolvedores são pessoas. Como outras pessoas, eles querem algo para fazer com seu tempo quando não estão trabalhando, dormindo ou saindo com amigos e familiares.</p><p>Para muitas pessoas – inclusive eu – isso significa passar um tempo nos pensamentos de outras pessoas. Livros. Ensaios em vídeo. Experiências interativas, como <a href="https://www.freecodecamp.org/news/learn-to-code-rpg-1-5-update/"><em>visual novels</em></a> (texto em inglês).</p><p>Você pode se referir a esses como "conteúdo". Eu não sou um grande fã dessa palavra, porque faz esses trabalhos parecerem descartáveis, mas é assim que as pessoas chamam.</p><p>O desenvolvimento de <em>software </em>é um campo incrivelmente amplo, com muitos tópicos diferentes que você pode abordar. Existem <em>vlogs</em> sobre estilo de vida de desenvolvedores, tutoriais de preparação para entrevistas de programação, transmissões ao vivo de programação no Twitch e <a href="https://www.freecodecamp.org/news/tag/podcast/"><em>podcasts</em> de entrevistas com desenvolvedores, como o podcast do freeCodeCamp</a> (em inglês).</p><p>Provavelmente há categorias inteiras de conteúdo para desenvolvedores que ainda não pensamos – e que surgirão na próxima década.</p><p>Se você é interessado em cinema, jornalismo ou escrita criativa, o conteúdo para desenvolvedores pode ser uma boa maneira de construir sua reputação.</p><p>Você pode escolher um tópico específico e ser gradualmente visto como um especialista nele.</p><p>Existem desenvolvedores que se especializam em tutoriais para <em>stacks</em> de tecnologia específicas, por exemplo.</p><p>Meu amigo Andrew Brown é um ex-CTO de Toronto que passou em todos os principais exames de DevOps. Ele cria <a href="https://www.freecodecamp.org/news/azure-developer-certification-az-204-pass-the-exam-with-this-free-13-5-hour-course/">cursos gratuitos para preparar você para todas as certificações AWS, Azure e Google Cloud</a> (em inglês), e também administra um serviço de preparação para exames.</p><p>Existem mais de 30 milhões de desenvolvedores de software ao redor do mundo. Isso é uma quantidade enorme de pessoas que potencialmente consumirão seu conteúdo e conhecerão quem você é.</p><h3 id="como-subir-na-hierarquia-trabalhando-em-grandes-empresas">Como subir na hierarquia trabalhando em grandes empresas</h3><p>Você pode ter visto um desenvolvedor ser apresentado como um "ex funcionário da Google" ou um "ex-engenheiro da Netflix".</p><p>Algumas empresas de tecnologia têm processos de contratação tão rigorosos – e padrões tão altos – que até conseguir um emprego na empresa já é um grande feito.</p><p>Há algumas razões práticas pelas quais os empregadores olham onde os candidatos trabalharam anteriormente. Isso reduz o risco de uma contratação ruim.</p><p>Você pode construir sua reputação subindo na hierarquia do prestígio. Você pode escalar de um empregador local para uma empresa Fortune 500 e, finalmente, para um dos gigantes da tecnologia.</p><p>Claro, trabalhar em uma corporação gigante não é para todos. Falarei mais sobre isso no Capítulo 4., mas saiba que é uma opção que você tem para construir sua reputação.</p><h3 id="como-construir-sua-reputa-o-construindo-um-portf-lio-de-clientes-freelance">Como construir sua reputação construindo um portfólio de clientes <em>freelance</em></h3><p>Você pode construir sua reputação trabalhando com empresas como <em>freelancer</em>.</p><p>Desenvolvedores <em>freelancers </em>geralmente trabalham em projetos menores, de uma pessoa só. Então, essa pode ser uma estratégia melhor para construir sua reputação localmente.</p><p>Por exemplo, se você fez um bom trabalho para um banco local, isso pode ser suficiente para convencer um escritório de advocacia local a contratá-lo também.</p><p>Há algo a ser dito sobre ser um "herói na sua cidade". Eu conheço muitos desenvolvedores que podem competir efetivamente com a concorrência <em>on-line</em> apenas por estarem fisicamente presentes em reuniões e conhecerem pessoas localmente.</p><h3 id="como-construir-um-portf-lio-de-desenvolvedor-com-seu-trabalho">Como construir um portfólio de desenvolvedor com seu trabalho</h3><p>Depois de construir alguns projetos, você vai querer mostrá-los. A melhor maneira de se fazer isso é com vídeos curtos.</p><p>Se você enviar pessoas para um site, elas podem não entender completamente o que estão vendo e por que é tão especial.</p><p>É por isso que eu recomendo usar uma ferramenta de captura de tela para gravar vídeos de demonstração de dois minutos.</p><p>Dois minutos devem ser suficientes para mostrar como o projeto funciona. E depois de fazer isso, você pode explicar alguns dos detalhes da implementação e decisões de design que tomou.</p><p>Sempre, no entanto, comece com a demonstração. As pessoas querem ver algo funcionando. Elas querem ver algo visual.</p><p>Depois de atrair as pessoas com sua demonstração atraente da aplicação em funcionamento, você pode explicar todos os detalhes que quiser. Seu público agora terá mais contexto e estará mais interessado.</p><p>Dois minutos também é um tempo mágico, porque você pode fazer o <em>upload</em> desse vídeo para um <em>tweet</em>, e ele será reproduzido automaticamente no Twitter enquanto as pessoas rolam a tela. Vídeos de reprodução automática são muito, muito mais propensos a serem assistidos no Twitter. Eles removem o atrito de ter que clicar em um botão de reprodução ou navegar para outro site.</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">So a freeCodeCamp alum built their own twitter.<br><br>Like... so many of the core features and UI elements.<br><br>It looks uncanny.🦹<br><br>🧑‍💻 Code by Risal<br>🥁 Music by me <a href="https://t.co/cFDjNxthnF">pic.twitter.com/cFDjNxthnF</a></p>— Quincy Larson (@ossia) <a href="https://twitter.com/ossia/status/1603405016525688834?ref_src=twsrc%5Etfw">December 15, 2022</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</figure><p>Você pode colocar esses vídeos de demonstração de projeto em sites como YouTube, Twitter, seu perfil do GitHub e, claro, em seu próprio site de portfólio.</p><p>Para gravar esse vídeo, eu recomendo usar o QuickTime, que vem integrado ao MacOS. Se você estiver no Windows, pode usar o Game Recorder, que vem grátis no Windows 10, ou a Game Bar, no Windows 11.</p><p>Se você quiser uma ferramenta mais poderosa, o OBS é grátis e de código aberto. É mais difícil de aprender, mas infinitamente personalizável.</p><p>Em termos de dicas de gravação: mantenha o tamanho da fonte o maior possível e use um microfone externo. Qualquer microfone que você encontrar – até mesmo de fones de ouvido baratos – será melhor do que falar no microfone embutido do seu laptop.</p><p>Invista o tempo que precisar para gravar e regravar até acertar.</p><p>Ser capaz de demonstrar seus projetos e apresentar seu código é uma habilidade valiosa que você usará ao longo de sua carreira. O tempo gasto praticando apresentações nunca é desperdiçado.</p><h3 id="como-iniciar-seu-pr-prio-projeto-de-c-digo-aberto-empresa-ou-institui-o-beneficente">Como iniciar seu próprio projeto de código aberto, empresa ou instituição beneficente</h3><p>Ser um fundador é a maneira mais rápida – mas também a mais arriscada – de construir uma reputação como desenvolvedor.</p><p>É mais arriscado porque você está apostando seu tempo, seu dinheiro e possivelmente até seus relacionamentos pessoais – tudo por um resultado desconhecido.</p><p>Se você contribuir com código aberto por tempo suficiente, você <em>construirá</em> uma reputação como desenvolvedor.</p><p>Se você percorrer o circuito de <em>hackathons</em> por tempo suficiente, você <em>construirá</em> uma reputação como desenvolvedor.</p><p>Porém, você pode tentar iniciar projetos empreendedores por décadas sem obter tração e desperdiçar seu tempo, dinheiro e contatos ao longo do caminho.</p><p>Empreendedorismo está além do escopo deste livro, mas se você estiver interessado nisso, darei este conselho rápido:</p><p><strong>A maioria dos empreendedores falha</strong>. Alguns falham devido a circunstâncias fora de seu controle, mas muitos falham por não entenderem a natureza dos riscos que estão assumindo.</p><p>Não se apresse em fundar um projeto, empresa ou instituição beneficente. Tente trabalhar para outras organizações que já estão fazendo trabalhos no seu campo de interesse.</p><p>Ao trabalhar para outra pessoa, você é pago para aprender. Você ganha exposição ao trabalho e aos riscos que o cercam. Além disso, você pode economizar para uma eventual empreitada como empreendedor.</p><h2 id="como-n-o-destruir-sua-reputa-o">Como não destruir sua reputação</h2><blockquote>"Leva-se uma vida inteira para construir uma boa reputação, mas você pode perdê-la em um minuto." – Will Rogers, ator, cowboy e um dos meus heróis crescendo em Oklahoma City</blockquote><p>Construir sua reputação é uma maratona, não uma corrida de velocidade.</p><p>Pode levar anos para construir uma reputação forte o suficiente para abrir as portas certas.</p><p>Assim como em uma maratona competitiva, contudo, um tropeço pode custar um tempo valioso. Um tropeço que resulte em lesão pode tirá-lo da corrida completamente.</p><h3 id="n-o-diga-coisas-est-pidas-na-internet">Não diga coisas estúpidas na internet</h3><p>As pessoas costumavam dizer coisas estúpidas o tempo todo. As palavras poderiam pairar no ar por alguns minutos enquanto todos faziam caretas, mas as palavras eventualmente se dissipavam.</p><p>Agora, quando as pessoas dizem coisas estúpidas, elas frequentemente o fazem <em>on-line</em>. Essa é uma tinta que não sai.</p><p>Sempre presuma que, no momento em que você digita algo em um site e pressiona enter, isso será salvo em um banco de dados. Esse banco de dados será copiado para vários centros de dados em todo o mundo.</p><p>Você pode provar a existência de dados, mas não há como provar a ausência de dados.</p><p>Você deve assumir, para todos os efeitos, que o que falou, ficará para sempre. Não há como colocar voltar atrás. O que quer que você tenha dito, está no seu registro permanente.</p><p>Você pode excluir o comentário. Você pode excluir sua conta. Você pode até tentar apagá-lo dos resultados de busca do Google, mas alguém provavelmente já fez um <em>back-up</em> na <em>Wayback Machine</em>. Quando um desses bancos de dados inevitavelmente for <em>hackeado </em>anos depois, esses dados provavelmente ainda estarão lá em algum lugar, prontinhos para serem trazidos à tona.</p><p>É uma época assustadora para ser um tagarela. Então, não seja. Pense antes de falar.</p><p>Meu conselho, que pode até parecer covardia: não crie o hábito de discutir com pessoas <em>on-line</em>.</p><p>Algumas pessoas seguem a regra de que "se você não tem algo legal para dizer, não diga nada".</p><p>Eu prefiro "elogiar em público, criticar em particular."</p><p>Eu reconheço publicamente o bom trabalho que alguém está fazendo na comunidade de desenvolvedores. Se eu vejo um projeto que me impressiona, eu digo isso.</p><p>Em uma briga, todos parecem sujos.</p><p>Você não quer parecer raivoso, desmontando o argumento de alguém, ou ser rude com alguém que acabou de dizer algo estúpido.</p><p>Claro – o humor cáustico pode render pontos na internet a curto prazo, mas também pode fazer as pessoas gostarem um pouco menos de você e temerem um pouco mais.</p><p>Eu também tento evitar reclamações. Sim, eu provavelmente conseguiria um melhor serviço ao cliente se ameaçasse tuitar sobre um voo cancelado.</p><p>As pessoas, porém, estão ocupadas. A maioria delas não quer usar seu tempo escasso, rolando pelas redes sociais, apenas para me ver reclamando sobre o que, no esquema geral das coisas, é um leve inconveniente.</p><p>Então, esse é meu conselho sobre o uso de redes sociais. Tente manter uma postura positiva.</p><p>Se for um assunto sobre o qual você tem fortes convicções, eu não vou impedi-lo de expressar sua opinião. Apenas pense antes de digitar e antes de clicar em enviar.</p><h3 id="n-o-prometa-demais-e-entregue-de-menos">Não prometa demais e entregue de menos</h3><p>Uma das maneiras mais comuns de ver desenvolvedores torpedeando suas próprias reputações é prometer demais e entregar de menos. Isso não é necessariamente um erro fatal, mas é ruim.</p><p>Lembre-se de quando falei sobre o <em>hackathon</em> em Las Vegas, onde eu falhei totalmente em terminar o projeto a tempo para a apresentação e tivemos que usar slides em vez de uma aplicação funcional?</p><p>Sim, esse foi um dos pontos mais baixos na minha jornada de aprender a programar. Meus colegas de equipe foram educados, mas tenho certeza de que ficaram desapontados comigo. Afinal de contas, eu tinha sido excessivamente confiante. Eu tinha prometido mais do que poderia realizar naquele período de tempo, e entreguei de menos.</p><p>É muito melhor ser modesto nas suas estimativas sobre suas habilidades.</p><p>Lembre-se da parábola de Ícaro, que com suas asas de cera voou muito perto do sol. Se ele tivesse adotado uma abordagem mais comedida, subido um pouco mais devagar, suas asas não teriam derretido. Ele não teria caído no mar, deixando um pai atormentado pela culpa.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg" class="kg-image" alt="1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/11/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/1690px-Pieter_Bruegel_de_Oude_-_De_val_van_Icarus.jpg 1690w" sizes="(min-width: 720px) 720px" width="1690" height="1080" loading="lazy"><figcaption><em>Paisagem com a Queda de Ícaro por Pieter Bruegel, o Velho, cerca de 1560. Ícaro poderia ter sido importante. Ele poderia ter sido alguém, mas, em vez disso, ele é apenas um par de pernas desaparecendo no mar. Os agricultores e pastores não se incomodam em levantar os olhos de seu trabalho para notar sua insignificância.</em></figcaption></figure><h3 id="controle-seus-v-cios-antes-que-eles-danifiquem-sua-reputa-o">Controle seus vícios antes que eles danifiquem sua reputação</h3><p>Se você tem um vício não tratado em drogas, álcool ou jogos de azar, procure ajuda primeiro. A busca por um emprego de desenvolvedor pode ser longa e extenuante. Você quer entrar nela com toda a sua atenção.</p><p>Mesmo algo aparentemente inofensivo como o vício em videogames pode distraí-lo e consumir muito do seu tempo. Vale a pena controlá-lo primeiro.</p><p>Eu não sou médico. Não vou fazer um discurso de como "drogas são ruins". Isso, ao menos, eu vou dizer: você pode ouvir falar de modas no Vale do Silício, onde desenvolvedores abusam de drogas pensando que podem, de algum modo, melhorar suas habilidades de programação ou resolução de problemas.</p><p>Por um tempo, houve uma tendência de "microdosagem de LSD". Houve uma tendência de uso de anfetaminas farmacêuticas.</p><p>Minha reação instintiva a isso é: qualquer vantagem que essas drogas possam dar a você provavelmente é insustentável e, a longo prazo, um prejuízo.</p><p>Não se sinta pressionado a tomar drogas psicoativas. Não se sinta pressionado a beber em <em>happy hours</em> (eu não bebo nem uma cerveja desde que minha filha nasceu há 8 anos, e não sinto que perdi nada).</p><p>Se você está se recuperando de um vício, esteja ciente de que aprender a programar e conseguir um emprego de desenvolvedor será um processo estressante. Vá com calma, para não correr o risco de uma recaída.</p><p>Você não quer chegar ao final do processo de transição de carreira – e realizar tanto – apenas para que velhos hábitos ressurjam e desfaçam seu trabalho árduo.</p><h3 id="tente-separar-sua-vida-profissional-da-sua-vida-pessoal">Tente separar sua vida profissional da sua vida pessoal</h3><p>Você pode ter ouvido a expressão, "Não misture negócios com prazer."</p><p>Como desenvolvedor, você se tornará uma pessoa poderosa. Você vai comandar um certo grau de respeito das outras pessoas em sua cidade.</p><p>Talvez não tanto quanto um médico ou um astronauta, mas, ainda assim, as pessoas vão olhar para você com admiração.</p><p>Você vai conversar com pessoas que adorariam estar no seu lugar.</p><p>Não exiba sua riqueza.</p><p>Não aja como se fosse mais inteligente do que todo mundo.</p><p>Não abuse da dinâmica de poder para conseguir o que quer em relacionamentos.</p><p>Isso fará com que as pessoas ao seu redor não gostem de você. Se, de algum modo, isso for percebido e publicado <em>on-line</em>, pode perseguir você pelo resto de sua carreira.</p><p>Nunca perca de vista o quanto você tem e o quanto você tem a perder.</p><h3 id="use-o-truque-do-narrador">Use o truque do narrador</h3><p>Vou fechar este capítulo com um pequeno truque que eu uso para me animar.</p><p>Primeiro, lembre-se de que você é o herói em sua própria jornada em programação. No teatro da sua mente, você é a pessoa que todos estão assistindo – aquela por quem estão torcendo.</p><p>O truque do narrador é narrar suas ações mentalmente enquanto você as executa.</p><blockquote>Quincy caminha pelo hackerspaces, seu laptop enfiado sob o braço. Ele coloca sua caneca sob o dispensador de água quente e joga um sachê de chá fresco. Ele puxa a alavanca. E enquanto a água fumegante enche sua caneca, ele diz em voz alta com seu melhor sotaque britânico: "Chá. Earl Grey. Quente."</blockquote><blockquote>Com sua bebida energizante em mãos, ele desliza para dentro de um cubículo, alinha seu laptop na superfície e encontra o olhar de outro desenvolvedor. Eles se encaram por um segundo. Quincy abaixa a cabeça suavemente, reconhecendo a presença do desenvolvedor. O desenvolvedor retribui com um pequeno movimento de cabeça, quase telepaticamente compartilhando esse sentimento: "Eu vejo você, amigo. Eu vejo você aparecer e realizar coisas."</blockquote><p>Narrar até os momentos mais mundanos da sua vida na sua cabeça pode te ajudar a se energizar. Cristalizar o momento que está diante de você e dar a você clareza de propósito.</p><p>Isso funciona ainda melhor quando você pensa na sua vida em termos de eras ("os anos do Taco Bell") ou como pontos de inflexão ("passar no exame GED").</p><p>O que isso tem a ver com construir sua reputação? Sua reputação é, essencialmente, o resumo de quem você é. O que você significa para as pessoas ao seu redor.</p><p>Ao se levar mais a sério, ao pensar na sua vida como um filme, você está gradualmente analisando e entendendo quem você é e quem quer se tornar um dia.</p><p>Ao narrar suas ações, você lança uma luz mais brilhante sobre elas na sua própria mente. Por que eu acabei de fazer isso? O que eu estava pensando? Havia uma jogada melhor ali?</p><p>Muitas pessoas sabotam suas reputações sem nem mesmo perceber, só porque se acomodaram em maus hábitos.</p><p>Por anos, eu achei que precisava ser "engraçado" o tempo todo. Eu encontrava qualquer oportunidade para injetar algum humor autodepreciativo. Muitas pessoas percebiam o que eu estava fazendo e achavam divertido, mas outras não entendiam e só ficavam com a impressão de que eu era um idiota.</p><p>Por que eu fazia isso? Acho que remonta ao ensino fundamental, quando eu sempre tentava ser o palhaço da turma e fazer as pessoas rirem.</p><p>Décadas depois, esse reflexo de preencher o silêncio com risadas não estava me servindo bem.</p><blockquote>"Quando você repete um erro, ele não é mais um erro. É uma decisão." – Paulo Coelho</blockquote><p>Eu poderia ter continuado muito mais tempo sem notar esse mau hábito, mas, com o truque do narrador, o constrangimento do meu comportamento ficou evidente.</p><p>Tenho certeza de que tenho muitas outras maneiras de pensar e de fazer as coisas que são longe de ser ótimas. Com a ajuda do truque do narrador, espero identificá-las no futuro e refiná-las, antes que deem às pessoas uma impressão errada.</p><h3 id="sua-reputa-o-se-tornar-seu-legado">Sua reputação se tornará seu legado</h3><p>Pense em quem você quer ser no final da sua história. Como você quer que as pessoas pensem no seu tempo na Terra. Então, trabalhe de trás para frente a partir daí.</p><p>A pessoa que você quer ser no final do filme. Aquele herói que você quer que as pessoas admirem. Por que não começar a se portar assim agora?</p><p>Você consegue imaginar como seria ser um desenvolvedor de sucesso? Ter construído sistemas de <em>software </em>dos quais as pessoas dependem?</p><p>Esse futuro você – como ele pensaria? Como ele abordaria situações e resolveria problemas? Como ele falaria sobre suas realizações? Seus contratempos?</p><p>Simplesmente pensar no seu futuro eu pode ajudar você a esclarecer seus pensamentos, suas prioridades.</p><p>Eu frequentemente penso no "Velho Quincy", com suas costas ruins. Ele tem que se desculpar para correr ao banheiro a cada 30 minutos.</p><p>O Velho Quincy, porém, ainda tenta fazer o melhor com o que ele tem. Ele se move apesar das articulações doloridas. Ele pondera apesar de uma mente enevoada.</p><p>O Velho Quincy ainda quer fazer as coisas acontecerem. Ele se orgulha do que realizou, mas não passa muito tempo olhando para trás. Ele olha para frente, para o que ele vai fazer naquele dia e para quais objetivos ele vai alcançar.</p><p>Eu frequentemente penso no Velho Quincy e trabalho de trás para onde estou hoje.</p><p>Quais decisões posso tomar hoje que me prepararão para ser alguém digno de admiração amanhã? Preciso esperar décadas para conquistar essa reputação? Ou posso pegar emprestado um pouco desse respeito do futuro?</p><p>Pensando como o meu futuro eu poderia pensar, posso fazer movimentos que me rendam uma reputação positiva no presente?</p><p>Eu acredito que você pode aproveitar sua futura reputação – seu legado – agora mesmo. Basta pensar em termos do seu futuro eu e do que você realizará. Use isso como um ponto de referência para guiar você adiante.</p><p>Espero que essas ferramentas – o truque do narrador e a visualização do seu futuro eu – ajudem você não apenas a pensar sobre a natureza da reputação. Espero que elas também ajudem você a dar passos concretos para melhorar sua reputação.</p><p>Construir uma reputação – fazer um nome para si mesmo – é o caminho mais seguro para um sucesso sustentável como desenvolvedor.</p><p>Sucesso pode significar muitas coisas para muitas pessoas, mas a maioria das pessoas – de várias culturas – concordaria: um grande aspecto do sucesso é colocar comida na mesa para você e sua família.</p><p>É disso que falaremos a seguir.</p><h2 id="cap-tulo-4-como-ser-pago-para-programar-clientes-freelance-e-a-busca-por-emprego">Capítulo 4: como ser pago para programar – clientes <em>freelance</em> e a busca por emprego</h2><p>Se você tem desenvolvido suas habilidades, sua rede de contatos e sua reputação, conseguir um emprego de desenvolvedor não é tão complicado assim.</p><p>Observe que eu disse que não é complicado – ainda é muito trabalho e pode ser cansativo.</p><p>Primeiro, deixe-me contar como consegui meu primeiro emprego.</p><h3 id="hora-da-hist-ria-como-um-professor-na-casa-dos-30-conseguiu-seu-primeiro-emprego-como-desenvolvedor">Hora da história: como um professor na casa dos 30 conseguiu seu primeiro emprego como desenvolvedor?</h3><p><em>Na última vez, na Hora da história: Quincy mergulhou de cabeça no circuito de hackathons, chegando a vencer alguns dos eventos. Ele estava construindo sua reputação como um desenvolvedor que era "perigoso" com JavaScript. Não super habilidoso. Apenas perigoso...</em></p><p>Eu tinha acabado de terminar um longo dia de aprendizado na biblioteca do centro de Santa Barbara, bebendo chá e construindo projetos.</p><p>A melhor coisa sobre viver na Califórnia é o clima. Costumávamos brincar que, ao alugar um apartamento exorbitantemente caro de um quarto nos subúrbios, você não estava pagando pelo interior – você estava pagando pelo exterior.</p><p>Foi uma linda noite de quarta-feira. Eu ainda tinha mais dois dias para me preparar para o <em>hackathon </em>daquele fim de semana. Meu cérebro estava completamente exausto do dia de programação. Minha esposa estava trabalhando até tarde, então verifiquei meu calendário para encontrar algo para fazer.</p><p>Na primeira segunda-feira de cada mês, eu mapeava todos os eventos de tecnologia que aconteceriam naquele mês no sul da Califórnia, para que eu sempre tivesse um evento de tecnologia para participar se tivesse energia.</p><p>Ah – esta noite é o encontro do Santa Barbara Ruby on Rails. Eu já tinha confirmado minha presença.</p><p>Eu não sabia muito sobre Ruby on Rails, mas tinha concluído alguns pequenos projetos com ele. Eu era muito mais um desenvolvedor JavaScript e Python.</p><p>Pensei: por que não? Eu precisava manter meu impulso de construir minha rede de contatos e o local era a apenas alguns quarteirões de distância.</p><p>Entrei e eram apenas alguns desenvolvedores sentados ao redor de uma mesa conversando. Rapidamente ficou claro que todos eles trabalhavam juntos em uma <em>startup </em>local, mantendo uma grande base de código em Ruby on Rails. A maioria deles trabalhava lá há vários anos.</p><p>Neste ponto, eu tinha passado o último ano construindo minhas habilidades, minha rede de contatos e minha reputação. Então, eu consegui me manter durante a conversa.</p><p>Eu também tinha uma noção dos limites das minhas habilidades. Então, permaneci modesto. Discreto. Do jeito que vi tantos outros desenvolvedores bem-sucedidos conduzirem uma conversa em eventos de tecnologia.</p><p>Ficou claro que um dos desenvolvedores na mesa era o Diretor de Engenharia. Ele reportava diretamente ao CTO.</p><p>Ficou claro também que eles estavam procurando contratar desenvolvedores de Ruby on Rails.</p><p>Fui franco sobre minha experiência e minhas habilidades. "Minha experiência é em educação de adultos. Ensinei inglês e administrei escolas. Comecei a aprender a programar há cerca de um ano."</p><p>O homem não se mostrou surpreso. "Bem, se você quiser vir para uma entrevista, podemos ver se você seria uma boa adição para a equipe."</p><p>Naquela noite, voltei para casa sentindo uma eletricidade. Era muito mais um temor do que uma empolgação.</p><p>Eu me sentia muito longe de estar pronto. Nem estava procurando um emprego. Eu estava apenas vivendo das minhas economias, aprendendo a programar em tempo integral, com seguro de saúde por meio do emprego da minha esposa.</p><p>Eu era um poupador compulsivo. As pessoas me criticavam por isso. Eu mesmo trocava o óleo do meu carro, cortava meu próprio cabelo e até cozinhava meu próprio arroz em casa quando pedíamos comida de fora – só para economizar alguns trocados.</p><p>Ao longo da década em que trabalhei como professor, consegui economizar quase um quarto dos meus rendimentos após impostos. Eu comprava jogos de videogame antigos no Craigslist e os revendia no eBay. Isso pode parecer bobo, mas era uma fonte substancial de renda para mim.</p><p>Para que estávamos poupando tudo isso? Não tínhamos certeza. Talvez para comprar uma casa na Califórnia em algum momento no futuro? Isso, porém, significava que eu não tinha que correr para conseguir um emprego. Eu sabia que estava em uma posição privilegiada e tentava aproveitar ao máximo aprendendo mais a cada dia.</p><p>Resumindo, eu não achava que estava pronto para meu primeiro emprego como desenvolvedor. Estava preocupado que, se me contratassem, seria um grande erro. Eles perceberiam a minha inexperiência, me despediriam e eu teria que explicar esse fracasso em futuras entrevistas de emprego.</p><p>Claro, agora eu sei que estava olhando para essa oportunidade do jeito errado, mas deixe-me terminar a história.</p><p>Quando agendei minha entrevista de emprego, eles pediram meu currículo. Eu não sabia o que fazer, então incluí toda a minha experiência profissional lá. Todas as escolas nas quais trabalhei ao longo dos anos (deixei de fora meu tempo administrando o <em>drive-thru</em> do Taco Bell).</p><p>Claro, nenhuma das minhas experiências de trabalho tinha qualquer relação com programação, mas o que eu deveria fazer? Entregar uma folha de papel em branco?</p><p>Bem, eu tinha um portfólio <em>on-line</em> dos projetos que construí. Mais importante ainda, eu tinha uma lista de todos os <em>hackathons</em> que venci ou nos quais me classifiquei. Então, incluí essas informações.</p><p>Passei as últimas horas antes da entrevista revisitando todos os tutoriais de Ruby on Rails que usei ao longo do último ano, para refrescar minha memória. Então vesti meu moletom com capuz, jeans e mochila, e fui até o escritório deles.</p><p>A gerente do escritório era uma senhora simpática que me levou até o espaço dos desenvolvedores e me apresentou à pequena equipe deles. Eram talvez uma dúzia, a maioria vestida com jeans e moletons com capuz, com idades que variavam dos 20 e poucos aos 40 e muitos anos. Dois deles eram mulheres.</p><p>Fui, um por um, navegando pela confusão de mesas e cabos, apertando as mãos de cada um e me apresentando. Foi aí que toda a minha experiência como professor de sala de aula memorizando nomes de alunos se mostrou útil. Consegui me lembrar de todos os nomes, para que mais tarde, quando fosse embora, pudesse falar novamente com cada um deles: "Foi ótimo te conhecer, [nome]. Eu ficaria empolgado em trabalhar ao seu lado."</p><p>Primeiro, encontrei-me com o diretor de engenharia. Fomos para uma pequena sala e fechamos a porta.</p><p>Um quadro branco na parede estava coberto de esboços de diagramas de Linguagem de Modelagem Unificada (UML). Um arco-íris de marcadores de apagamento a seco delineava as relações entre vários servidores e serviços.</p><p>Continuei olhando de relance para aquele quadro branco, temendo que ele me mandasse até lá para resolver alguns problemas de programação e demonstrar minhas habilidades. Talvez o famoso problema <em>fizzbuzz</em>? Talvez ele quisesse que eu invertesse uma árvore binária?</p><p>Eles eram uma empresa com cerca de 50 funcionários, com muito financiamento de capital de risco e milhares de clientes pagantes – principalmente pequenas empresas. Eles se orgulhavam de serem pragmáticos. Em nenhum momento perguntaram sobre o que eu estudei na escola, ou que tipo de trabalho eu fiz no passado. Tudo o que realmente importava era...</p><p>"Olha. Eu sei que você sabe programar," ele disse. "Você tem programado esse tempo todo, ganhando <em>hackathons</em>. Eu verifiquei alguns dos seus projetos de portfólio. A qualidade do código estava OK para alguém que é novo em programação. Então, para mim, a verdadeira questão é – você pode aprender como fazemos as coisas aqui? Você pode trabalhar com os outros desenvolvedores da equipe? Mais importante ainda: você consegue fazer o que precisa ser feito?"</p><p>Eu engoli em seco, inclinei-me para frente e reuni toda a confiança que pude. "Sim," eu disse. "Acredito que posso."</p><p>Ele disse: "Bom. Bom. OK. Vá esperar no restaurante Pho no andar de baixo. [O CTO] deve estar lá em um minuto."</p><p>Então, eu conversei com o CTO enquanto comia <em>noodles</em>. Eu principalmente ouvi. Eu aprendi que as pessoas projetam inteligência em pessoas quietas. Ouvir atentamente não apenas ajuda você a ficar mais inteligente – até faz você parecer mais inteligente.</p><p>A abordagem funcionou. A reunião durou cerca de uma hora. Os <em>noodles </em>estavam saborosos. Eu aprendi muito sobre a história da empresa e os objetivos de curto prazo. O CTO disse, "OK, volte lá em cima e fale com [o diretor de engenharia]."</p><p>Eu fui e ele me ofereceu um emprego.</p><p>Agora, eu quero enfatizar: não é assim que a maioria das pessoas consegue seu primeiro emprego de desenvolvedor.</p><p>Você provavelmente está pensando, "Puxa, esse é o Quincy, o Forest Gump, conseguindo um emprego de desenvolvedor que ele nem estava procurando. Se ao menos todos nós pudéssemos ser tão sortudos."</p><p>Certamente foi assim que eu me senti na época. Na próxima seção, vou explorar a relação entre empregadores e desenvolvedores. A maneira como consegui aquele emprego teve menos a ver com minhas habilidades como entrevistado e mais com o ano de programação, <em>networking</em> e construção de reputação que o precedeu.</p><p>Esse não era um emprego confortável em uma grande empresa de tecnologia, com toda a compensação, benefícios e pistas de boliche da empresa. Era um cargo de contratado, que pagava aproximadamente o mesmo que eu ganhava como professor.</p><p>Só que era um emprego de desenvolvedor. Uma empresa estava me pagando para escrever código.</p><p>Eu agora era um desenvolvedor profissional.</p><h3 id="o-que-os-empregadores-querem">O que os empregadores querem</h3><p>Vamos avançar uma década. Agora estive dos dois lados da mesa. Fui entrevistado por gerentes de contratação como desenvolvedor. Eu entrevistei desenvolvedores como gerente de contratação.</p><p>Passei muitas horas em chamadas com desenvolvedores que estão no meio da busca por emprego. Alguns deles aplicaram para centenas de empregos e receberam apenas alguns retornos para entrevistas.</p><p>Também passei muitas horas em chamadas com gerentes e recrutadores, tentando entender melhor como eles contratam e o que procuram.</p><p>Acho que grande parte da frustração dos desenvolvedores sobre o processo de contratação se resume a um mal-entendido.</p><p>Os empregadores valorizam uma coisa acima de tudo: previsibilidade.</p><p>Qual destes candidatos você acha que um empregador preferiria?</p><p><strong>X</strong> é uma estrela da programação que frequentemente tem lampejos de genialidade. X também tem surtos de produtividade incrível, mas frequentemente está irritado com os colegas e perde prazos ou reuniões.</p><p><strong>Y</strong> é um bom programador e tem uma produção mais lenta, mas mais consistente. Y se dá bem com os colegas e raramente perde reuniões ou prazos.</p><p><strong>Z</strong> é semelhante a Y em termos de produção e capaz de se dar bem com os colegas e cumprir prazos, mas mudou de emprego três vezes nos últimos três anos.</p><p>OK, você provavelmente pode adivinhar por tudo o que eu disse até agora que <strong>Y</strong> é o candidato preferido. Isso ocorre porque os empregadores valorizam a previsibilidade acima de tudo.</p><p><strong>X</strong> é um candidato armadilha que alguns gerentes de primeira viagem podem cometer o erro de contratar. Se você está curioso por que contratar X seria uma ideia tão ruim, leia <a href="https://www.freecodecamp.org/news/we-fired-our-top-talent-best-decision-we-ever-made-4c0a99728fde/"><em>We fired our top talent. Best decision we ever made</em></a> (texto em inglês).</p><p>Eu só adicionei <strong>Z</strong> a essa lista para acrescentar um ponto: tente não mudar de emprego com muita frequência.</p><p>Você pode aumentar sua renda rapidamente passando de um empregador para outro. Você pode começar a se candidatar a novos empregos no momento em que aceitar uma carta de oferta, mas isso afastará muitos gerentes de contratação.</p><p>Afinal, pedra que rola não cria limo. Você estará entrando e saindo de bases de código antes de ter tempo de entender como elas funcionam.</p><p>Considere isto: pode levar 6 meses ou mais para um gerente fazer com que um novo desenvolvedor fique a par das coisas, até o ponto em que ele possa ser um ponto positivo para a equipe.</p><p>Até esse ponto, a nova contratação é essencialmente um dreno nos recursos da empresa, absorvendo tempo e energia dos seus pares que precisam integrá-los, ajudá-los a encontrar o caminho em uma base de código e corrigir seus erros.</p><h3 id="a-maioria-dos-empregadores-avesso-ao-risco">A maioria dos empregadores é avesso ao risco</h3><p>Vamos dizer que um gerente contrata o desenvolvedor errado. Pense por um momento sobre como isso pode ser ruim para a equipe.</p><p>Em média, leva cerca de 3 meses para preencher uma posição de desenvolvedor em uma empresa. Os empregadores precisam primeiro:</p><ul><li>obter o orçamento para contratar um desenvolvedor aprovado por seus chefes</li><li>criar a descrição do trabalho</li><li>postar o trabalho em sites de emprego e se comunicar com recrutadores</li><li>vasculhar currículos – muitos dos quais serão de baixo esforço de candidatos que estão se inscrevendo cegamente para o maior número de empregos possível</li><li>iniciar o processo de entrevista, que pode envolver levar os candidatos para a cidade e hospedá-los em um hotel</li><li>rodadas de entrevistas envolvendo muitos membros da equipe. Para alguns empregadores, isso é uma questão de vários dias</li><li>selecionar um candidato final e negociar uma oferta... que muitos candidatos não aceitarão de qualquer maneira</li><li>assinar contratos e integrar o funcionário</li><li>dar a eles acesso a sistemas internos sensíveis</li><li>apresentá-los aos seus colegas de equipe e garantir que todos se deem bem</li><li>meses de treinamento informal, quando o funcionário precisa entender um serviço ou uma parte de uma base de código legado</li><li>e finalmente, imergi-los na forma da equipe de fazer as coisas</li></ul><p>Agora imagine que, depois de todo esse esforço, o novo funcionário diz: "Ei, acabei de receber uma oferta melhor de outra empresa. Fui, valeu!"</p><p>Ou imagine que o funcionário é pouco confiável, frequentemente chegando horas depois do início da jornada de trabalho.</p><p>Ou imagine que o funcionário luta com problemas não tratados como dependência em drogas, álcool ou jogos, questões de raiva – ou simplesmente se revela uma pessoa passivo-agressiva que mina a equipe.</p><p>Agora você precisa recomeçar todo esse processo novamente e procurar um novo candidato para a posição.</p><p>Contratar é difícil.</p><p>Você pode ver por que os empregadores são avessos ao risco. Muitos deles passam por cima de candidatos aparentemente qualificados até encontrar alguém com quem se sentem 99% seguros.</p><h3 id="como-os-empregadores-s-o-t-o-avessos-ao-risco-os-candidatos-a-um-emprego-sofrem">Como os empregadores são tão avessos ao risco, os candidatos a um emprego sofrem</h3><p>Se você acha que contratar é difícil, espere até ouvir sobre o processo de candidatura a emprego. Você pode já estar mais do que familiarizado com ele, mas aqui vai...</p><ul><li>Você tem que preparar seu currículo ou CV. Ao longo do caminho, você tomará decisões que constantemente questionará durante sua busca de emprego.</li><li>Você tem que procurar vagas de emprego <em>on-line</em>, pesquisar os empregadores e avaliar se eles têm probabilidade de serem um bom encaixe para você.</li><li>A maioria das vagas levará a formulários na web onde você terá que reescrever seu currículo repetidas vezes, esperando que o formulário não trave devido a erros de servidor ou erros de validação de JavaScript.</li><li>Depois de enviar essas candidaturas, você tem que esperar enquanto os empregadores as processam. Alguns empregadores recebem tantas candidaturas que não conseguem revisá-las todas manualmente (a Google sozinha recebe 9 mil candidaturas por dia). Os empregadores usarão software para filtrar as candidaturas. Recrutadores internos <a href="https://www.freecodecamp.org/news/you-in-6-seconds-how-to-write-a-resume-that-employers-will-actually-read-fd7757740802/">gastam em média 6 segundos olhando cada currículo</a> (texto em inglês). Muitas vezes, sua candidatura nunca será sequer revisada por um humano.</li><li>Provavelmente, você nunca ouvirá nada de volta da empresa. Eles têm pouco incentivo para dizer por que rejeitaram você (eles não querem que você entre com um processo por discriminação). Se você tiver sorte, receberá um daqueles e-mails "Optamos por seguir com outros candidatos".</li><li>E todo o tempo que você gasta se candidatando a essas vagas – potencialmente horas por semana – é mentalmente exaustivo e, claro, não remunerado.</li></ul><p>Uau. Agora, você pode ver como o processo de contratação é um pesadelo para os empregadores e especialmente para os candidatos a emprego.</p><p>Se você persistir, porém poderá receber ofertas. Quando chove, vira uma tempestade.</p><p>Aqui está um dado da busca de emprego de um colaborador do freeCodeCamp ao longo de 12 semanas:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/85L921BMzXxKhVySPo9gxWamr5J4QLFJaVEn.png" class="kg-image" alt="85L921BMzXxKhVySPo9gxWamr5J4QLFJaVEn" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/85L921BMzXxKhVySPo9gxWamr5J4QLFJaVEn.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/85L921BMzXxKhVySPo9gxWamr5J4QLFJaVEn.png 800w" sizes="(min-width: 720px) 720px" width="800" height="381" loading="lazy"><figcaption><em>De 291 candidaturas, ele acabou recebendo 8 ofertas.</em></figcaption></figure><p>À medida que as ofertas chegavam, o salário inicial ficava cada vez maior. Note, é claro, que isso é para um emprego em San Francisco, uma das cidades mais caras do mundo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/bDp3eVv6VQS3Og3ulVpwp6dDylIybdpRczsD.png" class="kg-image" alt="bDp3eVv6VQS3Og3ulVpwp6dDylIybdpRczsD" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/bDp3eVv6VQS3Og3ulVpwp6dDylIybdpRczsD.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/bDp3eVv6VQS3Og3ulVpwp6dDylIybdpRczsD.png 800w" sizes="(min-width: 720px) 720px" width="800" height="574" loading="lazy"><figcaption><em>Na 12ª semana, suas ofertas de salário inicial eram quase o dobro do que eram na 2ª semana.</em></figcaption></figure><p>O número de vezes que esse desenvolvedor conseguiu entrevistas é bastante grande. Sua capacidade de negociação também era forte. Você pode <a href="https://www.freecodecamp.org/news/5-key-learnings-from-the-post-bootcamp-job-search-9a07468d2331/">ler mais sobre o processo dele se estiver curioso</a> (texto em inglês).</p><p>Como eu disse antes, porém, é muito mais fácil entrar em uma empresa pela porta lateral.</p><p>Essa é uma das razões pelas quais escrevi este livro. Eu não quero que você continue se alinhando na porta da frente desses empregadores.</p><h3 id="se-voc-desenvolver-suas-habilidades-sua-rede-e-sua-reputa-o-pode-ignorar-grande-parte-do-processo-de-candidatura-a-empregos-">Se você desenvolver suas habilidades, sua rede e sua reputação, pode ignorar grande parte do processo de candidatura a empregos.</h3><p>Ao longo deste livro, tenho ensinado técnicas para aumentar sua probabilidade de "dar sorte" e conseguir uma oferta de emprego.</p><blockquote>"Sorte é quando a preparação encontra a oportunidade. Se você não estivesse preparado quando a oportunidade surgisse, você não teria tido 'sorte'." – Oprah Winfrey</blockquote><p>É por isso que ao longo deste livro tenho incentivado você a desenvolver essas três áreas ao mesmo tempo e a começar a pensar nelas desde o primeiro dia – bem antes da sua busca de emprego.</p><p>Minha história de nem mesmo procurar um emprego e conseguir um trabalho pode parecer boba, mas isso acontece mais frequentemente do que você imagina.</p><p>A realidade é: aprender a programar é difícil.</p><p>Saber programar, porém, é importante.</p><p>Em cada setor – em praticamente todas as empresas do mundo – os gerentes estão tentando descobrir maneiras de levar seus processos para a camada de <em>software</em>.</p><p>Isso significa desenvolvedores.</p><p>Você pode ouvir sobre grandes demissões no setor de tecnologia de vez em quando. Muitas dessas demissões afetam funcionários que não são desenvolvedores. Muitas vezes, contudo, muitos desenvolvedores perdem seus empregos.</p><p>Por que as empresas demitiriam desenvolvedores, depois de gastar tanto tempo e dinheiro recrutando e treinando-os? Fora uma situação de falência, eu não sei a resposta para essa pergunta. Não tenho certeza se alguém sabe.</p><p>Há evidências crescentes de que as demissões destroem valor a longo prazo dentro de uma empresa. Na prática, porém, muitos CEOs sentem pressão de seus investidores para fazer demissões. Quando várias empresas fazem demissões ao mesmo tempo, outros CEOs podem seguir o exemplo.</p><p>Ainda assim, mesmo com as demissões, a maioria dos economistas espera que o número de empregos para desenvolvedores e outros empregos relacionados a software continue crescendo. Por exemplo, o Departamento de Estatísticas do Trabalho dos EUA prevê um aumento de 15% no número de desenvolvedores na próxima década.</p><p>Minha esperança é que, com habilidades fortes, uma rede forte e uma reputação forte, você consiga um bom emprego, apesar de um mercado de trabalho desafiador.</p><p>Espero que um dia seja mais fácil para empregadores e funcionários qualificados se encontrarem – sem o longo e brutal processo de aplicação e entrevista de emprego.</p><h3 id="o-que-esperar-do-processo-de-entrevista-de-emprego-para-desenvolvedores">O que esperar do processo de entrevista de emprego para desenvolvedores</h3><p>Uma vez que você comece a marcar entrevistas de emprego, você terá um gostinho do temido processo de entrevista de emprego para desenvolvedores e da famigerada entrevista de programação.</p><p>Um fluxo de entrevista típico pode envolver:</p><ol><li>Fazer uma avaliação de programação <em>on-line</em> de suas habilidades ou uma "triagem por telefone".</li><li>Se você passar, uma segunda entrevista técnica por telefone ou videochamada.</li><li>Se você passar, uma entrevista "presencial", onde você viaja para o escritório da empresa. Essas geralmente envolvem várias entrevistas com RH, gerentes de contratação e desenvolvedores de linha de frente com os quais você pode trabalhar.</li></ol><p>Ao longo do caminho, você enfrentará perguntas que testam seu conhecimento de resolução de problemas, algoritmos e estruturas de dados, depuração e outras habilidades.</p><p>Seus entrevistadores podem permitir que você resolva esses problemas de programação em um computador em um editor de código. Muitas vezes, no entanto, você terá que resolvê-los à mão enquanto está em um quadro branco.</p><p>A coisa principal a lembrar é que a pessoa que está entrevistando você não está apenas procurando uma resposta correta. Eles também estão tentando entender como você pensa.</p><p>Eles querem saber se você entende os fundamentos da programação e da ciência da computação ou se você está apenas regurgitando uma série de soluções que memorizou?</p><p>Praticar algoritmos e estruturas de dados ajudará muito, mas você também precisa ser capaz de pensar em voz alta e explicar seu processo de pensamento enquanto escreve suas soluções.</p><p>A melhor maneira de praticar isso é falar em voz alta consigo mesmo enquanto programa. Ou – se você estiver se sentindo corajoso – transmitir ao vivo sua programação.</p><p>Existem muitos streams de "programação ao vivo" no Twitch, onde as pessoas "aprendem em público" construindo projetos na frente de uma plateia. Como bônus, se você estiver disposto a se expor dessa forma, isso também ajudará a construir sua reputação como desenvolvedor.</p><p>Outra coisa a lembrar durante as entrevistas em quadro branco: seu entrevistador. Eles não estão apenas sentados esperando você terminar. Eles estão com você o tempo todo, observando e avaliando você tanto consciente quanto inconscientemente.</p><p>Tente tornar o processo de entrevista o mais interativo possível para seu entrevistador. Sorria e faça contato visual ocasionalmente. Tente julgar a linguagem corporal deles. Estão relaxados? Estão acenando com a cabeça enquanto você explica os pontos?</p><p>Seu entrevistador provavelmente sabe o que está procurando no seu código. Então, veja se você consegue arrancar algumas dicas deles. Fazendo observações ou fazendo perguntas abertas em voz alta para si mesmo, você pode conseguir que seu entrevistador entre na conversa e se envolva no processo.</p><p>Você quer que seu entrevistador goste de você. Você quer que eles torçam por você, para que possam desconsiderar algumas das deficiências nas suas habilidades de programação ou ignorar alguns dos erros que você possa cometer em seu código.</p><p>Você está se vendendo como candidato a emprego. Certifique-se de que seu entrevistador sinta que está fazendo um bom negócio.</p><p>Isso também vale para qualquer entrevista comportamental que você possa ter que passar. Essas entrevistas são menos sobre sua habilidade em programação e mais sobre seu "encaixe cultural" (eu gostaria de poder dizer o que isso significa, mas cada gerente definirá isso de uma maneira ligeiramente diferente).</p><p>Nessas entrevistas comportamentais, você terá que convencer seu entrevistador de que possui fortes habilidades de comunicação.</p><p>Definitivamente ajuda ser fluente no idioma em que você está sendo entrevistado e conhecer o jargão certo. Você pode absorver muito disso ouvindo regularmente podcasts de tecnologia, como <a href="https://freecodecamp.libsyn.com/">o Podcast do freeCodeCamp</a> (em inglês).</p><p>Uma coisa importante que seus entrevistadores estão tentando descobrir: você é uma pessoa calma que trabalhará bem com os outros? A melhor maneira de mostrar isso é ser educado e evitar usar palavrões ou se desviar muito do assunto em questão.</p><p>Você não quer entrar em um debate sobre algo não relacionado, como uma rivalidade esportiva. Também recomendo não tentar corrigir seus entrevistadores, mesmo que eles digam coisas que você acredita serem bobas ou falsas.</p><p>Se você sentir vibrações ruins da empresa, você não precisa aceitar a oferta de emprego deles. Empregadores recusam candidatos o tempo todo. Você, como candidato, também tem o direito de recusar um empregador. A entrevista em si provavelmente não é o melhor momento para conflito.</p><h3 id="devo-negociar-meu-sal-rio-no-meu-primeiro-emprego-como-desenvolvedor">Devo negociar meu salário no meu primeiro emprego como desenvolvedor?</h3><p>Tentar negociar seu salário para cima geralmente não atrapalha, desde que você o faça educadamente.</p><p>Eu escrevi muito sobre <a href="https://www.freecodecamp.org/news/salary-negotiation-215a4c096199/">como negociar sua oferta salário de emprego como desenvolvedor</a> (texto em inglês).</p><p>Essencialmente, negociar um salário inicial mais alto se resume a quanto poder de barganha você tem.</p><p>Seu empregador tem trabalho a ser feito. Qual é o nível de desespero de seu empregador de que você trabalhe para eles? Que outras opções eles têm?</p><p>Você precisa de renda para sobreviver. Quais outras opções você tem? Qual é seu plano B?</p><p>Se você tiver uma oferta de emprego de outro empregador oferecendo para pagar a você uma certa quantia, pode usar isso como poder de barganha na sua negociação salarial.</p><p>Pense novamente no processo de contratação que descrevi anteriormente. Os empregadores têm que passar por pelo menos uma dúzia de etapas antes de chegarem à etapa de oferta de emprego com os candidatos. Eles provavelmente já estão planejando que você negocie – e não ficarão surpresos com isso.</p><p>Se você estiver em uma situação como a minha, porém, onde uma empresa simplesmente oferece um emprego do nada, você pode se sentir estranho tentando negociar.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/92508.jpeg" class="kg-image" alt="92508" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/92508.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/92508.jpeg 640w" width="640" height="480" loading="lazy"><figcaption><em>Smithers dos Simpsons - o que há de errado nesse país? Não é possível sair para caminhar na rua sem que nos ofereçam um emprego?</em></figcaption></figure><p>Vou admitir – na minha história acima, quando meu gerente me ofereceu o emprego, eu não negociei.</p><p>Olhando para trás, eu deveria ter negociado minha compensação? Provavelmente, sim.</p><p>Eu tinha alguma vantagem? Provavelmente, não muita. Meu plano B era simplesmente continuar competindo em <em>hackathons</em> e continuar tomando chá e programando na biblioteca pública.</p><p>Eu poderia ter conseguido negociar e ganhar alguns dólares a mais por hora, mas, no momento em que me ofereceram o emprego, a compensação era a última coisa em minha mente. Eu estava apenas extasiado por estar prestes a me tornar um desenvolvedor profissional.</p><p>A propósito, uma vez que você tenha trabalhado como desenvolvedor em uma empresa por cerca de um ano, você pode querer pedir um aumento. Eu escrevi longamente sobre <a href="https://www.freecodecamp.org/news/youre-underpaid-here-s-how-you-can-get-the-pay-raise-you-deserve-fafcf52956d6/">como pedir um aumento como desenvolvedor</a> (texto em inglês), mas tudo se resume à mesma coisa: ter a vantagem.</p><h3 id="voc-deve-usar-um-recrutador-para-sua-busca-por-emprego-como-desenvolvedor">Você deve usar um recrutador para sua busca por emprego como desenvolvedor?</h3><p>Sim. Se você puder encontrar um recrutador que o ajude a conseguir seu primeiro emprego como desenvolvedor, acho que você deve fazer isso.</p><p>Eu escrevi longamente sobre <a href="https://www.freecodecamp.org/news/the-tech-recruiter-red-pill-967dd492560c/">por que os recrutadores são uma ferramenta subestimada em sua caixa de ferramentas</a> (texto em inglês).</p><p>Muitos empregadores pagarão uma taxa de busca aos recrutadores por enviar candidatos a empregos de alta qualidade.</p><p>Os incentivos dos recrutadores estão bem alinhados com seus próprios objetivos como candidato a emprego:</p><ol><li>Visto que são pagos com base em seu salário inicial, eles estão inclinados a ajudá-lo a negociar o salário inicial mais alto possível.</li><li>Quanto mais candidatos que eles recrutarem forem contratados— e quanto mais rápido eles forem contratados — mais dinheiro os recrutadores ganham. Então, eles vão querer ajudá-lo a conseguir um emprego o mais rápido possível para que possam passar para outros candidatos a emprego.</li><li>Visto que são pagos apenas se você for bem-sucedido como funcionário (e permanecer pelo menos 90 dias), eles tentarão garantir que você seja competente e um bom ajuste para a cultura da empresa.</li></ol><p>Dito isso, se um recrutador pedir dinheiro para qualquer coisa, isso é um sinal de alerta.</p><p>Nem todos os recrutadores são iguais. Faça sua pesquisa antes de trabalhar com um recrutador, mesmo que eles estejam recebendo pagamento do empregador, você ainda está investindo seu tempo em ajudá-los a ter um emprego. Seu tempo é valioso.</p><p>Falando em tempo, uma maneira de começar a ser pago para programar mais cedo — mesmo enquanto você se prepara para a busca de emprego — é conseguir alguns clientes <em>freelance</em>.</p><h3 id="como-conseguir-clientes-freelance">Como conseguir clientes <em>freelance</em></h3><p>Eu encorajo novos desenvolvedores a tentar conseguir alguns clientes <em>freelance</em> antes de começarem a busca de emprego. Existem três boas razões para isso:</p><ol><li>É muito mais fácil conseguir um cliente <em>freelance</em> do que um emprego em tempo integral.</li><li>O trabalho <em>freelance</em> é menos arriscado, pois você pode fazê-lo sem deixar seu emprego atual.</li><li>Você pode começar a ser pago para programar mais cedo e começar a construir seu portfólio de trabalho profissional mais cedo.</li></ol><p>Conseguir clientes <em>freelance</em> pode ser muito mais fácil do que conseguir um emprego de desenvolvedor. Por quê?</p><p>Pense em pequenas empresas locais. Pode ser apenas uma família que administra um restaurante ou uma loja do bairro, uma empresa de encanamento ou um escritório de advocacia.</p><p>Quantas dessas empresas poderiam se beneficiar de ter um site interativo, sistemas de gerenciamento de escritórios e ferramentas para automatizar seus fluxos de trabalho comuns? A maioria delas.</p><p>Agora, quantas dessas empresas podem se dar ao luxo de ter um desenvolvedor de <em>software </em>em tempo integral para construir e manter esses sistemas? Não tantas.</p><p>É aí que entram os <em>freelancers</em>. Eles podem fazer o trabalho de maneira mais econômica, caso a caso. Uma pequena empresa pode contratar um <em>freelancer</em> para um único projeto ou por um período mais curto.</p><p>Se você estiver ativamente construindo sua rede, algumas das pessoas que você conhece podem se tornar seus clientes.</p><p>Por exemplo, você pode conhecer um contador local que quer atualizar seu site. Talvez ele queira adicionar a capacidade de agendar uma consulta ou aceitar um pagamento com cartão de crédito por uma conta. Esses são recursos comuns que pequenas empresas podem solicitar – e você pode ficar muito bom em implementá-los.</p><p>Você também pode conhecer os gerentes de pequenas empresas que precisam de um sistema ERP, um sistema CRM, um sistema de inventário ou uma das inúmeras outras ferramentas.</p><p>Em muitos casos, há uma ferramenta de código aberto que você pode implantar e configurar para eles. Então, você pode apenas ensiná-los como usar esse sistema. E você pode cobrar uma taxa de serviço mensal para estar "de plantão" e pronto para resolver problemas que possam surgir.</p><h3 id="devo-usar-um-contrato-para-trabalho-freelance">Devo usar um contrato para trabalho <em>freelance</em>?</h3><p>Você vai querer encontrar um modelo de contrato padrão, personalizá-lo e obter a aprovação de um advogado.</p><p>Pode parecer estranho fazer a padaria local assinar um contrato com você apenas para ajudar a atualizar seu site ou presença nas redes sociais, mas fazer isso tornará toda a transação mais profissional do que um mero aperto de mão.</p><p>É improvável que uma pequena empresa o leve ao tribunal por alguns milhares de dólares, mas, no caso de isso acontecer, você ficará feliz em ter assinado um contrato.</p><h3 id="quanto-eu-devo-cobrar-pelo-trabalho-como-freelance">Quanto eu devo cobrar pelo trabalho como freelance?</h3><p>Eu duplicaria o valor que você ganha no seu trabalho diurno, calcularia sua taxa horária e dobraria. Isso pode parecer muito dinheiro, mas o trabalho <em>freelance </em>é muito mais difícil do que o trabalho regular. Você tem que aprender muito.</p><p>Alternativamente, você pode cobrar por projeto. "Vou implantar e configurar este sistema para você por mil reais."</p><p>Apenas tenha certeza de especificar um prazo em que você está disposto a manter o projeto. Você não quer que as pessoas liguem para você 3 anos depois, esperando que você volte e conserte um sistema que ninguém manteve.</p><h3 id="como-fa-o-para-garantir-que-clientes-freelance-me-paguem">Como faço para garantir que clientes <em>freelance</em> me paguem?</h3><p>Muitos outros <em>freelancers</em> – inclusive eu – usam esta abordagem simples: peça metade da sua compensação adiantada, antes de começar o trabalho. Quando você puder demonstrar que está na metade do caminho, peça a outra metade.</p><p>Sempre tente receber todo o dinheiro antes de realmente terminar o projeto. Desse modo, o cliente não poderá usar o dinheiro como alavanca para tentar obter trabalho extra de você.</p><p>Se você já recebeu o pagamento total, o trabalho que você fizer para ajudar seu cliente depois disso transmitirá: "Estou indo além do esperado para auxiliar você".</p><p>É uma <em>vibe</em> totalmente diferente de: "Xiiii – será que você vai mesmo me pagar por todo esse trabalho que estou fazendo?"</p><h3 id="devo-usar-um-website-de-freelance-como-upwork-ou-fiverr">Devo usar um website de freelance como Upwork ou Fiverr?</h3><p>Se você está em uma área rural do mundo e não consegue encontrar nenhum cliente localmente, pode tentar alguns desses sites de <em>freelance</em>. Do contrário, eu não me concentraria neles. Aqui está o porquê:</p><p>Quando você tenta conseguir contratos em um site de <em>freelance</em>, você está competindo com todos os <em>freelancers</em> do mundo inteiro. Muitos deles vivem em cidades com um custo de vida muito mais baixo que o seu. Alguns deles nem se importam tanto com suas reputações como você – e podem estar dispostos a entregar um trabalho abaixo do padrão.</p><p>Até certo ponto, esses sites promovem um fenômeno de "corrida até o fundo", onde a pessoa que se oferece para fazer o trabalho mais barato geralmente consegue o trabalho.</p><p>Se você em vez disso se concentrar em encontrar clientes através da sua própria rede local, não terá que competir com esses <em>freelancers </em>do exterior.</p><p>O mesmo vale para pessoas que estão procurando ajuda de desenvolvedores <em>freelance</em>. Se você um dia quiser contratar um <em>freelancer</em>, recomendo fortemente trabalhar com alguém que você possa encontrar pessoalmente, que tenha laços com a sua comunidade.</p><p>Alguém que vive na sua cidade há vários anos e frequenta muitos dos mesmos eventos sociais que você terá muito menos chances de tentar se aproveitar de você. Se tanto você quanto ele se importarem com sua reputação, os dois estarão investidos em que essa parceria funcione.</p><p>Vocês podem ser uma história de sucesso nos portfólios um do outro.</p><h3 id="fazer-freelance-como-dirigir-uma-empresa-de-uma-pessoa-s-o-que-representa-muito-trabalho-oculto"><em>Fazer freelance</em> é como dirigir uma empresa de uma pessoa só, o que representa muito trabalho oculto</h3><p>Não subestime a quantidade de "trabalho oculto" envolvida em conduzir sua prática de desenvolvimento <em>freelance</em>.</p><p>Para começar, você pode querer criar sua própria entidade legal.</p><p>Nos EUA, a abordagem mais comum é criar uma Sociedade de Responsabilidade Limitada (LLC) e conduzir negócios como essa companhia – mesmo se você for a única pessoa trabalhando lá.</p><p>Isso pode simplificar seus impostos. No caso de cometer um erro e ser processado por um cliente, sua entidade legal pode ajudar a isolá-lo de responsabilidade pessoal, de modo que é sua LLC que vai à falência – não você, pessoalmente.</p><p>Você também pode considerar obter um seguro de responsabilidade para se proteger ainda mais contra isso.</p><p>Lembre-se de que, quando você está trabalhando como <em>freelancer</em>, normalmente, terá que pagar impostos no final do ano, então certifique-se de guardar dinheiro para isso.</p><p>Para criar sua LLC, você pode certamente encontrar documentos padrão <em>on-line</em> e registrá-los você mesmo. Se você realmente deseja trabalhar como <em>freelancer</em>, recomendo conversar com um advogado de pequenas empresas e/ou contador para se certificar de que tudo está configurado corretamente.</p><h3 id="quando-devo-parar-de-ser-freelancer-e-come-ar-a-procurar-um-emprego">Quando devo parar de ser <em>freelancer</em> e começar a procurar um emprego?</h3><p>Se você consegue pagar suas contas como <em>freelancer</em>, você pode apenas querer continuar fazendo isso. Com o tempo, você pode até ser capaz de construir sua própria agência de desenvolvimento de <em>software </em>e contratar outros desenvolvedores para ajudá-lo.</p><p>Dito isso, se você está ansiando pela estabilidade de um emprego de desenvolvedor, você pode ter sorte. Clientes <em>freelance </em>podem se transformar em empregos de tempo integral se você ficar com eles por tempo suficiente. Em algum momento, pode fazer sentido econômico para um cliente simplesmente oferecer a você um emprego de tempo integral a uma taxa horária mais baixa. Você ganha a estabilidade de uma semana de trabalho de 40 horas, e eles obtêm suas habilidades em tempo integral.</p><p>Você também pode ser capaz de manter alguns clientes <em>freelance </em>quando conseguir um emprego. Isso pode ser um bom complemento para sua renda. Tenha em mente, porém, que, como aprenderemos no próximo capítulo, seu primeiro emprego de desenvolvedor pode ser uma responsabilidade que consome quase todo o seu tempo – pelo menos, no início.</p><p>Esse primeiro ano de trabalho como desenvolvedor profissional será muito louco? Bem, vamos falar sobre isso.</p><h2 id="cap-tulo-5-como-ter-sucesso-no-seu-primeiro-emprego-de-desenvolvedor">Capítulo 5: como ter sucesso no seu primeiro emprego de desenvolvedor</h2><blockquote>"Um navio no porto está seguro, mas não é para isso que os navios são construídos." – Grace Hopper, Matemática, Contralmirante da Marinha dos EUA e Pioneira da Ciência da Computação</blockquote><p>Quando conseguir seu primeiro emprego de desenvolvedor, o verdadeiro aprendizado vai começar.</p><p>Você aprenderá a trabalhar de maneira produtiva ao lado de outros desenvolvedores.</p><p>Você aprenderá Sistemas de Controle de Versão, ferramentas de Integração Contínua e Entrega Contínua (CI/CD), ferramentas de gestão de projetos e mais.</p><p>Você aprenderá como trabalhar sob a supervisão de um gerente de engenharia, como entregar antes do prazo e como lidar com uma grande dose de ambiguidades no trabalho.</p><p>Mais importante, você aprenderá como gerenciar a si mesmo.</p><p>Você aprenderá como superar barreiras psicológicas que afetam todos nós, como a síndrome do impostor. Você aprenderá seus limites e como ir um pouco além deles.</p><h3 id="hora-da-hist-ria-como-um-professor-na-casa-dos-30-anos-conseguiu-sucesso-em-seu-primeiro-emprego-como-desenvolvedor">Hora da história: como um professor na casa dos 30 anos conseguiu sucesso em seu primeiro emprego como desenvolvedor?</h3><p><em>Da última vez, na Hora da história: Quincy conseguiu seu primeiro emprego como desenvolvedor em uma startup de tecnologia local. Ele trabalharia como um dos doze desenvolvedores mantendo uma base de código grande e sofisticada. Ele não fazia ideia do que estava fazendo...</em></p><p>Acordei às 4 da manhã e não conseguia voltar a dormir. Tentei, mas tinha essa queimação no peito. Essa ansiedade. Pânico.</p><p>Eu tinha trabalhado por uma década na educação. Primeiro como tutor. Depois como professor. Mais tarde, como diretor de escola.</p><p>Em algumas horas, eu estaria começando do zero, trabalhando como desenvolvedor.</p><p>Será que alguma das minhas aprendizagens anteriores – sucessos anteriores – sequer importariam nessa nova carreira?</p><p>Fiz o que sempre faço quando sinto ansiedade – fui correr. Desci os morros correndo, com minha lanterna balançando na escuridão. Quando cheguei à praia, corri ao lado do oceano enquanto o sol subia por cima das copas das árvores.</p><p>Quando cheguei em casa, minha esposa já estava saindo para o trabalho. Ela me disse para não me preocupar. Ela disse, "Eu ainda vou te amar mesmo se você for demitido por não saber o que está fazendo."</p><p>Quando cheguei ao meu novo escritório, ninguém estava lá. Como professor, eu estava acostumado a chegar à escola pontualmente às 7:30. Rapidamente percebi que a maioria dos desenvolvedores de <em>software</em> não começam a trabalhar tão cedo.</p><p>Então, sentei de pernas cruzadas no corredor de entrada, programando junto com tutoriais no meu <em>netbook</em>.</p><p>Uma funcionária veio até mim com uma expressão nervosa no rosto. Ela provavelmente pensou que eu era um invasor, mas eu a tranquilizei dizendo que realmente trabalhava na empresa dela e a convenci a me deixar entrar.</p><p>Foi surreal caminhar pelo escritório vazio em direção ao setor dos desenvolvedores, com apenas a luz da placa de saída para guiar meu caminho.</p><p>Montei meu <em>netbook </em>em uma mesa alta vazia e terminei meu tutorial de programação.</p><p>Pouco depois, as luzes começaram a piscar ao meu redor. Meu chefe havia chegado. No início, ele não reconheceu minha presença. Ele apenas sentou em sua mesa e começou a digitar freneticamente em seu teclado mecânico.</p><p>"Larson," ele finalmente disse. "Você está pronto para seu grande primeiro dia?"</p><p>Eu não estava, mas queria sinalizar confiança. Então, disse as palavras que foram ditas pela primeira vez em "Aventureiros do Bairro Proibido", um dos meus filmes favoritos dos anos 80: "Eu nasci pronto."</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/big-trubs-born-ready.jpeg" class="kg-image" alt="big-trubs-born-ready" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/big-trubs-born-ready.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/big-trubs-born-ready.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/big-trubs-born-ready.jpeg 1279w" sizes="(min-width: 720px) 720px" width="1279" height="545" loading="lazy"><figcaption><em>Você provavelmente já ouviu "Eu nasci pronto" um milhão de vezes. A frase foi dita pela primeira vez em 1986, por Jack Burton ao seu amigo Wang Chi, quando eles estavam se preparando para confrontar um mago de mil anos em seu armazém mortal. Não acredito que meus pais me deixaram assistir isso naquela época, mas estou feliz que deixaram.</em></figcaption></figure><p>"Ótimo," meu chefe disse. "Vamos conseguir uma máquina para você."</p><p>"Ah, eu já tenho uma," eu disse, batendo no meu <em>netbook</em> de $200. "Este bebê está rodando Linux Mint – e eu já customizei meu arquivo .emacs para poder..."</p><p>"Somos uma loja de Macs," ele disse caminhando até um armário de armazenamento. Ele remexeu por um momento e disse: "Aqui. É um modelo de 3 anos, mas deve servir. Nós o limpamos para os padrões de fábrica."</p><p>Eu comecei a dizer que já estava familiarizado com minha configuração e que poderia trabalhar muito mais rápido com ela, mas ele não quis saber.</p><p>"Todos estamos usando as mesmas ferramentas. Isso torna a colaboração muito mais fácil. Convenção primeiro, configuração depois, você sabe."</p><p>Foi a primeira vez que ouvi a frase "convenção primeiro, configuração depois", mas ela apareceria muito nos dias seguintes.</p><p>Passei as próximas horas configurando meu novo computador de trabalho enquanto outros desenvolvedores chegavam.</p><p>Era quase 10 da manhã quando começamos nossa reunião de equipe. Todos nós ficamos em um círculo perto do quadro branco. Nós nos revezamos relatando no que estávamos trabalhando naquele dia.</p><p>Todos deram atualizações rápidas e precisas de status.</p><p>Quando chegou minha vez, comecei a me apresentar. Já estava ansioso o suficiente, quando entrou ninguém menos que Mike, aquele cara ultramaratonista que organizava os eventos do Santa Barbara Startup. Ele estava mastigando algumas cenouras baby, tendo já corrido cerca de 30 milhas naquela manhã.</p><p>Depois que terminei, Mike falou, dando-me as boas-vindas e dizendo que me tinha visto em alguns de seus eventos. Ele então deu uma atualização de status de 15 segundos sobre algum recurso no qual estava trabalhando.</p><p>A reunião inteira levou apenas cerca de 10 minutos e todos se dispersaram de volta para suas mesas.</p><p>Eu eventualmente consegui fazer a base de código da empresa rodar no meu novo laptop. Era uma aplicação em Ruby on Rails que havia crescido ao longo de 5 anos. Executei o comando <code>rake stats</code> e vi que eram milhões de linhas de código. Eu estremeci. Como eu poderia compreender tudo aquilo?</p><p>Meu vizinho, um desenvolvedor rude e barbudo, disse, "Ah, a maior parte disso são apenas pacotes. A base de código real com a qual você vai trabalhar tem apenas, talvez, umas 100 mil linhas. Não se preocupe. Você vai pegar o jeito."</p><p>"Meu nome é Nick, aliás," ele disse, se apresentando. "Se você precisar de ajuda é só me avisar. Eu estou mexendo nessa base de código há alguns anos, então devo ser capaz de te ajudar."</p><p>Nos dias seguintes, bombardeei o Nick com perguntas sobre todos os sistemas internos que encontrei.</p><p>Eventualmente, Nick começou a definir seu status no chat como "modo de programação" e a colocar seus fones de ouvido com cancelamento de ruído. Ele girou as costas um pouco em minha direção, com a linguagem corporal de: "me deixe em paz para que eu possa fazer meu próprio trabalho também".</p><p>Esta foi uma das minhas primeiras lições sobre dinâmica de equipe. Você não quer esgotar sua boa vontade fazendo muitas perguntas. Você precisa melhorar em aprender as coisas por conta própria.</p><p>Essa, porém, era uma base de código enorme e estava amplamente sem documentação, exceto por comentários em linha e uma wiki da equipe bem vaga.</p><p>Como era uma base de código de código fechado, na qual apenas os desenvolvedores ao meu redor estavam trabalhando, eu não podia usar o Stack Overflow para descobrir onde a lógica específica estava localizada. Eu só tinha que tatear no escuro.</p><p>Comecei a rodar entre qual vizinho eu incomodaria com uma pergunta específica, mas parecia que eu estava rapidamente esgotando qualquer entusiasmo que eles poderiam ter por mim como colega de equipe.</p><p>Eu corrigi demais. Eu fiquei tímido até mesmo para fazer perguntas simples. Criei uma regra para mim mesmo de que eu tentaria por 2 horas antes de pedir ajuda.</p><p>Em algum momento, depois de lutar por várias horas, eu pedi ajuda. Quando meu gerente descobriu que eu estava preso a manhã inteira, ele perguntou: "Por que você não pediu ajuda mais cedo?"</p><p>Outra luta foi entender a própria base de código – o "monólito" e seus muitos microsserviços.</p><p>A base de código tinha milhares de testes unitários e testes de integração. Sempre que você escrevia uma nova contribuição de código, você também deveria escrever testes. Esses testes ajudavam a garantir que seu código fizesse o que deveria – e não quebrasse nenhuma funcionalidade existente.</p><p>Eu frequentemente "quebrava a <em>build</em>" ao submeter código que eu achava que estava suficientemente testado – apenas para que meu código quebrasse alguma outra parte da aplicação que eu não tinha considerado. Isso frustrava toda a equipe, que não podia fazer o <em>merge</em> de seu próprio código até que o problema fosse resolvido.</p><p>A <em>build</em> quebrava várias vezes por semana. Eu não era a única pessoa que cometia esses tipos de erros, mas eu <strong>sentia</strong> que era.</p><p>Havia dias em que eu sentia que não estava preparado para ser um desenvolvedor. Eu dizia para mim mesmo: "Quem eu estou enganando? Eu só acordo um dia e decido que vou ser um desenvolvedor?"</p><p>Continuava ouvindo os ecos de todas aquelas coisas que meus amigos desenvolvedores tinham me dito um ano antes, quando eu estava começando minha jornada em programação.</p><p>"Como você vai competir com pessoas que cresceram programando desde cedo?"</p><p>"Você vai ter que beber um oceano inteiro de conhecimento."</p><p>"Por que você simplesmente não continua com o que já é bom?"</p><p>Eu passava a fazer pausas progressivamente mais longas para sair do computador. O escritório tinha uma cozinha cheia de lanches. Eu encontraria mais desculpas para levantar e pegar um lanche. Qualquer coisa para adiar a sensação esmagadora de que eu não tinha ideia do que estava fazendo.</p><p>Os primeiros meses foram difíceis. Durante as reuniões diárias de equipe, parecia que todos estavam avançando rápido, fechando <em>bugs</em> abertos e lançando funcionalidades. Parecia que eu não tinha nada a dizer. Eu ainda estava trabalhando na mesma funcionalidade do dia anterior.</p><p>Todos os dias, quando eu acordava e me preparava para o trabalho, sentia medo. "Hoje vai ser o dia em que eles me demitem."</p><p>No entanto, eu ia para o trabalho e todos eram bem gentis, bem pacientes. Eu pedia ajuda se realmente estivesse preso. Eu fazia <strong>algum</strong> progresso, e talvez corrigisse um ou dois bugs.</p><p>Eu estava ficando mais rápido em navegar na base de código. Eu estava ficando mais rápido em ler rastros de pilha quando meu código dava erro. Eu estava lançando funcionalidades em um ritmo mais rápido do que antes.</p><p>Sempre que meu chefe me chamava para entrar em seu escritório, eu pensava comigo mesmo: "Ah não, eu estava certo. Eu vou ser demitido hoje." Ele, então, apenas me designava mais alguns bugs para corrigir ou funcionalidades para desenvolver. Ufa.</p><p>Era a coisa mais surreal – eu morrendo de medo de que seria despedido e ele sem ideia de que algo estava errado.</p><p>Claro, eu já tinha ouvido o termo "síndrome do impostor" antes, mas eu não percebi que era isso que eu estava experimentando. Certamente, eu estava apenas sofrendo da síndrome "sou péssimo em programação", certo?</p><p>Um dia, eu estava sentado ao lado de Nick e ele parecia muito cansado. Eu me ofereci para pegar um refrigerante para ele na cozinha.</p><p>Quando voltei, ele abriu a lata, tomou um gole e se recostou na cadeira, olhando para seu monitor cheio de código. "Esse bug, cara. Três semanas tentando consertar esse único bug. A essa altura, eu estou depurando ele até no meu sono."</p><p>"Três semanas tentando consertar o mesmo bug?" Eu perguntei. Eu nunca tinha ouvido falar de algo assim.</p><p>"Alguns bugs são mais difíceis de resolver que outros. Este é um daqueles realmente perversos."</p><p>Parecia que alguém tinha me dado uma bofetada com um salmão. Eu via meu trabalho como blocos de tarefas, como se devesse levar meio dia para corrigir um bug e, se levasse mais tempo que isso, eu estava fazendo algo errado.</p><p>Porém, aqui estava o Nick – com seu diploma de ciência da computação da Universidade da Califórnia e seus anos de experiência trabalhando nessa mesma base de código – e ele estava empacado por três semanas com um único bug.</p><p>Depois de tudo, quando orçamos o tempo para as funcionalidades, às vezes tínhamos "funcionalidades de 5 dias" ou até "funcionalidades de 2 semanas". Não fazíamos isso para bugs, mas eles provavelmente variavam de maneira semelhante.</p><p>Fui para casa e li mais sobre a Síndrome do Impostor. O que li explicou muito da minha ansiedade.</p><p>Nos meses seguintes, continuei desenvolvendo funcionalidades para a base de código. Continuei colaborando com minha equipe. Ainda era um trabalho difícil, extenuante, mas estava começando a ficar um pouco mais fácil.</p><p>Eu me aproximei dos meus colegas de trabalho todos os dias no almoço jogando jogos de tabuleiro. Uma semana, tivemos um torneio de xadrez em toda a empresa.</p><p>Depois de algumas rodadas, joguei contra o CEO.</p><p>O CEO tem um estilo de jogo de xadrez não ortodoxo. Ele usou uma abertura boba que poucos jogadores de xadrez sérios escolheriam. Eu consegui assumir a liderança inicial no jogo.</p><p>Ao longo dos próximos movimentos, porém, ele conseguiu lentamente recuperar o controle do jogo. Eventualmente, ele ganhou a vantagem e me venceu.</p><p>Quando perguntei a ele como encontrava tempo para manter suas habilidades de xadrez afiadas enquanto dirigia uma empresa, ele disse: "Ah, eu não encontro. Eu jogo apenas uma ou duas vezes por ano."</p><p>Então, ele fez uma pausa por um momento, sua mão congelada à sua frente, como se preparando para se lançar em um discurso. Ele disse: "Meu tio era um jogador de xadrez competitivo. Ele me deu apenas um único conselho a seguir: <strong>toda vez que seu oponente mover, diminua o ritmo e tente entender o jogo da perspectiva dele – por que ele fez esse movimento?</strong>"</p><p>Ele se curvou e depois se desculpou dizendo que precisava correr para uma reunião.</p><p>Refleti muito ao longo dos anos sobre isso que ele me disse. Percebi que esse conselho não se aplica apenas ao xadrez. Você pode aplicá-lo a qualquer situação adversa.</p><h3 id="se-voc-continua-tendo-que-fazer-uma-tarefa-deveria-automatiz-la">Se você continua tendo que fazer uma tarefa, deveria automatizá-la</h3><p>Outra lição que aprendi sobre desenvolvimento de <em>software</em>: como eu era a pessoa mais "júnior" na equipe, muitas vezes me atribuíram o "trabalho braçal" que ninguém mais queria fazer. Uma dessas tarefas era ser a "babá de <em>build</em>".</p><p>Sempre que alguém quebrava a <em>build</em>, eu baixava a versão mais recente da nossa <em>branch</em> principal e usava <code>git bisect</code> para tentar identificar o <em>commit</em> que quebrou.</p><p>Eu abria aquele <em>commit</em>, executava os testes e descobria o que havia dado errado. Em seguida, enviava uma mensagem para a pessoa que quebrou a <em>build</em>, dizendo o que ela precisava corrigir.</p><p>Eu fiquei realmente rápido em fazer isso. Em um dia cheio de relatórios de <em>bugs</em> confusos e solicitações de funcionalidades ambíguas, eu esperava que a <em>build</em> quebrasse. Isso me dava uma chance de me sentir útil rapidamente.</p><p>Não demorou muito para que alguém na equipe dissesse: "Com a frequência que a <em>build</em> quebra, deveríamos apenas automatizar isso".</p><p>Eu não disse nada, mas me senti na defensiva. Isso era uma má ideia. Como um <em>script</em> poderia fazer tão bem quanto eu – um desenvolvedor de carne e osso?</p><p>Levaram alguns dias, mas, certamente, um dos meus colegas de equipe criou um <em>script</em> e eu não precisava mais ser a babá da <em>build</em>.</p><p>Foi estranho ver uma mensagem de que a <em>build</em> falhou e, em seguida, um momento depois, ver uma mensagem dizendo qual <em>commit</em> quebrou a <em>build</em> e quem precisava corrigi-lo.</p><p>Me senti indignado. Não disse nada, mas na minha mente estava pensando: "Esse deveria ser meu trabalho. Esse script tirou meu emprego."</p><p>É claro que, agora, relembro a minha reação e rio. Imagino-me, agora com 40 anos, ainda largando tudo várias vezes por semana para poder ser a babá da <em>build</em>.</p><p>Porque, na prática, se uma tarefa pode ser automatizada – se você pode dividi-la em etapas discretas que um computador pode executar de modo confiável para você – então provavelmente você deveria automatizá-la.</p><p>Há muito trabalho mais interessante que você pode fazer com seu tempo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/11/is_it_worth_the_time_2x-1.png" class="kg-image" alt="is_it_worth_the_time_2x-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/11/is_it_worth_the_time_2x-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/11/is_it_worth_the_time_2x-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/11/is_it_worth_the_time_2x-1.png 1141w" sizes="(min-width: 720px) 720px" width="1141" height="927" loading="lazy"><figcaption><em>Este gráfico do XKCD pode ajudar você a descobrir se uma tarefa vale o investimento de tempo para ser automatizada.</em></figcaption></figure><h3 id="li-es-dos-anci-os-do-vilarejo">Lições dos anciãos do vilarejo</h3><p>Aprendi muito com outras pessoas na equipe. Aprendi conceitos de design de produto com Mike. Ele me levou para correr na praia e me ensinou como correr com a parte da frente dos pés, onde as bolas dos meus pés tocam o chão antes dos calcanhares. Isso é um pouco mais fácil para suas articulações.</p><p>Aprendi sobre conceitos de engenharia de <em>software</em> ágil com Nick. Ele me ajudou a escolher alguns bons livros de desenvolvimento de <em>software</em> na biblioteca da empresa e até me convidou para uma festa de inauguração de casa, onde conheci seus filhos.</p><p>Depois de cerca de um ano trabalhando para a empresa, senti que era hora de tentar trilhar meu próprio caminho e construir alguns projetos de aprendizado <em>on-line</em>. Eu me sentei com o CTO para dar a notícia de que estava saindo.</p><p>Eu disse: "Sou grato por vocês terem me contratado, mesmo que eu fosse claramente o desenvolvedor mais fraco da empresa."</p><p>Ele apenas deu uma risada e disse: "Claro, quando você começou, você era o pior desenvolvedor da equipe. Eu diria que você ainda é o pior desenvolvedor da equipe."</p><p>Eu fiquei lá sentado, sorrindo de maneira constrangedora, piscando para ele, sem saber se ele estava apenas bravo por eu estar saindo.</p><p>Então, ele disse: "Mas isso é inteligente. Você é inteligente. <strong>Você sempre quer ser o pior músico da banda</strong>. Você sempre quer estar cercado por pessoas que são melhores do que você. É assim que você cresce."</p><p>Duas semanas depois, fiz check-in das minhas alterações no código do dia e entreguei meus tickets abertos. Reiniciei meu Mac para as configurações de fábrica e o entreguei ao meu gerente.</p><p>Eu saí correndo, alinhando contratos <em>freelance </em>para manter as luzes acesas. Busquei um apartamento na Bay Area, do outro lado da ponte do coração pulsante da tecnologia em South of Market, San Francisco.</p><p>Agora, eu era um desenvolvedor profissional com um ano de experiência já adquirido.</p><p>Eu estava pronto para sonhar novos sonhos e fazer novos movimentos.</p><p>Eu estava a caminho da terra das <em>startups</em>.</p><h3 id="li-es-do-meu-primeiro-ano-como-desenvolvedor">Lições do meu primeiro ano como desenvolvedor</h3><p>Fiz muitas coisas certas durante meu primeiro ano como desenvolvedor profissional. Eu me dou uma nota B-.</p><p>Se eu tivesse a chance de fazer tudo de novo, há algumas coisas que eu faria diferente.</p><p>Aqui estão algumas dicas. Que elas maximizem seu aprendizado e minimizem suas dores de cabeça.</p><h4 id="deixe-seu-ego-na-porta">Deixe seu ego na porta</h4><p>Muitas pessoas que entram na área de desenvolvimento de <em>software</em> começam desde o nível mais básico. Um título que você pode ter é o de "Desenvolvedor Júnior."</p><p>Pode ser um pouco constrangedor estar na meia-idade e ter a palavra "júnior" no seu título, mas, com um pouco de paciência e muito trabalho duro, você pode superar isso.</p><p>Um problema que eu enfrentava todos os dias era – eu tinha 10 anos de experiência profissional. Eu não era um funcionário de nível inicial. Sim, eu era novo no desenvolvimento, mas eu era bastante experiente em ensinar e até gerenciar pessoas (eu havia gerenciado 30 funcionários no meu emprego mais recente como professor).</p><p>Ainda assim – apesar de toda a minha experiência de trabalho anterior – eu era um desenvolvedor de nível inicial. Eu ainda era um novato. Um neófito.</p><p>Por mais que eu quisesse gritar "Eu costumava ser o chefe – eu não preciso que você me vigie" – a verdade era que eu precisava, sim, de babás.</p><p>O que ocorreria se eu acidentalmente quebrasse a produção? Se eu introduzisse uma vulnerabilidade de segurança na aplicação? Se eu apagasse todo o banco de dados? Ou se eu criptografasse algo importante e perdesse a chave?</p><p>Esses tipos de desastres acontecem o tempo todo.</p><p>A realidade é que, como um novo desenvolvedor, você é como um elefante em uma loja de cristais, tentando andar com cuidado, mas quebrando tudo em seu caminho.</p><p>Não deixe que a impaciência com seus colegas de equipe tome conta de você. Resista à tentação de falar sobre seus diplomas avançados, prêmios que ganhou com seu trabalho, ou aquela vez que o prefeito lhe deu a chave da cidade (OK, talvez essa última nunca tenha acontecido comigo).</p><p>Não apenas porque isso fará de você uma pessoa difícil de trabalhar, mas porque isso distrairá você de sua tarefa.</p><p>Nos primeiros meses da minha carreira como desenvolvedor, eu usava minhas conquistas passadas como uma espécie de chupeta. "Sim, eu sou péssimo em programação, mas sou fenomenal em ensinar gramática inglesa. Já mencionei que eu costumava administrar uma escola?"</p><p>Quando seus dedos estão no teclado e seus olhos no editor de código, você precisa deixar esse passado para trás. Você pode se deleitar com as conquistas de ontem à noite, depois que o trabalho de hoje estiver feito.</p><p>Por enquanto, você precisa aceitar todas as emoções que vêm com ser um iniciante novamente. Você precisa se concentrar na tarefa à sua frente e concluir o trabalho.</p><h3 id="provavelmente-s-a-s-ndrome-do-impostor-falando">Provavelmente, é só a Síndrome do Impostor falando</h3><p>Quase todo mundo que eu conheço já experimentou a Síndrome do Impostor. Aquela sensação de que você não pertence. Aquela sensação de que, a qualquer momento, seus colegas de equipe vão ver que você é terrível como programador e vão expor você como não sendo um "desenvolvedor de verdade."</p><p>Até certo ponto, essa sensação não desaparece. Ela está sempre ali no fundo da sua mente, pronta para surgir quando você tenta fazer algo novo.</p><p>"Você poderia me ajudar a superar essa mensagem de erro?" "Hum... Não tenho certeza se sou a melhor pessoa para perguntar."</p><p>"Você poderia programar em par comigo para implementar este recurso?" "Hum... Acho que sim... se você não encontrar alguém mais qualificado."</p><p>"Você poderia dar uma palestra na nossa próxima conferência?" "Hum... Eu?"</p><p>Conheci engenheiros sêniores que ainda sofrem ocasionalmente de síndrome do impostor, mais de uma década em suas carreiras.</p><p>Quando você se sente inadequado ou despreparado, pode ser apenas a síndrome do impostor falando.</p><p>Claro – se você me entregasse um bisturi e dissesse: "ajude-me a realizar uma cirurgia cardíaca", eu me sentiria como um impostor. Até certo ponto, sentir-se fora das suas capacidades é totalmente razoável se você realmente estiver fora delas.</p><p>O problema é que, se você tem praticado desenvolvimento de software, pode ser capaz de fazer algo e ainda assim inexplicavelmente sofrer de ansiedade.</p><p>Eu não sou médico, mas meu instinto é que – para a maioria das pessoas – a síndrome do impostor gradualmente diminuirá com o tempo, à medida que você pratica mais e constrói mais confiança.</p><p>No entanto, ela pode aparecer aleatoriamente. Eu não tenho vergonha de admitir que às vezes sinto pontadas de síndrome do impostor ao fazer uma nova tarefa, ou uma que eu não faço há algum tempo.</p><p>A chave é simplesmente aceitá-la: "Provavelmente é só a síndrome do impostor falando."</p><p>Apenas siga em frente.</p><h3 id="encontre-sua-tribo-mas-n-o-caia-na-armadilha-do-tribalismo">Encontre sua tribo, mas não caia na armadilha do tribalismo</h3><p>Quando você conseguir seu primeiro emprego como desenvolvedor, trabalhará ao lado de outros desenvolvedores. Que bom! Você encontrou sua tribo.</p><p>Você passará muito tempo com eles, e todos vocês podem começar a se sentir como uma unidade coesa.</p><p>Não ignore, porém, as pessoas não desenvolvedoras ao seu redor.</p><p>Na minha história acima, falei sobre Mike, o Gerente de Produto que também organizava eventos de <em>startup</em>. Ele era "não técnico". Seu conhecimento de programação era limitado, no melhor dos casos, mas eu ousaria dizer que aprendi tanto com ele quanto com qualquer outra pessoa na empresa.</p><p>Você pode trabalhar com outras pessoas de outros departamentos – designers, gerentes de produto, gerentes de projeto, pessoas de TI, pessoas de QA, profissionais de <em>marketing</em>, até mesmo pessoal de finanças e contabilidade. Você também pode aprender muito com essas pessoas.</p><h3 id="n-o-fique-muito-confort-vel-e-n-o-se-especialize-muito-cedo">Não fique muito confortável e não se especialize muito cedo</h3><p>Eu frequentemente dou este conselho para quem está começando sua jornada na programação: "aprenda habilidades gerais de programação (JavaScript, SQL, Linux etc.) e depois se especialize no trabalho."</p><p>A ideia é: uma vez que você entende como funcionam as ferramentas mais comuns, você pode então aprender os equivalentes dessas ferramentas menos comuns.</p><p>Por exemplo, uma vez que você aprende PostgreSQL, você pode facilmente aprender MySQL. Uma vez que você aprende Node.js, você pode facilmente aprender Ruby on Rails ou Java Spring Boot.</p><p>Algumas pessoas, no entanto, se especializam muito cedo no trabalho. O chefe delas pode pedir a elas para "controlar" uma certa API ou funcionalidade. Se elas fizerem um bom trabalho com isso, o chefe pode continuar dando projetos semelhantes.</p><p>Você está gerenciando apenas a si mesmo, mas seu chefe está gerenciando muitas pessoas. Ele pode estar muito ocupado para desenvolver um entendimento detalhado de suas habilidades e interesses. Ele pode passar a ver você como "a pessoa de XYZ" e apenas passar tarefas relacionadas a isso.</p><p>Você, no entanto, sabe no que você é bom e no que está interessado. Você pode tentar se voluntariar para projetos fora da sua zona de conforto. Se você conseguir que seu chefe atribua você a esses projetos, poderá continuar expandindo suas habilidades e, potencialmente, trabalhar com novas equipes.</p><p>Lembre-se: seu chefe pode ser responsável pelo seu desempenho no trabalho, mas você é responsável pelo seu desempenho em toda a sua carreira.</p><p>Assuma projetos que cumpram sua obrigação com seu empregador e, ao mesmo tempo, posicionem você bem para seus objetivos de carreira a longo prazo.</p><h2 id="ep-logo-voc-consegue">Epílogo: você consegue</h2><p>Se há uma mensagem que eu quero deixar com você aqui, é esta: <strong>você consegue!</strong></p><p>Você <strong>pode</strong> aprender esses conceitos.</p><p>Você <strong>pode</strong> aprender essas ferramentas.</p><p>Você <strong>pode</strong> se tornar um desenvolvedor.</p><p>Então, no momento em que alguém lhe der dinheiro para você ajudar a programar algo, você se formará como um desenvolvedor profissional.</p><p>Aprender a programar e conseguir o primeiro emprego como desenvolvedor é um processo assustador, mas não se assuste.</p><p>Se você persistir, eventualmente conseguirá. É apenas uma questão de prática.</p><p>Construa seus projetos. Mostre-os aos seus amigos. Construa projetos para seus amigos.</p><p>Crie sua rede de contatos. Ajude as pessoas que você encontrar pelo caminho. O que vai, volta. Você colhe o que planta.</p><p>Não é tarde demais. A vida é longa.</p><p>Você vai olhar para este momento daqui a alguns anos e ficará feliz por ter tomado uma atitude.</p><p>Planeje para que demore muito tempo. Planeje para a incerteza.</p><p>Acima de tudo, continue voltando ao teclado. Continue participando de eventos. Continue compartilhando suas conquistas com os amigos.</p><p>Como Lao Tsu, o Velho Mestre, certa vez disse:</p><blockquote>"Uma jornada de mil milhas começa com um único passo."</blockquote><p>Ao terminar este livro, você já deu um passo. Digo, você pode já ter dado muitos passos em direção a seus objetivos.</p><p>O momento é tudo. Então, mantenha o momento que você já criou durante as últimas horas com este livro.</p><p>Comece a programar seu próximo projeto hoje.</p><p>Lembre-se sempre: você consegue!!!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como criar uma promise a partir de uma função de callback em JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Adham El Banhawy Desenvolvedores de back-end enfrentam desafios o tempo todo ao criar aplicações ou testar código. Por ser um desenvolvedor relativamente novo e que está recém se familiarizando com esses desafios, nunca me deparei com um desafio ou inconveniência com mais frequência — ou mais memorável — ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-criar-uma-promise-a-partir-de-uma-funcao-de-callback-em-javascript/</link>
                <guid isPermaLink="false">670530e9c4cc5853cfe82a85</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 08 Oct 2024 13:34:12 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/1_7EYmjkeLQs8QXSLr_6iTMg.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-a-promise-out-of-a-callback-function-in-javascript-d8ec35d1f981/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to make a Promise out of a Callback function in JavaScript</a>
      </p><p>Escrito por: Adham El Banhawy</p><p>Desenvolvedores de back-end enfrentam desafios o tempo todo ao criar aplicações ou testar código. Por ser um desenvolvedor relativamente novo e que está recém se familiarizando com esses desafios, nunca me deparei com um desafio ou inconveniência com mais frequência — ou mais memorável — do que quando usei <strong>funções de callback</strong>.</p><p>Não vou me aprofundar muito nos detalhes das <em>callbacks</em> e seus prós e contras nem nas alternativas a elas, como <em>promises</em> e <em>async/await</em>. Para uma explicação mais detalhada, você pode conferir <a href="https://medium.com/codebuddies/getting-to-know-asynchronous-javascript-callbacks-promises-and-async-await-17e0673281ee">este artigo</a> (em inglês) que as explica detalhadamente.</p><h3 id="o-inferno-das-callbacks"><strong>O inferno das <em>callbacks</em></strong></h3><p>As <em>callbacks</em> são uma funcionalidade útil do JavaScript que permite realizar chamadas assíncronas. Elas são funções que geralmente são passadas como um segundo parâmetro para outra função que está buscando dados ou realizando uma operação de E/S que leva tempo para completar.</p><p>Um exemplo disso é ao tentar fazer uma chamada de API usando o módulo <code>request</code> ou ao se conectar a um banco de dados do MongoDB. Se ambas as chamadas dependerem uma da outra ou se a informação que você está buscando for o URL do MongoDB ao qual você precisa se conectar, o que você pode fazer?</p><p>Nesse caso, é preciso aninhar essas chamadas uma dentro da outra:</p><pre><code>request.get(url, function(error, response, mongoUrl) {

  if(error) throw new Error("Erro ao buscar dados");

  MongoClient.connect(mongoUrl, function(error, client) {

    if(error) throw new Error("Erro de conexão com o MongoDB");

    console.log("Conectado com sucesso ao servidor");    
    const db = client.db("dbName");
    // Realizar alguma lógica da aplicação
    client.close();

  });

});
</code></pre><p>Certo... então, onde está o problema? Bem, por um lado, a legibilidade do código sofre com essa técnica.</p><p>Pode parecer aceitável no começo, quando a base de código é pequena, mas a escalabilidade disso não é das melhores, especialmente se você inserir mais camadas profundas nos <em>callbacks </em>aninhados.</p><p>Você acabará com muitos colchetes e chaves que confundirão você e outros desenvolvedores, não importando se o código está bem formatado ou não. Existe um site chamado <a href="http://callbackhell.com/">callbackhell</a> (em português, o "inferno das <em>callbacks</em>") que aborda essa questão específica.</p><p>Ouço alguns de vocês, incluindo meu eu passado ingênuo, me dizendo para envolver em uma função <code>async</code> e então <code>await</code> (em português, esperar) pela função de <em>callback</em>. Isso simplesmente não funciona.</p><p>Se houver qualquer bloco de código após a função que usa <em>callbacks</em>, aquele bloco de código será executado e <strong>NÃO</strong> <strong>esperará</strong> pela <em>callback</em>.</p><p>Aqui está o erro que cometi antes:</p><pre><code>var request = require('request');

// ERRADO

async function(){

  let joke;
  let url = "https://api.chucknorris.io/jokes/random"

  await request.get(url, function(error, response, data) {

    if(error) throw new Error("Erro ao buscar dados");

    let content = JSON.parse(data);
    joke = content.value;

  });

  console.log(joke); // undefined

};

// Errado

async function(){

  let joke;
  let url = "https://api.chucknorris.io/jokes/random"

  request.get(url, await function(error, response, data) {

    if(error) throw new Error("Erro ao buscar dados");

    let content = JSON.parse(data);
    joke = content.value;

  });

  console.log(joke); // undefined

};
</code></pre><p>Alguns desenvolvedores mais experientes podem dizer "Basta usar uma biblioteca diferente que use <em>promises</em> para fazer a mesma coisa, como o <a href="https://www.npmjs.com/package/axios">axios</a>, ou simplesmente usar o <a href="https://developer.mozilla.org/pt-BR/docs/Web/API/Fetch_API">fetch</a>". Claro, eu poderia fazer isso nesse cenário, mas é apenas fugir do problema.</p><p>Além disso, esse é apenas um exemplo. Às vezes, você pode estar preso a usar uma biblioteca que não suporta <em>promises</em> sem alternativas, como ao usar kits de desenvolvimento de software (SDKs) para se comunicar com plataformas como a Amazon Web Services (AWS), o Twitter ou o Facebook.</p><p>Às vezes, até mesmo usar um <em>callback</em> para fazer uma chamada muito simples com uma E/S rápida ou uma operação de CRUD está bem, já que nenhuma outra lógica depende de seus resultados. Você, no entanto, pode estar restrito pelo ambiente de execução, como em uma <a href="https://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction-function.html">função Lambda</a> (site em inglês) que mataria todos os processos uma vez que a <em>thread</em> principal terminasse, independentemente de qualquer chamada assíncrona que não tenha sido concluída.</p><h3 id="solu-o-1-f-cil-usar-o-m-dulo-util-do-node">Solução 1 (fácil): usar o módulo "util" do Node</h3><p>A solução é surpreendentemente simples. Mesmo se você estiver um pouco desconfortável com a ideia de <em>promises </em>no JavaScript, você vai adorar como pode resolver esse problema usando-as.</p><p>Como apontado por Erop e Robin, as versões a partir da versão 8 do Node suportam transformar funções de <em>callback</em> em <em>promises</em> usando o módulo interno <strong>util</strong>.</p><pre><code>const request = require('request');

const util = require('util');

const url = "https://api.chucknorris.io/jokes/random";

// Use o util para trasnformar em promise o método request

const getChuckNorrisFact = util.promisify(request);

// Use o novo método para chamar a API em um padrão moderno de then/catch

getChuckNorrisFact(url).then(data =&gt; {

   let content = JSON.parse(data.body);

   console.log('Piada: ', content.value);

}).catch(err =&gt; console.log('erro: ', err))
</code></pre><p>O código acima resolve o problema de maneira limpa usando o método <a href="https://nodejs.org/docs/latest-v8.x/api/util.html#util_util_promisify_original"><strong>util.promisify</strong></a><strong>,</strong> disponível na biblioteca principal do Node.</p><h3 id="solu-o-2-um-pouco-mais-complicada-transformar-a-callback-em-uma-promise">Solução 2 (um pouco mais complicada): transformar a callback em uma <em>promise</em></h3><p>Às vezes, usar as bibliotecas <code>request</code> e <code>util</code> não é possível, seja por causa de um ambiente/código legado ou por realizar as requisições a partir do navegador do lado do <em>client</em>. Você precisaria encapsular uma <em>promise</em> em torno de sua função de <em>callback</em>.</p><p>Vamos pegar o exemplo do Chuck Norris acima e transformá-lo em uma <em>promise</em>.</p><pre><code>var request = require('request');
let url = "https://api.chucknorris.io/jokes/random";

// Uma função que retorna uma promise para resolver os dados obtidos da API ou um erro
let getChuckNorrisFact = (url) =&gt; {
  return new Promise(
    (resolve, reject) =&gt; {
      request.get(url, function(error, response, data){
        if (error) reject(error);

let content = JSON.parse(data);
        let fact = content.value;
        resolve(fact);
      })
   }
 );
};

getChuckNorrisFact(url).then(
   fact =&gt; console.log(fact) // realmente exibe uma string
).catch(
   error =&gt; console.log(error)
);
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/ZXNYPRkv4mC2cHoq-4PIdoAx0WK-DyuUybzA.jpeg" class="kg-image" alt="ZXNYPRkv4mC2cHoq-4PIdoAx0WK-DyuUybzA" width="366" height="488" loading="lazy"><figcaption><em>Parece mágica</em></figcaption></figure><p>No código acima, coloquei a função <code>request</code> baseada em <em>callback</em> dentro de uma <em>promise</em> que a envolve <code>Promise((resolve, reject) =&gt; { //função de callback})</code>. Isso nos permite chamar a função <code>getChuckNorrisFact</code> como uma <em>promise</em> com os métodos <code>**.then()**</code> e <code>.catch()</code>. Quando <code>_getChuckNorrisFact_</code> é chamada, ela executa a requisição para a API e <strong>espera</strong> por uma declaração <code>resolve()</code> ou <code>reject()</code> para executar. Na função de <em>callback</em>, você simplesmente passa os dados recuperados para os métodos <em>resolve</em> ou <em>reject</em>.</p><p>Uma vez que os dados (nesse caso, um fato incrível sobre Chuck Norris) são obtidos e passados para o <em>resolve</em>, <code>getChuckNorrisFact</code> executa o método <code>then()</code>. Isso retornará o resultado que você pode <strong>utilizar dentro de uma função dentro do <code>then()</code></strong> para realizar a lógica desejada — que, nesse caso, é exibir o fato no console.</p><p>Você pode ler mais sobre isso na <a href="https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Using_promises#Creating_a_Promise_around_an_old_callback_API">documentação da web da MDN</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Compilação Just-in-Time explicada ]]>
                </title>
                <description>
                    <![CDATA[ A compilação Just-in-Time é um método para melhorar o desempenho de programas interpretados. Durante a execução, o programa pode ser compilado em código nativo para melhorar seu desempenho. Ela também é conhecida como compilação dinâmica. A compilação dinâmica tem algumas vantagens sobre a compilação estática. Ao executar aplicações em Java ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/compilacao-just-in-time-explicada/</link>
                <guid isPermaLink="false">66fde989c4cc5853cfe82902</guid>
                
                    <category>
                        <![CDATA[ Compiladores ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 03 Oct 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/5f9c9d05740569d1a4ca357b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/just-in-time-compilation-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Just in Time Compilation Explained</a>
      </p><p>A compilação <em>Just-in-Time</em> é um método para melhorar o desempenho de programas interpretados. Durante a execução, o programa pode ser compilado em código nativo para melhorar seu desempenho. Ela também é conhecida como compilação dinâmica.</p><p>A compilação dinâmica tem algumas vantagens sobre a compilação estática. Ao executar aplicações em Java ou C#, o ambiente de execução pode analisar a aplicação enquanto ela está sendo executada. Isso permite que um código mais otimizado seja gerado. Se o comportamento da aplicação mudar enquanto ela está sendo executada, o ambiente de execução pode recompilar o código.</p><p>Algumas das desvantagens incluem atrasos na inicialização e a sobrecarga da compilação durante a execução. Para limitar a sobrecarga, muitos compiladores JIT (abreviação de <em>Just-in-Time</em>) apenas compilam os caminhos de código que são frequentemente usados.</p><h2 id="vis-o-geral">Visão geral</h2><p>Tradicionalmente, existem dois métodos para converter o código-fonte em uma forma que pode ser executada em uma plataforma. A compilação estática converte o código em uma linguagem para uma plataforma específica. Um interpretador executa diretamente o código-fonte.</p><p>A compilação JIT tenta usar os benefícios dos dois métodos. Enquanto o programa interpretado está sendo executado, o compilador JIT determina o código mais frequentemente usado e o compila para código de máquina. Dependendo do compilador, isso pode ser feito em um método ou em uma seção menor de código.</p><p>A compilação dinâmica foi descrita pela primeira vez em um artigo por J. McCarthy sobre LISP, em 1960.</p><p>Compilação <em>Just-in-Time</em>, JIT, ou Tradução Dinâmica, é a compilação que é feita durante a execução de um programa – ou seja, em tempo de execução, em vez de antes da execução. O que acontece é a tradução para código de máquina. As vantagens de uma JIT são devidas ao fato de que, como a compilação ocorre em tempo de execução, um compilador JIT tem acesso a informações de tempo de execução dinâmicas, possibilitando melhores otimizações (como a incorporação de funções).</p><p>É importante entender sobre a compilação JIT que ela compilará o <em>bytecode</em> em instruções de código de máquina da máquina em execução. Em outras palavras, o código de máquina resultante é otimizado para a arquitetura da CPU da máquina em execução.</p><p>Alguns exemplos de compiladores JIT são a JVM (<em>Java Virtual Machine</em>) no Java e o CLR (<em>Common Language Runtime</em>), em C#.</p><h2 id="hist-ria">História</h2><p>No começo, um compilador era responsável por converter uma linguagem de alto nível (definida como mais elevada que <em>assembly</em>) em código objeto (instruções de máquina), que então seria ligado (por um <em>linker</em>) a um executável.</p><p>Em determinado ponto da evolução das linguagens, os compiladores compilavam uma linguagem de alto nível em pseudocódigo, que seria então interpretado (por um interpretador) para executar seu programa. Isso eliminou o código objeto e executáveis, permitindo que essas linguagens fossem portáveis para diversos sistemas operacionais e plataformas de <em>hardware</em>. Pascal (que compilava para P-Code) foi uma das primeiras. Java e C# são exemplos mais recentes. Eventualmente, o termo P-Code foi substituído por <em>bytecode</em>, já que a maioria das pseudo-operações são de um byte de comprimento.</p><p>Um compilador <em>Just-in-Time</em> (JIT) é um recurso do interpretador de tempo de execução que, em vez de interpretar <em>bytecode</em> toda vez que um método é invocado, compilará o <em>bytecode</em> em instruções de código de máquina da máquina em execução e, em seguida, invocará esse código objeto. Idealmente, a eficiência de executar o código objeto superará a ineficiência de recompilar o programa toda vez que ele for executado.</p><h3 id="cen-rio-t-pico">Cenário típico</h3><p>O código-fonte é completamente convertido em código de máquina.</p><h3 id="cen-rio-do-jit">Cenário do <em>JIT</em></h3><p>O código-fonte será convertido em uma estrutura semelhante a uma linguagem <em>assembly</em> – por exemplo, IL (linguagem intermediária) para C#, ou <em>bytecode</em> para Java].</p><p>O código intermediário é convertido em linguagem de máquina somente quando a aplicação precisa, ou seja, apenas os códigos necessários são convertidos em código de máquina.</p><h2 id="compara-o-jit-x-n-o-jit"><strong>Comparação JIT x não JIT</strong></h2><p>No JIT, nem todo o código é convertido em código de máquina; primeiro, uma parte do código que é necessária será convertida em código de máquina. Então, se um método ou funcionalidade chamado não estiver em máquina, será convertido em código de máquina, o que reduz o peso na CPU. Como o código de máquina será gerado em tempo de execução, o compilador JIT produzirá código de máquina otimizado para a arquitetura de CPU da máquina em execução.</p><p>Alguns exemplos de JIT são:</p><ul><li>Java: JVM (<em>Java Virtual Machine</em>)</li><li>C#: CLR (<em>Common Language Runtime</em>)</li><li>Android: DVM (<em>Dalvik Virtual Machine</em>) ou ART (<em>Android RunTime</em>) em versões mais recentes</li></ul><p>A máquina virtual do Java (JVM) executa <em>bytecode </em>e mantém uma contagem de quantas vezes uma função é executada. Se essa contagem exceder um limite predefinido, o JIT compila o código em linguagem de máquina, que pode ser diretamente executada pelo processador (ao contrário do caso normal em que o javac compila o código em <em>bytecode </em>e então o Java, o interpretador, interpreta esse <em>bytecode</em> linha por linha, converte-o em código de máquina e executa).</p><p>Além disso, na próxima vez que essa função for calculada, o mesmo código compilado é executado novamente, ao contrário da interpretação normal, em que o código é interpretado novamente linha por linha. Isso torna a execução mais rápida.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como evitar a exposição de sua chave de API em suas aplicações de front-end públicas ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Jackson Bates O problema Tudo o que você quer fazer é buscar algum JSON de um endpoint de API para o clima, algumas resenhas de livros ou algo similarmente simples. A consulta fetch no seu front-end é suficientemente fácil, mas você tem que colar sua chave de API ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-evitar-a-exposicao-de-sua-chave-de-api-em-suas-aplicacoes-de-front-end-publicas/</link>
                <guid isPermaLink="false">66fde51fc4cc5853cfe82856</guid>
                
                    <category>
                        <![CDATA[ Desenvolvimento Back-end ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 03 Oct 2024 00:42:58 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/5f9c9fd5740569d1a4ca44e3.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/private-api-keys/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to avoid exposing your API key in your public front-end apps</a>
      </p><p>Escrito por: Jackson Bates</p><h2 id="o-problema">O problema</h2><p>Tudo o que você quer fazer é buscar algum JSON de um <em>endpoint</em> de API para o clima, algumas resenhas de livros ou algo similarmente simples.</p><p>A consulta <em>fetch </em>no seu front-end é suficientemente fácil, mas você tem que colar sua chave de API secreta bem ali no código do <em>front-end</em> para qualquer um encontrar com um mínimo de esforço!</p><p>Além disso, enviar suas chaves de API para o seu repositório do GitHub é um grande problema: <a href="https://www.theregister.co.uk/2015/01/06/dev_blunder_shows_github_crawling_with_keyslurping_bots/">um desenvolvedor colocou suas chaves da AWS no Github e COISAS RUINS aconteceram</a> (texto em inglês).</p><blockquote>"Por que isso é tão difícil?!" – Você, provavelmente há 15 minutos</blockquote><h2 id="a-solu-o">A solução</h2><p>Você deve usar um servidor de <em>back-end</em> para buscar os resultados da API para você e depois passá-los para o seu <em>front-end</em>.</p><h2 id="o-novo-problema">O novo problema</h2><p>Você está apenas tentando fazer uma demonstração de <em>front-end</em> para seu portfólio! Você ainda não aprendeu nada sobre tecnologias de <em>back-end</em>! Por que isso é tão difícil?</p><h1 id="demonstra-o">Demonstração</h1><p>Encontrei esse problema com frequência suficiente para decidir parar de inventar truques bobos e implementar uma solução que funciona com código <em>back-end </em>mínimo.</p><p>Nessa demonstração, eu configuro um <em>back-end</em> que escuta por requisições POST e as envia para a <a href="https://www.goodreads.com/api">API do GoodReads</a>. Para usar isso, você precisa implementar <strong>seu próprio</strong> <em>front-end</em> que possa enviar a requisição POST apropriada para esse <em>back-end</em>. Seu <em>front-end</em> não se comunicará diretamente com o GoodReads. Portanto, nenhuma chave de API é exposta.</p><h2 id="voc-precisar-">Você precisará</h2><ul><li><a href="https://nodejs.org/en/download/">Node</a> (o teste foi feito com a versão v10.16.0 – versões posteriores não terão problemas, versões anteriores podem encontrar alguns)</li><li><a href="https://git-scm.com/downloads">git</a></li><li>Este repositório: <a href="https://github.com/JacksonBates/example-goodreads-api-relay">https://github.com/JacksonBates/example-goodreads-api-relay</a></li></ul><h3 id="comece">Comece</h3><p><code>git clone https://github.com/JacksonBates/example-goodreads-api-relay.git</code></p><p>O README.md (em inglês) contém tudo o que você precisa saber, incluindo instalação e configuração.</p><p>Incluí os pontos principais aqui (traduzidos) para sua conveniência:</p><h3 id="readme-md">README.md</h3><p>Instale as dependências:</p><p><code>npm i</code></p><p>Você precisa criar seu próprio arquivo <code>.env</code> para sua chave:</p><p><code>cp .env.example .env</code></p><p>Então, abra o novo arquivo <code>.env</code> e cole suas chaves no local correto.</p><p>Exemplo:</p><pre><code>GOODREADS_API_KEY=AABBCCDDEEFF00112233445566778899
</code></pre><p>Agora execute o servidor:</p><p><code>node app.js</code></p><p>No navegador, navegue até <code>localhost:3000</code> para confirmar que o servidor está funcionando. Você deve ver um simples <code>Hello World!</code></p><h3 id="o-que-vem-a-seguir">O que vem a seguir?</h3><p>Agora, leia o arquivo <code>app.js</code> cuidadosamente.</p><p>Comentei o código extensivamente para ajudá-lo a entender o que está acontecendo se você não viu muito sobre o <em>node</em> e o <em>express</em> antes.</p><pre><code>// app.js

// Aqui, importamos os módulos necessários e definimos algumas variáveis iniciais
require("dotenv").config();
const express = require("express");
const fetch = require("node-fetch");
const convert = require("xml-js");
const rateLimit = require("express-rate-limit");
const app = express();
const port = 3000;

// Limitação de taxa – o Goodreads limita para 1/seg, então devemos fazer 
// isso também
// Ative se você estiver atrás de um proxy reverso (Heroku, Bluemix, AWS ELB, // Nginx etc)
// veja https://expressjs.com/en/guide/behind-proxies.html
// app.set('trust proxy', 1);

const limiter = rateLimit({
    windowMs: 1000, // 1 segundo
    max: 1, // limita cada IP a 1 requisição por windowMs
})

// Aplicar a todas as requisições
app.use(limiter)

// Rotas

// Rota de teste, visite localhost:3000 para confirmar se está funcionando
// deve mostrar 'Hello World!' no navegador
app.get("/", (req, res) =&gt; res.send("Hello World!"));

// Nossa rota do Goodreads!
app.get("/api/search", async (req, res) =&gt; {
    try {
        // Isso usa interpolação de strings para fazer nossa string de
        // consulta de busca
        // tira o parâmetro de consulta postado e o reformata para o
        // goodreads
        const searchString = `q=${req.query.q}`;

        // Usa o node-fetch para chamar a API do goodreads e lê a chave do
        // .env
        const response = await fetch(`https://www.goodreads.com/search/index.xml?key=${process.env.GOODREADS_API_KEY}&amp;${searchString}`);
        //mais informações aqui https://www.goodreads.com/api/index#search.books
        const xml = await response.text();

        // A API do Goodreads retorna XML, então para usá-la facilmente no front-end, podemos
        // converter isso para JSON:
        const json = convert.xml2json(xml, { compact: true, spaces: 2 });

        // A API retorna coisas que não nos interessam, então podemos muito bem eliminar
        // tudo exceto os resultados:
        const results = JSON.parse(json).GoodreadsResponse.search.results;

        return res.json({
            success: true,
            results
        })
    } catch (err) {
        return res.status(500).json({
            success: false,
            message: err.message,
        })
    }
})

// Isso ativa nosso servidor e gera logs para usarmos.
// As declarações console.log que você usar no node para depuração 
// aparecerão no seu terminal, não no console do navegador!
app.listen(port, () =&gt; console.log(`Exemplo de aplicação escutando na porta ${port}!`));
</code></pre><p><strong>Atualização</strong>: um grande agradecimento a Gouri Shankar Kumawat por contribuir com um PR que melhorou este código! Você pode segui-lo no <a href="https://twitter.com/dev_gskumawat">Twitter</a> ou no <a href="https://github.com/gskumawat0">GitHub</a>.</p><p>Use o <a href="https://www.getpostman.com/">Postman</a> para testar a API.</p><p>Configure o Postman para GET e cole isso no URL: <code>localhost:3000/api/search?q=hobbit</code></p><p>O Postman mostrará a resposta JSON abaixo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/10/get_request.png" class="kg-image" alt="get_request" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/10/get_request.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/10/get_request.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/10/get_request.png 1151w" sizes="(min-width: 720px) 720px" width="1151" height="636" loading="lazy"><figcaption><em>Captura de tela do Postman mostrando o JSON retornado do nosso novo back-end</em></figcaption></figure><h3 id="como-usar-isso-no-seu-front-end">Como usar isso no seu <em>front-end</em>?</h3><p>Esta aplicação simples está escutando requisições POST em <code>/api/search</code>, então interaja com ela em sua aplicação de <em>front-end</em> da mesma forma que você fazia anteriormente com a API original.</p><p>Ela está configurada apenas para lidar com consultas de pesquisa – se você quiser usar outros endpoints/métodos da API do Goodreads, precisará pensar em como implementá-los por conta própria!</p><h3 id="hospedagem">Hospedagem</h3><p>Você não pode implantar seu <em>front-end</em> e ainda ter isso no <em>localhost</em> – obviamente você precisa implantar isso também.</p><p>Recomendo o <a href="https://devcenter.heroku.com/articles/deploying-nodejs">Heroku</a> (site em inglês).</p><blockquote>Nota da tradução: no momento da tradução deste artigo, o Heroku não está mais disponibilizando um tier gratuito para uso. Aos que procuram uma alternativa gratuita, recomendamos a busca por outras fontes.</blockquote><h2 id="b-nus">Bônus</h2><p>Se você quiser expandir essa solução, pode considerar como torná-la acessível apenas a partir de um intervalo restrito de endereços IP para aumentar a segurança – o que estava fora do escopo deste tutorial/demonstração.</p><p>A solução foi montada rapidamente em resposta a uma discussão no <a href="https://www.freecodecamp.org/forum">fórum</a>. Se você encontrar algum problema neste artigo ou no código de exemplo, não hesite em responder ao <a href="https://forum.freecodecamp.org/t/trying-to-fetch-response-from-goodreads-api/323312/15?u=jacksonbates">tópico do fórum</a> (em inglês) que deu início a tudo. Manterei o artigo e o repositório atualizados com melhorias.</p><p>Sinta-se à vontade para enviar PRs se tiver contribuições valiosas a fazer. 😀</p><p>Você também pode entrar em contato com o autor via <a href="https://twitter.com/jacksonbates">Twitter</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A maneira 100% correta de se fazer breakpoints em CSS ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: David Gilbertson Pelos próximos minutos, quero que você esqueça o CSS, esqueça o desenvolvimento para a web e esqueça as interfaces digitais de usuário. À medida que você esquece essas coisas, quero que permita sua mente vagar. Voltar no tempo. De volta à sua juventude. De volta ao ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/a-maneira-100-correta-de-se-fazer-breakpoints-em-css/</link>
                <guid isPermaLink="false">66faaa989d6e9804088f1084</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 01 Oct 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-100-correct-way-to-do-css-breakpoints-88d6a5ba1862/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The 100% correct way to do CSS breakpoints</a>
      </p><p>Escrito por: David Gilbertson</p><p>Pelos próximos minutos, quero que você esqueça o CSS, esqueça o desenvolvimento para a web e esqueça as interfaces digitais de usuário.</p><p>À medida que você esquece essas coisas, quero que permita sua mente vagar. Voltar no tempo. De volta à sua juventude. De volta ao seu primeiro dia de escola.</p><p>Era um tempo mais simples, quando tudo com o que você precisava se preocupar era com desenhar formas e manter sua incontinência sob controle.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png" class="kg-image" alt="1_XoDgRc5GXaxo7j47ClsIgw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="49" loading="lazy"></figure><p>Dê uma olhada nos pontos acima. Percebe como alguns deles estão agrupados e outros estão espalhados? O que eu quero que você faça é dividi-los em cinco grupos para mim, da maneira que achar melhor.</p><p>Vá em frente. Após verificar que ninguém está olhando, desenhe um círculo ao redor de cada um dos cinco grupos com seu dedinho infantil.</p><p>Você, provavelmente, chegou a algo semelhante ao que está abaixo, certo? Seja o que for que você fizer, não me diga que rolou a página sem fazer o exercício. 😒</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png" class="kg-image" alt="1_cZcTR2tVMzYg1U1h3cqdNg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="69" loading="lazy"></figure><p>Claro, aqueles dois pontos à direita poderiam ir para qualquer um dos lados. Se você os agrupou juntos, tudo bem, eu acho. Dizem que não há resposta errada, mas eu nunca estive errado, então nunca estive do lado receptor desse ditado específico.</p><p>Antes de continuar, você desenhou algo assim?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png" class="kg-image" alt="1_RZryP0xAyOy1_WRpBdPIog" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png 800w" sizes="(min-width: 720px) 720px" width="800" height="67" loading="lazy"></figure><p>Provavelmente, não, certo?</p><p>É basicamente isso que você estaria fazendo se definisse seus <em>breakpoints</em> em posições correspondentes à largura exata dos dispositivos populares (320px, 768px, 1024px).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_pwC0py16i-sQr1agaP26QQ.png" class="kg-image" alt="1_pwC0py16i-sQr1agaP26QQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_pwC0py16i-sQr1agaP26QQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_pwC0py16i-sQr1agaP26QQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="67" loading="lazy"></figure><p>Já ouviu ou disse algo do tipo?</p><blockquote>"O breakpoint médio vai <em>até</em> 768px, ou inclui 768? Entendi... e isso é o modo paisagem do iPad, ou 'grande'? Ah, grande é de 768px <em>e acima</em>. Entendi. E pequeno é 320px? O que é essa faixa de 0 a 319px? Um breakpoint <em>para formigas</em>?"</blockquote><p>Eu poderia seguir em frente e mostrar os breakpoints corretos e deixar por isso mesmo, mas acho muito curioso que o método acima ("agrupamento bobo") seja tão disseminado.</p><p>Por que isso acontece?</p><p>Acho que a resposta para esse problema, como tantos outros problemas, se resume a terminologia desalinhada.</p><p>Acho que confundimos "limites" e "faixas" em nossas discussões e implementações de <em>breakpoints</em>.</p><p>Me diga, se você faz <em>breakpoints</em> no Sass, você tem uma variável chamada <code>$large</code> que é, digamos, 768px?</p><p>É o limite inferior da faixa que você chama de grande, ou o limite superior? Se for o inferior, então você não deve ter <code>$small</code> porque o valor deste deveria ser <code>0</code>, certo?</p><p>Se for o limite superior, então como você definiria um <em>breakpoint</em> <code>$extra-large</code>? Deve ser uma consulta de mídia com um <code>min-width</code> de <code>$medium</code>, certo?</p><p>Se você estiver se referindo apenas a um limite quando diz grande, então teremos confusão mais tarde porque uma consulta de mídia é sempre uma <em>faixa</em>.</p><p>Essa situação é uma bagunça e estamos perdendo tempo pensando nisso. Então, tenho três sugestões:</p><ol><li>Obtenha seus <em>breakpoints</em> corretamente</li><li>Nomeie suas <em>faixas</em> de maneira sensata</li><li>Seja declarativo</li></ol><h3 id="dica-n-1-obtenha-seus-breakpoints-corretamente">Dica nº 1: obtenha seus <em>breakpoints</em> corretamente</h3><p>Então, quais são os <em>breakpoints</em> corretos?</p><p>Seu "eu" de jardim de infância já desenhou os círculos. Eu apenas os transformarei em retângulos para você.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png" class="kg-image" alt="1_-ldpo5wcYVnuyRFbO24WPQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="60" loading="lazy"><figcaption>600px, 900px, 1200px e 1800px, se você planeja dar algo especial para as pessoas com monitores gigantes.</figcaption></figure><p>Aqueles pontos com os quais seu "eu" jovem se divertiu representam na verdade os 14 tamanhos de tela mais comuns:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png" class="kg-image" alt="1_199KbL2oM2P5d4pFMBXYxQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png 774w" sizes="(min-width: 720px) 720px" width="774" height="500" loading="lazy"><figcaption>Crédito da imagem: <a href="http://gs.statcounter.com/#desktop+mobile+tablet-resolution-ww-monthly-201608-201610-bar">http://gs.statcounter.com/#desktop+mobile+tablet-resolution-ww-monthly-201608-201610-bar</a></figcaption></figure><p>Então, podemos fazer uma imagem bonita que permita o fácil fluxo de palavras entre as pessoas vestidas como empresários, designers, desenvolvedores e testadores.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png" class="kg-image" alt="1_7YeOvzoYgUEDJdfQy2ERXg--1-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png 800w" sizes="(min-width: 720px) 720px" width="800" height="291" loading="lazy"><figcaption><em>Estou arrependido de minha escolha de laranja e verde, mas não vou refazer todas essas imagens agora.</em></figcaption></figure><h3 id="dica-n-2-nomeie-suas-faixas-de-maneira-sensata">Dica nº 2: nomeie suas faixas de maneira sensata</h3><p>Claro, você poderia nomear seus <em>breakpoints </em>de <a href="https://css-tricks.com/naming-media-queries/">papai urso e bebê urso</a>, se quiser. Se eu for me sentar com um designer, porém, e discutir como o site deve parecer em dispositivos diferentes, quero que seja o mais rápido possível. Se nomear um tamanho de <em>tablet em retrato</em> facilita isso, então ótimo. Aliás, até perdoaria você por chamar de "iPad em retrato".</p><p>O CSS do seu site, porém, tem uma vida útil de cerca de três anos (a menos que seja o Gmail). O iPad está conosco há o dobro desse tempo e ainda não foi destronado. Sabemos que a Apple não faz mais novos produtos, eles apenas removem coisas dos existentes (botões, buracos etc).</p><p>Então, o 1024 x 768 veio para ficar, pessoal. Vamos não enterrar nossas cabeças na areia. Fato curioso: avestruzes não vivem em cidades porque não há areia e, portanto, nenhum lugar para se esconder dos predadores.</p><p>Conclusão: a comunicação é importante. Não se desligue propositalmente de vocabulário útil.</p><h3 id="dica-n-3-seja-declarativo">Dica nº 3: seja declarativo</h3><p>Eu sei, eu sei, essa palavra "declarativo" de novo. Vou colocar de outra maneira: seu CSS deve definir <em>o que</em> ele quer que aconteça, não <em>como</em> deve acontecer. O "como" deve ficar escondido em algum tipo de <em>mixin</em>.</p><p>Como discutido anteriormente, parte da confusão em torno dos <em>breakpoints</em> é que as variáveis que definem um <em>limite</em> de um intervalo são usadas como o <em>nome</em> do intervalo. <code>$large: 600px</code> simplesmente não faz sentido se <code>large</code> é um intervalo. É o mesmo que dizer <code>var coordenadas = 4;</code>.</p><p>Podemos esconder esses detalhes dentro de um <em>mixin</em> em vez de expô-los para serem usados no código. Podemos fazer melhor e não usar variáveis de todo.</p><p>No início, eu fiz o trecho abaixo como um exemplo simplificado. Eu realmente acho que cobre todos os aspectos. Para vê-lo em ação, <a href="http://codepen.io/davidgilbertson/pen/aBpJzO">veja este pen</a>. Estou usando Sass porque não consigo imaginar construir um site sem ele. A lógica se aplica ao CSS ou Less da mesma maneira.</p><figure class="kg-card kg-code-card"><pre><code>@mixin for-phone-only {
  @media (max-width: 599px) { @content; }
}
@mixin for-tablet-portrait-up {
  @media (min-width: 600px) { @content; }
}
@mixin for-tablet-landscape-up {
  @media (min-width: 900px) { @content; }
}
@mixin for-desktop-up {
  @media (min-width: 1200px) { @content; }
}
@mixin for-big-desktop-up {
  @media (min-width: 1800px) { @content; }
}

// uso
.my-box {
  padding: 10px;

  @include for-desktop-up {
    padding: 20px;
  }
}
</code></pre><figcaption>Observe que estou forçando o desenvolvedor a especificar os sufixos <code>-up</code> ou <code>-only</code>.</figcaption></figure><blockquote>A ambiguidade gera confusão.</blockquote><p>Uma crítica óbvia pode ser que isso não lida com <em>media queries</em> personalizadas. Bem, boas notícias, pessoal. Se você quiser uma <em>media query</em> personalizada, escreva uma <em>media query</em> personalizada. Na prática, se eu precisasse de mais complexidade do que o acima, cortaria minhas perdas e correria para o abraço amoroso do kit de ferramentas <a href="http://susydocs.oddbird.net/en/latest/toolkit/#breakpoint">Susy</a>.</p><p>Outra crítica pode ser que eu tenho oito <em>mixins</em> aqui. Com certeza um único <em>mixin</em> seria a decisão mais sensata, para então passar o tamanho necessário, assim:</p><pre><code>@mixin for-size($size) {
  @if $size == phone-only {
    @media (max-width: 599px) { @content; }
  } @else if $size == tablet-portrait-up {
    @media (min-width: 600px) { @content; }
  } @else if $size == tablet-landscape-up {
    @media (min-width: 900px) { @content; }
  } @else if $size == desktop-up {
    @media (min-width: 1200px) { @content; }
  } @else if $size == big-desktop-up {
    @media (min-width: 1800px) { @content; }
  }
}

// uso
.my-box {
  padding: 10px;

  @include for-size(desktop-up) {
    padding: 20px;
  }
}
</code></pre><p>Claro, funciona. Porém, você não terá erros em tempo de compilação se passar um nome não suportado. Passar uma variável sass significa expor 8 variáveis só para passar para um <em>switch</em> em um <em>mixin</em>.</p><p>Sem mencionar que a sintaxe <code>@include for-desktop-up {...}</code> é muito mais bonita do que <code>@include for-size(desktop-up) {...}</code>.</p><p>Uma crítica de ambos esses trechos de código pode ser que estou digitando 900px duas vezes, e também 899px. Certamente eu deveria apenas usar variáveis e subtrair 1 quando necessário.</p><p>Se você quiser fazer isso, sinta-se à vontade, mas há duas razões pelas quais eu não o faria:</p><ol><li>Estas não são coisas que mudam frequentemente. Também não são números que são usados em outro lugar na base de código. Nenhum problema é causado pelo fato de que eles <em>não são</em> variáveis — a menos que você queira expor seus pontos de interrupção Sass para um script que injeta um objeto JS com essas variáveis na sua página.</li><li>A sintaxe é <em>horrível</em> quando você quer transformar números em strings com Sass. Abaixo está o preço que você paga por acreditar que repetir um número duas vezes é o pior de todos os males:</li></ol><pre><code>@mixin for-size($range) {
  $phone-upper-boundary: 600px;
  $tablet-portrait-upper-boundary: 900px;
  $tablet-landscape-upper-boundary: 1200px;
  $desktop-upper-boundary: 1800px;

  @if $range == phone-only {
    @media (max-width: #{$phone-upper-boundary - 1}) { @content; }
  } @else if $range == tablet-portrait-up {
    @media (min-width: $phone-upper-boundary) { @content; }
  } @else if $range == tablet-landscape-up {
    @media (min-width: $tablet-portrait-upper-boundary) { @content; }
  } @else if $range == desktop-up {
    @media (min-width: $tablet-landscape-upper-boundary) { @content; }
  } @else if $range == big-desktop-up {
    @media (min-width: $desktop-upper-boundary) { @content; }
  }
}

// uso
.my-box {
  padding: 10px;

  @include for-size(desktop-up) {
    padding: 20px;
  }
}
</code></pre><p>Ah, e já que adotei um tom de desabafo nos últimos parágrafos... eu sinto pena do tolo que faz algo mágico como armazenar <em>breakpoints</em> em uma lista do Sass e iterar sobre eles para gerar consultas de mídia, ou algo igualmente ridículo que futuros desenvolvedores terão dificuldade em decifrar.</p><p>Finalmente, você pode estar pensando "eu não deveria estar baseando meus pontos de interrupção no conteúdo, e não nos dispositivos?". Bem, estou maravilhado que você tenha chegado até aqui e a resposta é sim... para sites com um layout único. Ou se você tiver múltiplos layouts e estiver feliz em ter um conjunto diferente de <em>breakpoints</em> para cada layout. Ah, e também se o design do seu site não mudar com frequência, ou se você estiver feliz em atualizar seus <em>breakpoints</em> quando seus designs forem atualizados, já que você vai querer <em>mantê-los</em> baseados no conteúdo, certo?</p><p>Para sites complexos, a vida é muito mais fácil se você escolher alguns pontos de interrupção para usar em todo o site.</p><p>Terminamos! Este artigo não foi tão cheio de bichinhos quanto eu gostaria que fosse – deixe-me ver se consigo pensar em uma desculpa para incluir alguns...</p><p>Ah, já sei!</p><h3 id="dicas-b-nus-para-o-desenvolvimento-de-breakpoints">Dicas bônus para o desenvolvimento de <em>breakpoints</em></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png" class="kg-image" alt="1_ClU6ZZNLtd0ux8nqRPfhng" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png 800w" sizes="(min-width: 720px) 720px" width="800" height="460" loading="lazy"><figcaption><em>Sim, até mesmo o Flickr tem pontos de interrupção em 768 e 1400</em></figcaption></figure><ol><li>Se você precisar experimentar com <em>breakpoints</em> de CSS para tamanhos de tela maiores do que o monitor que você está usando, utilize o modo 'responsivo' nas ferramentas de desenvolvedor do Chrome e digite qualquer tamanho gigante que você quiser.</li><li>A barra azul mostra <em>media queries</em> com "largura máxima" (max-width), a barra laranja mostra <em>media queries</em> com "largura mínima" (min-width), e a barra verde mostra <em>media queries</em> com tanto uma largura mínima quanto uma máxima.</li><li>Clicar em uma <em>media query</em> ajusta a largura da tela para aquela largura. Se você clicar em uma <em>media query</em> verde mais de uma vez, ela alterna entre as larguras máxima e mínima.</li><li>Clique com o botão direito em uma <em>media query</em> na barra de <em>media queries</em> para ir à definição dessa regra no CSS.</li></ol><p>Ei, agradeço a leitura! Compartilhe o artigo, se acha que eu mereço, ou deixe ele no esquecimento, como ficará minha autoestima se você não o compartilhar. 😳</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O que é o sistema de arquivos? Tipos de sistemas de arquivos de computador e como funcionam – explicados com exemplos ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Reza Lavarian É um pouco complicado explicar exatamente o que é um sistema de arquivos em apenas uma frase. É por isso que decidi escrever um artigo sobre isso. Este artigo pretende ser uma visão geral de alto nível sobre sistemas de arquivos. Também examinarei alguns conceitos de ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-que-e-o-sistema-de-arquivos-tipos-de-sistemas-de-arquivos-de-computador-e-como-funcionam-explicados-com-exemplos/</link>
                <guid isPermaLink="false">66fa927d9d6e9804088f0e5e</guid>
                
                    <category>
                        <![CDATA[ Ciência da computação ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 30 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-photo-6571015.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/file-systems-architecture-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What Is a File System? Types of Computer File Systems and How they Work – Explained with Examples</a>
      </p><p>Escrito por: Reza Lavarian</p><p>É um pouco complicado explicar exatamente o que é um sistema de arquivos em apenas uma frase.</p><p>É por isso que decidi escrever um artigo sobre isso. Este artigo pretende ser uma visão geral de alto nível sobre sistemas de arquivos. Também examinarei alguns conceitos de mais baixo nível, desde que não fique entediante. 🙂</p><h2 id="o-que-um-sistema-de-arquivos">O que é um sistema de arquivos?</h2><p>Vamos começar com uma definição simples:</p><p>Um <strong>sistema de arquivos</strong> define como os arquivos são <strong>nomeados</strong>, <strong>armazenados</strong> e <strong>recuperados</strong> em um dispositivo de armazenamento.</p><p>Toda vez que você abre um arquivo em seu computador ou dispositivo inteligente, seu sistema operacional usa seu sistema de arquivos internamente para carregá-lo do dispositivo de armazenamento.</p><p>Quando você copia, edita ou exclui um arquivo, é o sistema de arquivos que lida com isso nos bastidores.</p><p>Sempre que você faz o download de um arquivo ou acessa uma página da web na Internet, um sistema de arquivos está envolvido também.</p><p>Por exemplo, se você acessar uma página no <a href="https://www.freecodecamp.org/">freeCodeCamp</a>, seu navegador envia uma <a href="https://www.decodingweb.dev/books/decoding-web-development/http">solicitação HTTP</a> (texto em inglês) ao servidor do freeCodeCamp para buscar a página. Se o recurso solicitado for um arquivo, ele é buscado de um sistema de arquivos.</p><p>Quando as pessoas falam em sistemas de arquivos, elas podem estar se referindo a diferentes aspectos de um sistema de arquivos dependendo do contexto – é aí que as coisas começam a parecer complicadas.</p><p>Você pode acabar se perguntando: O QUE É UM SISTEMA DE ARQUIVOS AFINAL? 🤯</p><p>Este guia ajudará você a entender sistemas de arquivos em muitos contextos. Também abordarei particionamento e inicialização!</p><p>Para manter este guia gerenciável, vou me concentrar em ambientes semelhantes ao Unix ao explicar os conceitos de baixo nível ou comandos de console.</p><p>No entanto, esses conceitos permanecem relevantes para outros ambientes e sistemas de arquivos.</p><h3 id="por-que-precisamos-de-um-sistema-de-arquivos-afinal-de-contas">Por que precisamos de um sistema de arquivos, afinal de contas?</h3><p>Bem, sem um sistema de arquivos, o dispositivo de armazenamento conteria um grande bloco de dados armazenados consecutivamente. O sistema operacional não seria capaz de distingui-los.</p><p>O termo sistema de arquivos vem dos antigos sistemas de gerenciamento de dados baseados em papel, onde mantínhamos documentos como arquivos e os colocávamos em diretórios.</p><p>Imagine uma sala com pilhas de papéis espalhados por todo o lugar.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-photo-6571015-1.jpg" class="kg-image" alt="pexels-photo-6571015-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/pexels-photo-6571015-1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/pexels-photo-6571015-1.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-photo-6571015-1.jpg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="1066" loading="lazy"></figure><p>Um dispositivo de armazenamento sem um sistema de arquivos estaria na mesma situação – e seria um dispositivo eletrônico inútil.</p><p>No entanto, um sistema de arquivos muda tudo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-photo-6571015-2.jpg" class="kg-image" alt="pexels-photo-6571015-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/pexels-photo-6571015-2.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/pexels-photo-6571015-2.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/pexels-photo-6571015-2.jpg 1600w" sizes="(min-width: 720px) 720px" width="1600" height="1066" loading="lazy"></figure><p>Um sistema de arquivos não é apenas uma função de contagem, no entanto.</p><p>Gerenciamento de espaço, metadados, criptografia de dados, controle de acesso a arquivos e integridade dos dados também são responsabilidades do sistema de arquivos.</p><h2 id="tudo-come-a-com-o-particionamento">Tudo começa com o particionamento</h2><p>Os dispositivos de armazenamento devem ser <strong>particionados</strong> e <strong>formatados</strong> antes de serem usados pela primeira vez.</p><p>O que é particionamento?</p><p>Particionamento é a divisão de um dispositivo de armazenamento em várias <em>regiões lógicas</em> para que possam ser gerenciadas separadamente como se fossem dispositivos de armazenamento separados.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/partitions.jpg" class="kg-image" alt="partitions" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/partitions.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/partitions.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/partitions.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/partitions.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="700" loading="lazy"></figure><p>Geralmente, fazemos o particionamento com uma ferramenta de gerenciamento de disco fornecida pelos sistemas operacionais ou com uma ferramenta de linha de comando fornecida pelo <em>firmware </em>do sistema (explicarei o que é <em>firmware</em> mais tarde).</p><p>Um dispositivo de armazenamento deve ter, pelo menos, uma partição – ou mais de uma, se necessário.</p><p>Por que devemos dividir os dispositivos de armazenamento em várias partições, afinal?</p><p>A razão é que não queremos gerenciar todo o espaço de armazenamento como uma única unidade e para um único propósito.</p><p>É semelhante ao modo como particionamos nosso espaço de trabalho, para separar (e isolar) salas de reunião, salas de conferência e várias equipes.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/office-space.jpeg" class="kg-image" alt="office-space" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/office-space.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/office-space.jpeg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/office-space.jpeg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/office-space.jpeg 2247w" sizes="(min-width: 720px) 720px" width="2247" height="1500" loading="lazy"></figure><p>Por exemplo, uma instalação básica do Linux tem três partições: uma partição dedicada ao sistema operacional, uma para os arquivos dos usuários e uma partição de <em>swap </em>opcional.</p><p>Uma partição de <em>swap </em>funciona como uma extensão da RAM quando a RAM fica sem espaço.</p><p>Por exemplo, o sistema operacional pode mover um trecho de dados (temporariamente) da RAM para a partição de <em>swap</em> para liberar algum espaço na RAM.</p><p>Os sistemas operacionais continuamente utilizam várias técnicas de <a href="https://www.decodingweb.dev/books/processing-fundamentals/operating-systems-and-memory-management">gerenciamento de memória</a> (texto em inglês) para garantir que cada processo tenha espaço de memória suficiente para funcionar.</p><p>Os sistemas de arquivos no Windows e do Mac têm um layout semelhante, mas não usam uma partição de <em>swap </em>dedicada; Em vez disso, eles gerenciam a troca dentro da partição onde você instalou seu sistema operacional.</p><p>Em um computador com várias partições, você pode instalar vários sistemas operacionais e, quando quiser, escolher um sistema operacional diferente para inicializar seu sistema.</p><p>As utilidades de recuperação e diagnóstico residem em partições dedicadas também.</p><p>Por exemplo, para inicializar um MacBook no modo de recuperação, você precisa segurar <code>Command + R</code> assim que reiniciar (ou ligar) seu MacBook. Fazendo isso, você instrui o <em>firmware </em>do sistema a inicializar com uma partição que contém o programa de recuperação.</p><p>O particionamento não é apenas uma maneira de instalar diversos sistemas operacionais e ferramentas, no entanto. Ele também nos ajuda a manter os arquivos críticos do sistema separados dos arquivos comuns.</p><p>De volta ao exemplo do escritório, ter um <em>call center</em> e uma equipe técnica em uma área comum prejudicaria a produtividade das duas equipes, pois cada equipe tem suas próprias necessidades para ser eficiente.</p><p>Por exemplo, a equipe técnica apreciaria um ambiente mais silencioso.</p><p>Alguns sistemas operacionais, como o Windows, atribuem uma letra de unidade (A, B, C ou D) às partições. Por exemplo, a <em>partição primária</em> no Windows (na qual o Windows está instalado) é conhecida como <strong>C</strong>:, ou <strong>unidade C</strong>.</p><p>Em sistemas operacionais semelhantes ao Unix, no entanto, as partições aparecem como diretórios comuns sob o diretório raiz – abordaremos isso mais tarde.</p><p>Na próxima seção, vamos nos aprofundar no particionamento e conhecer dois conceitos que mudarão sua perspectiva sobre sistemas de arquivos: <strong><em>firmware </em>do sistema</strong> e <strong><em>boot</em></strong>.</p><p>Está pronto?</p><p>Vamos lá! 🏊‍♂️</p><h2 id="esquemas-de-particionamento-firmware-de-sistema-e-boot">Esquemas de particionamento, <em>firmware</em> de sistema e <em>boot</em></h2><p>Ao particionar um dispositivo de armazenamento, temos dois métodos de particionamento (ou esquemas 🙄) para escolher:</p><ul><li><strong>Esquema Master Boot Record (MBR)</strong></li><li><strong>Esquema GUID Partition Table (GPT)</strong></li></ul><p>Independentemente do esquema de particionamento que você escolher, os primeiros blocos no dispositivo de armazenamento sempre conterão dados críticos sobre suas partições.</p><p>O <em>firmware</em> do sistema usa essas estruturas de dados para inicializar o sistema operacional em uma partição.</p><p>Espere, mas o que é <em>firmware</em> do sistema, você pode perguntar.</p><p>Aqui está uma explicação:</p><p>Um <em>firmware </em>é um software de baixo nível embutido em dispositivos eletrônicos para operar o dispositivo ou iniciar outro programa para fazer isso.</p><p>O <em>firmware</em> existe em computadores, periféricos (teclados, mouses e impressoras) ou até mesmo em eletrodomésticos e eletrônicos.</p><p>Nos computadores, o <em>firmware</em> fornece uma interface padrão para um <em>software</em> complexo como o sistema operacional fazer a inicialização e trabalhar com os componentes de <em>hardware</em>.</p><p>No entanto, em sistemas mais simples como uma impressora, o <em>firmware</em> é o sistema operacional. O menu que você usa na sua impressora é a interface do <em>firmware</em> dela.</p><p>Os fabricantes de <em>hardware</em> fazem <em>firmware</em> com base em duas especificações:</p><ul><li><strong><em>Basic Input/Output</em> (BIOS)</strong></li><li><strong><em>Unified Extensible Firmware Interface</em> (UEFI)</strong></li></ul><p><em>Firmwares</em> – baseados em BIOS ou UEFI – residem em uma <em>memória não volátil</em>, como uma ROM <em>flash</em> anexada à placa-mãe.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/02/5794340306_caef1e6960_b.jpg" class="kg-image" alt="Image" width="600" height="400" loading="lazy"><figcaption><em><a href="https://www.flickr.com/photos/computerhotline/5794340306">CC BY 2.0</a> BIOS, por <a href="https://www.flickr.com/photos/computerhotline/">Thomas Bresson</a>, licenciado pela <a href="https://creativecommons.org/licenses/by/2.0/">Creative Commons</a></em></figcaption></figure><p>Quando você pressiona o botão de energia do seu computador, o <em>firmware</em> é o primeiro programa a ser executado.</p><p>A missão do <em>firmware</em> (entre outras coisas) é inicializar o computador, executar o sistema operacional e passar o controle do sistema inteiro para ele.</p><p>Um <em>firmware</em> também executa ambientes anteriores ao sistema operacional (com suporte de rede), como ferramentas de recuperação ou diagnósticas, ou até mesmo um <em>shell</em> para executar comandos baseados em texto.</p><p>As primeiras telas que você vê antes de o logotipo do Windows aparecer são a saída do <em>firmware </em>do seu computador, verificando a integridade dos componentes de hardware e da memória.</p><p>A verificação inicial é confirmada com um bip (geralmente, em PCs), indicando que está tudo certo para prosseguir.</p><h2 id="particionamento-mbr-e-firmware-baseado-em-bios">Particionamento MBR e <em>firmware</em> baseado em BIOS</h2><p>O esquema de particionamento MBR faz parte das especificações do BIOS e é usado por <em>firmware</em> baseado em BIOS.</p><p>Em discos particionados com MBR, o primeiro setor no dispositivo de armazenamento contém dados essenciais para inicializar o sistema.</p><p>Esse setor é chamado de MBR.</p><p>O MBR contém as seguintes informações:</p><ul><li>O carregador de <em>boot </em>(em português, inicialização), que é um <strong>programa simples</strong> (em código de máquina) para iniciar a primeira etapa do processo de <em>boot</em></li><li>Uma <strong>tabela de partição</strong>, que contém informações sobre suas partições.</li></ul><p>O <em>firmware</em> baseado em BIOS inicializa o sistema de maneira diferente do firmware baseado em UEFI.</p><p>Veja como funciona:</p><p>Uma vez que o sistema é ligado, o <em>firmware</em> do BIOS começa e carrega o programa de carregamento de <em>boot</em> (contido no MBR) na memória. Uma vez que o programa está na memória, a CPU começa a executá-lo.</p><p>Ter o carregador de <em>boot </em>e a tabela de partição em um local predefinido como o MBR permite que o BIOS inicialize o sistema sem precisar lidar com qualquer arquivo.</p><p>Se você está curioso sobre como a CPU executa as instruções que residem na memória, você pode ler este guia amigável para iniciantes e divertido <a href="https://www.decodingweb.dev/books/processing-fundamentals/how-cpu-works">sobre como a CPU funciona</a> (texto em inglês).</p><p>O código do carregador de <em>boot</em> no MBR ocupa entre 434 bytes a 446 bytes do espaço do MBR (de um total de 512b). Além disso, 64 bytes são alocados para a tabela de partição, que pode conter informações de até quatro partições.</p><p>446 bytes não é suficiente para acomodar muito código, no entanto. Dito isso, carregadores de <em>boot </em>sofisticados como o <em>GRUB 2</em> no Linux dividem sua funcionalidade em partes ou etapas.</p><p>A menor parte do código, conhecida como <em>carregador de boot de primeira etapa</em>, é armazenada no MBR. É geralmente um programa simples, que não requer muito espaço.</p><p>A responsabilidade do carregador de <em>boot </em>de primeira etapa é iniciar as próximas etapas (mais complicadas) do processo de <em>boot</em>.</p><p>Imediatamente após o MBR e antes da primeira partição começar, há um pequeno espaço, cerca de 1MB, chamado de <strong><em>gap </em>do MBR</strong>.</p><p>O <em>gap </em>do MBR pode ser usado para colocar outra parte do programa de carregamento de <em>boot</em>, se necessário.</p><p>O <em>stage 1.5 </em>permite que os próximos estágios do GRUB compreendam o conceito de arquivos, em vez de carregar instruções brutas do dispositivo de armazenamento (como o carregador de <em>boot </em>de primeiro estágio).</p><p>O carregador de <em>boot </em>de segundo estágio, que agora é capaz de trabalhar com arquivos, pode carregar o arquivo do carregador de <em>boot </em>do sistema operacional para inicializar o respectivo sistema operacional.</p><p>É quando o logotipo do sistema operacional aparece...</p><p>Aqui está o layout de um dispositivo de armazenamento com partição MBR:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/mbr-partition.jpg" class="kg-image" alt="mbr-partition" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/mbr-partition.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/mbr-partition.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/mbr-partition.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/mbr-partition.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="800" loading="lazy"></figure><p>VIsto por dentro, o conteúdo do MBR teria esta aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/mbr.jpg" class="kg-image" alt="mbr" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/mbr.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/mbr.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/mbr.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/mbr.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="800" loading="lazy"></figure><p>Embora o MBR seja simples e amplamente suportado, ele tem algumas limitações 😑.</p><p>A estrutura de dados do MBR limita o número de partições a apenas <em>quatro partições primárias</em>.</p><p>Uma solução comum é fazer uma partição <em>estendida</em> ao lado das partições primárias, desde que o número total de partições não exceda quatro.</p><p>Uma partição estendida pode ser dividida em várias <em>partições lógicas</em>. Fazer partições estendidas é diferente em cada sistema operacional. Neste guia rápido, <a href="https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-more-than-four-partitions-on-a-biosmbr-based-hard-disk?view=windows-11">a Microsoft explica como deve ser feito no Windows</a> (texto em inglês).</p><p>Ao fazer uma partição, você pode escolher entre primária e estendida.</p><p>Depois que isso é resolvido, encontramos a segunda limitação.</p><p>Cada partição pode ter no máximo <strong>2TB</strong> 🙄.</p><p>Espere, tem mais!</p><p>O conteúdo do setor MBR não tem <em>back-up</em> 😱, o que significa que, se o MBR for corrompido por alguma razão inesperada, teremos que encontrar uma maneira de reciclar aquele pedaço inútil de <em>hardware</em>.</p><p>É aqui que o particionamento GPT se destaca 😎.</p><h2 id="particionamento-gpt-e-firmware-baseado-em-uefi">Particionamento GPT e <em>firmware</em> baseado em UEFI</h2><p>O esquema de particionamento <strong>GPT</strong> é mais sofisticado que o MBR e não possui as limitações do MBR.</p><p>Por exemplo, você pode ter tantas partições quantas seu sistema operacional permitir.</p><p>Cada partição pode ter o tamanho do maior dispositivo de armazenamento disponível no mercado – na verdade, muito mais.</p><p>O GPT está gradualmente substituindo o MBR, embora o MBR ainda seja amplamente suportado em PCs antigos e novos.</p><p>Como mencionado anteriormente, o GPT é uma parte da especificação UEFI, que está substituindo o bom e velho BIOS.</p><p>Isso significa que o <em>firmware</em> baseado em UEFI usa um dispositivo de armazenamento particionado com GPT para manejar o processo de <em>boot</em>.</p><p>Muitos <em>hardwares</em> e sistemas operacionais agora suportam UEFI e usam o esquema GPT para particionar dispositivos de armazenamento.</p><p>No esquema de particionamento GPT, o primeiro setor do dispositivo de armazenamento é reservado por razões de compatibilidade com sistemas baseados em BIOS. O motivo é que alguns sistemas ainda podem usar um <em>firmware</em> baseado em BIOS, mas têm um dispositivo de armazenamento particionado com GPT.</p><p>Este setor é chamado de <strong>MBR protetivo</strong> (é aqui que o carregador de <em>boot</em> de primeiro estágio residiria em um disco particionado com MBR).</p><p>Depois desse primeiro setor, são armazenadas as estruturas de dados GPT, incluindo o <strong>cabeçalho GPT</strong> e as <strong>entradas de partição</strong>.</p><p>É feito o <em>back-up</em> das entradas GPT e o cabeçalho GPT no final do dispositivo de armazenamento, para que possam ser recuperados se a cópia principal for corrompida.</p><p>Esse <em>back-up</em> é chamado de <strong>GPT Secundário.</strong></p><p>O layout de um dispositivo de armazenamento particionado com GPT se parece com isso:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/GUID_Partition_Table_Scheme.svg" class="kg-image" alt="GUID_Partition_Table_Scheme" width="400" height="550" loading="lazy"><figcaption><strong><a href="https://commons.wikimedia.org/wiki/File:GUID_Partition_Table_Scheme.svg">CC BY-SA 2.5</a> – Esquema da Tabela de Partição GUID,</strong> por <a href="https://en.wikipedia.org/wiki/User:Kbolino">Kbolino</a>, Licenciado sob a <a href="https://creativecommons.org/licenses/by-sa/2.5/">Creative Commons</a></figcaption></figure><p>No GPT, todos os serviços de <em>boot</em> (carregadores de <em>boot</em>, gerenciadores de <em>boot</em>, ambientes anteriores ao sistema operacional e <em>shells</em>) vivem em uma partição dedicada chamada <strong>partição de sistema EFI (ESP)</strong>, que o <em>firmware</em> UEFI pode usar.</p><p>A ESP até tem seu próprio sistema de arquivos, que é uma versão específica do <strong>FAT</strong>. No Linux, a ESP reside no caminho <code>/sys/firmware/efi</code>.</p><p>Se esse caminho não puder ser encontrado em seu sistema, então seu <em>firmware </em>é provavelmente baseado em BIOS.</p><p>Para verificar, você pode tentar mudar o diretório para o ponto de montagem do ESP, assim:</p><pre><code>cd /sys/firmware/efi
</code></pre><p>O firmware baseado em UEFI assume que o dispositivo de armazenamento está particionado com GPT e procura o ESP na tabela de partições GPT.</p><p>Uma vez encontrada a partição EFI, ele procura o carregador de <em>boot </em>configurado – geralmente, um arquivo com a terminação <code>.efi</code>.</p><p>O <em>firmware </em>baseado em UEFI obtém a configuração de <em>boot </em>de <strong>NVRAM</strong> (uma RAM não volátil).</p><p>A NVRAM contém as configurações de <em>boot </em>e os caminhos para os arquivos do carregador de <em>boot </em>do sistema operacional.</p><p>O <em>firmware </em>UEFI também pode fazer um <em>boot </em>no estilo BIOS (para inicializar o sistema a partir de um disco MBR) se configurado adequadamente.</p><p>Você pode usar o comando <code>parted</code> no Linux para ver qual esquema de particionamento é usado para um dispositivo de armazenamento.</p><pre><code>sudo parted -l
</code></pre><p>A saída seria algo assim:</p><pre><code>Model: Virtio Block Device (virtblk)
Disk /dev/vda: 172GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
14      1049kB  5243kB  4194kB                     bios_grub
15      5243kB  116MB   111MB   fat32              msftdata
 1      116MB   172GB   172GB   ext4
</code></pre><p>Com base na saída acima, o ID do dispositivo de armazenamento é <code>/dev/vda</code> com uma capacidade de 172GB. O dispositivo de armazenamento está particionado com base no GPT e possui três partições; a segunda e a terceira partições estão formatadas com base nos sistemas de arquivos FAT32 e EXT4, respectivamente.</p><p>Vamos confirmar isso com o comando <code>dmidecode</code> da seguinte maneira:</p><pre><code>sudo dmidecode -t 0
</code></pre><p>A saída seria:</p><pre><code># dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.

...
</code></pre><p>✅ Confirmado!</p><h2 id="formatando-parti-es">Formatando partições</h2><p>Quando o particionamento é concluído, as partições devem ser <strong>formatadas</strong>.</p><p>A maioria dos sistemas operacionais permite que você formate uma partição com base em um conjunto de sistemas de arquivos.</p><p>Por exemplo, se você estiver formatando uma partição no Windows, você pode escolher entre os sistemas de arquivos <strong>FAT32</strong>, <strong>NTFS</strong> e <strong>exFAT</strong>.</p><p>A formatação envolve a criação de várias <strong>estruturas de dados</strong> e metadados usados para gerenciar arquivos dentro de uma partição.</p><p>Essas estruturas de dados são um aspecto de um sistema de arquivos.</p><p>Vamos usar o sistema de arquivos NTFS como exemplo.</p><p>Quando você formata uma partição para NTFS, o processo de formatação coloca as principais estruturas de dados do NTFS e a <strong>Tabela Mestra de Arquivos (MFT)</strong> na partição.</p><p>Certo, vamos voltar aos sistemas de arquivos com nosso novo entendimento sobre particionamento, formatação e <em>boot</em>.</p><h2 id="como-come-ou-como-est-indo">Como começou, como está indo</h2><p>Um sistema de arquivos é um conjunto de estruturas de dados, interfaces, abstrações e APIs que trabalham juntos para gerenciar qualquer tipo de arquivo em qualquer tipo de dispositivo de armazenamento, de maneira consistente.</p><p>Cada sistema operacional usa um sistema de arquivos particular para gerenciar os arquivos.</p><p>Nos primeiros dias, a Microsoft usava <strong>FAT</strong> (FAT12, FAT16 e FAT32) na família <strong>MS-DOS</strong> e <strong>Windows 9x</strong>.</p><p>A partir do Windows <strong>NT 3.1</strong>, a Microsoft desenvolveu o <strong>New Technology File System (NTFS)</strong>, que possuía muitas vantagens sobre o FAT32, como suporte a arquivos maiores, permissão de nomes de arquivos mais longos, criptografia de dados, gerenciamento de acesso, <em>journaling</em>, e muito mais.</p><p>O NTFS tem sido o sistema de arquivos padrão da família Windows NT (2000, XP, Vista, 7, 10, etc.) desde então.</p><p>No entanto, NTFS não é adequado para ambientes que não sejam Windows 🤷🏻.</p><p>Por exemplo, você pode <strong>apenas ler</strong> o conteúdo de um dispositivo de armazenamento formatado em NTFS (como memória <em>flash</em>) em um Mac OS, mas você não poderá escrever nada nele – a menos que você instale um <a href="https://www.howtogeek.com/236055/how-to-write-to-ntfs-drives-on-a-mac/">driver NTFS com suporte a gravação</a> (texto em inglês).</p><p>Você pode simplesmente usar o sistema de arquivos <strong>exFat</strong>, em vez disso.</p><p><strong>Extended File Allocation Table (exFAT)</strong> é uma versão mais leve do NTFS criada pela Microsoft em 2006.</p><p>O exFAT foi projetado para dispositivos removíveis de alta capacidade, como discos rígidos externos, pen drives e cartões de memória.</p><p>O exFAT é o sistema de arquivos padrão usado pelos cartões <strong>SDXC</strong>.</p><p>Diferentemente do NTFS, o exFAT possui suporte para <strong>leitura e gravação</strong> em ambientes que não sejam Windows também, incluindo Mac OS — tornando-o o melhor sistema de arquivos multiplataforma para dispositivos de armazenamento removíveis de alta capacidade.</p><p>Basicamente, se você tem um disco removível que deseja usar no Windows, Mac e Linux, você precisa formatá-lo para exFAT.</p><p>A Apple também desenvolveu e usou vários sistemas de arquivos ao longo dos anos, incluindo <strong>Hierarchical File System (HFS)</strong>, <strong>HFS+</strong> e, recentemente, <strong>Apple File System (APFS)</strong>.</p><p>Assim como o NTFS, o APFS é um sistema de arquivos com <em>journaling</em> e tem sido usado desde o lançamento do <strong>OS X High Sierra</strong> em 2017.</p><p>O que ocorre, porém, com os sistemas de arquivos nas distribuições Linux?</p><p>A família de sistemas de arquivos <strong>Extended File System (ext)</strong> foi criada para o kernel do Linux – o núcleo do sistema operacional Linux.</p><p>A primeira versão do <strong>ext</strong> foi lançada em 1991, mas logo foi substituída pelo <strong>segundo sistema de arquivos estendido (ext2)</strong> em 1993.</p><p>Nos anos 2000, o <strong>terceiro sistema de arquivos estendido (ext3)</strong> e o <strong>quarto sistema de arquivos estendido (ext4)</strong> foram desenvolvidos para o Linux com capacidade de <em>journaling</em>.</p><p>O <strong>ext4</strong> é agora o sistema de arquivos padrão em muitas distribuições Linux, incluindo <a href="https://pt.wikipedia.org/wiki/Debian">Debian</a> e <a href="https://pt.wikipedia.org/wiki/Ubuntu_(sistema_operacional)">Ubuntu</a>.</p><p>Você pode usar o comando <code>findmnt</code> no Linux para listar suas partições formatadas em ext4:</p><pre><code>findmnt -lo source,target,fstype,used -t ext4
</code></pre><p>A saída seria algo assim:</p><pre><code>SOURCE    TARGET FSTYPE  USED
/dev/vda1 /      ext4    3.6G
</code></pre><h2 id="arquitetura-de-sistemas-de-arquivos">Arquitetura de sistemas de arquivos</h2><p>Um sistema de arquivos instalado em um sistema operacional consiste em três camadas:</p><ul><li><strong>Sistema de arquivos físico</strong></li><li><strong>Sistema de arquivos virtual</strong></li><li><strong>Sistema de arquivos lógico</strong></li></ul><p>Essas camadas podem ser implementadas como abstrações independentes ou fortemente acopladas.</p><p>Quando as pessoas falam sobre sistemas de arquivos, elas se referem a uma dessas camadas ou a todas as três como uma unidade.</p><p>Embora essas camadas sejam diferentes entre os sistemas operacionais, o conceito é o mesmo.</p><p>A camada física é a implementação concreta de um sistema de arquivos. Ela é responsável pelo armazenamento e recuperação de dados e gerenciamento de espaço no dispositivo de armazenamento (ou mais precisamente: partições).</p><p>O sistema de arquivos físico interage com o hardware de armazenamento por meio de <a href="https://www.decodingweb.dev/books/processing-fundamentals/how-a-computer-program-works#device-drivers">drivers de dispositivos</a> (texto em inglês).</p><p>A próxima camada é o sistema de arquivos virtual ou <strong>VFS</strong>.</p><p>O sistema de arquivos virtual fornece uma <strong>visão consistente</strong> de vários sistemas de arquivos montados no mesmo sistema operacional.</p><p>Então, isso significa que um sistema operacional pode usar vários sistemas de arquivos ao mesmo tempo?</p><p>A resposta é: sim!</p><p>É comum que um meio de armazenamento removível tenha um sistema de arquivos diferente do computador.</p><p>Por exemplo, no Windows (que usa NTFS como sistema de arquivos principal), uma memória <em>flash </em>pode ter sido formatada para exFAT ou FAT32.</p><p>Dito isso, o sistema operacional deve fornecer uma <strong>interface unificada</strong> entre programas de computador (exploradores de arquivos e outros aplicativos que trabalham com arquivos) e os diferentes sistemas de arquivos montados (como NTFS, APFS, ext4, FAT32, exFAT e UDF).</p><p>Esta camada conveniente entre o usuário (você) e os sistemas de arquivos subjacentes é fornecida pelo VFS.</p><p>Um VFS define um <em>contrato</em> que todos os sistemas de arquivos físicos devem implementar para serem suportados por esse sistema operacional.</p><p>No entanto, essa conformidade não está embutida no núcleo do sistema de arquivos, o que significa que o código-fonte de um sistema de arquivos não inclui suporte para o VFS de todos os sistemas operacionais.</p><p>Em vez disso, ele usa um <strong>driver de sistema de arquivos</strong> para aderir às regras do VFS de cada sistema de arquivos. Um driver é um programa que permite que um <em>software </em>se comunique com outro <em>software</em> ou <em>hardware</em>.</p><p>Embora o VFS seja responsável por fornecer uma interface padrão entre programas e diversos sistemas de arquivos, programas de computador não interagem diretamente com o VFS.</p><p>Em vez disso, eles usam uma API unificada entre programas e o VFS.</p><p>Consegue adivinhar o que é?</p><p>Sim, estamos falando do <strong>sistema de arquivos lógico</strong>.</p><p>O sistema de arquivos lógico é a parte visível ao usuário de um sistema de arquivos, que fornece uma API para permitir que programas de usuários realizem várias operações de arquivos, como <code>OPEN</code>, <code>READ</code> e <code>WRITE</code>, sem precisar lidar com nenhum <em>hardware </em>de armazenamento.</p><p>Por outro lado, o VFS fornece uma ponte entre a camada lógica (com a qual os programas interagem) e um conjunto da camada física de vários sistemas de arquivos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/filesystem-1.jpg" class="kg-image" alt="filesystem-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/filesystem-1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/filesystem-1.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/filesystem-1.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/filesystem-1.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="1137" loading="lazy"><figcaption><em>Uma arquitetura de alto nível das camadas do sistema de arquivos</em></figcaption></figure><h3 id="o-que-significa-montar-um-sistema-de-arquivos">O que significa montar um sistema de arquivos?</h3><p>Em sistemas do tipo Unix, o VFS atribui um <strong>ID do dispositivo</strong> (por exemplo, <code>dev/disk1s1</code>) a cada partição ou dispositivo de armazenamento removível.</p><p>Depois, ele cria uma <strong>árvore de diretórios virtual</strong> e coloca o conteúdo de cada dispositivo nessa árvore de diretórios como diretórios separados.</p><p>O ato de atribuir um diretório a um dispositivo de armazenamento (sob a árvore de diretórios raiz) é chamado de <strong>montagem</strong>. O diretório atribuído é chamado de <strong>ponto de montagem</strong>.</p><p>Dito isso, em um sistema operacional semelhante ao Unix, todas as partições e dispositivos de armazenamento removíveis aparecem como se fossem diretórios sob o diretório raiz.</p><p>Por exemplo, no Linux, os pontos de montagem para um dispositivo removível (como um cartão de memória), geralmente estão sob o diretório <code>/media</code>.</p><p>Uma vez que uma memória <em>flash </em>é conectada ao sistema e, consequentemente, <em>montada automaticamente</em> no ponto de montagem padrão (<code>/media</code>, nesse caso), seu conteúdo estaria disponível sob o diretório <code>/media</code>.</p><p>No entanto, há momentos em que você precisa montar um sistema de arquivos manualmente.</p><p>No Linux, isso é feito assim:</p><pre><code>mount /dev/disk1s1 /media/usb
</code></pre><p>No comando acima, o primeiro parâmetro é o ID do dispositivo (<code>/dev/disk1s1</code>), e o segundo parâmetro (<code>/media/usb</code>) é o ponto de montagem.</p><p>Observe que o ponto de montagem já deve existir como um diretório.</p><p>Se não existir, ele deve ser criado primeiro:</p><pre><code>mkdir -p /media/usb
mount /dev/disk1s1 /media/usb
</code></pre><p>Se o diretório do ponto de montagem já contiver arquivos, esses arquivos serão ocultados enquanto o dispositivo estiver montado.</p><h2 id="metadados-de-arquivos">Metadados de arquivos</h2><p>Metadados de arquivo são uma estrutura de dados que contém <strong>dados sobre um arquivo</strong>, como:</p><ul><li>Tamanho do arquivo</li><li><em>Timestamps</em>, como data de criação, última data de acesso e data de modificação</li><li>O proprietário do arquivo</li><li>O modo do arquivo (quem pode fazer o que com o arquivo)</li><li>Que blocos na partição estão alocados ao arquivo</li><li>e muito mais</li></ul><p>No entanto, os metadados não são armazenados com o conteúdo do arquivo. Em vez disso, eles são armazenados em um local diferente no disco – mas associados ao arquivo.</p><p>Em sistemas do tipo Unix, os metadados estão na forma de estruturas de dados, chamadas de <strong>inode</strong>.</p><p>Inodes são identificados por um número único chamado <em>número de inode.</em></p><p>Inodes estão associados a arquivos em uma tabela chamada <em>tabelas de inodes</em>.</p><p>Cada arquivo no dispositivo de armazenamento tem um inode, que contém informações sobre ele, como a hora em que foi criado, modificado etc.</p><p>O inode também inclui o endereço dos blocos alocados ao arquivo; por outro lado, onde exatamente ele está localizado no dispositivo de armazenamento.</p><p>Em um inode ext4, o endereço dos blocos alocados é armazenado como um conjunto de estruturas de dados chamadas <strong><em>extents</em></strong> (dentro do inode).</p><p>Cada <em>extent</em> contém o endereço do <em>primeiro bloco de dados</em> alocado ao arquivo e o número de <em>blocos contínuos</em> que o arquivo ocupou.</p><p>Sempre que você abre um arquivo no Linux, seu nome é primeiro resolvido para um número de inode.</p><p>Com o número de inode, o sistema de arquivos busca o respectivo inode na tabela de inodes.</p><p>Uma vez que o inode é buscado, o sistema de arquivos começa a compor o arquivo dos blocos de dados registrados no inode.</p><p>Você pode usar o comando <code>df</code> com o parâmetro <code>-i</code> no Linux para ver os inodes (total, usados e livres) em suas partições:</p><pre><code>df -i
</code></pre><p>A saída seria assim:</p><pre><code>udev           4116100    378 4115722    1% /dev
tmpfs          4118422    528 4117894    1% /run
/dev/vda1      6451200 175101 6276099    3% /
</code></pre><p>Como você pode ver, a partição <code>/dev/vda1</code> tem um número total de 6.451.200 inodes, dos quais 3% foram usados (175.101 inodes).</p><p>Para ver os inodes associados aos arquivos em um diretório, você pode usar o comando <code>ls</code> com os parâmetros <code>-il</code>.</p><pre><code>ls -li
</code></pre><p>A saída seria:</p><pre><code>1303834 -rw-r--r--  1 root www-data  2502 Jul  8  2019 wp-links-opml.php
1303835 -rw-r--r--  1 root www-data  3306 Jul  8  2019 wp-load.php
1303836 -rw-r--r--  1 root www-data 39551 Jul  8  2019 wp-login.php
1303837 -rw-r--r--  1 root www-data  8403 Jul  8  2019 wp-mail.php
1303838 -rw-r--r--  1 root www-data 18962 Jul  8  2019 wp-settings.php
</code></pre><p>O número de inodes em uma partição é decidido quando você formata uma partição. Dito isso, enquanto você tiver espaço livre e inodes não utilizados, você pode armazenar arquivos no seu dispositivo de armazenamento.</p><p>É improvável que um sistema operacional Linux pessoal fique sem inodes. No entanto, serviços empresariais que lidam com um grande número de arquivos (como servidores de e-mail) precisam gerenciar sua cota de inodes de maneira inteligente.</p><p>No NTFS, os metadados são armazenados de maneira diferente.</p><p>O NTFS mantém informações de arquivos em uma estrutura de dados chamada <strong><a href="https://docs.microsoft.com/en-us/windows/win32/fileio/master-file-table">Tabela Mestra de Arquivos (MFT)</a></strong> (texto em inglês).</p><p>Cada arquivo tem, pelo menos, uma entrada na MFT, que contém tudo sobre ele, incluindo sua localização no dispositivo de armazenamento – semelhante à tabela de inodes.</p><p>Na maioria dos sistemas operacionais, você pode obter metadados através da interface gráfica do usuário.</p><p>Por exemplo, ao clicar com o botão direito do mouse em um arquivo no Mac OS e selecionar <strong>Obter Informações</strong> (Propriedades, no Windows), uma janela aparece com informações sobre o arquivo. Essas informações são obtidas dos metadados respectivos do arquivo.</p><h2 id="gerenciamento-de-espa-o">Gerenciamento de espaço</h2><p>Dispositivos de armazenamento são divididos em blocos de tamanho fixo chamados <strong>setores</strong>.</p><p>Um setor é a <strong>unidade mínima de armazenamento</strong> em um dispositivo de armazenamento e varia entre 512 bytes e 4096 bytes (formatação avançada).</p><p>No entanto, sistemas de arquivos usam um conceito de alto nível como unidade de armazenamento, chamados <strong>blocos</strong>.</p><p>Blocos são uma abstração sobre setores físicos; cada bloco geralmente consiste em diversos setores.</p><p>Dependendo do tamanho do arquivo, o sistema de arquivos aloca um ou mais blocos para cada arquivo.</p><p>Falando sobre gerenciamento de espaço, o sistema de arquivos está ciente de todos os blocos <em>usados</em> e <em>não usados</em> nas partições, para que ele possa alocar espaço para novos arquivos ou buscar os existentes quando solicitado.</p><p>A unidade de armazenamento mais básica em partições formatadas em ext4 é o bloco. No entanto, os blocos contíguos são agrupados em <strong>grupos de blocos</strong> para facilitar a gestão.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/block-group.jpg" class="kg-image" alt="block-group" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/block-group.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/block-group.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/block-group.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/block-group.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="876" loading="lazy"><figcaption><em>A disposição de um grupo de blocos dentro de uma partição ext4</em></figcaption></figure><p>Cada grupo de blocos tem suas próprias estruturas de dados e blocos de dados.</p><p>Aqui estão as estruturas de dados que um grupo de blocos pode conter:</p><ul><li><strong>Superbloco:</strong> um repositório de metadados, que contém metadados sobre todo o sistema de arquivos, como o número total de blocos no sistema de arquivos, total de blocos em grupos de blocos, inodes e mais. Nem todos os grupos de blocos contêm o superbloco, no entanto. Um certo número de grupos de blocos armazena uma cópia do superbloco como <em>back-up</em>.</li><li><strong>Descritores de grupo:</strong> os descritores de grupo também contêm informações contábeis para cada grupo de blocos.</li><li><strong>Bitmap de inodes:</strong> cada grupo de blocos tem sua própria cota de inodes para armazenar arquivos. Um bitmap de blocos é uma estrutura de dados usada para identificar inodes <em>usados</em> e <em>não usados</em> dentro do grupo de blocos. <code>1</code> denota objetos de inode usados e <code>0</code> denota objetos de inode não usados.</li><li><strong>Bitmap de blocos:</strong> uma estrutura de dados usada para identificar blocos de dados usados e não usados dentro do grupo de blocos. <code>1</code> denota blocos de dados usados e <code>0</code> denota blocos de dados não usados.</li><li><strong>Tabela de inodes:</strong> uma estrutura de dados que define a relação de arquivos e seus inodes. O número de inodes armazenados nesta área está relacionado ao tamanho do bloco usado pelo sistema de arquivos.</li><li><strong>Blocos de dados:</strong> esta é a zona dentro do grupo de blocos onde os conteúdos dos arquivos são armazenados.</li></ul><p>O sistema de arquivos ext4 dá um passo adiante (comparado ao ext3) e organiza grupos de blocos em um grupo maior chamado <em>grupos de blocos flex</em>.</p><p>As estruturas de dados de cada grupo de blocos, incluindo o bitmap de blocos, bitmap de inodes e tabela de inodes, são <em>concatenadas</em> e armazenadas no <em>primeiro grupo de blocos</em> dentro de cada grupo de blocos flex.</p><p>Ter todas as estruturas de dados concatenadas em um grupo de blocos (o primeiro) libera mais blocos de dados contíguos nos outros grupos de blocos dentro de cada grupo de blocos flex.</p><p>Esses conceitos podem ser confusos, mas você não precisa dominar cada detalhe. Isso é só para ilustrar a profundidade dos sistemas de arquivos.</p><p>A disposição do primeiro grupo de blocos é assim:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/block-group-detail.jpg" class="kg-image" alt="block-group-detail" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/block-group-detail.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/block-group-detail.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/block-group-detail.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/block-group-detail.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="485" loading="lazy"><figcaption><em>A disposição do primeiro bloco em um grupo de blocos flex do ext4</em></figcaption></figure><p>Quando um arquivo está sendo escrito em um disco, ele é escrito em um ou mais blocos dentro de um grupo de blocos.</p><p>Gerenciar arquivos no nível do grupo de blocos melhora significativamente o desempenho do sistema de arquivos, em oposição a organizar arquivos como uma única unidade.</p><h3 id="tamanho-x-tamanho-no-disco">Tamanho x tamanho no disco</h3><p>Você já notou que seu explorador de arquivos exibe dois tamanhos diferentes para cada arquivo: <strong>tamanho</strong> e <strong>tamanho no disco</strong>?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/disksize-1.jpg" class="kg-image" alt="disksize-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/disksize-1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/disksize-1.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/disksize-1.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/disksize-1.jpg 2220w" sizes="(min-width: 720px) 720px" width="2220" height="1137" loading="lazy"><figcaption><em>Tamanho e tamanho no disco</em></figcaption></figure><p></p><p>Por que <code>tamanho</code> e <code>tamanho no disco</code> são ligeiramente diferentes, você pode perguntar?</p><p>Aqui está uma explicação:</p><p>Já sabemos que, dependendo do tamanho do arquivo, um ou mais blocos são alocados para um arquivo.</p><p>Um bloco é o espaço mínimo que pode ser alocado para um arquivo. Isso significa que o espaço restante de um bloco parcialmente preenchido não pode ser usado por outro arquivo. Esta é a regra!</p><p>Como o tamanho do arquivo <em>não é um múltiplo inteiro de blocos</em>, o último bloco pode estar parcialmente usado, e o espaço restante permaneceria não utilizado – ou seria preenchido com zeros.</p><p>Assim, "tamanho" é basicamente o tamanho real do arquivo, enquanto "tamanho no disco" é o espaço que ele ocupa, mesmo que não esteja usando tudo.</p><pre><code>du -b "some-file.txt"
</code></pre><p>A saída seria algo assim:</p><pre><code>623 icon-link.svg
</code></pre><p>Para verificar o tamanho no disco, use:</p><pre><code>du -B 1 "icon-link.svg"
</code></pre><p>Isso resultará em:</p><pre><code>4096    icon-link.svg
</code></pre><p>Com base na saída, o bloco alocado é de cerca de 4kb, enquanto o tamanho real do arquivo é de 623 bytes. Isso significa que cada bloco de tamanho neste sistema operacional é de 4kb.</p><h3 id="o-que-fragmenta-o-de-disco">O que é fragmentação de disco?</h3><p>Com o tempo, novos arquivos são gravados no disco, arquivos existentes aumentam, diminuem ou são deletados.</p><p>Essas mudanças frequentes no meio de armazenamento deixam muitos pequenos espaços vazios (lacunas) entre os arquivos. Essas lacunas ocorrem pelo mesmo motivo pelo qual o tamanho do arquivo e o tamanho do arquivo no disco são diferentes. Alguns arquivos não preencherão o bloco inteiro, e muito espaço será desperdiçado. Com o tempo, não haverá blocos consequentes suficientes para armazenar novos arquivos.</p><p>É então que novos arquivos precisam ser armazenados como fragmentos.</p><p>A <strong>fragmentação de arquivos</strong> ocorre quando um arquivo é armazenado como fragmentos no dispositivo de armazenamento porque o sistema de arquivos não consegue encontrar blocos contíguos suficientes para armazenar o arquivo inteiro em uma sequência.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/disk_image-1.jpg" class="kg-image" alt="disk_image-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/disk_image-1.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/disk_image-1.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/disk_image-1.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/disk_image-1.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1024" loading="lazy"><figcaption><em>Um exemplo de arquivo fragmentado e não fragmentado</em></figcaption></figure><p>Vamos deixar mais claro com um exemplo.</p><p>Imagine que você tem um documento do Word chamado <code>meuarquivo.docx</code>.</p><p><code>meuarquivo.docx</code> é inicialmente armazenado em alguns blocos contíguos no disco. Vamos dizer que é assim que os blocos são nomeados: <code>LBA250</code>, <code>LBA251</code> e <code>LBA252</code>.</p><p>Agora, se você adicionar mais conteúdo a <code>meuarquivo.docx</code> e salvá-lo, ele precisará ocupar mais blocos no meio de armazenamento.</p><p>Como <code>meuarquivo.docx</code> está atualmente armazenado em <code>LBA250</code>, <code>LBA251</code> e <code>LBA252</code>, o novo conteúdo deveria, de preferência, ficar dentro de <code>LBA253</code> e assim por diante - dependendo de quantos mais blocos são necessários para acomodar as novas mudanças.</p><p>Agora, imagine que <code>LBA253</code> já esteja ocupado por outro arquivo (talvez seja o primeiro bloco de outro arquivo). Nesse caso, o novo conteúdo de <code>meuarquivo.docx</code> precisa ser armazenado em blocos diferentes em outro lugar no disco, por exemplo, <code>LBA312</code> e <code>LBA313</code>.</p><p><code>meuarquivo.docx</code> ficou fragmentado 💔.</p><p>A fragmentação de arquivo coloca uma sobrecarga no sistema de arquivos, pois, toda vez que um arquivo fragmentado é solicitado por um programa de usuário, o sistema de arquivos precisa coletar cada pedaço do arquivo de várias localizações no disco.</p><p>Essa sobrecarga também se aplica ao salvar o arquivo de volta no disco.</p><p>A fragmentação também pode ocorrer quando um arquivo é gravado no disco pela primeira vez, provavelmente porque o arquivo é grande e não há muitos blocos contínuos deixados na partição.</p><p>A fragmentação é uma das razões pelas quais alguns sistemas operacionais ficam lentos à medida que o sistema de arquivos envelhece.</p><h3 id="devemos-nos-preocupar-com-a-fragmenta-o-atualmente">Devemos nos preocupar com a fragmentação atualmente?</h3><p>A resposta curta é: não mais!</p><p>Os sistemas de arquivos modernos usam algoritmos inteligentes para evitar (ou detectar precocemente) a fragmentação tanto quanto possível.</p><p>O Ext4 também faz uma espécie de <strong>pré-alocação</strong>, que envolve reservar blocos para um arquivo antes que eles sejam realmente necessários – garantindo que o arquivo não seja fragmentado se crescer ao longo do tempo.</p><p>O número de <em>blocos pré-alocados</em> é definido no <em>campo de comprimento</em> da extensão do arquivo de seu objeto inode.</p><p>Além disso, o Ext4 usa uma técnica de alocação chamada <strong>alocação atrasada</strong>.</p><p>A ideia é que, ao invés de gravar nos blocos de dados um de cada vez durante uma gravação, as solicitações de alocação são acumuladas em um buffer e são gravadas no disco de uma vez só.</p><p>Não precisar chamar o <em>alocador de blocos</em> do sistema de arquivos em cada solicitação de gravação ajuda o sistema de arquivos a fazer melhores escolhas ao distribuir o espaço disponível. Por exemplo, ao colocar arquivos grandes afastados dos arquivos menores.</p><p>Imagine que um arquivo pequeno esteja localizado entre dois arquivos grandes. Agora, se o arquivo pequeno for excluído, ele deixa um pequeno espaço entre os dois arquivos.</p><p>Distribuir os arquivos dessa maneira deixa lacunas suficientes entre os blocos de dados, o que ajuda o sistema de arquivos a gerenciar (e evitar) a fragmentação mais facilmente.</p><p>A alocação atrasada reduz ativamente a fragmentação e aumenta o desempenho.</p><h2 id="diret-rios">Diretórios</h2><p>Um diretório (ou pasta, no Windows) é um arquivo especial usado como um <strong>contêiner lógico</strong> para agrupar arquivos e diretórios dentro de um sistema de arquivos.</p><p>No NTFS e no Ext4, diretórios e arquivos são tratados da mesma maneira. Dito isso, diretórios são apenas arquivos que têm seu próprio inode (no Ext4) ou entrada MFT (no NTFS).</p><p>O inode ou entrada MFT de um diretório contém informações sobre esse diretório, bem como uma coleção de entradas apontando para os arquivos "sob" esse diretório.</p><p>Os arquivos não estão literalmente contidos dentro do diretório, mas estão associados ao diretório de tal maneira que aparecem como filhos do diretório em um nível superior, como em um programa de explorador de arquivos.</p><p>Essas entradas são chamadas de <strong>entradas de diretório</strong>. As entradas de diretório contêm nomes de arquivos mapeados para suas entradas inode/MFT.</p><p>Além das entradas de diretório, há mais duas entradas, a entrada <code>.</code>, que aponta para o próprio diretório, e a entrada <code>..</code>, que aponta para o diretório pai deste diretório.</p><p>No Linux, você pode usar o comando <code>ls</code> em um diretório para ver as entradas do diretório com seus números de inode associados:</p><pre><code>ls -lai
</code></pre><pre><code class="language-md">63756 drwxr-xr-x 14 root root   4096 Dec  1 17:24 .
     2 drwxr-xr-x 19 root root   4096 Dec  1 17:06 ..
 81132 drwxr-xr-x  2 root root   4096 Feb 18 06:25 backups
 81020 drwxr-xr-x 14 root root   4096 Dec  2 07:01 cache
 81146 drwxrwxrwt  2 root root   4096 Oct 16 21:43 crash
 80913 drwxr-xr-x 46 root root   4096 Dec  1 22:14 lib

 ...
</code></pre><h2 id="regras-para-nomea-o-de-arquivos">Regras para nomeação de arquivos</h2><p>Alguns sistemas de arquivos impõem limitações sobre nomes de arquivos.</p><p>A limitação pode estar no <strong>comprimento do nome do arquivo</strong> ou na <strong>sensibilidade de maiúsculas e minúsculas no nome do arquivo</strong>.</p><p>Por exemplo, em sistemas de arquivos NTFS (Windows) e APFS (Mac), <code>MeuArquivo</code> e <code>meuarquivo</code> referem-se ao mesmo arquivo, enquanto no ext4 (Linux), eles apontam para arquivos diferentes.</p><p>Por que isso importa, você pode perguntar.</p><p>Imagine que você está criando uma página da web em seu computador com Windows. A página da web contém o logotipo da sua empresa, que é um arquivo PNG, assim:</p><pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Produtos - Seu Site&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;!--ALGUM CONTEÚDO--&gt;
        &lt;img src="img/logo.png"&gt;
        &lt;!--MAIS CONTEÚDO--&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Se o nome real do arquivo for <code>Logo.png</code> (note o <strong>L</strong> maiúsculo), você ainda pode ver a imagem quando abre sua página da web no navegador (em seu computador com Windows).</p><p>No entanto, uma vez que você o implante em um servidor Linux e visualize-o ao vivo, verá uma imagem quebrada.</p><p>Por quê?</p><p>Porque no Linux (sistema de arquivos ext4) <code>logo.png</code> e <code>Logo.png</code> apontam para dois arquivos diferentes.</p><p>Portanto, lembre-se disso ao desenvolver no Windows e implantar em um servidor Linux.</p><h2 id="regras-para-tamanho-de-arquivo">Regras para tamanho de arquivo</h2><p>Um aspecto importante dos sistemas de arquivos é o <strong>tamanho máximo de arquivo</strong> que eles suportam.</p><p>Um sistema de arquivos antigo como o <strong>FAT32</strong> (usado pelo MS-DOS +7.1, família Windows 9x e memórias <em>flash</em>) não pode armazenar arquivos maiores que 4 GB, enquanto seu sucessor, o <strong>NTFS</strong> permite tamanhos de arquivo de até <strong>16 EB</strong> (1000 TB).</p><p>Como o NTFS, o exFAT também permite um tamanho de arquivo de 16 EB. Isso torna o exFAT uma opção ideal para armazenar objetos de dados massivos, como arquivos de vídeo.</p><p>Praticamente, não há limitação no tamanho do arquivo nos sistemas de arquivos exFAT e NTFS.</p><p>O ext4 do Linux e o APFS da Apple suportam arquivos de até <strong>16 TiB</strong> e <strong>8 EiB</strong> respectivamente.</p><h2 id="programas-gerenciadores-de-arquivos">Programas gerenciadores de arquivos</h2><p>Como você sabe, a camada lógica do sistema de arquivos fornece uma API para permitir que aplicações do usuário realizem operações de arquivo, como operações de <code>leitura</code>, <code>escrita</code>, <code>exclusão</code> e <code>execução</code>.</p><p>A API do sistema de arquivos é um mecanismo de baixo nível, projetado para programas de computador, ambientes de tempo de execução e <em>shells</em> – ela não é projetada para uso diário.</p><p>Dito isso, os sistemas operacionais fornecem utilitários convenientes de gerenciamento de arquivos prontos para o uso diário de gerenciamento de arquivos.</p><p>Por exemplo, o <strong>Explorador de Arquivos</strong> no Windows, o <strong>Finder</strong> no Mac OS e o <strong>Nautilus</strong> no Ubuntu são exemplos de programas gerenciadores de arquivos.</p><p>Esses utilitários usam a API do sistema de arquivos lógico por trás dos panos.</p><p>Além dessas ferramentas GUI, os sistemas operacionais também expõem as APIs do sistema de arquivos através das interfaces de linha de comando, como Prompt de Comando no Windows e Terminal no Mac e Linux.</p><p>Essas interfaces baseadas em texto ajudam os usuários a realizar todos os tipos de operações de arquivo como comandos de texto – como fizemos nos exemplos anteriores.</p><h2 id="gerenciamento-de-acesso-a-arquivos">Gerenciamento de acesso a arquivos</h2><p>Nem todos devem ser capazes de remover ou modificar um arquivo que não possuem ou não estão autorizados a fazê-lo.</p><p>Sistemas de arquivos modernos fornecem mecanismos para controlar o acesso e as capacidades dos usuários em relação aos arquivos.</p><p>Os dados relativos às permissões do usuário e à propriedade dos arquivos são armazenados em uma estrutura de dados chamada Lista de Controle de Acesso (ACL) no Windows ou Entradas de Controle de Acesso (ACE) em sistemas operacionais do tipo Unix (Linux e Mac OS).</p><p>Esse recurso também está disponível na CLI (Prompt de comando ou Terminal), onde um usuário pode alterar a propriedade dos arquivos ou limitar as permissões de cada arquivo diretamente na interface de linha de comando.</p><p>Por exemplo, um proprietário de arquivo (no Linux ou Mac) pode configurar um arquivo para estar disponível ao público, assim:</p><pre><code>chmod 777 meuarquivo.txt
</code></pre><p><code>777</code> significa que todos podem realizar todas as operações (leitura, escrita, execução) em <code>meuarquivo.txt</code>. Note que este é apenas um exemplo. Você não deve definir a permissão de um arquivo para <code>777</code>.</p><h2 id="mantendo-a-integridade-dos-dados">Mantendo a integridade dos dados</h2><p>Digamos que você esteja trabalhando em sua tese há um mês. Um dia, você abre o arquivo, faz algumas alterações e o salva.</p><p>Depois de salvar o arquivo, seu programa de processador de texto envia uma solicitação de "escrita" para a API do sistema de arquivos (o sistema de arquivos lógico).</p><p>A solicitação acaba sendo passada para a camada física para armazenar o arquivo em vários blocos.</p><p>O que acontece, porém, se o sistema travar enquanto a versão anterior do arquivo está sendo substituída pela nova versão?</p><p>Em sistemas de arquivos mais antigos (como FAT32 ou ext2), os dados seriam corrompidos porque foram parcialmente escritos no disco.</p><p>Isso é menos provável de acontecer com sistemas de arquivos modernos, pois eles usam uma técnica chamada <strong><em>journaling</em></strong>.</p><p>Os sistemas de arquivos com <em>journaling</em> registram cada operação que está prestes a acontecer na camada física, mas que ainda não aconteceu.</p><p>O objetivo principal é manter o controle das alterações que ainda não foram comprometidas fisicamente com o sistema de arquivos.</p><p>O <em>journal</em> é uma alocação especial no disco onde cada tentativa de escrita é primeiro armazenada como uma <strong>transação</strong>.</p><p>Em caso de falha do sistema, o sistema de arquivos detectará a transação incompleta e a cancelará como se nunca tivesse acontecido.</p><p>Dito isso, o novo conteúdo (que estava sendo escrito) ainda pode ser perdido, mas os dados existentes permaneceriam intactos.</p><p>Sistemas de arquivos modernos, como NTFS, APFS e ext4 (até mesmo o ext3), usam <em>journaling </em>para evitar dados corrompidos em caso de falha do sistema.</p><h2 id="sistemas-de-arquivos-de-banco-de-dados">Sistemas de arquivos de banco de dados</h2><p>Sistemas de arquivos típicos organizam arquivos como árvores de diretórios.</p><p>Para acessar um arquivo, você navega até o respectivo diretório e pronto.</p><pre><code>cd /music/country/highwayman
</code></pre><p>No entanto, em um sistema de arquivos de banco de dados, não há conceito de caminhos e diretórios.</p><p>O sistema de arquivos de banco de dados é um <strong>sistema facetado</strong> que agrupa arquivos com base em vários <em>atributos</em> e <em>dimensões</em>.</p><p>Por exemplo, arquivos MP3 podem ser listados por artista, gênero, ano de lançamento e álbum – ao mesmo tempo!</p><p>Um sistema de arquivos de banco de dados é mais como uma aplicação de alto nível para ajudá-lo a organizar e acessar seus arquivos de maneira mais fácil e eficiente. No entanto, você não poderá acessar os arquivos brutos fora dessa aplicação.</p><p>Um sistema de arquivos de banco de dados não pode substituir um sistema de arquivos típico, no entanto. É apenas uma abstração de alto nível para facilitar a gestão de arquivos em alguns sistemas.</p><p>O aplicativo <strong>iTunes</strong> no Mac OS é um bom exemplo de um sistema de arquivos de banco de dados.</p><h2 id="concluindo">Concluindo</h2><p>Uau! Você chegou até o fim do artigo – o que significa que agora sabe muito mais sobre sistemas de arquivos. Tenho certeza, porém, de que este não será o fim de seus estudos sobre sistemas de arquivos.</p><p>Então, mais uma vez – podemos descrever o que é um sistema de arquivos e como ele funciona em uma frase?</p><p>Não podemos! 😁</p><p>Vamos terminar este artigo, contudo, com a descrição breve que usei no começo:</p><p>Um <strong>sistema de arquivos</strong> define como arquivos são <strong>nomeados</strong>, <strong>armazenados</strong> e <strong>recuperados</strong> do dispositivo de armazenamento.</p><p>Certo, acho que isso encerra este artigo.</p><p>Se você gosta de guias mais abrangentes como este, visite o site do autor, <a href="https://www.decodingweb.dev/">decodingweb. dev</a> e siga o autor no <a href="https://twitter.com/lavary_">Twitter</a> porque, além do freeCodeCamp, esses são os canais que o autor usa para compartilhar suas descobertas diárias.</p><p>Agradecemos a leitura! Aproveite o aprendizado! 😃</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como usar props no Vue.js ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Joel Olawanle Usamos props para passar informações/dados de um componente pai para componentes filhos. Neste artigo, vou explicar tudo o que você precisa saber sobre props e por que você deve usar props no Vue.js. Aqui está um breve resumo do que vamos cobrir neste guia:  * ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-usar-props-no-vue-js/</link>
                <guid isPermaLink="false">66fa124c9d6e9804088f0db9</guid>
                
                    <category>
                        <![CDATA[ Vue.js ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 30 Sep 2024 03:05:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Yellow-and-Purple-Geometric-Covid-19-General-Facts-Twitter-Post.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-props-in-vuejs/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use Props in Vue.js</a>
      </p><p>Escrito por: Joel Olawanle</p><p>Usamos <em>props </em>para passar informações/dados de um componente pai para componentes filhos. Neste artigo, vou explicar tudo o que você precisa saber sobre <em>props</em> e por que você deve usar <em>props</em> no Vue.js.</p><p>Aqui está um breve resumo do que vamos cobrir neste guia:</p><ul><li>O que são <em>props </em>no Vue.js?</li><li>Como registrar <em>props </em>dentro de um componente</li><li>Como trabalhar com várias <em>props</em></li><li>Tipos de <em>props </em>no Vue.js</li><li>Como passar dados para <em>props</em></li><li>Como passar funções para <em>props</em></li><li>Como validar <em>props</em></li><li>Como definir valores padrão para <em>props</em></li></ul><h2 id="o-que-s-o-as-props-no-vue-js">O que são as <em>props </em>no Vue.js?</h2><p>"Props" é uma palavra-chave especial que significa <strong>propriedades</strong>. Elas podem ser registradas em um componente para passar dados de um componente pai para um de seus componentes filhos.</p><p>É muito mais fácil de usar em comparação com as bibliotecas de gerenciamento de estado, como o vuex, para aplicações do Vue.js.</p><p>Os dados em <em>props</em> só podem fluir em um sentido – de cima, ou do componente pai, para baixo, ou para os componentes filhos. Isso simplesmente significa que você não pode passar dados de um filho para um pai.</p><p>Outra coisa a se ter em mente é que <em>props</em> são apenas para leitura e não podem ser modificadas pelo componente filho porque é o componente pai quem "possui" esse valor.</p><p>Vamos equilibrar as coisas agora – os componentes pais passam <em>props</em> para os componentes filhos enquanto os componentes filhos emitem eventos para os componentes pais.</p><h2 id="como-registrar-props-em-um-componente">Como registrar <em>props </em>em um componente</h2><p>Vamos agora dar uma olhada em como podemos registrar <em>props </em>dentro de um componente.</p><pre><code>Vue.component('user-detail', {
  props: ['name'],
  template: '&lt;p&gt;Hi {{ name }}&lt;/p&gt;'
})
.js
</code></pre><p>ou, em um componente de arquivo único do Vue:</p><pre><code>&lt;template&gt;
  &lt;p&gt;{{ name }}&lt;/p&gt;
&lt;/template&gt;

&lt;script&gt;
export default {
  props: ['name']
}
&lt;/script&gt;
</code></pre><p>No código acima, registramos uma <em>prop </em>chamada <code>name</code> que podemos chamar na seção de <em>template </em>da nossa aplicação.</p><p>Observação: este é o componente filho e essa <em>prop </em>vai receber dados do componente pai. Vou explicar isso mais adiante.</p><h2 id="como-trabalhar-com-v-rias-props">Como trabalhar com várias <em>props</em></h2><p>Você pode ter mais de uma <em>prop </em>adicionando-as ao array de <em>props</em>, assim:</p><pre><code>Vue.component('user-detail', {
  props: ['firstName', 'lastName'],
  template: '&lt;p&gt;Hi {{ firstName }} {{ lastName }}&lt;/p&gt;'
})
</code></pre><p>ou, em um componente de arquivo único do Vue:</p><pre><code>&lt;template&gt;
  &lt;p&gt;Hi {{ firstName }} {{ lastName }}&lt;/p&gt;
&lt;/template&gt;

&lt;script&gt;
export default {
  props: [
    'firstName', 
    'lastName'
  ],
}
&lt;/script&gt;
</code></pre><h2 id="tipos-de-props-no-vue-js">Tipos de <em>props </em>no Vue.js</h2><p>Para especificar o tipo de <em>prop</em> que você deseja usar no Vue, você usará um objeto em vez de um array. Você usará o nome da propriedade como a chave de cada propriedade e o tipo como o valor.</p><p>Se o tipo de dado passado não corresponder ao tipo da <em>prop</em>, o Vue envia um alerta (em modo de desenvolvimento) no console com um aviso. Os tipos válidos que você pode usar são:</p><ul><li>String</li><li>Number</li><li>Boolean</li><li>Array</li><li>Object</li><li>Date</li><li>Function</li><li>Symbol</li></ul><pre><code>Vue.component('user-detail', {
  props: {
    firstName: String,
    lastName: String
  },
  template: '&lt;p&gt;Hi {{ firstName }} {{ lastName }}&lt;/p&gt;'
})
</code></pre><p>ou, em um componente de arquivo único do Vue:</p><pre><code>&lt;template&gt;
  &lt;p&gt;Hi {{ firstName }} {{ lastName }}&lt;/p&gt;
&lt;/template&gt;

&lt;script&gt;
export default {
  props: {
    firstName: String,
    lastName: String
  },
}
&lt;/script&gt;
</code></pre><h2 id="como-passar-dados-para-props-no-vue">Como passar dados para <em>props </em>no Vue</h2><p>O principal objetivo de usar <em>props </em>é passar dados/informações para baixo. Você pode passar seu valor como uma propriedade de dados usando <em>v-bind</em>, como neste código:</p><pre><code>&lt;template&gt;
  &lt;ComponentName :title=title /&gt;
&lt;/template&gt;

&lt;script&gt;
export default {
  //...
  data() {
    return {
      title: 'Entendendo props no Vue.js'
    }
  },
  //...
}
&lt;/script&gt;
</code></pre><p>ou como um valor estático, assim:</p><pre><code>&lt;ComponentName title="Entendendo props no Vue.js" /&gt;
</code></pre><p>Suponha que estamos criando uma aplicação que tem vários botões com diferentes cores de texto/fundo. Em vez de repetir a sintaxe do botão em todos os nossos arquivos, é melhor criar um componente de botão e então passar as cores de texto/fundo como <em>props</em>.</p><p>Aqui está o componente pai:</p><pre><code>&lt;template&gt;
  &lt;div id="app"&gt;
    &lt;Button :name='btnName' bgColor='red' /&gt;
    &lt;Button :name='btnName' bgColor='green' /&gt;
    &lt;Button :name='btnName' bgColor='blue' /&gt;
  &lt;/div&gt;
&lt;/template&gt;

&lt;script&gt;
import Button from './components/Button'

export default {
  name: 'App',
  data(){
    return{
      btnName:"Joel",
    }
  },
  components: {
    Button
  }
}
&lt;/script&gt;
</code></pre><p>Aqui está o componente filho:</p><pre><code>&lt;template&gt;
  &lt;button class="btn" :style="{backgroundColor:bgColor}"&gt;{{name}}&lt;/button&gt;
&lt;/template&gt;
&lt;script&gt;
export default {
  name: 'Button',
  props:{
    name:String,
    bgColor:String
  }
}
&lt;/script&gt;
</code></pre><p>O código acima mostra como usar tanto a propriedade de dados quanto valores estáticos quando você está recebendo dados de um componente pai e usando esses dados em um componente filho.</p><p><strong>Observação:</strong> você também pode usar um operador ternário dentro do valor da <em>prop</em> para verificar uma condição verdadeira e passar um valor que dependa dela.</p><pre><code>&lt;template&gt;
  &lt;div id="app"&gt;
    &lt;Button :tagUser="signedUp ? 'Logout' : 'Login'" bgColor='red' /&gt;
  &lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
import Button from './components/Button'
export default {
  name: 'App',
  data(){
    return{
      signedUp: true,
    }
  },
  components: {
    Button
  }
}
&lt;/script&gt;
</code></pre><h2 id="como-passar-fun-es-para-props">Como passar funções para props</h2><p>Passar uma função ou um método para um componente filho como <em>prop </em>é relativamente simples. Basicamente, é o mesmo processo que passar qualquer outra variável.</p><p>Há razões, porém, pelas quais você não deve usar <em>props</em> como funções – em vez disso, você deve usar <em>emit</em>. <a href="https://michaelnthiessen.com/pass-function-as-prop/">Este artigo</a> (texto em inglês) explica corretamente o porquê.</p><pre><code>&lt;template&gt;
  &lt;ChildComponent :function="newFunction" /&gt;
&lt;/template&gt;
</code></pre><pre><code>&lt;script&gt;
export default {
  methods: {
    newFunction() {
      // ...
    }
  }
};
&lt;/script&gt;
</code></pre><h2 id="como-validar-props-no-vue">Como validar props no Vue</h2><p>O Vue torna a validação de <em>props </em>muito fácil. Tudo o que você precisa fazer é adicionar a chave <em>required </em>e seu valor à <em>prop</em>. Podemos validar tanto pelo tipo da <em>prop</em> quanto pelo uso de <code>required</code>:</p><pre><code>props: {
  name: {
    type: String,
    required: true
  }
}
</code></pre><h2 id="como-definir-valores-padr-o-para-props">Como definir valores padrão para <em>props</em></h2><p>Antes de concluir este artigo, vamos agora ver como definir valores padrão para nossas <em>props</em>. Valores padrão são renderizados se o componente filho não conseguir obter dados do componente pai.</p><p>O Vue permite que você especifique um valor padrão, assim como especificamos <code>required</code> anteriormente.</p><pre><code>props: {
  name: {
    type: String,
    required: true,
    default: 'John Doe'
  },
  img: {
    type: String,
    default: '../image-path/image-name.jpg',
   },
}
</code></pre><p>Você também pode definir o valor padrão como um objeto. Esse pode ser uma função que retorna um valor apropriado, em vez de ser o valor real.</p><h2 id="conclus-o">Conclusão</h2><p>Neste artigo, aprendemos o que as <em>props</em> fazem e como elas funcionam no Vue.js.</p><p>Em resumo, usamos <em>props</em> para passar dados dos componentes pais para os componentes filhos. O componente filho também emite eventos para os componentes pais caso você precise enviar dados/eventos do filho para o componente pai.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/image-50.png" class="kg-image" alt="image-50" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/image-50.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/image-50.png 790w" sizes="(min-width: 720px) 720px" width="790" height="646" loading="lazy"></figure><p>Obrigado pela leitura!</p><p><strong>Links úteis (em inglês)</strong></p><ul><li><a href="https://flaviocopes.com/vue-props/">Vue.js Component Props - flaviocopes</a></li><li><a href="https://vuejs.org/v2/guide/components-props.html">Props - documentação do Vue</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como instalar o Ubuntu no VirtualBox ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Thanoshan MV O que é o VirtualBox? A máquina virtual (VM) VirtualBox da Oracle é uma aplicação de virtualização multiplataforma desenvolvida pela Oracle Corporation. Ela permite aos usuários instalar sistemas operacionais, como Windows, macOS, Solaris e Linux, em discos rígidos virtuais. Como exemplo, você pode rodar Windows e ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-instalar-o-ubuntu-no-virtualbox/</link>
                <guid isPermaLink="false">66f693e8d8806d04502481d9</guid>
                
                    <category>
                        <![CDATA[ Linux ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Fri, 27 Sep 2024 11:37:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/ubuntu-1479782_1280.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-install-ubuntu-with-oracle-virtualbox/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to install Ubuntu on VirtualBox</a>
      </p><p>Escrito por: Thanoshan MV</p><h2 id="o-que-o-virtualbox">O que é o VirtualBox?</h2><p>A máquina virtual (VM) VirtualBox da Oracle é uma aplicação de virtualização multiplataforma desenvolvida pela Oracle Corporation. Ela permite aos usuários instalar sistemas operacionais, como Windows, macOS, Solaris e Linux, em discos rígidos virtuais.</p><p>Como exemplo, você pode rodar Windows e Linux em seu Mac, rodar um servidor Windows em seu servidor Linux ou rodar o Linux em seu PC com Windows enquanto executa suas outras aplicações existentes.</p><p>Espaço em disco e memória são os únicos problemas que você enfrentará ao instalar várias máquinas virtuais.</p><h2 id="por-que-voc-vai-precisar-dele">Por que você vai precisar dele</h2><ul><li>O VirtualBox da Oracle é fácil de instalar e usar</li><li>É grátis</li><li>Você pode rodar e experimentar qualquer sistema operacional de maneira segura</li><li>Se você é um desenvolvedor, o VirtualBox pode ser usado como uma ferramenta para testar seus próprios projetos de desenvolvimento em diversos ambientes de SO de maneira segura</li><li>Ele pode rodar desde pequenos sistemas embarcados até laptops</li><li>É bom para testes e recuperação de desastres, pois pode ser facilmente copiado, e transportado entre <em>hosts</em>, além de ser fácil de fazer o <em>back-up</em> dele</li></ul><h2 id="instala-o-do-virtualbox">Instalação do VirtualBox</h2><p>O VirtualBox pode ser baixado aqui: <a href="https://www.virtualbox.org/wiki/Downloads">downloads do VirtualBox</a></p><h2 id="por-que-o-ubuntu">Por que o Ubuntu?</h2><ul><li>É grátis</li><li>Personalização fácil: o ambiente de desktop GNOME ajuda você a personalizar facilmente</li><li>É seguro</li><li>O Ubuntu é <em>open-source</em></li><li>Tem uma comunidade amigável e que dá muito suporte</li><li>Requisitos de sistema baixos</li><li>De acordo com a <a href="https://fossbytes.com/best-linux-distros-for-programming-developers/">FOSSBYTES</a> (edição de 2019), o Ubuntu é a segunda melhor <em>distro </em>do Linux para programação e desenvolvedores</li><li>É amigável para iniciantes</li></ul><h2 id="configura-o-do-ubuntu">Configuração do Ubuntu</h2><p>Primeiro, abra o VirtualBox, depois clique em "<em>New</em>" (Novo, em português) para criar uma máquina virtual.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/start-1.png" class="kg-image" alt="start-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/start-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/start-1.png 947w" sizes="(min-width: 720px) 720px" width="947" height="542" loading="lazy"></figure><p>Digite "Ubuntu" como nome, selecione "Linux" como tipo e selecione Ubuntu (64-bit) como versão.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--14-.png" class="kg-image" alt="Screenshot--14-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--14-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--14-.png 947w" sizes="(min-width: 720px) 720px" width="947" height="540" loading="lazy"></figure><p><strong>Observação</strong>: selecione a quantidade de memória que desejar, mas não adicione mais que 50% da sua RAM total.</p><p>Marque a opção "<em>Create a virtual hard disk now</em>" (Criar um disco rígido virtual agora, em português) para que possamos definir mais tarde o tamanho do disco rígido virtual do Ubuntu OS.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--16-.png" class="kg-image" alt="Screenshot--16-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--16-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--16-.png 950w" sizes="(min-width: 720px) 720px" width="950" height="544" loading="lazy"></figure><p>Agora, selecionamos "<em>VHD (Virtual Hard Disk)</em>" (Disco rígido virtual, em português).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--17--1.png" class="kg-image" alt="Screenshot--17--1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--17--1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--17--1.png 947w" sizes="(min-width: 720px) 720px" width="947" height="543" loading="lazy"></figure><p>Em seguida, vamos alocar dinamicamente o armazenamento em nosso disco rígido físico.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--18-.png" class="kg-image" alt="Screenshot--18-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--18-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--18-.png 947w" sizes="(min-width: 720px) 720px" width="947" height="545" loading="lazy"></figure><p>Queremos especificar o tamanho do Ubuntu OS. O tamanho recomendado é, pelo menos, 10 GB, mas você pode aumentar se desejar.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--19-.png" class="kg-image" alt="Screenshot--19-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--19-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--19-.png 952w" sizes="(min-width: 720px) 720px" width="952" height="542" loading="lazy"></figure><p>Depois de criar um disco rígido virtual, você verá o Ubuntu no seu painel.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--20-.png" class="kg-image" alt="Screenshot--20-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--20-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--20-.png 949w" sizes="(min-width: 720px) 720px" width="949" height="541" loading="lazy"></figure><p>Agora, precisamos configurar o arquivo de imagem de disco do Ubuntu (.iso).</p><p>O arquivo de imagem de disco do Ubuntu pode ser baixado aqui: <a href="https://ubuntu.com/desktop">download do Ubuntu</a></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--23-.png" class="kg-image" alt="Screenshot--23-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--23-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/Screenshot--23-.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--23-.png 1006w" sizes="(min-width: 720px) 720px" width="1006" height="547" loading="lazy"></figure><p>Para configurar o arquivo de imagem de disco do Ubuntu, vá em <em>Settings</em> e siga estes passos:</p><ol><li>Clique em "<em>Storage</em>" (Armazenamento, em português)</li><li>Em <em>Storage Devices</em> (Dispositivos de armazenamento, em português), clique em "<em>Empty</em>" (Vazio, em português)</li><li>Em <em>Attributes</em> (Atributos, em português), clique na figura do disco e "<em>Select Virtual Optical Drive File</em>" (Selecionar arquivo de disco óptico virtual, em português)</li><li>Selecione o arquivo de imagem de disco do Ubuntu e abra-o</li></ol><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--25-.png" class="kg-image" alt="Screenshot--25-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--25-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--25-.png 945w" sizes="(min-width: 720px) 720px" width="945" height="545" loading="lazy"></figure><p>Clique em OK.</p><p>Seu Ubuntu está pronto para ser instalado no VirtualBox. Vamos começar!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--26-.png" class="kg-image" alt="Screenshot--26-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--26-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--26-.png 940w" sizes="(min-width: 720px) 720px" width="940" height="529" loading="lazy"></figure><p><strong>Observação:</strong> a instalação do Ubuntu no VirtualBox e a instalação real do sistema operacional podem variar. Este guia ajuda você a instalar o Ubuntu no VirtualBox apenas.</p><h2 id="vamos-instalar-o-ubuntu-">Vamos instalar o Ubuntu!</h2><p>Clique em <em>Install Ubuntu</em> (Instalar o Ubuntu, em português).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--27-.png" class="kg-image" alt="Screenshot--27-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--27-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--27-.png 794w" sizes="(min-width: 720px) 720px" width="794" height="671" loading="lazy"></figure><p>Selecione seu layout de teclado.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--29-.png" class="kg-image" alt="Screenshot--29-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--29-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--29-.png 793w" sizes="(min-width: 720px) 720px" width="793" height="665" loading="lazy"></figure><p>Na seção "<em>Updates and other software</em>" (Atualizações e software de terceiros, em português), marque "<em>Normal installation</em>" (Instalação normal, em português) e clique em <em>Continue</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--30-.png" class="kg-image" alt="Screenshot--30-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--30-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--30-.png 789w" sizes="(min-width: 720px) 720px" width="789" height="571" loading="lazy"></figure><p>Em "<em>Installation type</em>" (Tipo de instalação, em português), marque "<em>Erase disk and install Ubuntu</em>" (Apagar o disco e instalar o Ubuntu, em português).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--31-.png" class="kg-image" alt="Screenshot--31-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--31-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--31-.png 788w" sizes="(min-width: 720px) 720px" width="788" height="576" loading="lazy"></figure><p>Clique em "<em>Continue</em>".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--32-.png" class="kg-image" alt="Screenshot--32-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--32-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--32-.png 793w" sizes="(min-width: 720px) 720px" width="793" height="665" loading="lazy"></figure><p>Escolha sua localização atual.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--33-.png" class="kg-image" alt="Screenshot--33-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--33-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--33-.png 790w" sizes="(min-width: 720px) 720px" width="790" height="668" loading="lazy"></figure><p>Agora, configure seu perfil.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--34-.png" class="kg-image" alt="Screenshot--34-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--34-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--34-.png 792w" sizes="(min-width: 720px) 720px" width="792" height="663" loading="lazy"></figure><p>Você verá o Ubuntu sendo instalado.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--35-.png" class="kg-image" alt="Screenshot--35-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--35-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--35-.png 790w" sizes="(min-width: 720px) 720px" width="790" height="660" loading="lazy"></figure><p>Após a instalação, reinicie.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--36-.png" class="kg-image" alt="Screenshot--36-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--36-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--36-.png 788w" sizes="(min-width: 720px) 720px" width="788" height="664" loading="lazy"></figure><p>Após fazer login, você verá a área de trabalho do Ubuntu.</p><p>Instalamos com sucesso o Ubuntu no VirtualBox. Ele está pronto para uso em seus futuros projetos de desenvolvimento.</p><h2 id="vamos-verificar-a-instala-o">Vamos verificar a instalação</h2><p>Abra o seu terminal (Pressione Ctrl+Alt+T) e digite os comandos abaixo para verificar se funcionam.</p><ol><li>pwd: este comando imprimirá o diretório de trabalho atual</li><li>ls: este comando listará todos os itens no seu diretório atual</li></ol><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--43-.png" class="kg-image" alt="Screenshot--43-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--43-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--43-.png 789w" sizes="(min-width: 720px) 720px" width="789" height="668" loading="lazy"></figure><p>Depois de verificar esses comandos, desligue a sua máquina usando o seguinte comando.</p><pre><code>poweroff
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--44-.png" class="kg-image" alt="Screenshot--44-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot--44-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot--44-.png 787w" sizes="(min-width: 720px) 720px" width="787" height="663" loading="lazy"></figure><h2 id="conclus-o">Conclusão</h2><p>O VirtualBox é gratuito e uma ótima ferramenta para executar vários sistemas operacionais em um único sistema operacional. O Ubuntu tem muitos benefícios. Se você é um iniciante em Linux, eu recomendaria usar o Ubuntu, pois é amigável para iniciantes.</p><p>Sinta-se à vontade para entrar em contato com o autor se tiver alguma pergunta. Você pode contatar o autor e se conectar com ele pelo <a href="https://twitter.com/ThanoshanMV">X</a> e pelo <a href="https://medium.com/@mvthanoshan">Medium</a>.</p><p>Agradecemos pela leitura.</p><p><strong>Boa programação para você!</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Guia do GridFS: como fazer o upload de arquivos e imagens no MongoDB facilmente usando o Node ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Tarique Ejaz O armazenamento de arquivos é um recurso importante e necessário em vários processos e em diversos tipos de aplicações. A existência de processos como as Content Delivery Networks (CDNs – ou, em português, redes de entrega de conteúdo), configuradas através de opções de nuvem de terceiros ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/guia-do-gridfs-como-fazer-o-upload-de-arquivos-e-imagens-no-mongodb-facilmente-usando-o-node/</link>
                <guid isPermaLink="false">66f548dad8806d045024806b</guid>
                
                    <category>
                        <![CDATA[ MongoDB ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 26 Sep 2024 12:06:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/adobe-spark-post.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/gridfs-making-file-uploading-to-mongodb/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">GridFS Guide: How to Upload Files and Images to MongoDB Easily Using Node</a>
      </p><p>Escrito por: Tarique Ejaz</p><p>O armazenamento de arquivos é um recurso importante e necessário em vários processos e em diversos tipos de aplicações. A existência de processos como as Content Delivery Networks (CDNs – ou, em português, redes de entrega de conteúdo), configuradas através de opções de nuvem de terceiros como a Amazon Web Services, e de opções de armazenamento de arquivos locais sempre tornaram mais fácil a criação desse tipo de recurso.</p><p>No entanto, o conceito de armazenar arquivos diretamente em um banco de dados através de uma única chamada de API me intriga há muito tempo. Foi aí que o GridFS entrou em cena para mim.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/gridfs.png" class="kg-image" alt="gridfs" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/gridfs.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/gridfs.png 640w" width="640" height="199" loading="lazy"><figcaption><em>Provavelmente, essa não é a melhor maneira de implementar um sistema de armazenamento de arquivos</em></figcaption></figure><h2 id="o-que-o-gridfs-explica-o-simplificada">O que é o GridFS – explicação simplificada</h2><p>O MongoDB possui uma especificação de <em>driver</em> para upload e recuperação de arquivos chamada <a href="https://docs.mongodb.com/manual/core/gridfs/">GridFS</a>. O GridFS permite que você armazene e recupere arquivos, incluindo aqueles que excedem o limite de tamanho do documento BSON de <strong>16 MB</strong>.</p><p>Basicamente, o GridFS pega um arquivo e o divide em vários pedaços, que são armazenados como documentos individuais em duas coleções:</p><ul><li><em>a coleção <code>chunk</code></em> (que armazena as partes do documento) e</li><li><em>a coleção <code>file</code></em> (que armazena os metadados adicionais resultantes).</li></ul><p>Cada pedaço (em inglês, <em>chunk</em>) é limitado a 255 KB de tamanho. Isso significa que o último pedaço é normalmente igual ou menor que 255 KB. Parece bom, não?</p><p>Quando você lê a partir do GridFS, o <em>driver</em> recompõe todos os pedaços conforme necessário. Isso significa que você pode ler seções de um arquivo de acordo com o intervalo de sua consulta. Um exemplo disso é quando você escuta um trecho de um arquivo de áudio ou busca uma seção de um arquivo de vídeo.</p><p><strong>Observação:</strong> é preferível usar o GridFS para armazenar arquivos normalmente excedendo o limite de tamanho de 16 MB. Para arquivos menores, é recomendado usar o formato BinData para armazenar os arquivos em documentos únicos.</p><p>Isso resume como o GridFS funciona em geral. Hora de examinar um código funcionando e de ver como implementar um sistema assim.</p><h2 id="chega-de-papo-quero-ver-o-c-digo">Chega de papo, quero ver o código</h2><p>Estamos usando o Node.js com acesso a uma instância de nuvem do MongoDB para nossa configuração. Você pode encontrar o repositório de código para a aplicação de exemplo <a href="https://github.com/tarique93102/gridfs-file-storage">aqui</a>.</p><p>Vamos nos concentrar inteiramente em segmentos do código que se relacionam com as funcionalidades do GridFS. Vamos aprender como configurá-lo e usá-lo para armazenar arquivos, recuperar arquivos ou um arquivo específico e excluir um arquivo específico. Vamos começar.</p><h3 id="inicializando-a-engine-de-armazenamento">Inicializando a <em>engine</em> de armazenamento</h3><p>Os pacotes necessários para inicializar a <em>engine</em> são o <a href="https://www.npmjs.com/package/multer-gridfs-storage"><code>multer-gridfs-storage</code></a> e o <code><a href="https://www.npmjs.com/package/multer">multer</a></code>. Também usamos o <em>middleware</em> <code>method-override</code> para habilitar a operação de exclusão de arquivos. O módulo <code>crypto</code> do npm é usado para criptografar os nomes dos arquivos ao serem armazenados e lidos do banco de dados.</p><p>Quando a <em>engine</em> de armazenamento usando GridFS é inicializada, você só precisa chamá-la usando o <em>middleware</em> multer. Ela é então passada para a rota respectiva que executa as várias operações de armazenamento de arquivos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-1.png" class="kg-image" alt="server-app-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/server-app-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-1.png 1766w" sizes="(min-width: 720px) 720px" width="1766" height="1598" loading="lazy"></figure><h3 id="inicializando-o-stream-do-gridfs">Inicializando o <em>stream </em>do GridFS</h3><p>Inicializamos um <em>stream</em> do GridFS conforme visto no código abaixo. O <em>stream</em> é necessário para ler os arquivos do banco de dados e também para ajudar a renderizar uma imagem em um navegador quando necessário.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-2.png" class="kg-image" alt="server-app-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-2.png 1228w" sizes="(min-width: 720px) 720px" width="1228" height="1166" loading="lazy"></figure><h3 id="fazendo-o-upload-de-um-nico-arquivo-ou-imagem">Fazendo o upload de um único arquivo ou imagem</h3><p>Reutilizamos o <em>middleware</em> de <em>upload</em> que criamos anteriormente.</p><p><strong>Observação:</strong> o nome <code>file</code> é usado como parâmetro em <code>upload.single()</code>, pois temos a chave com um nome similar carregando o arquivo que está sendo enviado pelo <em>client</em>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-4.png" class="kg-image" alt="server-app-4" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-4.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-4.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-4.png 1396w" sizes="(min-width: 720px) 720px" width="1396" height="1958" loading="lazy"></figure><h3 id="fazendo-o-upload-de-v-rios-arquivos-ou-imagens">Fazendo o <em>upload</em> de vários arquivos ou imagens</h3><p>Também podemos fazer <em>upload </em>de vários arquivos de uma vez. Em vez de <code>upload.single()</code>, temos que simplesmente usar <code>upload.multiple(&lt;número de arquivos&gt;)</code>.</p><p><strong>Observação:</strong> o número de arquivos carregados pode ser menor que o número definido de arquivos.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-5.png" class="kg-image" alt="server-app-5" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-5.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-5.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-5.png 1564w" sizes="(min-width: 720px) 720px" width="1564" height="1058" loading="lazy"></figure><h3 id="buscando-todos-os-arquivos-do-banco-de-dados">Buscando todos os arquivos do banco de dados</h3><p>Usando o <em>stream </em>inicializado, podemos buscar todos os arquivos no banco de dados específico usando <code>gfs.find().toArray(...)</code>. Quando os arquivos são obtidos, mapeamos para um <em>array </em>e enviamos a resposta.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-6.png" class="kg-image" alt="server-app-6" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-6.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-6.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-6.png 1412w" sizes="(min-width: 720px) 720px" width="1412" height="1778" loading="lazy"></figure><h3 id="buscando-um-nico-arquivo-pelo-nome-do-arquivo">Buscando um único arquivo pelo nome do arquivo</h3><p>É muito simples consultar o GridFS para um único arquivo baseado em um atributo específico, como <code>filename</code> (o nome do arquivo). Usando o <em>stream</em> do GridFS, você pode consultar o banco de dados através da função <code>gfs.find({&lt;adicione sua consulta aqui&gt;})</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-7.png" class="kg-image" alt="server-app-7" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-7.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-7.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-7.png 1228w" sizes="(min-width: 720px) 720px" width="1228" height="1382" loading="lazy"></figure><h3 id="renderizando-no-navegador-uma-imagem-buscada">Renderizando no navegador uma imagem buscada</h3><p>Essa é uma parte um pouco mais complicada, pois você precisa não apenas buscar um arquivo do banco de dados, mas também renderizá-lo como uma imagem no respectivo navegador. Buscamos o arquivo normalmente. Não há nada de novo nesse processo.</p><p>Então, com a ajuda do método <code>openDownloadStreamByName()</code> no <em>stream</em> do gfs, podemos facilmente renderizar uma imagem, pois ele retorna um <em>stream</em> legível. Tendo feito isso, podemos usar o método <code>pipe()</code> do JavaScript para transmitir a resposta.</p><h3 id="excluindo-um-arquivo-espec-fico-por-id">Excluindo um arquivo específico por Id</h3><p>Excluir um arquivo também é simples. Usamos o método <code>delete()</code> com o parâmetro <code>_id</code> para consultar e excluir o arquivo em questão.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-9.png" class="kg-image" alt="server-app-9" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/server-app-9.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/server-app-9.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/server-app-9.png 1548w" sizes="(min-width: 720px) 720px" width="1548" height="1310" loading="lazy"></figure><p>Essas são as principais funcionalidades oferecidas pela <em>engine</em> de armazenamento. Eu utilizei os recursos do GridFS discutidos para criar uma aplicação simples de <em>upload</em> de imagens. Você pode ver o código em mais detalhes no <a href="https://github.com/tarique93102/gridfs-file-storage">repositório</a>.</p><h2 id="conclus-o">Conclusão</h2><p>Demorei um pouco e tive uma quantidade razoável de dificuldade para entender como usar o GridFS para um projeto pessoal. Por causa disso, queria garantir que ao menos outra pessoa não precisasse ter de gastar a mesma quantidade de tempo que eu nisso.</p><p>Dito isso, eu recomendo usar o GridFS com cautela. Não é uma solução universal para todos os seus problemas de armazenamento de arquivos. Ainda assim, é interessante conhecer essa especificação e saber de sua existência.</p><p>Se você tiver alguma dúvida ou questão que deseje apontar, fique à vontade para entrar em contato com o autor pelo <code><a href="https://www.linkedin.com/in/tarique-ejaz/">LinkedIn</a></code>.</p><p>Boa programação para você! 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Um guia rápido para ajudá-lo a entender e a criar aplicações em React ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Aditya Sridhar Este artigo está dividido em duas partes  1. A primeira parte demonstra como criar uma aplicação simples em React usando     o comando 'create-react-app' da interface de linha de comando e explica a     estrutura do projeto.  2. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/um-guia-rapido-para-ajuda-lo-a-entender-e-a-criar-aplicacoes-em-react/</link>
                <guid isPermaLink="false">66f41672d8806d0450247dd2</guid>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 25 Sep 2024 14:29:18 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/0_XGhE7haLzzQeM1xo.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/quick-guide-to-understanding-and-creating-reactjs-apps-8457ee8f7123/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A quick guide to help you understand and create ReactJS apps</a>
      </p><p>Escrito por: Aditya Sridhar</p><h3 id="este-artigo-est-dividido-em-duas-partes">Este artigo está dividido em duas partes</h3><ol><li>A primeira parte demonstra como criar uma aplicação simples em React usando o comando 'create-react-app' da interface de linha de comando e explica a estrutura do projeto.</li><li>A segunda parte explica um código existente que publiquei no Github. Este código demonstra o uso de componentes, a comunicação entre componentes, como realizar chamadas de HTTP e usar o React Bootstrap (bootstrap escrito para React).</li></ol><h3 id="parte-1">Parte 1</h3><h4 id="instale-o-nodejs-se-ainda-n-o-o-tiver">Instale o NodeJS, se ainda não o tiver</h4><p>O NodeJS é necessário, pois as bibliotecas requeridas para o React são baixadas usando o gerenciador de pacotes node (npm). Consulte este <a href="https://nodejs.org/en/">site</a> para instalar o NodeJS.</p><h4 id="instale-o-pacote-create-react-app-do-node">Instale o pacote create-react-app do Node</h4><p>O pacote <strong>create-react-app</strong> do Node ajuda a configurar um projeto de React. Instale o pacote globalmente usando o seguinte comando:</p><pre><code>npm install -g create-react-app
</code></pre><h4 id="crie-o-projeto">Crie o projeto</h4><p>O projeto pode ser criado usando o <strong>create-react-app.</strong> Use o comando abaixo para criar o projeto:</p><pre><code>npx create-react-app first-react-app
</code></pre><p><strong>first-react-app</strong> é o nome da aplicação. O comando acima cria uma pasta chamada <strong>first-react-app</strong>, que é a pasta do projeto. Para testar se tudo foi configurado corretamente, entre na pasta do projeto e inicie a aplicação com o seguinte comando:</p><pre><code>cd first-react-app
npm start
</code></pre><p>Vá ao seu navegador e acesse o URL <strong>localhost:3000</strong>.<br>Você deverá ver que a aplicação em execução. Ela deve ter a aparência semelhante a esta no seu navegador:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/w1SbWWOdE5XDpq25D6aYcw6e7RjJSJupdp1T.png" class="kg-image" alt="w1SbWWOdE5XDpq25D6aYcw6e7RjJSJupdp1T" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/w1SbWWOdE5XDpq25D6aYcw6e7RjJSJupdp1T.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/w1SbWWOdE5XDpq25D6aYcw6e7RjJSJupdp1T.png 800w" sizes="(min-width: 720px) 720px" width="800" height="459" loading="lazy"></figure><h4 id="estrutura-b-sica-de-pastas-explicada">Estrutura básica de pastas explicada</h4><p>Quando você criou o projeto, deve ter notado que ele criou vários arquivos. Aqui listarei alguns dos arquivos e pastas importantes que você deve conhecer:</p><ol><li><strong>package.json:</strong> este arquivo contém a lista de dependências do node necessárias.</li><li><strong>public/index.html:</strong> quando a aplicação é iniciada, esta é a primeira página que é carregada. Será o único arquivo html em todo a aplicação, já que o React é geralmente escrito usando <strong>JSX</strong>, sobre o qual falarei mais adiante. Além disso, este arquivo tem uma linha de código. Essa linha é muito significativa, pois todos os componentes da aplicação são carregados nesta <code>div</code>.</li><li><strong>src/index.js</strong>: este é o arquivo do JavaScript correspondente ao index.html. Ele contém a seguinte linha de código, que é muito significativa. <strong>ReactDOM.render(, document.getElementById('root'));</strong></li><li>A linha de código acima está informando que o componente <strong>App</strong> (tratarei do componente App em instantes) deve ser carregado em um elemento do html com o id <strong>root</strong>. Esse elemento nada mais é do que o <strong>elemento div</strong> presente no <strong>index.html.</strong></li><li><strong>src/index.css</strong>: o arquivo CSS correspondente ao index.js.</li><li><strong>src/App.js</strong> : este é o arquivo do componente <strong>App</strong>. O componente <strong>App</strong> é o componente principal no React, que atua como um contêiner para todos os outros componentes.</li><li><strong>src/App.css</strong> : este é o arquivo do CSS correspondente ao Componente <strong>App</strong>.</li><li><strong>build:</strong> esta é a pasta onde os arquivos compilados são armazenados. Aplicações do React podem ser desenvolvidas usando tanto JSX quanto JavaScript normal em si, mas usar JSX definitivamente facilita as coisas para o desenvolvedor. 😀 No entanto, os navegadores não entendem JSX. Por isso, o JSX precisa ser convertido em JavaScript antes de ser implantado. Esses arquivos convertidos são armazenados na pasta build após serem agrupação e minificados. Para ver a pasta build, execute o seguinte comando</li></ol><pre><code>npm run build
</code></pre><h4 id="criando-componentes">Criando componentes</h4><p>Um componente em React realiza uma funcionalidade específica. Uma aplicação nada mais é do que uma coleção de componentes. Cada componente pode ter vários componentes filhos e os componentes podem se comunicar entre si.</p><p>Vamos criar um componente do React agora.</p><p>Dentro da pasta <strong>src</strong>, crie um arquivo chamado <strong>FirstComponent.js</strong> e copie o seguinte código para <strong>FirstComponent.js.</strong></p><pre><code>import React, {Component} from 'react';

export default class FirstComponent extends Component {

constructor(props) {
    super(props)
    }

render() {
    const element = (&lt;div&gt;Texto do elemento&lt;/div&gt;)
    return (&lt;div className="comptext"&gt;
    &lt;h3&gt;Primeiro componente&lt;/h3&gt;
        {this.props.displaytext}
        {element}
    &lt;/div&gt;)
    }
}
</code></pre><ol><li>O nome do componente é <strong>FirstComponent</strong>, que é denotado pelo nome do arquivo assim como pela declaração <code>export default class FirstComponent extends Component</code></li><li>O atributo <strong>props</strong> no construtor conterá todos os parâmetros que são passados como entrada para esse componente.</li><li><strong>render():</strong> o valor de retorno dessa função é renderizado (exibido) na tela. Sempre que a função render() é chamada, a tela é rerenderizada. Isso é geralmente feito automaticamente pela aplicação. O código que se parece muito com html nessa função nada mais é do que o <strong>JSX.</strong></li></ol><p>O <strong>JSX</strong> parece muito com o HTML, mas possui todo o poder do JavaScript. Aqui, eu explicarei o código em JSX e o que ele está tentando fazer.</p><pre><code>render() {
    const element = (&lt;div&gt;Texto do elemento&lt;/div&gt;)
    return (&lt;div className="comptext"&gt;
    &lt;h3&gt;Primeiro componente&lt;/h3&gt;
        {this.props.displaytext}
        {element}
    &lt;/div&gt;)
    }
</code></pre><p>A primeira linha <code>const element = (&lt;div&gt;Texto do elemento&lt;/div&gt;)</code> cria um elemento <code>div</code> e o atribui a uma constante chamada <code>element</code>. Essa sintaxe peculiar que você vê é <strong>apenas</strong> JSX.</p><p>Dentro da declaração de retorno, você vê a seguinte sintaxe:</p><pre><code>&lt;div className="comptext"&gt;
    &lt;h3&gt;Primeiro componente&lt;/h3&gt;
        {this.props.displaytext}
        {element}
&lt;/div&gt;
</code></pre><p>Aqui, <strong>className</strong> é usado para apontar para uma classe CSS. <code>&lt;h3&gt;Primeiro componente&lt;/h3&gt;</code> é apenas uma sintaxe de HTML normal. <code>{this.props.displaytext}</code> é usado para acessar um atributo chamado <code>displaytext</code> a partir de <em>props</em> (então <code>displaytext</code> é passado como uma entrada sempre que esse componente é chamado). Aqui, <strong>displaytext</strong> é apenas um nome personalizado que eu dei. <code>{element}</code> é a constante que foi criada, que, por sua vez, contém o elemento div.</p><h4 id="usando-o-componente">Usando o componente</h4><p><strong>FirstComponent</strong> foi criado, mas ainda não está sendo usado em nenhum lugar. Vamos adicionar <strong>FirstComponent</strong> ao componente <strong>App</strong>. Aqui está o código modificado para <strong>App.js</strong></p><pre><code>import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import FirstComponent from './FirstComponent'
class App extends Component {
  render() {
    return (
      &lt;div className="App"&gt;
        &lt;header className="App-header"&gt;
          &lt;img src={logo} className="App-logo" alt="logo" /&gt;
          &lt;h1 className="App-title"&gt;Bem-vindo ao React&lt;/h1&gt;
        &lt;/header&gt;
        &lt;p className="App-intro"&gt;
          Para começar, edite &lt;code&gt;src/App.js&lt;/code&gt; e salve para recarregar.
        &lt;/p&gt;
        &lt;FirstComponent displaytext="Dados do primeiro componente"/&gt;
      &lt;/div&gt;
);
  }
}
export default App;
</code></pre><p><strong>FirstComponent </strong>precisa ser importado para o componente App primeiro, o que é feito na linha <code>import FirstComponent from ‘./FirstComponent’</code></p><p>Então <strong>FirstComponent </strong>é adicionado ao componente <strong>App</strong> usando a linha <code>&lt;FirstComponent displaytext="Dados do primeiro componente"/&gt;</code></p><p>Aqui <strong>displaytext</strong> é passado como um atributo para <strong>FirstComponent</strong>.</p><p>Agora, você pode executar a aplicação usando o comando <code>npm start</code></p><p>Você deve ver o seguinte resultado no navegador.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1HRMdkexuXF6YgrAp1NwPXyzZsIuebRpiFjB.png" class="kg-image" alt="1HRMdkexuXF6YgrAp1NwPXyzZsIuebRpiFjB" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1HRMdkexuXF6YgrAp1NwPXyzZsIuebRpiFjB.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1HRMdkexuXF6YgrAp1NwPXyzZsIuebRpiFjB.png 800w" sizes="(min-width: 720px) 720px" width="800" height="514" loading="lazy"></figure><h4 id="parab-ns-">Parabéns!</h4><p>Agora você sabe como criar uma aplicação do React e como criar e usar componentes do React. Você também sabe um pouco sobre JSX. 🙂</p><p>A próxima parte explicará um código em React existente do GitHub. O código da parte 2 é diferente do código que escrevemos na parte 1.</p><h3 id="parte-2">Parte 2</h3><h4 id="c-digo">Código</h4><p>O código a seguir está sendo explicado aqui, então clone o repositório em seu computador. O repositório tem instruções sobre como clonar e configurar o código em seu computador.</p><h4 id="url-da-aplica-o"><a href="https://github.com/aditya-sridhar/simple-reactjs-app">URL da Aplicação</a></h4><p>Para ver a aparência da aplicação final, você pode clicar <a href="https://aditya-sridhar.github.io/simple-reactjs-app">neste URL</a>. Isso dará uma boa ideia do que a aplicação está tentando fazer.</p><p>A aplicação se parecerá com isto em uma tela de celular:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/0aE6v5BOa389ObdKL-9oglyr4KLYhBTKhrTm.png" class="kg-image" alt="0aE6v5BOa389ObdKL-9oglyr4KLYhBTKhrTm" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/0aE6v5BOa389ObdKL-9oglyr4KLYhBTKhrTm.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/0aE6v5BOa389ObdKL-9oglyr4KLYhBTKhrTm.png 800w" sizes="(min-width: 720px) 720px" width="800" height="1056" loading="lazy"></figure><h4 id="o-que-a-aplica-o-faz">O que a aplicação faz</h4><p>A aplicação exibe uma lista de clientes. Quando um cliente é selecionado, são exibidos os detalhes do cliente selecionado. Essa é uma aplicação de página única (em inglês, SPA ou <em>single-page application</em>). O <strong>React é mais adequado a aplicações de página única</strong>. Elas exibem tudo dentro de uma única página.</p><h4 id="estrutura-da-aplica-o-explicada"><strong>Estrutura da aplicação explicada</strong></h4><h4 id="componente-customers-clientes-">Componente <strong>Customers (clientes)</strong></h4><p>Este componente exibe a lista de clientes. Ele corresponde ao arquivo <strong>src/Customers.js</strong>. Esse componente tem o seguinte construtor:</p><pre><code>constructor(props) {
    super(props)
    this.state = {
        selectedCustomer: 1
    }
}
</code></pre><p>As <strong>props</strong> já foram explicadas, mas aqui você também vê <strong>this.state</strong>. Sempre que o estado muda, o componente é renderizado novamente. Aqui, <strong>state</strong> tem um parâmetro chamado <strong>selectedCustomer</strong> para manter o controle de qual cliente foi selecionado. Se <strong>selectedCustomer</strong> muda, então o <strong>componente e seus componentes filhos</strong> serão renderizados novamente. O construtor é usado apenas para definir <strong>props</strong> e <strong>state.</strong> Além disso, as <strong>props</strong> nunca devem <strong>ser editadas</strong> dentro de um componente.</p><p>A próxima coisa que você nota é o código a seguir:</p><pre><code>componentDidMount() {
    this.getCustomerData();
}
</code></pre><p><strong>componentDidMount()</strong> é uma função que é chamada assim que o componente é renderizado. Portanto, ela pode ser usada para definir alguns valores iniciais, bem como carregar dados. Aqui, ela está chamando uma função de nome <strong>getCustomerData()</strong></p><p>O próximo trecho de código que você vê é:</p><pre><code>getCustomerData() {
    axios.get('assets/samplejson/customerlist.json').then(response =&gt; {
        this.setState({customerList: response})
    })
};
</code></pre><p>A função <strong>getCustomerData()</strong> faz uma chamada HTTP para ler o JSON de exemplo contendo a lista de clientes de <strong>assets/samplejson/customerlist.json.</strong> Ao obter uma resposta com sucesso, o estado do sistema é alterado, atribuindo a <strong>response</strong> à <strong>customerList.</strong> Você pode se perguntar por que nunca adicionamos <strong>customerList</strong> no construtor. A razão é que você pode adicionar parâmetros dinamicamente no <em>state</em> em qualquer ponto do código. O único requisito é que, no construtor, pelo menos um <em>state</em> vazio deve ser definido.</p><p>A próxima função é a função <strong>render()</strong>, que retorna quais elementos devem ser renderizados na tela. Os principais pontos de foco na função <code>render</code> são:</p><pre><code>&lt;Button bsStyle="info" onClick={() =&gt; this.setState({selectedCustomer: customer.id})}&gt;

Clique para ver detalhes

&lt;/Button&gt;
</code></pre><p>Todo cliente na lista possui um botão chamado <strong>Clique para ver detalhes</strong>. O trecho de código acima indica que, sempre que o botão for clicado, o <em>state</em> de <strong>selectedCustomer</strong> será alterado para o id do cliente selecionado. Como o <em>state</em> muda aqui, o componente e seu componente filho serão renderizados novamente.</p><p>O outro trecho de código importante é:</p><pre><code>&lt;CustomerDetails val={this.state.selectedCustomer}/&gt;
</code></pre><p>Esse trecho indica que <strong>CustomerDetails</strong> é um componente filho do componente <strong>Customers</strong>, além de passar o id <strong>selectedCustomer</strong> como entrada para o componente <strong>CustomerDetails</strong></p><h4 id="componente-customerdetails">Componente CustomerDetails</h4><p>Esse componente exibe os detalhes do cliente selecionado. Alguns trechos de código importantes desse componente serão explicados aqui:</p><pre><code>componentDidUpdate(prevProps) {

// obter detalhes do cliente apenas se as props mudarem
// (as props são a entrada) 
    if (this.props.val !== prevProps.val) {
        this.getCustomerDetails(this.props.val)
    }
}
</code></pre><p>A função <strong>componentDidUpdate()</strong> é chamada sempre que o componente é renderizado novamente. Aqui, estamos chamando a função <strong>getCustomerDetails()</strong> se a entrada do componente tiver mudado quando o componente for renderizado de novo. A entrada passada para a função <strong>getCustomerDetails()</strong> é <strong>this.props.val</strong>. <strong>this.props.val</strong>, por sua vez, obtém seu valor do componente <strong>Customers</strong> (<strong>selectedCustomer</strong> foi passado como entrada para ele). Para saber se a entrada mudou, o trecho de código usado é <code>this.props.val !== prevProps.val</code></p><pre><code>getCustomerDetails(id) {
    axios.get('assets/samplejson/customer' + id + '.json').then(response =&gt; {
        this.setState({customerDetails: response})
    })
};
</code></pre><p>A função <strong>getCustomerDetails()</strong> faz uma chamada de HTTP para obter o json de exemplo que contém os detalhes do cliente. O parâmetro <strong>id</strong> é usado para saber quais detalhes do cliente são necessários. O <strong>id</strong> nada mais é do que <strong>this.props.val.</strong> Quando a resposta é recebida com sucesso, o <em>state</em> desse componente é alterado atribuindo <strong>response</strong> a <strong>customerDetails</strong>.</p><p>A função <strong>render()</strong> para esse componente é bastante direta e simples, então não será coberta aqui.</p><h3 id="refer-ncias">Referências</h3><p><strong>create-react-app:</strong> consulte <a href="https://github.com/facebook/create-react-app">este site</a> para aprender tudo que pode ser feito usando create-react-app</p><p><strong>ReactJS:</strong> consulte o <a href="https://reactjs.org/">site do React</a> para entender os conceitos do ReactJS. A documentação é muito boa.</p><p><strong>React Bootstrap:</strong> consulte <a href="https://react-bootstrap.github.io/getting-started/introduction/">este site</a> para entender como usar o React Bootstrap</p><p><strong>axios:</strong> consulte <a href="https://www.npmjs.com/package/axios">este site</a> para saber mais sobre como usar a biblioteca axios para fazer requisições HTTP</p><h3 id="parab-ns-novamente-">Parabéns novamente!</h3><p>Agora, você sabe como usar componentes, como comunicar algo de um componente pai para um componente filho e um pouco sobre renderização.</p><p>Os conceitos básicos foram abordados neste artigo e espero que ele tenha sido útil para você.</p><h3 id="sobre-o-autor">Sobre o autor</h3><p>O autor é um apaixonado por tecnologia que busca seguir os avanços tecnológicos. Ele também gosta de ajudar os outros com o conhecimento que tem na área.</p><p>Sinta-se à vontade para se conectar com ele pelo <a href="https://www.linkedin.com/in/aditya1811/">LinkedIn</a>. </p><p>Você também pode segui-lo no <a href="https://twitter.com/adityasridhar18">Twitter</a>. </p><p>Visite o <a href="https://adityasridhar.com/">site do autor</a>. </p><h3 id="outros-artigos-relevantes-do-autor-em-ingl-s-">Outros artigos relevantes do autor (em inglês)</h3><p><strong><a href="https://www.freecodecamp.org/news/quick-guide-to-understanding-and-creating-angular-6-apps-2f491dffca1c/">A Quick Guide to Help you Understand and Create Angular 6 Apps</a></strong></p><p><strong><a href="https://www.freecodecamp.org/news/a-quick-introduction-to-vue-js-72937ee8880d/">A Quick Introduction to Vue.js</a></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Elementos em linha e elementos de bloco em HTML explicados ]]>
                </title>
                <description>
                    <![CDATA[ Elementos de bloco e em linha Vamos entender os elementos de bloco e os elementos em linha usando os exemplos abaixo: Exemplo de código e resultados: Elementos de bloco: Um elemento de bloco (em inglês, block) ocupa todo o espaço do pai (contêiner), como <div> e <p> no exemplo. Note ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/elementos-em-linha-e-elementos-de-bloco-em-html-explicados/</link>
                <guid isPermaLink="false">66e73378275cfd04091357e5</guid>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 19 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/5f9c9cad740569d1a4ca338e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/inline-elements-and-block-elements-in-html-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Inline Elements and Block Elements in HTML - Explained</a>
      </p><h2 id="elementos-de-bloco-e-em-linha"><strong>Elementos de bloco e em linha</strong></h2><p>Vamos entender os elementos de bloco e os elementos em linha usando os exemplos abaixo:</p><h4 id="exemplo-de-c-digo-e-resultados-"><strong>Exemplo de código e resultados:</strong></h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png" class="kg-image" alt="31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31070017-6f2cf0a2-a77c-11e7-9de6-110b9d0b488d.png 920w" sizes="(min-width: 720px) 720px" width="920" height="521" loading="lazy"></figure><h3 id="elementos-de-bloco-">Elementos de bloco:</h3><p>Um elemento de bloco (em inglês, <em>block</em>) ocupa todo o espaço do pai (contêiner), como <code>&lt;div&gt;</code> e <code>&lt;p&gt;</code> no exemplo.</p><p>Note que ambos, <code>&lt;div&gt;</code> e <code>&lt;p&gt;</code>, começam em uma nova linha, formando uma estrutura <strong>semelhante a um bloco</strong>. Elementos de bloco começam em novas linhas.</p><p>Elementos de <strong>bloco</strong> comuns são <code>&lt;div&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;article&gt;</code>, <code>&lt;section&gt;</code>, <code>&lt;figure&gt;</code>, <code>&lt;footer&gt;</code> etc.</p><h3 id="elementos-em-linha-">Elementos em linha:</h3><p>Elementos em linha (em inglês, <em>inline</em>), como o nome diz, estão "incluídos como parte do texto principal e não como uma seção separada". Elementos em linha ocupam o espaço conforme necessário dentro do espaço definido pelo elemento principal. Diferentemente dos elementos de bloco, eles não começam em novas linhas.</p><p>Alguns dos elementos <strong>em linha</strong> são <code>&lt;a&gt;</code>, <code>&lt;span&gt;</code>, <code>&lt;img&gt;</code>, <code>&lt;code&gt;</code>, <code>&lt;cite&gt;</code>, <code>&lt;button&gt;</code>, <code>&lt;input&gt;</code> etc.</p><h3 id="exemplo-de-c-digo-e-resultados--1">Exemplo de código e resultados:</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png" class="kg-image" alt="31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/31069389-e1e3fc10-a779-11e7-86d2-6685e0061f52.png 912w" sizes="(min-width: 720px) 720px" width="912" height="506" loading="lazy"></figure><p><strong><em>Observação</em></strong>: elementos de bloco podem conter outros elementos de bloco ou elementos em linha. Elementos em linha <strong>não podem</strong> conter elementos de bloco.</p><h3 id="mudan-as-no-html5">Mudanças no HTML5</h3><p>Embora a compreensão dos elementos de bloco e em linha ainda seja relevante, você deve estar ciente de que esses termos foram definidos em versões anteriores da especificação do HTML.</p><p>No HTML5, um conjunto mais complexo de "categorias de conteúdo" substitui os elementos de nível bloco e em linha. Elementos de bloco são amplamente colocados na categoria "conteúdo de fluxo" no HTML5, enquanto os elementos em linha correspondem à categoria "conteúdo de frase".</p><p>Para mais informações sobre as novas categorias de conteúdo no HTML5, incluindo o conteúdo de fluxo e o conteúdo de frase, consulte a <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Content_categories">página de categorias de conteúdo na Mozilla Developer Network</a>.</p><p>Leia mais sobre o HTML <a href="https://www.freecodecamp.org/portuguese/news/manual-de-html-aprendizagem-de-html-para-iniciantes/">aqui</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tamanho de fonte em HTML – como alterar o tamanho do texto usando estilo em CSS em linha ]]>
                </title>
                <description>
                    <![CDATA[ Em HTML, a fonte que você escolhe desempenhará um papel importante na aparência de suas páginas da web. Você pode escolher a cor, o peso, o tamanho da fonte e assim por diante. Todas essas características fazem com que seus sites e aplicações para a web fiquem melhores e mais ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tamanho-de-fonte-em-html-como-alterar-o-tamanho-do-texto-usando-estilo-em-css-em-linha/</link>
                <guid isPermaLink="false">66e72a5d275cfd040913578f</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 18 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/fontsize-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-font-size-how-to-change-text-size-using-inline-css-style/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Font Size – How to Change Text Size Using Inline CSS Style</a>
      </p><p>Em HTML, a fonte que você escolhe desempenhará um papel importante na aparência de suas páginas da web.</p><p>Você pode escolher a cor, o peso, o tamanho da fonte e assim por diante. Todas essas características fazem com que seus sites e aplicações para a web fiquem melhores e mais apresentáveis para o usuário.</p><p>Com a propriedade <code>font-size</code> no CSS, você pode mudar o tamanho do texto que está na página da web. Você pode usar essa propriedade em qualquer tipo de CSS que estiver escrevendo – externo, interno ou em linha.</p><p>Neste artigo, eu vou mostrar como mudar o tamanho do texto com a propriedade <code>font-size</code> no CSS em linha.</p><h2 id="o-que-css-em-linha">O que é CSS em linha?</h2><p>CSS em linha (em inglês, <em>inline</em>) é uma das três maneiras diferentes que você pode usar para estilizar qualquer elemento do HTML.</p><p>Em vez de direcionar o elemento com um atributo de classe ou id, ou o próprio elemento como o seletor e estilizá-lo dessa maneira, você coloca todos os estilos do CSS na tag de abertura do elemento.</p><p>Além disso, você precisa garantir que todas as propriedades e valores dos estilos estejam dentro do atributo <code>style</code>. Esse atributo <code>style</code> é um dos inúmeros atributos aceitos por todas as tags do HTML.</p><p>No exemplo abaixo, eu mudo a cor do fundo do texto para <code>crimson</code>, a cor do texto para <code>#f1f1f1</code> (cinza-claro) e o peso da fonte para <code>bold</code> com CSS em linha.</p><pre><code>&lt;p style="background-color: crimson; color: #f1f1f1; font-weight: bold"&gt;
      Hello Campers...
&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inline-styling-example.png" class="kg-image" alt="inline-styling-example" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/inline-styling-example.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/inline-styling-example.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inline-styling-example.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="765" loading="lazy"></figure><p>A propósito, meu navegador está com zoom de 400%, por isso tudo aparece tão grande. Eu não apliquei nenhum estilo adicional para conseguir isso. 🙂</p><h2 id="como-mudar-o-tamanho-do-texto-usando-css-em-linha">Como mudar o tamanho do texto usando CSS em linha</h2><p>Para mudar o tamanho do seu texto com CSS em linha, você precisa fazer isso com o atributo <code>style</code>. Você digita a propriedade <code>font-size</code> e, então, atribui a ela um valor.</p><p>Existem valores embutidos como <code>large</code>, <code>larger</code>, <code>medium</code>, <code>small</code>, <code>x-large</code> e assim por diante:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inbuilt-properties.png" class="kg-image" alt="inbuilt-properties" width="436" height="244" loading="lazy"></figure><p>No trecho de código abaixo, eu mudo o tamanho do texto "Hello Campers…" para <code>x-large</code>, um dos valores embutidos da propriedade <code>font-size</code>.</p><pre><code>&lt;p style="font-size: x-large"&gt;Hello Campers...&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-inbuilt-value.png" class="kg-image" alt="font-style-with-inbuilt-value" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/font-style-with-inbuilt-value.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/font-style-with-inbuilt-value.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-inbuilt-value.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="764" loading="lazy"></figure><p>Você também pode definir o valor da propriedade <code>font-size</code> usando um número com qualquer unidade, como pixels (px), rem ou em.</p><p>É melhor usar valores numerados porque eles dão mais liberdade para escolher qualquer tamanho de fonte que você quiser.</p><p>No trecho de código abaixo, eu mudei o tamanho do texto para <code>30px</code> com CSS em linha:</p><pre><code>&lt;p style="font-size: 30px"&gt;Hello Campers...&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-numbered-value.png" class="kg-image" alt="font-style-with-numbered-value" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/font-style-with-numbered-value.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/font-style-with-numbered-value.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-numbered-value.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="767" loading="lazy"></figure><h2 id="conclus-o">Conclusão</h2><p>Neste artigo, você aprendeu como mudar o tamanho do texto com CSS em linha e a propriedade <code>font-size</code>. Você também viu como pode atribuir valores à propriedade <code>font-size</code>.</p><p>Apenas um aviso: o CSS em linha é ótimo para estilizar, mas você não deve depender muito dele, pois dificulta a leitura do seu HTML, especialmente se você estiver trabalhando em equipe. Você não quer ser o único capaz de ler seu próprio código.</p><p>Esteja ciente de que o CSS em linha também sobrescreve qualquer estilização definida com estilo interno ou externo. Você deve usar estilo externo ou estilo interno, pois eles separam seus códigos HTML e CSS, o que é melhor para a legibilidade.</p><p>Ao atribuir valores à propriedade <code>font-size</code>, é melhor atribuir os valores em unidades <code>rem</code> ou <code>em</code> em vez de <code>px</code>, por exemplo. Isso porque, quando você usa <code>rem</code>, o navegador será capaz de fazer ajustes no tamanho da fonte conforme o usuário aproxima ou afasta o texto usando o zoom, o que não acontece quando você usa <code>px</code>.</p><p>Agradecemos pela leitura! Siga programando! 😀</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Aprenda TypeScript em cinco minutos – um tutorial para iniciantes ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Per Harald Borgen Clique aqui para conferir o curso gratuito de TypeScript no Scrimba [https://scrimba.com/p/gintrototypescript?utm_source=freecodecamp.org&utm_medium=referral&utm_campaign=gintrototypescript_5_minute_article] TypeScript é um superconjunto tipado de JavaScript, que visa tornar a linguagem mais escalável e confiável. Ele é de código aberto e tem sido mantido pela Microsoft desde que eles o criaram, em ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/aprenda-typescript-em-cinco-minutos-um-tutorial-para-iniciantes/</link>
                <guid isPermaLink="false">66e7275e275cfd0409135729</guid>
                
                    <category>
                        <![CDATA[ TypeScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 17 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_2cFbIAg4bow_0pdaBNr7Cw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-typescript-in-5-minutes-13eda868daeb/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Learn TypeScript in 5 minutes - A tutorial for beginners</a>
      </p><p>Escrito por: Per Harald Borgen</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot-2019-06-06-at-07.58.51.png" class="kg-image" alt="Screenshot-2019-06-06-at-07.58.51" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/Screenshot-2019-06-06-at-07.58.51.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/Screenshot-2019-06-06-at-07.58.51.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/Screenshot-2019-06-06-at-07.58.51.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/Screenshot-2019-06-06-at-07.58.51.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1177" loading="lazy"></figure><p><a href="https://scrimba.com/p/gintrototypescript?utm_source=freecodecamp.org&amp;utm_medium=referral&amp;utm_campaign=gintrototypescript_5_minute_article">Clique aqui para conferir o curso gratuito de TypeScript no Scrimba</a></p><p>TypeScript é um superconjunto tipado de JavaScript, que visa tornar a linguagem mais escalável e confiável.</p><p>Ele é de código aberto e tem sido mantido pela Microsoft desde que eles o criaram, em 2012. No entanto, o TypeScript teve seu avanço inicial como a linguagem de programação principal no Angular 2. Ele vem crescendo continuamente desde então, também nas comunidades do React e do Vue.</p><p>Neste tutorial, você aprenderá o básico do TypeScript com a ajuda de exemplos práticos.</p><p><strong>Também estamos lançando um curso gratuito de TypeScript em 22 partes no Scrimba.</strong> <a href="http://eepurl.com/dyqJAj"><strong>Deixe seu e-mail aqui se quiser acesso antecipado!</strong></a></p><p>Vamos começar.</p><h3 id="instalando-o-typescript">Instalando o TypeScript</h3><p>Antes de começarmos a programar, precisamos instalar o TypeScript no nosso computador. Usaremos o <code>npm</code> para isso, então abra o terminal e digite o seguinte comando:</p><pre><code>npm install -g typescript
</code></pre><p>Uma vez instalado, podemos verificar executando o comando <code>tsc -v</code> que exibirá a versão do TypeScript instalada.</p><h3 id="escrevendo-algum-c-digo">Escrevendo algum código</h3><p>Vamos criar nosso primeiro arquivo TypeScript e escrever algum código nele. Abra seu IDE ou editor de texto favorito e crie um arquivo com o nome de <code>first.ts</code> — Para arquivos TypeScript, usamos a extensão <code>.ts</code>.</p><p>Por enquanto, vamos apenas escrever algumas linhas de JavaScript puro, pois todo código JavaScript também é válido no TypeScript:</p><pre><code>let a = 5;  
let b = 5;  
let c = a + b;

console.log(c);
</code></pre><p>O próximo passo é compilar nosso TypeScript em JavaScript puro, já que os navegadores querem arquivos <code>.js</code> para ler.</p><h3 id="compilando-o-typescript">Compilando o TypeScript</h3><p>Para compilar, executaremos o comando <code>tsc filename.ts</code>, que cria um arquivo JavaScript com o mesmo nome, mas com uma extensão diferente, e que eventualmente podemos passar para nossos navegadores.</p><p>Então, abra o terminal na localização do arquivo e execute o seguinte comando:</p><pre><code>tsc first.ts
</code></pre><p><strong>Dica</strong>: se você quiser compilar todos os arquivos TypeScript dentro de qualquer pasta, use o comando: <code>tsc *.ts</code></p><h3 id="tipos-de-dados">Tipos de dados</h3><p>TypeScript — como o nome sugere — é a versão tipada do JavaScript. Isso significa que podemos especificar tipos para diferentes variáveis no momento da declaração. Elas sempre manterão o mesmo tipo de dados dentro daquele escopo.</p><p>A tipagem é um recurso muito útil para garantir confiabilidade e escalabilidade. A verificação de tipos ajuda a garantir que nosso código funcione conforme o esperado. Além disso, ajuda a encontrar <em>bugs </em>e erros e documentar adequadamente nosso código.</p><p>A sintaxe para atribuir um tipo a qualquer variável é escrever o nome da variável seguido por um sinal <code>:</code>, o nome do tipo seguido por um sinal <code>=</code> e o valor da variável.</p><p>Existem três tipos diferentes em TypeScript: o tipo <code>any</code>, os tipos <code>Built-in</code> (incorporados), e os tipos <code>User-defined</code> (definidos pelo usuário). Vamos dar uma olhada em cada um deles.</p><h4 id="tipo-any">Tipo any</h4><p>O tipo de dado <code>any</code> é o superconjunto de todos os tipos de dados em TypeScript. Dar a qualquer variável o tipo <code>any</code> é equivalente a optar por não verificar o tipo dessa variável.</p><pre><code>let myVariable: any = 'This is a string'
</code></pre><h4 id="tipos-incorporados">Tipos incorporados</h4><p>Estes são os tipos que são nativos do TypeScript. Eles incluem <code>number</code>, <code>string</code>, <code>boolean</code>, <code>void</code>, <code>null</code> e <code>undefined</code>.</p><pre><code>let num: number = 5;  
let name: string = 'Alex';  
let isPresent: boolean = true;
</code></pre><h4 id="tipos-definidos-pelo-usu-rio">Tipos definidos pelo usuário</h4><p>Os tipos definidos pelo usuário incluem <code>enum</code>, <code>class</code>, <code>interface</code>, <code>array</code> e <code>tuple</code>. Discutiremos alguns desses mais adiante neste artigo.</p><h3 id="programa-o-orientada-a-objetos">Programação orientada a objetos</h3><p>O TypeScript suporta todos os recursos da programação orientada a objetos, como classes e interfaces. Essa capacidade é um grande impulso para o JavaScript — que sempre teve dificuldades com sua funcionalidade de OOP, especialmente desde que os desenvolvedores começaram a usá-lo para aplicações de grande escala.</p><h4 id="classe">Classe</h4><p>Na programação orientada a objetos, uma classe é o modelo de objetos. Uma classe define como um objeto seria em termos de características e funcionalidades desse objeto. Uma classe também encapsula dados para o objeto.</p><p>TypeScript tem suporte embutido para classes, que não eram suportadas pelo ES5 e versões anteriores. Isso significa que podemos usar a palavra-chave <code>class</code> para declarar uma classe facilmente.</p><pre><code>class Car {

// campos  
  model: String;  
  doors: Number;  
  isElectric: Boolean;

constructor(model: String, doors: Number, isElectric: Boolean) {  
    this.model = model;  
    this.doors = doors;  
    this.isElectric = isElectric;  
  }

displayMake(): void {  
    console.log(`This car is ${this.model}`);  
  }

}
</code></pre><p>No exemplo acima, declaramos uma classe <code>Car</code>, junto com algumas de suas propriedades, que estamos inicializando no <code>construtor</code>. Também temos um método que exibiria alguma mensagem usando sua propriedade.</p><p>Vamos ver como podemos criar uma instância dessa classe:</p><p>Para criar um objeto de uma classe, usamos a palavra-chave <code>new</code>, chamamos o construtor da classe e passamos suas propriedades. Agora, esse objeto <code>Prius</code> possui suas próprias propriedades de <code>model</code>, <code>doors</code> e <code>isElectric</code>. O objeto também pode chamar o método <code>displayMake</code>, que terá acesso às propriedades do <code>Prius</code>.</p><h4 id="interface">Interface</h4><p>O conceito de interfaces é outro recurso poderoso do TypeScript, que permite definir a estrutura das variáveis. Uma interface é como um contrato sintático ao qual um objeto deve obedecer.</p><p>Interfaces são melhor descritas através de um exemplo real. Suponha que tenhamos um objeto <code>Car</code>:</p><pre><code>const Car = {  
  model: 'Prius',  
  make: 'Toyota',  
  display() =&gt; { console.log('oi'); }  
}
</code></pre><p>Se olharmos para o objeto acima e se tentarmos extrair sua assinatura, ela seria:</p><pre><code>{  
  model: String,  
  make: String,  
  display(): void  
}
</code></pre><p>Se quisermos reutilizar essa assinatura, podemos declará-la na forma de uma interface. Para criar uma interface, usamos a palavra-chave <code>interface</code>.</p><pre><code>interface ICar {  
  model: String,  
  make: String,  
  display(): void  
}

const Car: ICar = {  
  model: 'Prius',  
  make: 'Toyota',  
  display() =&gt; { console.log('oi'); }  
}
</code></pre><p>Aqui, declaramos uma interface chamada <code>ICar</code> e criamos um objeto <code>Car</code>. <code>Car</code> está agora vinculado à interface <code>ICar</code>, garantindo que o objeto <code>Car</code> defina todas as propriedades que estão na interface.</p><h3 id="conclus-o">Conclusão</h3><p>Espero que isso tenha dado a você uma visão rápida sobre como o TypeScript pode tornar seu JavaScript mais estável e menos propenso a erros.</p><p>O TypeScript está ganhando muito impulso no mundo do desenvolvimento para a web. Há também um número crescente de desenvolvedores do React que o estão adotando. O TypeScript é definitivamente algo que qualquer desenvolvedor de <em>front-end</em> deve conhecer.</p><p>Boa programação para você! 🙂</p><hr><p>Agradecemos pela leitura! O autor deste artigo é Per Borgen, co-fundador do <a href="https://scrimba.com?utm_source=freecodecamp.org&amp;utm_medium=referral&amp;utm_campaign=gintrototypescript_5_minute_article">Scrimba</a> – a maneira mais fácil de aprender a programar. Confira o <a href="https://scrimba.com/g/gresponsive?utm_source=freecodecamp.org&amp;utm_medium=referral&amp;utm_campaign=gintrototypescript_5_minute_article">bootcamp de design responsivo para a web do Scrimba</a> se quiser aprender a construir sites modernos em um nível profissional.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/bootcamp-banner.png" class="kg-image" alt="bootcamp-banner" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/bootcamp-banner.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/bootcamp-banner.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/bootcamp-banner.png 1196w" sizes="(min-width: 720px) 720px" width="1196" height="683" loading="lazy"></figure><p><a href="https://scrimba.com/g/gresponsive?utm_source=freecodecamp.org&amp;utm_medium=referral&amp;utm_campaign=gintrototypescript_5_minute_article">Clique aqui para acessar o bootcamp avançado</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O guia do iniciante para o Git e o GitHub ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Thanoshan MV O que é Git? O Git é um software de controle de versão gratuito e de código aberto. Foi criado por Linus Torvalds em 2005. Essa ferramenta é um sistema de controle de versão que foi inicialmente desenvolvido para trabalhar com vários desenvolvedores no kernel do ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-guia-do-iniciante-para-o-git-e-o-github/</link>
                <guid isPermaLink="false">66e703f4275cfd0409135647</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 16 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/cover-pic.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-beginners-guide-to-git-github/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The beginner’s guide to Git &amp; GitHub</a>
      </p><p>Escrito por: Thanoshan MV</p><h1 id="o-que-git"><strong>O que é Git?</strong></h1><p>O Git é um software de <strong>controle de versão</strong> gratuito e de código aberto. Foi criado por Linus Torvalds em 2005. Essa ferramenta é um sistema de controle de versão que foi inicialmente desenvolvido para trabalhar com vários desenvolvedores no kernel do Linux.</p><p>Basicamente, isso significa que o Git é um rastreador de conteúdo. Então, o Git pode ser usado para armazenar conteúdo — e é principalmente usado para armazenar código por causa das outras funcionalidades que ele fornece.</p><p>Projetos da vida real geralmente têm diversos desenvolvedores trabalhando em paralelo. Assim, eles precisam de um sistema de controle de versão como o Git para garantir que não ocorram conflitos de código entre eles.</p><p>Além disso, os requisitos de tais projetos mudam frequentemente. Por isso, um sistema de controle de versão permite que os desenvolvedores revertam e voltem a uma versão anterior do seu código.</p><p>O sistema de <em>branches</em> no Git permite que os desenvolvedores trabalhem individualmente em uma tarefa (por exemplo: uma <em>branch</em> -&gt; uma tarefa OU uma <em>branch</em> -&gt; um desenvolvedor). Basicamente, pense no Git como uma pequena aplicação de software que controla sua base de código, se você for um desenvolvedor.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/vcs.png" class="kg-image" alt="vcs" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/vcs.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/vcs.png 746w" sizes="(min-width: 720px) 720px" width="746" height="309" loading="lazy"><figcaption>Funcionamento do Git</figcaption></figure><h1 id="reposit-rios-do-git"><strong>Repositórios do Git</strong></h1><p>Se quisermos começar a usar o Git, precisamos saber onde hospedar nossos repositórios.</p><p>Um repositório (ou "<em>repo</em>", para abreviar) é um projeto que contém diversos arquivos. No nosso caso, um repositório conterá arquivos baseados em código.</p><p>Existem duas maneiras de hospedar seus repositórios. Uma é <em>on-line</em> (na nuvem) e a outra é <em>off-line</em> (instalado no seu servidor).</p><p>Existem três serviços populares de hospedagem do Git: GitHub (pertencente à Microsoft), GitLab (pertencente ao GitLab) e BitBucket. Usaremos o GitHub como nosso serviço de hospedagem.</p><h1 id="antes-de-usar-o-git-devemos-saber-por-que-precisamos-dele"><strong>Antes de usar o Git, devemos saber por que precisamos dele</strong></h1><h3 id="o-git-facilita-a-contribui-o-para-projetos-de-c-digo-aberto">O Git facilita a contribuição para projetos de código aberto</h3><p>Quase todos os projetos de código aberto usam o GitHub para gerenciar seus projetos. Usar o GitHub é gratuito se o seu projeto for de código aberto, e inclui uma wiki e um rastreador de problemas que facilita a inclusão de documentação mais detalhada e o recebimento de feedback sobre seu projeto.</p><p>Se você quiser contribuir, você apenas faz o <em>fork</em> (uma cópia) de um projeto, faz suas alterações e, em seguida, envia ao projeto um <em>pull request</em> usando a interface da web do GitHub. Esse <em>pull request</em> é sua maneira de dizer ao projeto que você está pronto para que revisem suas alterações.</p><h3 id="documenta-o">Documentação</h3><p>Ao usar o GitHub, você facilita a obtenção de excelente documentação. A seção de ajuda e os guias deles têm artigos sobre praticamente qualquer tópico relacionado ao Git que você possa imaginar.</p><h3 id="op-es-de-integra-o">Opções de integração</h3><p>O GitHub pode se integrar com plataformas comuns como Amazon e Google Cloud, com serviços como Code Climate para acompanhar seu feedback, e pode realçar a sintaxe em mais de 200 linguagens de programação diferentes.</p><h3 id="acompanhe-as-altera-es-no-seu-c-digo-entre-vers-es">Acompanhe as alterações no seu código entre versões</h3><p>Quando várias pessoas colaboram em um projeto, é difícil acompanhar as revisões — quem mudou o que, quando e onde esses arquivos estão armazenados.</p><p>O GitHub cuida desse problema ao acompanhar todas as alterações que foram enviadas ao repositório.</p><p>Muito parecido com o uso do Microsoft Word ou do Google Drive, você pode ter um histórico de versões do seu código para que versões anteriores não sejam perdidas a cada iteração. É fácil voltar à versão anterior e contribuir com seu trabalho.</p><h3 id="exibir-seu-trabalho">Exibir seu trabalho</h3><p>Você é um desenvolvedor que deseja atrair recrutadores? O GitHub é a melhor ferramenta em que você pode confiar para isso.</p><p>Hoje, ao procurarem por novos recrutas para seus projetos, a maioria das empresas olha para perfis do GitHub. Se o seu perfil estiver disponível, você terá uma maior chance de ser recrutado, mesmo se não for de uma universidade ou faculdade renomada.</p><h1 id="aprendendo-a-usar-o-git-e-o-github"><strong>Aprendendo a usar o Git e o GitHub</strong></h1><h3 id="cria-o-de-conta-no-github">Criação de conta no GitHub</h3><p>Para criar sua conta, você precisa ir ao site do <a href="https://github.com/">GitHub</a> e preencher o formulário de registro.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/github-webpage.png" class="kg-image" alt="github-webpage" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/github-webpage.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/github-webpage.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2024/09/github-webpage.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w2400/2024/09/github-webpage.png 2400w" sizes="(min-width: 720px) 720px" width="2518" height="1218" loading="lazy"><figcaption><em>Página oficial do GitHub</em></figcaption></figure><h3 id="instala-o-do-git">Instalação do Git</h3><p>Agora, precisamos instalar as ferramentas do Git em nosso computador. Usaremos a CLI (interface de linha de comando) para nos comunicarmos com o GitHub.</p><p>Para o Linux:</p><ol><li>Primeiro, atualize seus pacotes.</li></ol><pre><code>sudo apt update
</code></pre><ol><li>Em seguida, instale o Git e o GitHub com apt-get</li></ol><pre><code>sudo apt-get install git
</code></pre><ol><li>Finalmente, verifique se o Git está instalado corretamente</li></ol><pre><code>git --version
</code></pre><ol><li>Execute os seguintes comandos com suas informações para definir um nome de usuário e e-mail padrão quando você for salvar seu trabalho.</li></ol><pre><code>git config --global user.name "seu_nome_de_usuario_aqui"
git config --global user.email "exemplo@e-mail.com"
</code></pre><h1 id="trabalhando-com-projetos-no-github"><strong>Trabalhando com projetos no GitHub</strong></h1><p>Trabalharemos com projetos no GitHub de dois modos.</p><h3 id="modo-1-crie-o-reposit-rio-clone-o-para-o-seu-pc-e-trabalhe-nele-recomendado-">Modo 1: crie o repositório, clone-o para o seu PC e trabalhe nele. (recomendado)</h3><p>O modo 1 envolve criar um repositório do zero no GitHub, cloná-lo para o nosso computador, trabalhar em nosso projeto e enviá-lo de volta.</p><p>Crie um repositório clicando no botão "New repository" na página da web do GitHub.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/new-repo.png" class="kg-image" alt="new-repo" width="309" height="377" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/readme.png" class="kg-image" alt="readme" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/readme.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/readme.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/readme.png 1069w" sizes="(min-width: 720px) 720px" width="1069" height="836" loading="lazy"></figure><p>Perfeito! Seu primeiro repositório no GitHub foi criado.</p><p>Sua primeira missão é obter uma cópia do repositório no seu computador. Para fazer isso, você precisa "clonar" o repositório no seu computador.</p><p>Clonar um repositório significa que você está pegando um repositório que está no servidor e clonando-o para o seu computador - assim como baixá-lo. Na página do repositório, você precisa obter o endereço "HTTPS".</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/github-project.png" class="kg-image" alt="github-project" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/github-project.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/github-project.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/github-project.png 1157w" sizes="(min-width: 720px) 720px" width="1157" height="782" loading="lazy"></figure><p>Depois de obter o endereço do repositório, você precisa usar seu terminal. Utilize o seguinte comando no terminal. Quando estiver pronto, você pode inserir isto:</p><pre><code>git clone [ENDEREÇO HTTPS]
</code></pre><p>Esse comando fará uma cópia local do repositório hospedado no endereço fornecido.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/cmd-1.png" class="kg-image" alt="cmd-1" width="551" height="89" loading="lazy"><figcaption><em>Mensagem de saída do comando "git clone"</em></figcaption></figure><p>Agora, o repositório está no seu computador. Você precisa entrar nele com o seguinte comando.</p><pre><code>cd [NOME DO REPOSITÓRIO]
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/cmd-2.png" class="kg-image" alt="cmd-2" width="210" height="41" loading="lazy"></figure><p>Como você pode ver na imagem acima, o nome do meu repositório é "My-GitHub-Project" e esse comando me fez ir para esse diretório específico.</p><p><strong>OBSERVAÇÃO:</strong> quando você clona, o Git criará um repositório no seu computador. Se quiser, você pode acessar seu projeto com a interface do usuário do computador em vez de usar o comando 'cd' no terminal.</p><p>Agora, naquela pasta, podemos criar arquivos, trabalhar neles e salvá-los localmente. Para salvá-los remotamente — como no GitHub — temos que fazer um processo chamado "<em>commit</em>". Para fazer isso, volte ao seu terminal. Se o tiver fechado, como mencionei anteriormente, use o comando 'cd'.</p><pre><code>cd [NOME DO REPOSITÓRIO]
</code></pre><p>Agora, no terminal, você está no diretório do seu repositório. Existem 4 etapas em um commit: 'status', 'add', 'commit' e 'push'. Todos os passos seguintes devem ser realizados dentro do seu projeto. Vamos passar por eles um por um.</p><p>"status": a primeira coisa que você precisa fazer é verificar os arquivos que você modificou. Para fazer isso, você pode digitar o seguinte comando para exibir uma lista de mudanças.</p><pre><code>git status
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/git-status-1.png" class="kg-image" alt="git-status-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/git-status-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/git-status-1.png 708w" width="708" height="187" loading="lazy"></figure><p>"add": com a ajuda da lista de mudanças, você pode adicionar todos os arquivos que deseja enviar com o seguinte comando,</p><pre><code>git add [NOME DO ARQUIVO] [NOME DO ARQUIVO] [...]
</code></pre><p>No nosso caso, vamos adicionar um arquivo HTML simples.</p><pre><code>git add sample.html
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/sample.png" class="kg-image" alt="sample" width="587" height="44" loading="lazy"></figure><p>"commit": agora que adicionamos os arquivos da nossa escolha, precisamos escrever uma mensagem para explicar o que fizemos. Essa mensagem pode ser útil mais tarde se quisermos verificar o histórico de alterações. Aqui está um exemplo do que podemos colocar no nosso caso.</p><pre><code>git commit -m "Adicionado arquivo HTML de amostra que contém sintaxe básica"
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/commit-1.png" class="kg-image" alt="commit-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/commit-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/commit-1.png 732w" sizes="(min-width: 720px) 720px" width="732" height="92" loading="lazy"></figure><ol><li>"push": agora podemos colocar nosso trabalho no GitHub. Para fazer isso, temos que fazer o 'push' de nossos arquivos para <em>remote</em>. <em>remote</em> é uma instância duplicada do nosso repositório que vive em algum lugar em um servidor remoto. Para fazer isso, devemos saber o nome do <em>remote</em> (na maioria das vezes o <em>remote</em> é chamado de <em>origin</em>). Para descobrir esse nome, digite o seguinte comando.</li></ol><pre><code>git remote
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/remote-1.png" class="kg-image" alt="remote-1" width="504" height="44" loading="lazy"></figure><p>Como você pode ver na imagem acima, é dito que o nome do nosso <em>remote</em> é <em>origin</em>. Agora, podemos fazer o 'push' do nosso trabalho com segurança pelo seguinte comando.</p><pre><code>git push origin master
</code></pre><p>Agora, se formos ao nosso repositório na página web do GitHub, podemos ver o arquivo <code>sample.html</code> que enviamos para o remoto — que é o GitHub!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/push-1.png" class="kg-image" alt="push-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/push-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/push-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/push-1.png 1326w" sizes="(min-width: 720px) 720px" width="1326" height="828" loading="lazy"></figure><p><strong>OBSERVAÇÃO</strong>: às vezes, quando você está usando comandos Git no terminal, isso pode levar você ao editor de texto VIM (um editor de texto baseado em CLI). Para se livrar dele, você tem que digitar</p><pre><code>:q
</code></pre><p>e ENTER.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/-q.png" class="kg-image" alt="-q" width="161" height="23" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/explanation.png" class="kg-image" alt="explanation" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/explanation.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/explanation.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/explanation.png 1200w" sizes="(min-width: 720px) 720px" width="1200" height="787" loading="lazy"><figcaption><em>Descrição de como pull e push funcionam</em></figcaption></figure><p>Fazer o '<em>pull</em>' é o ato de receber do GitHub.</p><p>Fazer o '<em>push</em>' é o ato de enviar para o GitHub.</p><h3 id="modo-2-trabalhe-no-seu-projeto-localmente-e-depois-crie-o-reposit-rio-no-github-e-envie-o-para-o-remoto-">Modo 2: trabalhe no seu projeto localmente e depois crie o repositório no GitHub e envie-o para o remoto.</h3><p>O modo 2 permite que você crie um repositório a partir de uma pasta existente no seu computador e o envie para o GitHub. Em muitos casos, você pode já ter criado algo no seu computador que deseja, de repente, transformar em um repositório no GitHub.</p><p>Vou explicar isso para você com um projeto de formulário de pesquisa que fiz anteriormente que não foi adicionado ao GitHub.</p><p>Como já mencionei, ao executar quaisquer comandos do Git, temos que garantir que estamos no diretório correto no terminal.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/type-2.png" class="kg-image" alt="type-2" width="583" height="34" loading="lazy"></figure><p>Por padrão, qualquer diretório no nosso computador não é um repositório do Git – mas podemos transformá-lo em um repositório do Git executando o seguinte comando no terminal.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/init.png" class="kg-image" alt="init" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/init.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/init.png 731w" sizes="(min-width: 720px) 720px" width="731" height="60" loading="lazy"></figure><p>Após converter nosso diretório para um repositório do Git, a primeira coisa que precisamos fazer é verificar os arquivos que temos usando o seguinte comando.</p><pre><code>git status
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/status-2.png" class="kg-image" alt="status-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/status-2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/status-2.png 693w" width="693" height="218" loading="lazy"></figure><p>Então, há dois arquivos nesse diretório que precisamos "adicionar" ao nosso repositório.</p><pre><code>git add [NOME_DO_ARQUIVO] [NOME_DO_ARQUIVO] [...]
</code></pre><p><strong>OBSERVAÇÃO</strong>: para "adicionar" todos os arquivos no nosso repositório, podemos usar o seguinte comando:</p><pre><code>git add .
</code></pre><p>Após a área de <em>stage</em> (o processo de adição) estar completa, podemos verificar se os arquivos foram adicionados com sucesso executando o <code>git status</code>.</p><p>Se esses arquivos específicos estiverem em verde, como na imagem abaixo, você fez seu trabalho!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/green.png" class="kg-image" alt="green" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/green.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/green.png 694w" width="694" height="215" loading="lazy"></figure><p>Então, temos que fazer o "<em>commit</em>" com uma descrição.</p><pre><code>git commit -m "Adicionando formulário de pesquisa web"
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/survey-form.png" class="kg-image" alt="survey-form" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/survey-form.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/survey-form.png 725w" sizes="(min-width: 720px) 720px" width="725" height="111" loading="lazy"></figure><p>Se meu repositório começou no GitHub e se eu o clonar para meu computador, um <em>remote</em> já estará anexado a ele (modo 1). Se, no entanto, eu estiver começando o repositório no meu computador, ele não tem um <em>remote</em> associado a ele, então eu preciso adicionar esse <em>remote</em> (modo 2).</p><p>Para adicionar esse <em>remote</em>, precisamos ir ao GitHub primeiro. Crie um repositório e nomeie-o como quiser para armazená-lo no GitHub. Em seguida, clique no botão "Create repository".</p><p><strong>OBSERVAÇÃO</strong>: no modo 2, não inicialize o repositório com um arquivo README ao criar um repositório na página web do GitHub.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/new-repo-2.png" class="kg-image" alt="new-repo-2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/new-repo-2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/new-repo-2.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/new-repo-2.png 1019w" sizes="(min-width: 720px) 720px" width="1019" height="833" loading="lazy"></figure><p>Depois de clicar no botão "Create repository", você verá a imagem abaixo como uma página da web.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/web-page.png" class="kg-image" alt="web-page" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/web-page.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/web-page.png 982w" sizes="(min-width: 720px) 720px" width="982" height="714" loading="lazy"></figure><p>Copie o endereço HTTPS. Agora, vamos criar o <em>remote</em> para nosso repositório.</p><pre><code>git remote add origin [ENDEREÇO HTTPS]
</code></pre><p>Após executar esse comando, podemos verificar se adicionamos o <em>remote</em> com sucesso usando o seguinte comando:</p><pre><code>git remote
</code></pre><p>Se ele exibir "<em>origin</em>", você adicionou o <em>remote</em> ao seu projeto.</p><p><strong>OBSERVAÇÃO</strong>: lembre-se de que podemos indicar qualquer nome para o <em>remote</em> alterando o nome "<em>origin</em>". Por exemplo:</p><pre><code>git remote add [NOME_DO_REMOTO] [ENDEREÇO HTTPS]
</code></pre><p>Agora, podemos enviar nosso projeto para o GitHub sem problemas!</p><pre><code>git push origin master
</code></pre><p>Após completar essas etapas uma por uma, se você for ao GitHub, encontrará seu repositório com os arquivos!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/final.png" class="kg-image" alt="final" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/final.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/final.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/final.png 1121w" sizes="(min-width: 720px) 720px" width="1121" height="676" loading="lazy"></figure><h1 id="conclus-o"><strong>Conclusão</strong></h1><p>Obrigado a todos por lerem. Expliquei apenas o básico de Git e GitHub. Recomendo fortemente que todos leiam mais artigos relacionados a Git e GitHub. Espero que este artigo tenha ajudado.</p><p><a href="https://medium.com/@mvthanoshan9/ubuntu-a-beginners-guide-to-git-github-44a2d2fda0b8">Confira</a> o artigo original (em inglês) no Medium.</p><p><strong>Boa programação para você!</strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
