Como entrevistar um cientista natural para uma posição de desenvolvedor? [fechadas]


30

Pergunta original

Eu já fiz algumas entrevistas para a minha empresa, principalmente cientistas da computação para cargos de desenvolvedor, mas também alguns testadores e gerentes de projeto. Agora tenho que preencher uma vaga em nosso grupo de pesquisa no departamento de P&D (observação: "pesquisa" significa que tentamos resolver problemas em nosso domínio profissional / nicho de mercado usando software em projetos de pesquisa em conjunto com universidades, outras empresas, centros de pesquisa e organizações de usuários finais.Não é pesquisa em ciência da computação; não vamos resolver o problema P = NP).

Agora convidamos um cara com um mestrado em química (com muita física em seu currículo também), que nunca teve nenhuma aula de ciência da computação. Eu já conversei com ele cerca de meia hora nos dias de carreira de uma universidade local e não há dúvida de que o cara é inteligente. Também suas notas são excelentes e ele se formou com distinção. Para seu bacharelado, ele precisava aprender a programar no Mathematica e me disse que gostava muito de programar. Ele também resolveu um problema de físico-química que eu provavelmente não entendo usando seu próprio software, implementado no Mathematica, para sua tese de mestrado. Inclui uma GUI e um tamanho notável de 8.000 LoC. Ele parece estar muito atraído pelo que estamos fazendo em nosso grupo de pesquisa e, para ser honesto, é bastante difícil para uma PME como nós conseguir pessoas boas. Também estou muito interessado em contratá-lo, pois ele poderia me ajudar a escrever propostas de projetos, relatórios, fazer apresentações e assim por diante. Ele provavelmente se encaixaria em nossa equipe também.

A única pergunta que resta é: como posso verificar se ele obterá as habilidades de programação necessárias para implementar o software em nossos projetos, pois isso será uma parte significativa do trabalho?

É claro que vou perguntar a ele o que é, o que o fascina sobre programação. Também perguntarei como ele começou a escrever seu software de ciências naturais e como ele o estruturou. Perguntarei como ele conseguiu obter as habilidades e informações sobre desenvolvimento de software de que precisava. Mas há algo mais que eu poderia perguntar? Algo mais concreto, talvez? Devo pedir que ele explique sua solução Mathematica?

Para ser claro: não estou procurando conhecimento em um determinado idioma ou pilha de tecnologia. Somos uma loja .NET em desenvolvimento de produtos, mas quero ter uma escolha livre para nossos projetos de pesquisa. Então, eu estou interessado na meta-competência ser capaz de aprender o que é realmente necessário.

Espero que esta pergunta seja respondida e não seja aberta, pois realmente gosto de saber se existe uma maneira padrão de verificar a capacidade de obter mais habilidades de programação no trabalho. Se algo não estiver claro para você, faça-me alguns comentários e deixe-me melhorar minha pergunta.

Atualização para refletir as respostas dadas até 01/12/2011

Qual resposta eu aceitei e por que

Obrigado a todos por suas respostas, a maioria delas é bastante útil, então eu votei muito! Embora a resposta de Tom Squires tenha mais votos, vou aceitar a resposta dada pelo príncipe Goulash . É claro que Tom está objetivamente correto, mas a resposta de Prince é apenas mais útil para mim e verifiquei duas vezes o FAQ de que este é o critério para aceitar uma resposta.

O que vou perguntar durante a entrevista

  • Vou deixá-lo explicar algumas tarefas simples, como o exemplo em O Camelo Tem Duas Corcovas, mencionado por Chris Burt-Brown

  • Pedirei a ele para explicar alguns fluxos de controle mais avançados, talvez em uma notação gráfica.

  • Vou verificar seu entendimento de recursão usando um exemplo de matemática.

  • Vou deixá-lo explicar um algoritmo de sua escolha na linguagem natural.

  • Deixarei que ele explique sua solução Mathematica, em particular solicitarei seu modelo de procedimento, uso de ferramentas, estruturação de código e software em geral, bem como diferentes camadas de abstração.

  • Para verificar sua motivação, pedirei seu fascínio pelo desenvolvimento de software.

  • Vou perguntar se ele está ciente do que precisará aprender sobre o desenvolvimento de software corporativo. Especialmente, quero transformar a discussão na direção de trabalhar em equipes, programação em pares, TDD, já que espero que ele não saiba muito sobre isso depois de trabalhar sozinho no mestrado.

Parece que vai ser uma longa entrevista;)

Atualização após a entrevista 09/12/2011

Mais uma vez obrigado a todos por suas boas respostas. Ele passou na entrevista com cores voadoras. Eu nunca fiquei tão satisfeito com um candidato. Sua solução Mathematica parece estar bem estruturada. Ele foi capaz de explicar onde usava funções de ordem superior, embora não soubesse que essas são referidas dessa maneira. Ele respondeu minhas perguntas de recursão baseadas em matemática, bem como tarefas simples e fluxo de controle do The Camel Has Two Humps. Quando ele estava explicando alguns algoritmos, aprendi muito sobre ajuste não linear;) Ele também disse honestamente que é claro que não pode garantir que será capaz de aprender coisas sobre desenvolvimento profissional de software que ele não conhece até agora. Mas ele acredita que sempre foi bom em aprender novos conceitos - mesmo por ele mesmo - e está realmente interessado no desenvolvimento de software. Ele também pediu para a pilha de tecnologia do projeto, a qual ele seria aplicado primeiro, para dar uma olhada em casa. Ele também estava curioso sobre a programação em pares e o trabalho em equipe. Agora espero que o contrato de trabalho seja concluído.


9
Acho maravilhoso que as empresas estejam dispostas a contratar pessoas sem conhecimento da tecnologia que usam. Eu gostaria de encontrar sua empresa antes de fazer o que fiz na minha carreira!
NoChance

Emmad: Foi o que tentei explicar e quis dizer com "meta-competência". Onde está o benefício da minha empresa quando agora contrato um excelente programador de C # que não pode (ou deseja) aprender o Scala / Lift quando necessário? E para ser sincero: na verdade, é muito difícil conseguir boas pessoas na Alemanha. Especialmente quando você é uma PME e não está localizada em uma metrópole moderna como a nossa.
Silas

2
Peça a ele que faça uma pequena pesquisa sobre o fluxo de controle simples e outras técnicas muito básicas em um idioma específico. Então, quando ele entrar, peça a ele para resolver um problema usando-o.
Darren Young

2
Trabalhei com alguns cientistas que se tornaram desenvolvedores em minha posição atual. IMHO eles tendem a ser muito bons no aspecto de desenvolvimento de solução de problemas e não tão bons em escrever código sustentável com bons princípios OO. Se você deseja que ele faça mais do que escrever ferramentas 'rápidas e sujas', pode ser necessário ter um desenvolvedor tradicional trabalhando com ele.
Jordan Bentley

2
Eu praticamente sou esse cara. Tenho formação em física / química computacional e desenvolvi muitos modelos / códigos computacionais, juntamente com vários projetos paralelos (às vezes complexos e bem-sucedidos). Os principais ajustes que tive que fazer em um ambiente de desenvolvimento profissional estavam relacionados à metodologia de desenvolvimento e ao trabalho em equipe. Certifique-se de que ele entenda o que é necessário para trabalhar juntos em software. Certifique-se de que ele entenda os métodos que vocês usam (integração TTD / contínua) e o que trabalhar com eles significa para a saída dele.
drxzcl

Respostas:


21

Sou muito tendencioso aqui porque comecei como desenvolvedor de software há alguns anos com um doutorado em física, mas com pouquíssima experiência em codificação (equivalente a um curso de graduação em Fortran). Claramente, depende do tipo de software que você está desenvolvendo, mas minha opinião é de que as habilidades de codificação são muito fáceis de serem aprendidas por qualquer pessoa com habilidades científicas / de resolução de problemas meio decentes. Não pretendo isso como um insulto aos programadores ao longo da vida que estudaram ciência da computação: é claro que existem aspectos técnicos que exigem treinamento sério para serem dominados (por exemplo, arquitetura multiencadeada e de nível muito baixo), mas presumo que seja não é a posição que você está tentando preencher.

Na minha entrevista técnica para minha posição atual, fui confrontado com um problema matemático razoavelmente complexo e fui solicitado a criar um programa para resolvê-lo. A ênfase estava na escrita de um algoritmo que, uma vez implementado, resolveria o problema. Eu poderia escrever uma resposta usando apenas palavras para descrever minha solução, mas me foi permitido escrever algum código em um idioma de minha escolha, se assim o desejasse. O teste foi mais sobre a capacidade de resolução de problemas e se eu era capaz de "pensar como um programador". Obviamente, se houvesse candidatos com a mesma habilidade e alguém tivesse mais experiência direta em codificação, ele teria saído por cima, mas isso parece justo o suficiente para mim.

A linha inferior é: examine o candidato para as habilidades pelas quais você o está contratando, não para os ideais que você espera que ele atinja.


2
Tendo trabalhado com programadores que eram ex-cientistas, não são apenas os detalhes de baixo nível que eles ignoram, mas também as coisas de alto nível. YMMV, é claro, mas é uma falta geral de profundidade que é o problema. Nem todos os empregos precisam disso ...
Donal Fellows

11
@DonalFellows: Não duvido que desenvolvedores sem treinamento específico possam ter falta de amplitude e profundidade de conhecimento. Depende do papel e da quantidade de treinamento interno que está sendo oferecido.
Prince Goulash

11
@DonalFellows: dado que o OP está interessado em determinar a capacidade do candidato para aprender, não o seu conhecimento presente ...

2
@DonalFellows: como eu disse antes, dado que o OP está interessada em determinar o candidato capacidade de aprender, não o seu conhecimento presente ...

2
@ Mark Bannister: Um bom cientista pode aprender, essa não é uma pergunta útil aqui. Uma pergunta mais útil seria se o cientista aprenderia o que ele ou ela precisa saber. Isso é mais um problema de personalidade. O cientista sabe o que não sabe sobre engenharia de software?
David Thornley 28/11

37

Como posso verificar se ele obterá as habilidades de programação de que precisa

Você não pode . É impossível testar com precisão uma habilidade que ele ainda não possui. Você tem que fazer um julgamento com base em sua inteligência e atitude. Em última análise, sempre será um risco.

Por experiência pessoal, posso dizer que é muito possível fazer a transição da ciência para a programação. Ambos basicamente se resumem a usar seu cérebro para resolver quebra-cabeças complexos.


8
+1 para "Ambos basicamente se resumem a usar seu cérebro para resolver quebra-cabeças complexos".
Joshin4colours

11
Qual o problema com você? Contrate o cara, pelo amor de Deus! Lembre-se de que os programadores são meramente operadores de torno de alta tecnologia. Ele é entusiasta, inteligente e conhece muita química. Se você não contratá-lo, na próxima vez que for contratar alguém daqui a um ano, estará chutando sua bunda por não ter contratado.
Pete Wilson

11
Não é raro que um graduado em CS possa estar programando desde os 13 anos de idade. No momento em que entram na faculdade, eles já são um programador intermediário na maioria das escalas. Isso não significa que eles não aprenderam nada com seus diplomas. Programar é fácil ... Ciência da Computação / Soft Engineering não é. Isso não significa que eles não poderão contribuir e ser um membro valioso ... Mas isso significa que eles provavelmente nunca terão a mesma base de CS.
user606723

6

Não tenho fontes secundárias para verificar este documento, portanto não posso atestá-lo, mas:

O camelo tem duas saliências
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

Encontramos um teste para a aptidão de programação, sobre o qual fornecemos detalhes. Podemos prever o sucesso ou o fracasso mesmo antes de os alunos terem qualquer contato com qualquer linguagem de programação com precisão muito alta e testando com o mesmo instrumento após algumas semanas de exposição, com extrema precisão.


3
Depois de ler o artigo, creio que lembro que li mais sobre este estudo há um tempo atrás. Só não consigo encontrá-lo novamente :( Edit: foi mencionado no Coding Horror , obrigado pelo lembrete.
Silas

Você chegou antes de mim, eu estava prestes a responder com a codificação @Silas ligação Horror acrescentou
Izkata

5

Como posso verificar se ele obterá as habilidades de programação de que precisa?

É muito simples. Dê a ele as habilidades.

Agora, essa não é uma resposta muito satisfatória, mas deixe-me elaborar.

Eu vim para programação depois de fazer 3 anos em Engenharia Civil. Essa é uma sólida formação em física aplicada e matemática. Não é a matemática teórica que um diploma de CS daria, mas vale alguma coisa. O que tirei da experiência em engenharia foi uma sólida formação na solução de problemas . Qualquer pessoa com formação em matemática já aprecia o conceito de elegância ao falar sobre uma solução para um problema. Eles já têm uma educação em refatoração desde que gastaram tempo tirando seis páginas de raspadinha e convertendo-a em uma elegante prova de meia página para envio.

Quem estudou física desenvolveu uma abordagem intuitiva para juntar uma solução a partir de estruturas básicas.

E o que é programação fora dessas habilidades? - Linguagem, Idioma, Padrões e Frameworks. Estes são fáceis de ensinar. É a solução de problemas que você não pode. Se você for capaz de fornecer instruções nessas áreas, terá um bom desenvolvedor.

A pergunta então se torna "Quanto tempo você pode esperar que ele se apresse?"

tl; dr; Você pode ensinar a digitar. Você não pode ensinar de maneira inteligente.


+1, resposta muito boa. Eu gostaria que as pessoas tivessem visões mais abertas sobre as profissões: ter um diploma de matemática não significa que você não pode programar para ganhar a vida, nem o contrário. Aprender a aprender é a habilidade importante da OMI.
precisa saber é o seguinte

2

Sou bacharel em Ciência dos Materiais, mas trabalhei toda a minha carreira em desenvolvimento de software.

Eu sugeriria que seu candidato provavelmente não terá problemas com a programação e os algoritmos básicos, mas quando se trata de requisitos do tipo "engenharia", ele pode precisar de alguma orientação. Com isso, quero dizer estruturar bem seu código, não ter 500 funções de linha, testar efetivamente, projetar para obter eficiência ...

Muito disso pode ser ensinado, mas você pode elaborar algumas perguntas para esclarecer isso.


2

Ele também resolveu um problema de físico-química que eu provavelmente não entendo usando seu próprio software, implementado no Mathematica, para sua tese de mestrado. Inclui uma GUI e um tamanho notável de 8.000 LoC.

Parece-me que o candidato já sabe programar, desde que ele não tenha tanta experiência como desenvolvedor dedicado, mas eles têm um projeto demonstrável que concluíram que exigia uma quantidade não trivial de trabalho. Dessa forma, você poderá entrevistar o candidato da mesma maneira que faria com um desenvolvedor que usa um idioma diferente daquele que você compra, a saber:

  • Competências Essenciais - O candidato entende lógica programática básica, controle de fluxo, estruturas básicas de dados.
  • Competências avançadas - O candidato entende programação e design orientados a objetos, estruturas de dados avançadas, interfaces, classes abstratas etc.
  • Habilidades de resolução de problemas - Dado um problema, o candidato demonstra habilidades sólidas de resolução de problemas.

A linguagem que o Mathematica usa é bastante avançada e alguém que é bom em escrever software para o Mathematica deve ser bastante competente em outras áreas, portanto, focar nessa experiência e usá-la como base para a experiência de codificação pode ser uma boa maneira de abordar a entrevista.


2

Falando como um graduado em Engenharia Aeroespacial que se tornou programador, certamente é possível dar o salto das ciências naturais para a programação. No entanto, esteja avisado: a capacidade de resolver problemas nem sempre se correlaciona com a capacidade de escrever código. Você parece perceber isso e isso é uma coisa boa.

Para mim, os conceitos mais importantes para garantir que ele compreenda são o controle de fluxo e recursão (e o loop em geral como um subconjunto disso). Antes de contratar um candidato, mesmo alguém claramente muito inteligente tenha certeza de que pode escrever um algoritmo de palavras simples para resolver problemas. Certifique-se de que ele possa pegar o algoritmo de palavras simples e transformá-lo pelo menos em pseudo-código. Você pode até tentar ver se ele consegue entender pelo menos o conceito de polimorfismo, embora não tenha certeza de que esse seja o conhecimento necessário nessa circunstância.

Também tenha cuidado com a capacidade de resolver problemas científicos no Mathematica / MatLab / Whatever, o que não significa que ele possa escrever um bom código. Significa apenas que ele é capaz de aplicar princípios básicos de programação (às vezes extremamente básicos), geralmente declarações if / else. Aprender a ser um bom programador geralmente exige um compromisso pessoal e do empregador com alguém nesse estágio. Aviso: Conheci pessoas muito inteligentes que eram / são bons engenheiros que não conseguiam sair de um saco de papel e, honestamente, não conseguiam entender os fundamentos básicos da linguagem.

Experiência pessoal

Eu me formei na escola com um diploma de engenharia e um pouco de experiência em programação. Eu havia trabalhado com uma quantidade muito pequena de C, bastante MatLab e alguns VB + Access. Demorei cerca de 3 meses estudando para me tornar realmente útil como programador em uma loja VB.NET. Levei mais nove meses para me tornar totalmente proficiente. No entanto, posso, com um bom grau de confiança, dizer que minhas habilidades de resolução de problemas são superiores a 99% dos outros programadores que conheci em meu trabalho. Meus empregadores sempre me consideraram um de seus ativos mais valiosos.

Conclusão

É uma proposta de risco / recompensa, mas muitas vezes a contratação de alguém com habilidades puras de resolução de problemas pode render a longo prazo, desde que seja capaz de aprender os conceitos de programação e que ambos estejam dispostos a investir tempo na expansão da programação dele. conhecimento. No entanto, acredito firmemente que ele deve possuir pelo menos um entendimento básico dos fundamentos da programação antes que você lhe ofereça um emprego. Na minha experiência, uma vez que você está nesse ponto, pode ir muito além.


Obrigado pela sua resposta. Isso confirma a maioria dos meus pensamentos. Eu só quero acrescentar que conheci muitos cientistas da computação, trabalhando como desenvolvedores e arquitetos por anos, que a IMO também não é capaz de escrever um bom código. Mesmo alguns que escrevem artigos técnicos sobre programação. Conclusão: Ser um bom programador sempre exige que você leia muitos livros, aprenda idiomas diferentes e assim por diante ... não importa que tipo de diploma você possua.
Silas

1

Eu começaria com algumas perguntas e conceitos básicos sobre algoritmos para ver se ele está dentro da lógica dos algoritmos e da programação. Se ele é capaz de entender o que é um algoritmo, ele pode eventualmente desenvolver as habilidades necessárias para fazer coisas concretas posteriormente.


1

Como posso verificar se ele obterá as habilidades de programação necessárias para implementar o software em nossos projetos, já que isso será uma parte significativa do trabalho

Honestamente, tenho certeza de que você não obterá essas informações em uma entrevista de uma ou duas horas. Dê a ele uma tarefa de programação em C # (algo não muito técnico) e uma ou duas semanas para resolver. Isso deve ser tempo suficiente para aprender o básico da linguagem para alguém que já tenha aprendido a programar com o Mathematica. Em seguida, faça uma revisão de código com ele e decida sobre essa base.


1

Você pode consultar Práticas para programação em um ambiente científico? (no Stack Overflow) para ter uma idéia de como é a cultura de programação das ciências naturais. Dessa forma, você está em posição de comparar a preparação dele com a de seus colegas.

Nesse caso, você pode pedir que ele descreva as práticas de programação com as quais está acostumado, a fim de descobrir se está ciente de que existem outras maneiras de fazê-lo .

Existem muitos "bons programadores" em minha empresa, cuja qualificação é capaz de manter um estado suficiente na cabeça para juntar algum código funcional, mas cujo trabalho tende a ser desestruturado e difícil de manter. Geralmente eles podem ser ensinados, mas ... eles têm que ser ensinados.


0

Outro departamento em que trabalho utiliza uma variação em nosso teste padrão. A primeira tarefa é inverter as palavras em uma string no lugar. Em seguida, use esse código para reverter a ordem das palavras na sequência, ainda no lugar. Em vez de usar uma linguagem de programação, o candidato deve projetar os algoritmos no papel e executá-los usando uma placa Scrabble.


0

Eu pediria para descrever (usando linguagem natural) um algoritmo para calcular algo da física. Algo um pouco mais complicado que uma fórmula simples e então eu perguntaria como ele veria o cálculo dele encapsulado em objetos (não há necessidade de conhecimento de OOP, você poderia explicar qual é a sua expectativa de um objeto). Desta forma, você pode ver o seu pensamento lógico. Isso é mais importante do que qualquer habilidade de programação.


0

Primeiro, eles são provavelmente muito inteligentes; portanto, no pior cenário, podem aprender a ser um bom programador com orientações. No entanto, se você precisar deles e se tornar um programador decente desde o início, peça que eles enviem algum código de amostra que eles escreveram.

É uma ou duas funções multifuncionais gigantes ou elas encapsulam a funcionalidade nos níveis apropriados de abstração? Os números mágicos são codificados por toda parte? O código está SECO? Eles deram nomes razoáveis ​​às variáveis ​​ou é tudo uma abreviação indecifrável ou variável de letra única? Você pode principalmente seguir a lógica do código deles? Eles entendem o básico sobre OO?

Pergunte o que eles usam para o controle de versão (git / hg / svn / cvs / bzr, etc.). Eles já criaram um perfil de código ou usaram um depurador e, em caso afirmativo, quais ou qual é a estratégia de depuração genérica?

Se eles falharem nesse teste e você precisar de um bom codificador desde o início, pule essa pessoa. Caso contrário, contrate-os, sugira que leiam alguns livros de engenharia de software (por exemplo, Code Complete) além de livros genéricos de programação / CS.

(Para constar, também sou cientista físico que virou programador.)


-3

Como ele ainda está na universidade ou apenas recentemente terminou, ele está acostumado a estudar. Faça com que ele leia e compreenda o livro Design Patterns e depois (ou durante) de um mês, converse com ele sobre os tópicos. (Acho que) isso pode lhe dizer muito sobre as habilidades dele (não apenas as difíceis (também)), mas também como ele lida com a apreensão de novos conceitos, a compreensão do uso deles, os prós e os contras etc.). Mas custará um mês.


8
-1 A pergunta era sobre como entrevistá-lo, não como fazê-lo parar de querer a posição.
Peter Taylor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.