<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leonardo Fiedler</title>
    <description>The latest articles on DEV Community by Leonardo Fiedler (@leonardofiedler).</description>
    <link>https://dev.to/leonardofiedler</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60337%2Fb266bcc9-befc-4b78-9255-0c7dfd562a9a.jpeg</url>
      <title>DEV Community: Leonardo Fiedler</title>
      <link>https://dev.to/leonardofiedler</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leonardofiedler"/>
    <language>en</language>
    <item>
      <title>Usando Conditional Else em Loops em Python</title>
      <dc:creator>Leonardo Fiedler</dc:creator>
      <pubDate>Mon, 24 Oct 2022 21:48:57 +0000</pubDate>
      <link>https://dev.to/leonardofiedler/usando-conditional-else-em-loops-em-python-5bc</link>
      <guid>https://dev.to/leonardofiedler/usando-conditional-else-em-loops-em-python-5bc</guid>
      <description>&lt;p&gt;Estava eu lendo o livro &lt;a href="https://realpython.com/products/cpython-internals-book/" rel="noopener noreferrer"&gt;CPython Internals&lt;/a&gt; e depois de dar uma bisbilhotada na sintaxe da linguagem Python, eis que encontro algo assim no &lt;a href="https://github.com/python/cpython/blob/3.9/Grammar/Grammar#L117" rel="noopener noreferrer"&gt;arquivo &lt;code&gt;Grammar/Grammar&lt;/code&gt;&lt;/a&gt; (Branch correspondente a versão 3.9):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite]
for_stmt: 'for' exprlist 'in' testlist ':' [TYPE_COMMENT] suite ['else' ':' suite]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas duas linhas representam a forma de se escrever as sentenças (sintaxe) dos comando &lt;code&gt;while&lt;/code&gt; (enquanto) e &lt;code&gt;for&lt;/code&gt; (para).&lt;br&gt;
Pegando apenas a primeira linha para analisar, é possível observar a seguinte sequência:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;while_stmt&lt;/code&gt;: rótulo que indica que esta expressão é a do comando enquanto;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;'while'&lt;/code&gt;: A palavra while, em áspas simples, significa uma constante (o que faz sentido, uma vez que o comando enquanto em Python começa com a palavra while);&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;namedexpr_test&lt;/code&gt;: Aponta para um rótulo onde será definido um ou mais testes com resultado booleano. Exemplo: &lt;code&gt;value &amp;gt; 5&lt;/code&gt; ou &lt;code&gt;age &amp;gt; 18&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;':'&lt;/code&gt;: Ao final da expressão, deve-se colocar ':' (semelhante ao &lt;code&gt;{&lt;/code&gt; de algumas outras linguagens, como Java, C e C++);&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;suite&lt;/code&gt;: Rótulo que aponta para onde será definido o corpo do loop, ou seja, o que será executado toda vez que entrar no loop;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;['else' ':' suite]&lt;/code&gt;: Esta é a parte que me chamou a atenção. Em colchetes, aparece a constante &lt;code&gt;else&lt;/code&gt; seguido por outra (&lt;code&gt;:&lt;/code&gt;) e depois uma &lt;code&gt;suite&lt;/code&gt;, que representaria uma expressão &lt;code&gt;senão&lt;/code&gt; com seu respectivo conteúdo e, como colocada em colchetes, significa que esta parte é opcional;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Depois de ler isso podemos concluir então que, tanto para o &lt;code&gt;for&lt;/code&gt; quanto para o &lt;code&gt;while&lt;/code&gt;, a gente pode usar um &lt;code&gt;Else&lt;/code&gt;?&lt;/p&gt;

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

&lt;p&gt;Apesar de parecer bastante estranho, sim, é verdade, e vamos ver um exemplo prático de como isso pode ser usado.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ATENÇÃO, O MINISTÉRIO DOS BONS CÓDIGOS ADVERTE: USAR MUITO ESTA TÉCNICA PODE CAUSAR SÉRIOS PROBLEMAS E BUGAR A MENTE DOS COLEGUINHAS. USE COM CUIDADO EM PROJETOS DE PRODUÇÃO!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para demonstrar o uso desta técnica, vamos imaginar um problema: você tem uma lista de números da sorte e, baseado no número que o usuário informou, você deverá dizer se a pessoa está com sorte ou não. Ao final, deverá retornar um texto dizendo &lt;code&gt;Found&lt;/code&gt;, caso tenho encontrado o número ou &lt;code&gt;Not Found&lt;/code&gt;, caso contrário.&lt;/p&gt;

&lt;p&gt;Pois bem, se formos pensar em uma solução bem simples, podemos chegar em algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_lucky_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;lucky_lst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Nesta solução, usamos uma variável auxiliar
&lt;/span&gt;    &lt;span class="c1"&gt;# Atribuímos False no inicio
&lt;/span&gt;    &lt;span class="n"&gt;has_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lucky_lst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Caso o valor esteja na lista, atribuímos True
&lt;/span&gt;            &lt;span class="n"&gt;has_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="c1"&gt;# Fazemos a checagem aqui no return para determinar o texto de encontrou ou nao
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;has_value&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apesar de ser uma solução bem simples e até fácil de ler, é necessário criar uma variável auxiliar para fazer essa verificação. Pensando nisso, podemos chegar na seguinte solução:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_lucky_value_with_else&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;lucky_lst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Nesta solução fazemos a iteração dos dados
&lt;/span&gt;    &lt;span class="c1"&gt;# Caso o valor nao seja encontrado e o break não seja alcançado
&lt;/span&gt;    &lt;span class="c1"&gt;# O Else é invocado ao final
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lucky_lst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pode parecer um pouco estranho o uso do &lt;code&gt;else&lt;/code&gt; no &lt;code&gt;for&lt;/code&gt;, mas ele é executado sempre que um &lt;code&gt;break&lt;/code&gt; não é invocado dentro do laço, fazendo com que não seja necessário criar uma variável auxiliar para controlar quando uma condição é atingida dentro de um loop.&lt;/p&gt;

&lt;p&gt;É claro que, para este problema, pensando em algo mais próximo da vida real, poderia ser resolvido em apenas uma linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not Found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apesar disto, conhecer esta técnica pode ser bem interessante, principalmente quando é necessário fazer um loop e efetuar diversas verificações, resolver desta forma pode facilitar a leitura e reduzir a quantidade de variáveis.&lt;/p&gt;

&lt;p&gt;E aí, você já conhecia essa técnica? Já usou em algum lugar?&lt;/p&gt;

&lt;p&gt;Compartilhe com a galera se curtiu e se você quiser baixar o código completo e brincar na sua máquina, aqui tem o &lt;a href="https://gist.github.com/leonardoFiedler/249e37b0c94b293449929b03f4b5116d" rel="noopener noreferrer"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E se você quiser me acompanhar nas redes sociais, chega mais clicando &lt;a href="https://linktr.ee/caveiradev" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Obrigado por ler e até a próxima!&lt;/p&gt;

&lt;h4&gt;
  
  
  Fontes de Referência:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://realpython.com/products/cpython-internals-book/" rel="noopener noreferrer"&gt;CPython Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.geeksforgeeks.org/using-else-conditional-statement-with-for-loop-in-python/" rel="noopener noreferrer"&gt;Geeks For Geeks: Using Else Conditional Statement With For loop in Python&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>python</category>
      <category>ptbr</category>
      <category>brazil</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Dicas Para Mandar Bem Em Testes Técnicos</title>
      <dc:creator>Leonardo Fiedler</dc:creator>
      <pubDate>Mon, 19 Apr 2021 21:12:48 +0000</pubDate>
      <link>https://dev.to/leonardofiedler/dicas-para-mandar-bem-em-testes-tecnicos-231k</link>
      <guid>https://dev.to/leonardofiedler/dicas-para-mandar-bem-em-testes-tecnicos-231k</guid>
      <description>&lt;h2&gt;
  
  
  Tabela de Conteúdos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;Escolha da Tecnologia&lt;/li&gt;
&lt;li&gt;O Domínio do Desafio&lt;/li&gt;
&lt;li&gt;Desenvolvendo a Solução do Desafio&lt;/li&gt;
&lt;li&gt;Hora de Testar a Aplicação&lt;/li&gt;
&lt;li&gt;Entrega e Conclusão&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Introdução &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Antes de mais nada, gostaria de me apresentar, sou Leonardo Fiedler e atualmente trabalho como pesquisador na Senior Sistemas. A motivação inicial para este post surgiu depois da experiência ao avaliar algumas pessoas candidatas a vaga para trabalhar na equipe que faço parte.&lt;/p&gt;

&lt;p&gt;Deixo bem claro também que este post não é um guia, nem mesmo irá estabelecer regras do que fazer ou que não fazer, mas sim, será dado dicas e observações de alguém que esteve do outro lado, avaliando desafios. As dicas deste post também podem ser aplicadas a qualquer projeto que você for participar.&lt;/p&gt;

&lt;p&gt;Para mandar bem no desafio é necessário atenção em todos os detalhe, desde a escolha da tecnologia, documentação, testes, até mesmo a entrega. Lembre-se que tudo conta e tudo é avaliado e levado em consideração.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escolha da Tecnologia &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Escolher sabiamente a tecnologia para resolver um problema é uma tarefa cotidiana na vida de uma pessoa desenvolvedora de softwares, por conta disso, caso o problema não especifique as tecnologias a serem utilizadas, você deverá fazer. E é aqui que você pode mitar ou virar o bola murcha logo de cara.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx03okz2i5vot2g2n8dqc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx03okz2i5vot2g2n8dqc.jpg" alt="Imagem com uma bola murcha escrito abaixo bola murcha e outra com uma bola cheia escrito abaixo, bola cheia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primeiramente, procure entender as tecnologias que a empresa e a equipe que se está aplicando utilizam no cotidiano - particularmente, sugiro dar preferência por esta, mas caso não seja algo de sua familiaridade e isso não seja um impedimento para a vaga, escolha a tecnologia que você mais se sinta confortável.&lt;/p&gt;

&lt;p&gt;Evite a ideia de selecionar uma tecnologia que nunca utilizou anteriormente para tentar aprender e fazer o desafio ao mesmo tempo, pois isto poderá lhe causar contratempos e ainda impactar no desempenho do seu trabalho.&lt;/p&gt;

&lt;p&gt;É claro, estou falando de aplicar um conceito ou uma linguagem em sua totalidade que nunca foi praticado antes. Isso não se aplica, por exemplo, caso você já tenha utilizado MySQL mas o desafio seja com base no PostgreSQL - neste caso, já são compreendidos os conceitos de: SQL e bancos relacionais e só terá de aprender algumas especificidades de um para o outro.&lt;/p&gt;

&lt;p&gt;Uma outra coisa importante na escolha das tecnologias: evite escolher algo somente pelo hype. Para cada decisão que tomar, tenha uma justificativa clara do porquê está escolhendo aquilo e lembre-se que esta escolha precisa estar atrelada diretamente ao domínio do problema.&lt;/p&gt;

&lt;h2&gt;
  
  
  O Domínio do Desafio &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Normalmente, o desafio é iniciado com um texto introdutório, seguido por uma lista de requisitos. Durante a leitura do texto, deve-se buscar algumas respostas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Qual o problema principal?&lt;br&gt;
Esta aqui é simples, num amontoado de requisitos, procure entender o problema principal, é ele que você tem de atacar. Tente entender também, onde estará o desafio principal, se é no front, back, arquitetura, banco de dados...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quais os requisitos são mais importantes e essenciais?&lt;br&gt;
Sabendo o problema principal, mapeie todos os requisitos que são essenciais. Estes deverão ser os requisitos que você deverá focar e atender com maestria (são esses que irão ser avaliados, se não forem contemplados, dificilmente algo além deles vai contar muitos pontos para você)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O que pode ser o diferencial do seu trabalho?&lt;br&gt;
Pense no que poderá destacar o seu trabalho ao resolver este problema, porquê dentre N soluções alguém escolheria a sua como a resolução definitiva? Não necessariamente é obrigatório ter algo diferente, você pode ter uma sacada de arquitetura, uma ideia de comunicação, uma forma inteligente de criar a interface de usuário, como por exemplo, sendo responsiva para dispositivos móveis ou até mesmo hospedando sua solução para que os avaliadores possam acessar e executar online. &lt;br&gt;
Pense nas respostas das perguntas anteriores para chegar nesta.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Estando em mãos dessas 3 respostas, é hora de botar a mão na massa, mas não se esqueça que você terá um tempo limitado para fazer isso e deverá administrar sabiamente o tempo para entregar um bom desafio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desenvolvendo a Solução do Desafio &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Essa é a melhor parte, mas que pode se tornar um pesadelo se você cometer alguns deslizes. Um dos mais clássicos, inclusive cometido por mim em diversos trabalhos da faculdade e pós graduação, é a PROCRASTINAÇÃO!&lt;/p&gt;

&lt;p&gt;Pois é, uma única palavra, aparentemente tão inofensiva, pode fazer o prazo de entrega de 1 semana se tornar 1 dia em questão de algumas viradas de ponteiro. Administrar o tempo é fundamental e deixar para depois é sempre pior, então a dica é: comece assim que receber o desafio, trace metas diárias e estabeleça um prazo de entrega antes da data planejada (eu gosto de terminar um dia antes, assim ainda me sobram algumas horas para rever e fazer alguns ajustes pontuais).&lt;/p&gt;

&lt;p&gt;O segundo problema é algo também bem conhecido no meio de tecnologia, onde você entra em um espiral de pesquisas e divagações, tentando fazer algo funcionar de uma forma e investe muito tempo tentando fazer algo "perfeito" e isso lhe consome um tempo precioso. Entregar um desafio da melhor forma possível é algo que todos adoram, mas lembre-se que a perfeição nunca existirá e você não terá tempo hábil para isso. Então, prefira fazer e seguir em frente ao ficar perdendo tempo com coisas que podem ser melhoradas futuramente.&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento do desafio, seu objetivo deve ser avançar as etapas, sem perder o ritmo. Mas espere, não vá muito rápido para não se atrapalhar nas próprias pernas! Nesta etapa, você não pode esquecer de documentar e testar.&lt;br&gt;
DOCUMENTAÇÃO é um ponto que separa bons/medianos de ótimos trabalhos. Ao abrir um projeto, ler um &lt;code&gt;README.md&lt;/code&gt; que contém informações sobre:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é o projeto?&lt;/li&gt;
&lt;li&gt;Quais tecnologias utilizadas? &lt;/li&gt;
&lt;li&gt;Como instalar e executar a aplicação?&lt;/li&gt;
&lt;li&gt;Link de acesso público ou um Gif/prints demonstrando o funcionamento da aplicação&lt;/li&gt;
&lt;li&gt;Diagrama de funcionamento da aplicação (ou uma explicação um pouco mais técnica sobre como funciona o projeto)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provavelmente você não consiga fazer tudo isso em um desafio, mas escolha alguns desses itens e dê uma atenção a documentação, porque caso não tenha, uma pessoa avaliadora terá bastante dificuldade em saber o que você fez e precisará passar pelas suas classes e métodos para entender seu código.&lt;br&gt;
E a propósito, eu falei em documentar o todo, mas e o código, documentar ou não documentar? Eis a questão... Não há um consenso entre os avaliadores, assim como não há consenso entre as pessoas da área, tem os que acreditam que deve-se documentar os métodos, já outros dizem que o código deve ser a própria documentação.&lt;/p&gt;

&lt;p&gt;Particularmente, gosto de documentar algumas parte do código, mas sem aquelas obviedades, como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Este código abaixo printa o texto Hello World
print('Hello World')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aliás, falando desse trecho de código, escrever em português ou inglês?&lt;/p&gt;

&lt;p&gt;Essa também é uma questão complexa e na verdade, não há uma resposta correta. Particularmente, eu adoto a seguinte postura: estou no Brasil, todos falam o português, então este é o idioma padrão por aqui. A menos que a empresa seja estrangeira ou o problema explicitamente me peça para trocar o idioma, eu escreverei neste idioma.&lt;br&gt;
Independente do idioma que adotar, jamais misture idiomas, como nesse caso abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Este método faz algo
def do_something():
  pass

# This method does something
def faz_algo():
  pass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você deve ter lido até agora esta seção e pensado: caramba, cadê a parte em que ele vai falar de Clean Code, Clean Architecture e tudo mais que eu tenho de fazer no meu código? Pois bem, vamos falar disso.&lt;/p&gt;

&lt;p&gt;Acho muito bacana tudo isso, de verdade, mas veja só, você tem um desafio e um prazo curto para fazê-lo. Você já conhece esses livros e já os aplicou alguma vez antes? Ótimo, coloque seus ensinamentos em prática aqui também. Nunca os leu, não lembra, deu branco ou qualquer outro motivo: faça o básico! Foco na entrega, no resultado final. Escreva um código bem estruturado, divida em classes/arquivos, deixe tudo ORGANIZADO! Mas lembre-se, vão te avaliar por uma solução pronta e entregue, ou seja, pelo todo e não apenas por um item em específico.&lt;/p&gt;

&lt;p&gt;Um outro detalhe muito importante no código, evite a utilização de strings de configuração fixas! Pois é, segundo a agência Dados Inventados SA, para cada candidato que deixa uma config fixa no código, um dia é acrescentado a pandemia (como se já não bastassem outros motivos). Vai usar uma URL? Um parâmetro estático? Então você tem 2 alternativas para fazer isso de forma elegante:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie uma constante (é bacana, mas não é top);&lt;/li&gt;
&lt;li&gt;Criar um arquivo de configução e utilizá-lo (esse é o que eu recomendaria se quisesse gabaritar no desafio).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Com todas essas dicas, as pessoas que irão avaliar vão até lhe agradecer pelo seu desafio...&lt;/p&gt;

&lt;h2&gt;
  
  
  Hora de Testar a Aplicação &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Então você construiu a aplicação, fez todos os passos e terminou o desenvolvimento. Aparentemente, está tudo certo e tudo funciona como esperado.&lt;/p&gt;

&lt;p&gt;Mas espere, você criou testes?? Xiii...&lt;br&gt;
Essa é uma parte que percebi de maior dificuldade as pessoas que se candidataram. A maioria investe tanto tempo desenvolvendo que não há sequer espaço para testes, por mais simples que sejam.&lt;/p&gt;

&lt;p&gt;Uma dica para você destacar o seu projeto: preocupe-se e implemente casos de testes. Por mais simples que eles sejam, bons e bem documentados testes irão elevar o patamar do seu trabalho.&lt;/p&gt;

&lt;p&gt;E não precisa pensar muito complicado, viu? Pode fazer testes unitários e de carga se for uma API, pode fazer testes de interface ou até algum outro. &lt;/p&gt;

&lt;p&gt;Normalmente, este é um item que fica por último e em certas vagas, como a que avaliei, os testes não eram nem especificados no desafio. Porém, quem fizer...&lt;/p&gt;

&lt;h2&gt;
  
  
  Entrega e Conclusão &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Parabéns, se você chegou até aqui, possivelmente passou por toda a odisseia e está pronto para entregar o seu trabalho e correr para negociar o salário.&lt;/p&gt;

&lt;p&gt;Brincadeiras a parte, após concluir o desafio, caso ainda tenha tempo, sugiro que publique em algum lugar para que os avaliadores possam ver.&lt;/p&gt;

&lt;p&gt;É normal, infelizmente, que o seu desafio não ganhe um feedback como devesse ser merecido após tanto esforço. No entanto, publique seu código no GitHub e compartilhe com pessoas mais experientes, peça a elas um feedback (pode mandar lá no Twitter também, inclusive).&lt;/p&gt;

&lt;p&gt;Também após o desafio, gosto e recomendo que faça uma retrospectiva de tudo que construiu, as dificuldades encontradas, o que pode estudar mais e o que fazer de diferente em uma próxima.&lt;/p&gt;

&lt;p&gt;Testes técnicos são uma maneira de avaliar, de forma geral, o conhecimento e domínio em um conjunto de ferramentas e caso você não tenha ficado satisfeito com o resultado, não se cobre tanto, lembre-se que o aprendizado é um processo e você sempre estará em seu meio. Reflita sobre seus acertos e erros e tente novamente caso não tenha obtido êxito.&lt;/p&gt;

&lt;p&gt;Espero que tenha gostado e bons desafios!&lt;/p&gt;

</description>
      <category>career</category>
      <category>braziliandevs</category>
      <category>brazil</category>
      <category>ptbr</category>
    </item>
  </channel>
</rss>
