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 computacionais

Eis algumas sugestões sobre como proceder para enfrentar um novo problema:

  1. Entrada.  Antes de tentar resolver um 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. Saída.  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. O problema.  Gaste o tempo que for preciso para entender 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. Planejamento.  Resista à tentação de começar imediatamente a programar um algoritmo para o problema.  Faça um pouco de planejamento antes de começar a programar. Se começar a programar cedo demais você corre o risco de se perder nos detalhes e não perceber o quadro geral.
  5. Redução.  Procure reduzir o seu problema a algum outro problema bem conhecido (como o problema do caminho mínimo num grafo, ou o problema do fluxo máximo, ou o problema das componentes fortes de um grafo, etc.).