escuro

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

No quarto post da série, falo sobre o code challenge, como se preparar para ele e trago dicas exclusivas para o dia da prova.
IBTI - Trabalho remoto pt4
IBTI – Trabalho remoto pt4

No quarto post da série Trabalhe remotamente e ganhe em dólar com Programação iremos abordar com mais detalhes sobre a preparação para o famoso code challenge.


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

IBTI - Ambiente code challenge 01
Fonte: autoria própria

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.

1. 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

IBTI - Code challenge environment 02
Fonte: autoria própria

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.

2. 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!

3. 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.

4. 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

IBTI - Ambiente code challenge 03
Fonte: autoria própria

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.

5. 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.

6. 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

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!

Olá! Meu nome é Igor Brandão, sou formado em Tecnologia da Informação pela Universidade Federal do Rio Grande do Norte (UFRN). Meus objetivos profissionais estão direcionados para desenvolvimento de projetos locais e/ou internacionais que envolvam empreendedorismo, pesquisa e criação de novas tecnologias. Pessoalmente, busco evoluir constantemente, estabelecer parcerias e oportunidades para novos negócios.
Total
0
Shares
3 comentários
Deixe um comentário

O seu endereço de e-mail não será publicado.

Post Anterior
IBTI - Trabalho remoto pt3

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

Próximo Post
IBTI - Trabalho remoto pt5

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

Posts Relacionados