Ao pedir a um candidato à entrevista para escrever um programa no quadro branco, você espera que o candidato escreva um código sintaticamente correto?
Eu tinha dois candidatos, um dos quais escreveu um programa sintaticamente correto, mas a lógica não estava à altura, e o outro teve a lógica melhor escrita, mas a sintaxe era uma porcaria.
Eu sou a favor do primeiro candidato.
Respostas:
Eu preferiria a pessoa que fosse capaz de raciocinar com o problema, apresentasse uma boa solução e depois me explicasse sua solução. Mesmo se a lógica deles não fosse 100%, se eles estivessem no caminho certo e estivessem discutindo o problema, fazendo as perguntas certas e seguindo o caminho certo, esse seria o meu vencedor.
Ao desenvolver código no trabalho, você tem muitas ferramentas - IDEs, compiladores, análise estática, testes de unidade, teste de integração e procedimentos de teste de aceitação - para encontrar erros na sintaxe e na lógica. Se você está escrevendo em um quadro branco, não possui essas ferramentas e pode cometer erros de sintaxe (esquecendo o nome de um método, um ponto-e-vírgula, uma chave), e eu posso perdoar isso.
Minha única pergunta é: por que seus candidatos escrevem código real no quadro branco, em vez de se concentrar em algoritmos, estratégias de design e pensamento lógico? As linguagens de programação mudam, a solução de problemas não.
fonte
Eu seria a favor do segundo candidato. A lógica pode ser difícil ( muito difícil, às vezes) para ser exatamente correta. A sintaxe pode ser muito fácil de acertar quando o IDE, o compilador e outras ferramentas variadas ajudam.
O primeiro candidato nunca pode acionar um erro do compilador, mas se seu código geralmente falha em todos os tipos de casos de fronteira estranhos (e menos estranhos), o fato de saber onde colocar um ponto e vírgula não vale tanto.
fonte
Dependendo dos erros sintáticos reais, acho que prefiro o segundo candidato , porque a verificação da sintaxe geralmente é melhor deixar para as máquinas .
Erros como ponto-e-vírgula ausente, esquecimento de colchetes, vírgulas em listas de argumentos, etc. , tudo o que normalmente se usa, mas não está disponível no quadro branco.
No entanto, existem alguns erros que, embora tecnicamente apenas erros de sintaxe, mostrem um entendimento errado mais profundo.
Como um exemplo um tanto artificial para explicar o ponto: considere um programador python que prefixa todas as suas variáveis com $ ou escreve o loop for como
for list as item
. Tecnicamente, ambos são erros de sintaxe, mas mesmo com exposição limitada ao python, é necessário saber sobre caracteres legais e o loop for. Seria um bom palpite que o candidato conheça php (ou perl?) E tente blefar sobre suas habilidades em pythonfonte
Eu preferiria o segundo candidato, na teoria de que um quadro branco tem mais impacto na sintaxe do que na lógica, e que erros de sintaxe são mais fáceis de corrigir - o IDE ou o compilador geralmente podem fazê-lo.
fonte
Escrevo SQL e CSS (as linguagens mais simples e básicas que conheço) há quase 13 anos e nem sempre consigo me lembrar da sintaxe.
Meu amigo (também desenvolvedor) trabalha para um fundo de hedge, ele nunca consegue se lembrar da sintaxe de uma instrução de inserção.
Nós dois acabamos no W3CSchools , acho que deveríamos ter vergonha (ele é formado e eu tenho doutorado).
No entanto, para ser sincero, acho que temos nossas prioridades corretas. Sintaxe não é uma habilidade importante.
fonte
Poucos pensamentos sobre erros de sintaxe ... Gostaria de saber se você deixou claro para ambos que a sintaxe precisa estar correta. Às vezes, as pessoas assumem que o pseudocódigo está correto.
Além disso, se alguém reivindicar anos de experiência em um idioma e não conseguir corrigir a sintaxe básica, duvide da reivindicação.
Os erros de sintaxe podem variar, portanto, se alguém esquecer um nome de método, tudo bem (para mim), mas se alguém não souber como se referir a um método em uma classe (notação de ponto) ou se não souber um pensamento básico como a sintaxe de um aula simples, é provável que essa pessoa não use o idioma há muito tempo.
Para o cara que não conseguiu a sintaxe correta, você acha que os erros dele poderiam ter sido facilmente corrigidos com o editor de idiomas apropriado? se assim for, eu voto nele.
Acho que o que estou pensando aqui é que erros de sintaxe são aceitáveis dentro de limites.
fonte
Um programador assistente júnior ou mesmo uma ferramenta de software poderá encontrar e corrigir sintaxe ruim se a lógica for boa. Lógica ruim ... qualquer correção é muito menos garantida. Todos os programadores vão estragar. Eu escolheria quem é mais fácil identificar e consertar as trocas.
fonte
A menos que o problema seja sutil e a maioria das perguntas da entrevista não, o primeiro candidato é desqualificado. É muito mais fácil aprender a sintaxe da linguagem do que o design de algoritmos. Contratarei um programador com histórico de trabalho bem-sucedido em vários idiomas, mesmo que ele não tenha experiência na minha tecnologia atual. Essa não é a melhor estratégia se eu precisar de algo feito hoje, mas se precisar de muitas coisas nos próximos doze meses, sempre escolherei a capacidade geral em vez de experiências específicas.
fonte
A verificação de sintaxe é para que serve um compilador. Um compilador não pode melhorar sua lógica, mas pode lhe dizer como corrigir sua sintaxe. Isso significa que, em qualquer trabalho em que você escreva código usando um compilador, a lógica é inerentemente muito mais valiosa do que estar sintaticamente correta.
fonte
As entrevistas são sempre situações embaraçosas - você pode dizer isso porque, quando sai, pensa imediatamente em todas as coisas que deveria ter dito ou nas respostas certas para as perguntas e o que queria perguntar, mas esqueceu. Portanto, considerando isso, esperar um código perfeitamente escrito sem erros de sintaxe é irreal.
Além disso, suas expectativas de código perfeito (em um quadro branco!) Podem não corresponder aos entrevistadores - por exemplo, em uma entrevista em que participei, fui convidado a escrever uma aula, o que fiz, apenas para que o entrevistador me levasse a não colocar em um construtor de cópia. Então eu escrevi um, que não fez nada além de definir a = b, mas isso foi suficiente para satisfazê-lo. Minhas expectativas para o problema não exigiam um copiador, por isso deixei de fora como estranho ao problema que estava sendo resolvido - não esperava escrever código de compilação totalmente compatível (para seus padrões de codificação ocultos), simplesmente mostrar meu entendimento da solução. (esse mesmo entrevistador também não gostou da minha solução, não era como ele faria isso, então obviamente eu entendi errado, suspiro).
Se você quiser código de trabalho de um entrevistado, forneça a ele um compilador. Então não reclame quando faturarem você :)
Portanto, procure a pessoa que sabe o que está fazendo, não a que pode papagaio as palavras, mas não entende o significado.
fonte
Durante uma entrevista, o entrevistador está mais interessado em ver seu
A sintaxe, porém, não é tão importante, mas ocupa um lugar de destaque ao resolver um problema, com grandes erros na sintaxe que você não pode esperar para impressionar o entrevistador.
A lógica e a sintaxe adequadas combinadas podem fazer o truque para você em uma entrevista.
Um erro pequeno ou menor nunca lhe custaria muito se a lógica fosse boa o suficiente.
Além disso, pode haver um IDE disponível que poderia facilmente tornar a sintaxe de qualquer forma adequada. Mas usar qual método, onde, quando e, o que é mais importante , POR QUÊ , seria conhecido apenas por um cara com a lógica e o conhecimento adequados do assunto real.
Espero e peço que você forneça algo mais do que um quadro branco ou um bloco de notas para escrever o código.
Eu iria com o segundo candidato. ..
fonte
Bem, algumas pessoas querem ótimos desenvolvedores de Java, ótimos desenvolvedores de C #, ótimos desenvolvedores de C ++ etc. Se esse for o seu caso, use A e mais poder para você. Uma preocupação que eu teria é se eles não podem raciocinar para resolver o problema, como você pode esperar que eles raciocinem e resolvam seus problemas de negócios?
Outras pessoas querem apenas grandes desenvolvedores que possam trabalhar em qualquer idioma que seja necessário. Eles pensam / modelam o problema e depois o implementam em qualquer idioma. Se você decidir repentinamente que o .NET é péssimo e mudar para Java ou vice-versa, esses são os desenvolvedores que não se esquecem de aprender ou se recusam a aprender. Além disso, se você obtiver algum tipo de pacote de automação / pacote de cálculo que possui uma linguagem proprietária e precisar de algumas tarefas automatizadas, esses são os tipos de desenvolvedores que podem fazer isso. Exemplo da vida real ... Eu precisava descobrir uma linguagem de script proprietária personalizada para um pacote de software de mapeamento para extrair códigos postais para regiões desenhadas personalizadas para um antigo empregador. Outro exemplo ... meu empregador atual possui um sistema de gerenciamento de propriedades proprietário que contém um idioma personalizado para a elaboração de relatórios ... Em qualquer caso,
Também no quadro branco há pressão / nervosismo extras, para que ninguém esteja no seu melhor. Além disso, duvido muito que, ao codificar, você sempre fique perfeito. Eu suspeito que você compile ou apenas execute e encontre alguns erros. Além disso, depende do idioma. C é pequeno o suficiente para que você provavelmente possa memorizar a maioria das bibliotecas de idiomas / núcleo (embora eu não exija isso). Java / C # tem bibliotecas tão grandes (com alterações tão frequentes) que memorizar a biblioteca está fora de questão.
Também conhecer vários idiomas pode funcionar contra você. C # e Java interferem um com o outro comigo. Mas conhecer várias linguagens também pode ampliar sua perspectiva, especialmente se você conhece uma linguagem de script e uma linguagem funcional, além de C # / Java.
Ainda assim, se os dois candidatos resolverem o problema com lógica correta, o cara com sintaxe correta provavelmente terá uma vantagem. Se alguém resolve o problema e não resolve, pessoalmente eu iria com o cara que pode resolver o problema.
Ainda assim, se alguém afirma ser um especialista em Java e não pode declarar uma matriz de uso de uma instrução if ou loop while, pode estar mentindo. Mas eu posso entender se alguém é especialista em Java, mas atualmente usa muito C # e tenta fazer o Map ou algo assim ... Além disso, se você entrar em detalhes da biblioteca, ou alguém usa myArray.length em vez de myArray .Length ou string.length () / string.Length / string.length em vez de string.length () ... Coisas menores que eu perdoaria. Ou se eles esquecerem a ordem dos argumentos de alguma chamada de biblioteca. Ou um erro de digitação / ponto e vírgula aqui ou ali ....
fonte
Eu não vou levar nenhum deles.
Uma boa sintaxe é inútil se o programador não for bom na solução de problemas. E uma má sintaxe para um determinado idioma significa que o candidato não se sente confortável com esse idioma específico, talvez por falta de experiência direta.
Enfim, a lógica é muito mais importante que a sintaxe.
fonte
Como sempre, depende. Se os erros de sintaxe forem relativamente pequenos, eu os ignorarei. Se eles são terrivelmente grandes, eu prestaria atenção neles e tentaria inferir por que eles estão lá.
Eu acho que os erros lógicos são piores que os erros de sintaxe, o último quase sempre pode ser capturado mecanicamente, o primeiro menos (depende, até certo ponto, de qual idioma você está escrevendo, algumas classes de erros lógicos são capturadas por tipos suficientemente avançados inferência e verificação).
fonte
Definitivamente, dependeria da posição para a qual a entrevista é, e provavelmente do idioma também.
Trabalhando em C ++, ter um cara gaguejando em sintaxe é assustador. C ++ está cheio de cantos escuros, armadilhas estão basicamente em todos os lugares. Uma gagueira na sintaxe significa uma péssima exposição ao idioma, e os iniciantes em C ++ cometem muitos erros (para não dizer que outros não o fazem de vez em quando).
Para responder sua pergunta, então:
Há apenas uma ressalva: as pessoas reconhecendo sua falta de experiência. Idealmente, as pessoas devem codificar no idioma de sua escolha, ou pseudo-código, se assim o preferirem (alunos, por exemplo).
fonte
História verdadeira, ainda esqueço a sintaxe dos eventos em C # quando preciso escrevê-los manualmente. Às vezes acontece nas entrevistas. Não tenho o problema ao codificar em um teclado.
Escolha o cara que pode codificar, não aquele que não pode, mas consegue se lembrar da sintaxe.
fonte
Quando estou escrevendo código em papel / quadro branco, mesmo para uma entrevista de emprego, basicamente pulo uma grande parte da sintaxe. Não uso ponto-e-vírgula, falsifico chamadas de método etc. É mais provável que eu escreva uma frase explicando 4 linhas de código realmente básico que o próprio código. Na verdade, eu uso um pseudocódigo do tipo php e falo sobre o que estou fazendo, enquanto faço isso, e anoto comentários rápidos para explicar as coisas sobre as quais falo (que são, em teoria, nada que seja realmente importante para o programa)
Meu objetivo ao codificar em uma entrevista é mostrar como eu resolvo o problema, não ditar algo que um datilógrafo possa entrar no Bloco de Notas e executar.
Resumindo: acho que você deve considerar por que o primeiro programador tinha uma sintaxe de baixa qualidade. Ele sabia muito bem, mas apenas o considerava irrelevante para a entrevista e preferia se concentrar nas partes difíceis desse trabalho (lógica e solução de problemas).
fonte
A pessoa que não pode logicamente satisfazer a resposta não é qualificada. Existem muitas pessoas em nossa indústria produzindo código de lixo que está em conformidade, mas na verdade não faz o que deve fazer ou lida com erros ou casos extremos.
A segunda pessoa pode ou não ser desqualificada, dependendo do tipo e número de erros e da dificuldade do que você espera que eles escrevam. Em termos de SQL (o idioma em que escrevo), a pessoa que não consegue se lembrar da sintaxe de uma associação explícita não é qualificada para um trabalho que exige que você consulte um banco de dados - sem exceções; quem não consegue se lembrar de como fazer uma CTE recusativa (mas quem sabe que ela existe e tenta usá-la) não é. Em outras palavras, eu esperaria que a sintaxe fosse mais correta para o código básico que você escreve o tempo todo, mas não para coisas feitas apenas ocasionalmente e não para sintaxe complexa.
Se eu estivesse considerando uma pessoa que eu conhecia com excelentes qualificações em uma área relacionada, mas com apenas um conhecimento mínimo do meu idioma específico, provavelmente também perdoaria os erros de sintaxe. Prefiro contratar um ótimo desenvolvedor Oracle do que um medíocre desenvolvedor do SQl Server para um trabalho do SQL Server (é claro que uma boa pessoa do SQL Server seria a melhor) e não esperaria que essa pessoa conhecesse a sintaxe do SQL Server se ela pudesse me mostrar como faça isso no Oracle. A mesma coisa com as pessoas Java e C #, a pessoa com excelentes habilidades de resolução de problemas supera aquela com excelentes habilidades de linguagem, mas aquela com as duas vitórias todas as vezes (às vezes são difíceis de encontrar).
fonte