Problem-solving skills are almost unanimously
the most important qualification
that employers look for…
more than programming languages proficiency,
debugging, and system design.

Dicas sobre solução de problemas

O que devo fazer ao me deparar com um novo problema?

  1. Antes de tentar resolver o problema, entenda muito bem a natureza dos dados do problema.  É uma lista de números? um único número? uma sequência de caracteres? um grafo? uma matriz?  Os números são inteiros ou fracionários? são todos positivos ou podem também ser negativos? são todos diferentes entre si ou podemos ter repetições?
  2. Entenda muito bem a natureza das soluções do problema.  Uma solução é um único número? uma lista de números? uma matriz? uma lista de caracteres? um grafo? um algoritmo?
  3. Gaste o tempo que for preciso para entender bem o problema.  Entenda a relação que deve existir entre os dados e a solução do problema.  Você deve ser capaz de descrever, ainda que informalmente, um algoritmo que receba os dados do problema juntamente com um candidato a solução e diga se o candidato é de fato uma solução.

    Para entender bem um problema, escreva seu enunciado num pedaço de papel, faça um diagrama, explique o problema a um colega exigente.  Tente resolver algumas instâncias simples do problema. Tente resolver instâncias extremas, como as muito pequenas e as que não têm solução.

  4. Planeje.  Resista à tentação de começar a escrever código imediatamente. Faça um pouco de planejamento antes de começar a programar.  Se começar a programar cedo demais você corre o risco de ver as árvores e não enxergar a floresta.

(Esta página foi inspirada no artigo How to think like a programmer — lessons in problem solving de Richard Reis.)