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:
- Entenda a fundo o problema. Jamais, sob hipótese alguma, tente escrever código sem ter, antes, uma compreensão plena do problema.
- 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.
- 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:
2 - Como ainda não tirei nenhuma outra carta, eu a coloco ao lado do baralho e, em seguida, tiro outra carta:
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:
4 - Agora tiro outra carta:
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.
6 - Em seguida, coloco a carta com o número 7 no lugar onde estava a carta com o número 5:
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.
;)
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!