Passo a passo pra resolver os primeiros problemas de programação
Tags: iniciantes, programar, tecnologia
Published: 2020-06-15 02:42:09

---
title: Passo a passo pra resolver os primeiros problemas de programação
published: true
description:  Vamos falar um pouco sobre como EU fazia pra resolver problemas de programação quando estava iniciando os estudos
tags: iniciantes, programar, tecnologia
cover_image: https://images.unsplash.com/photo-1488998427799-e3362cec87c3?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2700&q=80
---

# Tips and Tricks

Bom, começando uma série de dicas que pretendo compartilhar com vocês. A primeira será ***Como eu aprendi a resolver problemas de programação.***

Então tenham em mente que eu estruturei isso pra mim, e deu certo pra mim. Não existe receita de bolo ou bala de prata pra nenhum problema que a gente encare e por isso precisamos sempre nos adaptar.

# TL;DR

### Too long; Didn't read

Sempre que preciso resolver um problema, eu procuro ter em mente esses cinco passos. 

1. Identifique o problema principal;
2. Procure identificar as palavras chave do problema;
3. Encontre qual a entrada esperada;
4. Liste as restrições que o problema te fornece;
5. Verifique a saída esperada.

E nos casos em que o problema seja muito grande, eu procuro separar ele em problemas menores. Dividir pra conquistar é o lema.

# A versão longa da história

Antes de mais nada, procure ter sempre por perto um bloco de papel e uma caneta. Muitas vezes vamos querer resolver problemas que ficam mais claros quando tiramos ele do mundo abstrato da nossa mente e trazemos ele pro plano físico do papel. Isso vai ajudar a entender um pouco melhor o problema e também a estruturar o que precisa ser feito.

Caneta e papel em mãos, vamos começar a planejar o que precisamos fazer em cinco passos:

### Identifique o problema principal

O primeiro passo sempre vai ser entender o problema que temos que resolver. Faça uma leitura atenciosa do problema e marque a parte que achar mais importante.

### Procure identificar as palavras chave do problema

Isso nos ajuda quando temos uma descrição muito grande para o problema. Tente encontrar palavras chaves que conectem as partes do problema e destacar essas palavras de alguma forma. 

### Encontre qual a entrada esperada

Todo problema (por mais que algumas vezes não pareça) fornece uma entrada esperada. Ela pode estar implícita ou explícita). Os exercícios disponíveis no codewars, por exemplo, são casos em que essa entrada é explícita, ou seja, o problema fornece o que deverá ser sua entrada.

### Liste as restrições que o problema te fornece

Essa eu diria ser a parte fundamental para resolver um problema. Identifique no texto coisas que podem atuar como restrição. Por exemplo, dado um problema, a entrada será sempre um vetor de inteiros. Caso o vetor seja vazio, devemos retornar 0.

Nossas restrições aqui são:

- A entrada é sempre um vetor de inteiros
- Caso a entrada seja um vetor vazio, retorne zero.

### Verifique a saída esperada

Por fim, precisamos executar um teste e verificar se a saída que tivemos é a saída esperada. Procure usar valores na entrada que você seja capaz de checar tirando a prova dos nove que o que encontramos é o que queremos. Caso não seja, voltamos ao primeiro passo!

# Um exemplo

Vamos resolver o seguinte problema:

Crie uma função que atenda as seguintes condições:
Sua função irá receber como entrada um inteiro _n_ positivo e deve retornar "Fizz" caso seja divísivel por 3, "Buzz" caso seja divisível por 5, FizzBuzz caso seja divisível por 3 e por 5 e "Nem Fizz nem Buzz" caso contrário. 

Agora, com a nossa receita, conseguimos saber


1. Identifique o problema principal;
_Retornar uma string de acordo com o resultado de uma divisão._

2. Procure identificar as palavras chave do problema;
_inteiro positivo, divisível por 3, divisível por 5, divisível por 3 e por 5._

3. Encontre qual a entrada esperada;
Um número inteiro positivo.

4. Liste as restrições que o problema te fornece;
_Se o número for divisível por 3, retorne "Fizz"
Se o número for divísivel por 5, return "Buzz"
Se o número for divísvel por 3 e por 5, retorne "FizzBuzz"
Se não atender nenhuma das condições acima, retorne "Nem Fizz nem Buzz"_

5. Verifique a saída esperada.
_Aqui podemos verificar algumas entradas que podemos verificar manualmente._

*Para n = 2, retorna "Nem Fizz nem Buzz";*
*Para n = 3, retorna "Fizz";*
*Para n = 5, retorna "Buzz";*
*Para n = 11, retorna "Nem Fizz nem Buzz";*
*Para n = 15, retorna "FizzBuzz";*


*Trilha sonora*
{% youtube mPymRFeTJa4 %}