Sobre Competições de Programação

O que são?

Uma competição de programação é um evento muito empolgante onde os participantes disputam para completar corretamente o número máximo de tarefas dentro de um determinado intervalo de tempo.

Completar uma tarefa se resume a desenvolver um programa que resolva o problema da tarefa. O programa é desenvolvido sem nada de interface gráfica e deve recebe uma entrada que são os parâmetros do problema e deve dar como saída a resposta desejada. Como exemplo de tarefa temos um problema onde é dado como entrada um valor N e o programa solução deve dar como resposta a soma dos números de 1 a N.

Nesse caso o problema é simples, mas em uma competição real encontramos problemas bastante desafiadores. Aliás, a graça da competição está exatamente aí. Os programas nunca são visualmente bonitos, mas as idéias por de trás deles são muitas vezes geniais.

A solução de um problema é avaliada testando-a contra um conjunto de testes do problema. Esse conjunto de testes consiste de diferentes entradas para o problema e as saídas ou regras para validar as saídas correspondentes. É importante notar que os participantes nunca têm acesso a esses conjuntos de teste durante a competição.

Quando a avaliação de um programa é feita, executando contra os testes, há um limite de tempo para o programa retornar a resposta. Estourar o limite de tempo é considerado falha e, portanto, soluções ineficientes são inibidas.

As soluções dos participantes podem ser avaliadas durante ou após a competição e a pontuação pode ser dada somente se o programa passar por todos os testes, ou parcialmente, pontuando cada caso de teste que o programa resolve corretamente.

Por que Participar?

Existem diversos motivos pelos quais uma pessoa pode se interessar em participar de uma competição de programação. Apresentarei alguns como forma de motivar aqueles que estão na duvida (e deixar na dúvida aqueles que não se interessavam :-)).

Desafio

Desafios intrigam as pessoas e são uma ótima forma de exercitar a mente. É um grande prazer quando conseguimos vencer um desafio difícil por nossos próprios méritos, pois nos sentimos orgulhoso e mais capazes.

Competição

Participar de uma competição saudável é sempre uma diversão. Pode ser também um motivo de orgulho, pois você está lá defendendo sua universidade, sua cidade, ou mesmo seu estado, contra equipes do país inteiro. Eu sempre sonhei em participar de uma competição nacional e a OBI e a Maratona foram as oportunidades que eu tive. Além disso também tem sempre aquela rivalidade característica de competições entre equipes de uma mesma cidade ou que costumam ficar próximas na classificação. É muito recompensador saber que após o esforço de dedicar um tempo à competição você chegou na frente de rival. Aqui não quero promover a rivalidade agressiva e sim uma disputa amigável, onde um estimula o outro, como ocorre entre IC-Unicamp, IME-USP e DCC-UFRJ, por exemplo.

Desenvolvimento Pessoal

Programar em competições de programação envolve estar sempre encontrando problemas novos. Dessa forma, com a prática, o competidor consegue desenvolver uma habilidade de programar muito mais refinada que o programador mediano. O competidor consegue:

    • Programar muito mais em menos tempo.
    • Escrever códigos mais enxutos.
    • Desenvolver programas mais eficientes.
    • Reduzir drasticamente o número de erros em seus programas.
    • Tornar-se "fluente" em sua linguagem de programação.

Isso é algo a ser valorizado, pois com essas habilidades o competidor certamente se torna mais capaz para trabalhar tanto no mercado quanto na universidade.

Currículo

A participação em uma competição nacional de programação pode ser uma boa propaganda para seu currículo. De forma similar à idéia de Bill Poucher, diretor da ACM ICPC, só de alguém estar na universidade já está entre os melhores. Ser o representante da universidade é estar entre os "melhores dos melhores". Passar para a final nacional é estar entre os "melhores dos melhores dos melhores", e por aí vai. Certamente um empregador vai ficar feliz de ver que o candidato à vaga está entre os melhores da cidade, ou do estado, por exemplo.

Novos Contatos

Participar da Maratona de Programação é uma boa oportunidade de conhecer novas pessoas de diferentes universidades, cidades e mesmo de outros estados. E daí pode surgir inclusive novas amizades. Também é uma chance de fazer novos contatos e passar a trocar idéias sobre projetos que abordam temas comuns ou para uma eventual pós-graduação ou mesmo um emprego.

Prêmios

É claro, toda competição tem sempre seus prêmios, o que não deixa de ser um estímulo. Tanto na Maratona de Programação quanto na OBI a maior parte dos prêmios são medalhas. Na Maratona há medalhas para os 10 primeiros colocados. O campeão também ganha um troféu. Geralmente também há medalhas ou outros prêmios locais para os melhores do site, por exemplo. Além das medalhas, os melhores colocados da Maratona recebem da IBM Internacional umas lembrancinhas tipo "feirinha do Paraguai": relógio, caneta, agenda eletrônica de 6Kb, webcam que só funciona razoavelmente à luz do sol(!) e é incompatível com WinXP e Linux... Infelizmente, apesar de ser uma gigantesca empresa de informática, seus prêmios não são como os notebooks entregues em outras competições nacionais como o Desafio Sebrae, mas não deixam de ser prêmios, né?

Viagens

Viajar é muito bom e eu gosto. A menos que o competidor seja da cidade do site, ele vai acabar viajando logo na primeira fase da Maratona. Normalmente essa viagem é curta e com gastos bancados pela própria universidade (há exceções). Se a equipe se classifica para a final nacional, aí é outra viagem, dessa vez maior por conta da organização do evento.

Mundial

Na minha opinião o maior estímulo que alguém pode ter é ir para o Mundial. Mas esse não é um estímulo para grande parte dos competidores, pois apenas o primeiro e provavelmente o segundo da Maratona vão para o Mundial. No entanto se sua equipe estiver bem preparada então vale à pena se esforçar para conseguir ir ao Mundial. É uma viagem inesquecível ao exterior onde se entra em contato com pessoas e culturas do mundo inteiro. Isso com passagem bancada pela SBC e hotel 5 estrelas e alimentação pagos pela organização do Mundial. É incrível. Além disso a emoção de estar representando o Brasil no exterior entre os melhores do mundo é incomparável. Para quem já foi uma vez, voltar é o maior estímulo que se pode ter. Não me arrependo nenhum pouco das madrugadas de sábado acordado treinando nos campeonatos de Valladolid para voltar ao Mundial.

Bom, agora que já listei uma série de motivos para participar dos campeonatos de programação não há mais desculpa. Estude o conteúdo do site e bons códigos!