Como reconhecer um bom programador? [fechadas]

131

Nossa empresa está procurando novos programadores. E aí vem o problema - há muitos desenvolvedores que parecem realmente ótimos na entrevista, parecem conhecer a tecnologia que você precisa e tem uma boa experiência profissional, mas após dois meses de trabalho, você descobre que eles não conseguem trabalhar uma equipe, escrever algum código leva muito tempo e, além disso, o resultado não é tão bom quanto deveria ser.

Então, você usa algum teste formalizado (existe algum?)? Como você reconhece um bom programador - e uma boa pessoa? Existem perguntas simples 'boas' que podem revelar os problemas futuros? ... ou é apenas sobre o seu 'sentimento' sobre a pessoa (isto é, principalmente sua experiência) e experimentá-la?

Edit: De acordo com a resposta de Manoj, aqui está a pergunta relacionada à tarefa de codificação na entrevista de emprego.

gius
fonte
3
<brincadeira> Para reconhecer um bom programador, eu sempre uso o Código de Vestimenta para Programadores como uma vara de jardinagem. ;-) </joke>
Galonian
7
Eu tenho mais ou menos 6 ', 185 libras., Cabeça raspada e um cavanhaque. Estou usando Chuck Taylors e uma camiseta azul sobre uma camiseta branca. Faça um voto negativo gentilmente - respondi à pergunta. :)
MusiGenesis
6
Relacionado ou duplicado: programmers.stackexchange.com/questions/4614/…
Maniero
1
aqui é uma outra visão do tópico - Como entrevistar um programador
2
Esta pergunta foi adequada para este site, em 2008, quando solicitado. Cinco anos. CINCO ANOS depois, o Prog.SE se transformou em SO2, o duplicado.
Warren P

Respostas:

157

Faça com que eles falem sobre o que está interessado. Ainda não conheci um desenvolvedor que seja realmente apaixonado por falar em programação, mas que não possa realmente codificar. Eles podem muito bem existir, é claro - e sua entrevista deve verificar também a competência -, mas a paixão é um bom indicador na minha experiência. (Observe que isso não é o mesmo que ser capaz de "falar a conversa" em termos de chavões).

Pergunte a eles o que eles não gostam em seu idioma ou plataforma favorito. Como eles consertariam as coisas? O que eles gostariam de ver na próxima versão? Eles têm projetos de hobby? Se eles têm um blog, leia-o. Verifique a presença online geral.

Jon Skeet
fonte
3
Ótimas idéias - especialmente projetos de hobby e problemas com seu idioma favorito me parecem realmente bons. Deve revelar mais sobre sua relação com a programação. Um blog também é uma boa ideia. Unfortuantely, geralmente eles têm nenhum blog :-( Obrigado ....
25
A paixão não se traduz necessariamente em profissionalismo ou trabalho em equipe. Eles podem apenas querer codificar o que é legal / divertido, não o que precisa de codificação.
22
@Preston: Embora isso certamente seja verdade na teoria, eu não conheci ninguém apaixonado que não tenha sido feliz com grunhidos também. Eu conheci codificadores prima donna que pensam que estão acima desse tipo de coisa, mas geralmente não são apaixonados. Teste de profissionalismo é muito difícil de qualquer maneira ...
Jon Skeet
36
VERIFICAR sua contagem EMBLEMA
83

Contratar pessoas boas é difícil .

Foram necessários alguns erros reais para eu melhorar. Você começa a confiar muito mais no trato intestinal após as primeiras vezes em que não confia e se arrepende.

Tenho um grande respeito pelas perguntas na tela do telefone de Steve Yegge e usei isso como base para entrevistar pessoas com algum sucesso.
Também acho que me tornei melhor em entrevistar pessoas depois de ler o guia de Joel para entrevistas de guerrilha (agora na versão 3.0, que está à frente da versão para a web e tudo mais, só precisa ser bom).

Também existem 57 outras perguntas (em 20/11/2008) no Software Engineering Stackexchange marcadas com entrevista e algumas delas parecem muito relevantes, portanto, verifique-as.

Hamish Smith
fonte
2
Contratar pessoas boas é difícil para a NP. :)
causa final
7
As questões da tela do telefone começam bem, mas cada vez mais perguntas se tornam ridículas. Eu acho que um bom programador deve saber 2^16de cor. E a versão fast track na parte inferior é apenas uma paródia ruim.
Peter
Os links SO parecem quebrados (sem resultados ou 404).
Stijn Geukens
@StijnGeukens, parece que essa tag foi migrada para a Engenharia de Software. Eu atualizei o link.
Hamish Smith
47

Algumas ideias:

  • Faça várias perguntas abertas de vários ângulos diferentes:

    • Revise algum código. O que foi identificado? Erros técnicos, inconsistências de estilo, comentários, algoritmos, manutenção, etc ...
    • Escreva algum código. Procure processo, prova de balas, legibilidade etc.
    • Crie um design de alto nível para um sistema pequeno. Procure a compreensão do problema, abordagem, comunicação, integridade, detalhes.
    • Descreva o processo de desenvolvimento de software. Procure por design, colaboração, revisão, teste, bons / maus hábitos e experiência geral.
  • Escolha algo - qualquer coisa - que o candidato afirme conhecer bem. Faça uma pergunta simples e, com base na resposta, faça outra, um pouco mais detalhada, e continue "cavando" até atingir o limite de conhecimento do candidato. Isso lhe dá uma idéia de:

    • Honestidade: ele / ela sabe tanto quanto reivindicado?
    • Profundidade do conhecimento: quão bem ele aprende as coisas?
    • Comunicação: quão bem ele / ela explica algo desconhecido para você? O processo de pensamento é lógico?
    • Reação a situações estressantes: quão duro ele / ela trabalha para responder? Ele / ele finge? O inevitável "não sei" é fácil ou difícil?
  • Pergunte como o candidato lidou com várias situações de empregos anteriores: o trabalho em equipe, projetos vencidos, depuração, etc . As respostas são positivas ou negativas? Apaixonado? Inteligente? Arrogante?

Acho que os melhores candidatos estão entusiasmados, experientes, confiantes, mas educados e, o mais importante, presentes . Você precisa saber que tem alguém lá dentro. :-)

Adam Liss
fonte
4
Lembro-me da minha primeira entrevista de programação e me pediram para revisar alguns códigos impressos. No topo, houve alguns comentários que explicaram o que o código fez. Eu verifiquei isso lendo o código, então eu basicamente li os comentários literalmente e eles disseram "Muito bom!" Eu disse: "Sim, isso diz muito bem aqui no bloco de comentários". Eles ficaram muito envergonhados.
Dustin
@Dustin IMO, foi muito descuidado (?) Da parte deles apenas deixar os comentários no código que o candidato deveria revisar. Isso basicamente lhes dá uma resposta ou confusão gratuita, com base no que o comentário contém.
cst1992
39

Para reconhecer um bom programador, você precisa ser um bom programador. Isso significa que você precisa conhecer muito bem a programação para ver o que foi dito e feito na entrevista e precisa saber quais perguntas fazer.

Vi candidatos que receberam a resposta errada na entrevista, mas a explicação deles mostrou que eles conheciam o assunto (e, portanto, poderiam facilmente obter a resposta certa pesquisando na rede). Para ver isso, você precisa conhecer muito bem o assunto sobre o qual está fazendo perguntas.

Outra coisa é evitar perguntas sobre detalhes que poderiam ser facilmente pesquisados ​​no Google. Essa pergunta mostra apenas o quão bom é o candidato para se lembrar das coisas, não se ele realmente tem o conhecimento e a compreensão que você está procurando.

Minha recomendação é obter ajuda de alguém que conheça bastante programação e tenha boas habilidades de pessoas para ajudar nas entrevistas.

Edit: Eu também escrevi um comentário sobre entrevistas aqui .

Eigir
fonte
3
Você está completamente certo em pesquisar no Google - um bom programador não precisa saber tudo, mas deve ser capaz de descobrir rapidamente.
2
"alguém que conhece muita programação e tem boas habilidades de pessoas" ... e esse é o problema - não é fácil encontrar uma. Geralmente eles têm apenas uma habilidade deles. É por isso que estou fazendo o meu melhor para melhorar os dois ramos :-).
7
Ter grandes habilidades de pessoas geralmente entra em conflito com ser um pensador abstrato. Não ser um pensador abstrato geralmente entra em conflito com ser um bom programador.
Tomalak
7
Gius: Se você tiver sorte, encontrará programadores que entendem que os humanos são computadores biológicos e, portanto, interessados ​​em como trabalhamos / pensamos. Muitas vezes eles também desenvolveram boas habilidades de pessoas, pois também estão interessados ​​em melhorar a si mesmos nessa área.
Eigir: Eu concordo. Mas como alguém aqui já mencionou - se você encontrar alguém, você ganha o jackpot ;-). Espero que tenhamos sorte.
23

Lembre-se de que a capacidade de programação não é tudo. Você poderia ter o melhor programador do mundo trabalhando para você, mas se eles odeiam trabalhar com outras pessoas, você não as achará muito útil.

Uma personalidade de programador deve estar no topo da lista do que a maioria dos empregadores parece classificá-la. No meu local de trabalho atual, eles são muito cuidadosos ao contratar o tipo correto de pessoa.

As pessoas geralmente podem aprender a ser melhores programadores, as pessoas geralmente não podem aprender a ser melhores seres humanos.

Doctor Jones
fonte
1
Se eles não gostam de trabalhar com outras pessoas, como você pode chamá-las de "o melhor programador do mundo"? Certamente, programar não é apenas falar com o compilador e dividir o código; a maioria das tarefas de um programador / desenvolvedor de software exige uma certa cooperação.
Christopher Creutzig
Entendo, mas neste contexto "Programação" é apenas sobre codificação, caso contrário, eu teria usado o termo "Desenvolvedor de Software". Os termos "Programador" e "Desenvolvedor de software" não são sinônimos.
Doctor Jones
6
Não, na verdade, muitas pessoas não podem aprender a ser melhores programadores. E, francamente, se eles têm 5 a 10 anos de experiência, eu esperaria que eles já soubessem como, você sabe, fazer o trabalho deles . Esta NÃO é uma resposta para a pergunta; você está apenas dizendo "você identificar bons programadores por não se importando se eles são bons programadores"
Benubird
1
@Benubird meu argumento foi que as habilidades interpessoais podem ser mais importantes que o talento bruto de programação, especialmente quando se trata de trabalhar em equipe. Não estou defendendo a contratação de pessoas que não podem fazer seu trabalho. Não vale a pena contratar um programador "rockstar" se ele não funcionar bem em sua equipe. Não vale a pena o atrito e o aborrecimento.
Doctor Jones
@DoctorJones e eu concordo com você; você não está errado. É que a resposta que você deu não é uma resposta à pergunta "Como reconhecer um bom programador?"
Benubird 6/07/2015
16

Faça-os codificar. Forneça um problema que possa ser resolvido em, digamos, 4 ou 5 horas e inspecione o código em busca de documentação, estilo de codificação, como ele planejou a solução antes de começar a codificar etc. Ele não precisa resolver o problema. E como Jon Skeet mencionou, faça-os falar sobre programação, sua linguagem de escolha e coisas assim. Você pode reconhecer a paixão de um bom programador. Pergunte quantos sites relacionados à programação eles seguem - como stackoverflow. Os blogs que eles seguem também podem ser um bom indicador.

Manoj
fonte
Eu gosto da idéia de realmente dar a eles uma tarefa de codificação (pode ser feita antes da entrevista) e depois usar o código como assunto na entrevista. Torná-los explicar por que eles escolhem as diferentes soluções e assim por diante ...
Geralmente, a ideia sobre a tarefa de codificação é muito boa. Receio, porém, que criar uma tarefa que realmente mostre o que há nelas seja bastante difícil - e um bom tópico para outra discussão bastante longa (mas muito intrometida!). ... devemos fazer uma pergunta sobre isso aqui? ;-)
Lista de seus blogs favoritos seria um ótimo indicador!
6
Eu tive uma entrevista de codificação. O entrevistador insistiu que eu conversasse com minha solução. Eu apresentaria uma idéia, ele sugeriria maneiras pelas quais isso poderia falhar. Dessa maneira, ele aprendeu como eu resolvo um problema. Foi a entrevista mais difícil e justa que já tive.
@ gius - Eu acho que você deveria fazer essa pergunta.
Manoj
16

Eu gosto da resposta da paixão. Eu acredito que você tem que ser apaixonado pelo que trabalha para realmente ser muito bom nisso.

Um bom programador programa ao lado, além do trabalho (de vez em quando, pelo menos). Ele / ela gosta de resolver problemas de programação. E quando ele / ela não consegue encontrar um programa que resolve uma necessidade específica em casa, ele normalmente tenta resolvê-lo.

Mas existem vários tipos de programadores.

  • Você tem quem gosta de documentar. Pessoalmente, odeio documentar. Mas documentar o que é feito pode ser importante.
  • Você tem os "hackers". Aqueles que estão empenhados em resolver um quebra-cabeça complexo onde, se você procurar no Google, provavelmente não encontrará uma solução. Eles podem resolver "qualquer" problema, desde que tenham as ferramentas necessárias.
  • Você tem aqueles que se educam para ser programadores apenas porque o mercado era bom para ser contratado para programação. Geralmente são medíocres porque não têm paixão.
  • Você tem pessoas excelentes em se comunicar e elas "podem resolver qualquer coisa", mas, depois que conseguem o emprego, ficam com todos os outros para obter ajuda para o problema que estão resolvendo.

Se você encontrar o "hacker" que também documenta muito bem e possui excelentes habilidades de comunicação, eu acredito que você ganhou o jackpot.

Ah, e uma última coisa. Você provavelmente não quer um programador que tenha ambições de líder, pois ele usará apenas a programação para iniciar. Isso significa que você perderá esse recurso mais cedo ou mais tarde.

Uma pergunta que eu faria ao contratar um programador seria: "Por que você se educou como programador?". Seria um sorteio se eles hesitarem lá.

Essa é a minha opinião.

Wolf5
fonte
2
Pergunta inspiradora - "Por que você se educou como programador?"
5
Perdemos todos os recursos mais cedo ou mais tarde. Somente as rochas são para sempre.
Carl Manaster
1
Um pouco míope. "Schlubladendenken"
6
Eu votaria nisso se não fosse o "Você provavelmente não quer um programador que tenha ambições de líder". Os funcionários que desejam assumir responsabilidades são vitais e você deve encontrar maneiras de promovê-las em sua organização.
precisa
5
Você tem uma definição diferente para um "hacker" do que eu. Um "hacker" para mim é alguém que "hackeia" as coisas o mais rápido possível até obter um resultado, mas deixou para trás um rastro de destruição e horror porque não seguiu uma única prática recomendada. Um "hacker" não é profissional.
David Masters
7

Um amigo meu está trabalhando em uma empresa onde eles têm uma etapa adicional no processo de contratação: após a triagem e a entrevista iniciais, o candidato precisa "testar o trabalho" por alguns dias. Ele me disse que, embora um candidato tivesse todas as habilidades e talentos necessários, eles não o contrataram porque ele não era uma pessoa agradável de se trabalhar.

Svante
fonte
Essa é uma ótima ideia, e eu gostaria que fosse uma prática comum. Como alguém que foi demitido de vários empregos por não se encaixar na cultura da empresa ou por julgar mal os níveis de habilidade, eu adoraria testar a água primeiro.
precisa saber é o seguinte
20
O problema é que, se alguém já tem um emprego, dificilmente pode tirar uma semana para ir trabalhar em outra empresa apenas para descobrir se realmente conseguiu o emprego.
Cercerilla
@Cercerilla Right! já é difícil o bastante encontrar tempo para entrevistar e muito menos trabalhar para eles por uma semana.
eaglei22
6

É muito difícil reconhecer um programador apenas com base em uma entrevista de emprego.

Algumas coisas que decidem que alguém é um bom programador são:

  • capaz de trabalhar em equipe
  • escreve um bom código que seja compreensível e mantenível
  • é capaz de aprender sobre novas tecnologias

Então você tem algumas dicas que você pode descobrir em uma entrevista:

  • O candidato conhece uma linguagem de tecnologia / programação ou conhece várias? Se ele conhece idiomas diferentes, parece capaz de aprender coisas novas e, possivelmente, conhece as desvantagens de sua atual tecnologia / idioma preferido. Portanto, peça conhecimento além da tecnologia que você usa em sua empresa.
  • Peça projetos nos quais ele já trabalhou, especialmente projetos de hobby e de código aberto. Os projetos de hobby mostram que ele gosta de programar e faz isso mesmo em seu tempo livre (e, dessa maneira, melhora suas habilidades). Em um projeto de código aberto, você pode procurar o código que ele escreveu. Se o projeto envolver mais de uma pessoa, você poderá obter dicas sobre as habilidades de sua equipe. Em um projeto de sistema operacional, você pode consultar os arquivos da lista de discussão para saber mais.
Mnementh
fonte
3

Você poderia realizar algum teste na entrevista.

Mas muitas vezes também há um problema com o próprio ambiente de trabalho. Certamente isso pode não ser o caso em sua organização, mas é bastante comum no setor de software que a dívida tecnológica se torne muito grande. Então, quando você contrata novas pessoas, não ajuda muito se elas são boas ou não, por causa da dívida. Maximizar a legibilidade e a compreensão do código do seu programa ajuda os recém-chegados a trabalhar.

Muitas pessoas também são capazes de cooperar, mas às vezes não há como cooperar. Por exemplo, se todas as pessoas são desenvolvedores, elas devem fazer seu trabalho. Bem, eles fazem. Mas você tem um arquiteto, que dirige o projeto de desenvolvimento e mantém reuniões e tal? Os desenvolvedores normais podem achar que não têm o mandato necessário para iniciar reuniões e podem pensar que interromper outras pessoas de vez em quando não é o caminho.

A comunicação entre si não deve ser o objetivo final. Quanto menos comunicação for necessária, melhor, mas apenas se menos for possível. Menos se torna possível se você tiver um arquiteto. A quantidade total de comunicação pode permanecer em um bom nível, mas você obtém mais resultados para a mesma quantidade de comunicação.

Silvercode
fonte
Gosto da ideia de olhar não apenas para o funcionário, mas também para sua própria organização e para os processos internos.
3

primeiro começo com o material habitual da entrevista, considero muito importante ver se a pessoa na minha frente vale alguma coisa e determinar suas habilidades e conhecimentos.

Depois disso, uso algumas técnicas no campo de Java, como discutir alguns princípios, principalmente extraídos do Effective Java.

Nesta fase, quando penso que posso ter um bom programador diante de mim, dou a ele um pedaço de código para revisá-lo. O que eu quero ver é que ele pode identificar as partes perigosas do código, dar algumas dicas sobre melhorias, encontrar armadilhas no desempenho em vários threads E que ele pode distinguir entre observações importantes e "observações de gosto". Tudo isso me ajuda a encontrar um funcionário mais eficiente.

mas no final sempre lembro que contratar é uma espécie de jogo ... muito difícil antecipar ...

baba smith
fonte
2

Sei que isso não responde ao que você está perguntando, mas eu recomendo, sempre que as leis o permitam, contratar sempre temporariamente no início (duas semanas ou um mês, dependendo do trabalho). Se a pessoa vale a pena, ela não se opõe, além de ser uma salvaguarda para vocês dois (você pode deixá-la ir e ela pode acabar não gostando do trabalho e saindo).

Vinko Vrsalovic
fonte
1
Você está completamente certo, mas se ele não for bom para você, você ainda perde uma ou duas mariposas, o salário dele e o trabalho das pessoas que o colocam em seu projeto. Portanto, seria bom evitar essa situação.
3
O problema é que os bons programadores têm provavelmente outras ofertas de emprego e se você só oferecer-lhes um emprego temporário no início, eles podem escolher alguém ...
@Rexxar: Eles ainda vão embora se não gostarem. É apenas mais honesto e aberto oferecer dessa maneira, IMO. Pelo menos para mim, seria uma vantagem, não uma subtração (dado que é um contrato de curta duração e que, no final, fica permanente ou é um adeus).
Vinko Vrsalovic 20/11/2008
3
Preciso continuar pagando minhas contas, nunca devo considerar aceitar um emprego por apenas um mês e desistir de um emprego permanente por isso. Se você está desempregado ou tem um cônjuge rico, isso pode funcionar. De outro modo, você perde muitos bons saciados, porque eles não podem se dar ao luxo de arriscar que você não esteja mentindo para eles sobre tornar-se permanente.
HLGEM
4
"Se a pessoa vale a pena, ela não se opõe" - bem, este desenvolvedor aqui diria "foda-se" e encontraria um emprego melhor.
precisa saber é o seguinte