Skip to content

Instantly share code, notes, and snippets.

@netojoaobatista
Last active February 25, 2019 14:08
Show Gist options
  • Save netojoaobatista/9416177 to your computer and use it in GitHub Desktop.
Save netojoaobatista/9416177 to your computer and use it in GitHub Desktop.
Dica para não programadores aprenderem a pensar em programação

Por estar envolvido diretamente com várias comunidades de desenvolvedores, de diversas linguagens, vejo, com frequência, uma série de dificuldades de entendimento por parte dos mais novos (leia-se iniciantes em programação). Essa dificuldade de entendimento, normalmente, está relacionada com uma confusão em relação ao objetivo real do desenvolvimento de software.

Programar, ao contrário do que os mais novos pensam, não se trata de escrever códigos. De fato, trata-se de percepção com o objetivo puro e simples de se resolver problemas. O código é apenas uma, entre as várias atribuições do programador e, acreditem, não é a mais importante.

Digo que não é a mais importante, pois o código é apenas a aplicação de uma linguagem. Porém, quando se percebe que uma linguagem é apenas uma ferramenta, dentre várias ferramentas que podem ser utilizadas, compreende-se que o código naquela linguagem é equivalente ao serrote utilizado pelo marceneiro.

Alguém aqui definiria um marceneiro como um cara que sabe usar um serrote, ou como um cara que sabe lidar com madeira? Se eu tirar o serrote do marceneiro, ele será menos marceneiro?

Com exceções, claro, é normal eu ver alguém começando com programação, e pensar nesse alguém como uma criança de poucos anos brincando com um daqueles brinquedos de encaixe. Por ainda não ter uma percepção para resolver o problema, a criança vai na tentativa e erro ou, como chamamos em desenvolvimento, por força bruta. Vai tentando, tentando, tentando até que, eventualmente, consegue encaixar a peça. Muitas vezes, as dificuldades enfrentadas pelos programadores mais novos, são comparáveis a esse cenário.

Então, aqui vão algumas dicas para se pensar como programador:

  1. Entenda a fundo o problema. Jamais, sob hipótese alguma, tente escrever código sem ter, antes, uma compreensão plena do problema.
  2. Utilize analogias e metáforas para descrever a solução. Figuras de linguagem, normalmente, facilitam a formação de imagens. Quando conseguir formar imagens que descrevem o problema, manipule mentalmente essas imagens.
  3. Entenda que linguagem de programação é ferramenta. Nunca pense no código como o fim. O código é meramente um meio para se alcançar o fim.

Por exemplo, imaginem que tenhamos uma lista numérica não ordenada, com os seguintes valores: 5, 2, 7, 3, 8, 9, 1. Desta lista, precisamos encontrar o maior valor.

Esquecendo programação por um momento, etc. Como resolveríamos esse problema, se nos fosse entregue um baralho com esses números, e pudéssemos tirar apenas 1 carta por vez? Como encontraríamos a maior carta?

Eu faria da seguinte forma:

1 - Pego a primeira carta do baralho:

baralho-1

2 - Como ainda não tirei nenhuma outra carta, eu a coloco ao lado do baralho e, em seguida, tiro outra carta:

baralho-2

3 - Bom, agora tenho duas cartas abertas. Como a carta com o 5 é maior que a carta com o 2, eu coloco a carta com o 2 de cabeça para baixo, ao lado do 5:

baralho-3

4 - Agora tiro outra carta:

baralho-4

5 - Dessa vez, a carta com o número 7 é maior que a carta com o número 5. Então primeiro descarto a carta com o número 5, invertendo-a e colocando na pilha onde está a carta anterior.

baralho-5

6 - Em seguida, coloco a carta com o número 7 no lugar onde estava a carta com o número 5:

baralho-6

Se continuamos nesse processo, não importa quantas cartas tenhamos no baralho. Sempre encontraremos a maior carta. O mesmo processo funciona também em programação. Se chamarmos a lista descrita no problema de baralho: baralho=[5, 2, 7, 3, 8, 9, 1]. Podemos escrever o código que faz o mesmo que fizemos com o baralho "real". Vejamos:

baralho = [5, 2, 7, 3, 8, 9, 1]
maior = 0

for carta in baralho:
    if carta > maior:
        maior = carta

print maior

O mais legal é que, quando visualizamos o problema como uma imagem e compreendemos que a linguagem é apenas uma ferramenta, conseguimos resolver o problema em qualquer linguagem que for preciso. E podemos fazer isso, pois em vez de "escrever código", nós resolvemos o problema.

Então, quando se depararem com problemas de programação, lembrem-se: Antes de escrever um código, visualizem a imagem do problema. Somente após visualizar e resolver o problema mentalmente, comece a escrever um código para automatizar a solução.

;)

@gildasio
Copy link

Ótima dica!! É engraçado que as vezes eu fico em frente a meu pc, fazendo sinais estranhos, e meio que falando sozinho justamente por isso ... Já li em algum lugar que: "É melhor para o programador 'perder' tempo pensando em como resolver o problema, que perder tempo resolvendo bug no código.", e achei muito boa!!

@diedona
Copy link

diedona commented Mar 31, 2014

Muito bom... Concordo e faço a mesma coisa que o colega giljunior. Fora os desenhos que tenho perdido pela minha mesa pra tentar me ajudar.

Parabéns pela iniciativa e pelo artigo!

@davidcostadev
Copy link

Realmente é isso que acontece, quando penso em solucionar algum problema ou implementar algo. Mentalizo a imagem que realmente estou querendo fazer e com a ferramenta de programação vou tentando fazer o que está na minha mente.

@mechanizzed
Copy link

Ótimo texto!

@phensalves
Copy link

Boa! Sou novo ainda na programação (cerca de 1 ano) e sempre tenho problemas para "pensar simples" para resolver "problemas simples"...insisto em querer pensar complicado para coisas simples...vira e mexe me pego escrevendo ou desenhando também...e esse texto exemplifica bem isso!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment