Depois de competir e seguir a competição Google Code Jam deste ano , não pude deixar de notar o incrível número de concorrentes [bem-sucedidos] que usaram C / C ++ e Java. A distribuição das línguas utilizadas ao longo do concurso pode ser consultada aqui .
Depois de programar em C / C ++ por vários anos, recentemente me apaixonei por Python por sua natureza legível / direta. Mais recentemente, aprendi linguagens funcionais como OCaml, Scheme e até linguagens lógicas como Prolog. Essas linguagens certamente têm seus méritos e, na minha opinião, podem ser aplicadas mais facilmente do que C ++ e Java para determinadas situações. Por exemplo, o uso do Scheme de call / cc simplifica o retrocesso (uma ferramenta necessária para responder a vários problemas) e a especificação da lógica do Prolog, embora ineficiente devido à sua natureza de força bruta, pode simplificar drasticamente (e até mesmo resolver automaticamente) certos problemas que são difíceis de envolver o cérebro.
É claro que um competidor deve usar as ferramentas mais adequadas para o desafio. Até mesmo a montagem x86 é Turing completa - isso não justifica a solução de problemas com ela. Nesse caso, por que os concorrentes que usam linguagens menos comuns como Scheme / Lisp, Prolog e até Python são significativamente menos bem-sucedidos do que os concorrentes que usam C / C ++ e Java? Em outras palavras, por que os concorrentes bem-sucedidos não usam linguagens que, embora possam ser menos convencionais, são sem dúvida ferramentas melhores para o trabalho?
Existem várias motivações para a minha pergunta. Mais importante ainda, gostaria de me tornar um programador melhor - tanto no aspecto prático quanto no aspecto competitivo. Depois de conhecer paradigmas tão belos como programação funcional e lógica, é desanimador ver tantas pessoas descartá-los em favor de C / C ++ e Java. Até me faz questionar minha admiração por tais paradigmas, preocupando-me que não possa ter sucesso como programador Lisp / Scheme / Prolog em uma competição de programação.