Trabalhe remotamente e ganhe em dólar com Programação – pt 4

Trabalho remoto
terça-feira, 2 de janeiro de 2024 (há 9 meses)
7 minutos
4 Visualizações
Igor BrandãoIgor Brandão#igorabrandao
Sumário

    Ao se candidatar a uma vaga de desenvolvimento de software, as chances são altas de que você será solicitado a fazer pelo menos um code challenge. Inicialmente, o code challenge parecerá algo assustador para alguém que não se preparou. É por isso que investir algum tempo de preparo prévio é importante aqui.

    O preparo vai além de somente programar, ele envolve uma série de aspectos que irei abordar a seguir, entre eles:

    • Entender o comando da questão;
    • Gestão de tempo;
    • Estruturar uma solução;
    • Testar o algoritmo desenvolvido;
    • Saber explicar a abordagem utilizada.

    Mas antes coloco aqui uma imagem mostrando a estrutura geral do ambiente utilizado para o code challenge:

    Fig 1. Exemplo do ambiente de um code chellenge

    Na [Fig. 1] podemos observar que o ambiente do code challenge é composto pelos seguintes elementos:

    1. Comando da questão: esta área é a mais importante, uma vez que sem o pleno entendimento do problema será inviável resolver o algoritmo apropriadamente.
    2. Escolha da linguagem de programação: em geral as plataformas de code challenge oferecem uma grande variedade de linguagens de programação, sendo as principais Java, Javascript, PHP, C, C++ e várias outras. Importante: caso você opte por alterar a linguagem de programação no meio do teste, todo o trabalho desenvolvido anteriormente será perdido, então escolham a linguagem antes de começar a programar e evitem alterá-la!
    3. Editor de código: aqui será o local onde você passará a maior parte do tempo do code challenge, em geral os editores são modernos contando com contadores de linhas e colunas e alguns até trazem a função de auto-completar da linguagem de programação, mas não contem com esta opção.
    4. Botões para submissão do código desenvolvido: ao finalizar o algoritmo ou até mesmo durante o desenvolvimento do mesmo, você sempre poderá checar se o seu código está compilando corretamente e se está passando nos testes.

    Após essa visão geral do ambiente do code challenge, vamos aos pontos cruciais na preparação para o teste.

    Entenda o comando da questão!

    Antes de pular etapas e ir no modo go-horse para a codificação, separe alguns minutos para compreender qual é o objetivo da questão.

    Fig 2. Seções do comando da questão

    code_challenge_env02-768x395.jpg

    Observando a [Fig. 2] você perceberá que o enunciado da questão é dividido em seções além do parágrafo introdutório, entre elas:

    1. Input/output format: após entender o contexto geral do problema, você precisará saber como será a entrada e saída dos dados. Nesta seção você receberá com precisão quais são esses formatos, no caso da [Fig. 2] o problema informa que a entrada de dados será composta por 4 linhas, na qual a primeira será um número inteiro representando a idade, a segunda será uma cadeia de caracteres minúsculos representando o nome do aluno, a terceira também será uma cadeia de caracteres minúsculos representando o sobrenome do aluno, e por fim a última linha será um número inteiro representando a média de suas notas. Além disso, o problema traz uma nota informando que as cadeias de caracteres não excederão mais de 50 caracteres.
    2. Sample input/output: aqui o enunciado da questão te dará um exemplo concreto tanto da entrada como da saída de dados, a saber:
      Entrada
      15 = idade
      john = nome
      carmack = sobrenome
      10 = média das notas

           Saída
           15
           carmack, john
           10

           15,john,carmack,10

     

    Entender a problemática da questão, como receber, processar e devolver os dados é crucial aqui. Sem esse entendimento você não conseguirá progredir no problema. Pessoalmente, eu invisto os primeiros 5 minutos do code challenge para entender o problema.

    Gestão de tempo

    • Primeiros 5 minutos: foco total em entender a questão;
    • Próximos 5 minutos: organizar mentalmente a solução com papel e caneta;
    • Próximos 35 minutos: codificar o algoritmo, a primeira versão dele da forma mais simples possível e ir aprimorando se houver tempo. Uma dica importante aqui é sempre rodar o programa para ver se o mesmo está compilando corretamente e já pegar typos logo de cara;
    • Últimos 15 minutos: verificar se o algoritmo passa em todos os casos de teste disponibilizados. É muito comum após o término da codificação, o algoritmo passar em alguns casos de teste e em outros não, tente utilizar esse tempo final para fazer os últimos ajustes.

    Nota: aqui estou pressupondo que no modelo do code challenge que você se deparou não tenha um item pedindo para você explicar a sua abordagem, assim como a complexidade assintótica do seu algoritmo. Esteja ciente que isso pode aparecer no seu teste!

    Estruturar uma solução

    Após entender o enunciado do problema, agora é hora de colocar a mão na massa!

    Um método bastante eficiente para resolução de problemas, é o método de Pólya. Ele é baseado em algumas etapas:

    1. Entenda o problema (feito!)
    2. Elabore um plano
    3. Execute o plano
    4. Olhe para trás

    Na prática, a elaboração do plano pode ser um rascunho da solução em pseudocódigo.

    Pseudocódigo é uma descrição em linguagem simples das etapas de um algoritmo. Em outras palavras, seu pseudocódigo é seu plano passo a passo de como resolver o problema.

    Escreva as etapas que você precisa seguir para resolver o problema. Para um problema mais complicado, você terá mais etapas. Segue um exemplo de como você pode escrever:

    // Create a sum variable.
    
    Add the first input to the second input using the addition operator.
    
    // Store value of both inputs into sum variable.
    
    // Return as output the sum variable.

    Agora que você tem um plano passo a passo para resolver o problema, está na hora de realmente codificar. Infelizmente nesta parte eu não posso te ajudar muito, você precisará estar afiado na linguagem de programação escolhida para evitar perder tempo tentando lembra a sintax dos comandos. Por isso recomendo bastante treino antes de partir para o code challenge!

    Utilize as plataformas Hackerrank e Leetcode para praticar com antecedência.

    Testar o algoritmo desenvolvido

    Agora que chegamos na reta final do code challenge está na hora de colocar o trabalho desenvolvido a prova! A última etapa é testar o algoritmo desenvolvido e ver se ele passou nos testes. A [Fig. 3] mostra exemplos de como os resultados dos testes são demonstrados:

    Fig 3. Exemplos de algoritmos que falaharam e que passaram nos testes

    Caso após a execução dos testes um ou mais deles falharem igual a [Fig. 3A], você precisará checar o teste específico que falhou clicando na aba correspondente a ele. Infelizmente alguns dos testes são escondidos e possuem um cadeado, então não será possível visualizar o input completo dos dados. Daí vem a importância de planejar o seu algoritmo antes de codificá-lo e pensar em possíveis casos de erro.

    Se todos os testes forem bem sucedidos igual a [Fig. 3B], parabéns! Você está pronto para submeter a sua solução. Caso não haja uma questão extra pedindo para explicar a abordagem utilizada no seu algoritmo, utilize o tempo restante caso tenha para dar uma polida no seu código.

    Explicar a abordagem utilizada

    Em algumas ocasiões mais raras, me deparei com questões extras pedindo para explicar a abordagem utilizada no algoritmo assim como sua complexidade assintótica. Caso você não entenda bem este conceito, sugiro fortemente que o estude antes de partir para o code challenge. Deixo aqui um ponto de partida: link sobre complexidade assintótica.

    Para ir além

    Caso você realmente queira aprender em profundidade os conceitos de algoritmos, estrutura de dados e complexidade de algoritmos, deixo aqui algumas recomendações de livros:

    Estruturas de Dados e Seus Algoritmos
    por Jayme Luiz Szwarcfiter

    Cracking the Coding Interview: 189 Programming Questions and Solutions
    por Gayle Laakmann McDowell

    Algoritmos: Teoria e Prática
    por Thomas Cormen

    71Oc2emV-SL._SY466_.jpg
    410hiaPGyCL._SL250_.jpg
    41SNoh5ZhOL._SL250_.jpg

    No próximo post irei detalhar mais um pouco sobre a etapa do mini-projeto (take home) que pode aparecer em alguns processos seletivos.

    Vejo vocês na próxima!

    Igor Augusto Brandão

    Igor Augusto Brandão

    #igorabrandao

    Hello, world! My name is Igor and I am a system analyst professional with degrees in Systems Analysis, Business Administration, Information Technology, a specialization of IT applied to the Legal Area, an MSc in Bioinformatics, and +10 years of experience working with systems development.

    Comentários

    Sem comentários
    Não há comentários para este post ainda. Seja o primeiro a comentar!