nivel de dificuldade dos problemas e o que sera considerado como uma solucao viavel varia de acordo com o nivel do programador que se deseja contratar. A seguir, alguns exemplos que ja usei:Como voce implementaria um programa para ordenar um arquivo texto de 10GB?Como voce implementaria um programa para controlar os elevadores de um predio?Como voce implementaria uma engine de renderizacao para um browser?Como voce implementaria uma timeline como a do Twitter?Se o candidato nao consegue nem mesmo formular perguntas para entender melhor o problema ou diz que nao faz ideia de como resolve-lo, muito provavelmente ele tera dificuldade para resolver problemas diferentes dos que esta acostumado a resolver.Nesse ponto, ja tenho dados suficientes para decidir se gostaria ou nao de conversar pessoalmente com o candidato.O que a internet diz sobre ele?Se o candidato tem um blog sobre algum assunto ligado ao desenvolvimento de software, leia o que ele escreve e descubra suas opinioes. Se ele participa de grupos de discussao ou comenta em blogs, veja como ele interage com outros. Ele e ferrenho defensor de uma tecnologia especifica? Mal sinal. Ele tem uma postura agnostica sobre tecnologias? Otimo, isso revela maturidade tecnica. Nenhum programador e obrigado a ter uma conta no Twitter, mas se ele tem uma e a utiliza para compartilhar links interessantes, isso e uma boa forma de descobrir o que ele le. Se o candidato compartilha projetos no Github, otimo. E uma forma de avaliar a qualidade do seu codigo. Se ele possui forks de outros projetos, isso mostra que projetos o interessam.MiniprojetoAo avaliar novatos em programacao, gosto de pedir que executem em casa miniprojetos de software. Algo que de pra fazer em um fim de semana. Nao devem ser projetos muito simples e nem excessivamente complexos. O objetivo final deve ser claro, mas a forma como ele sera atingido deve ficar em aberto. Eventuais duvidas devem poder ser esclarecidas por e-mail ou telefone. Quando o candidato considerar a solucao terminada, deve envia-la por e-mail. Isso da ao avaliador a oportunidade de verificar a qualidade do codigo do candidato. A forma como o problema foi resolvido deve ser discutida e eventuais ajustes podem ser solicitados. O objetivo nao deve ser que o candidato entregue uma solucao perfeita, mas uma que funcione bem ao fim de algumas iteracoes. Os resultados que tive com esse tipo de ferramenta ao avaliar candidatos a estagio ou profissionais juniores foram excelentes.Entrevista presencialEssa e a etapa que considero mais importante no processo seletivo. Os que chegam ate ela, ate certo ponto, ja conquistaram minha admiracao e normalmente estou ansioso para conhece-los.Uma boa entrevista deve se parecer com uma conversa. A meta do entrevistador deve ser criar situacoes onde o candidato possa mostrar o seu potencial. Procuro fazer isso de duas maneiras.Detalhes sobre projetos realizados: Solicito mais detalhes sobre projetos citados na entrevista por telefone. Algo como: estive pensando naquele projeto que voce executou na empresa X. Como funcionava a parte de...? Ou, por que voce implementou usando...? Voce teve problemas com...? Que achou de usar...? Preferia ter usado outra linguagem/tecnologia? Chegou a sugerir isso?