Qual a importância de estar sintaticamente correto durante uma entrevista? [fechadas]

40

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.

topgun_ivard
fonte
75
Sua escolha faz sentido se você espera que eles codifiquem no bloco de notas, eu acho.
Benjol 8/09/11
20
Como uma sintaxe de pseudocódigo pode estar incorreta? Ou você está pedindo que eles escrevam em algum idioma real?!?
SK-logic
6
Depende da descrição do trabalho ... editor de cópias?
Konrad Rudolph
9
A sintaxe pode ser aprendida, é uma tarefa trivial, acontece em algumas semanas no trabalho. Ser capaz de resolver um problema com uma lógica melhor é mais difícil de aprender, se não impossível, com base no nível de habilidade do programador. O Synax incorreto se resolve quando você compila ou exibe seu trabalho em um navegador (ou seja, não está certo).
Ramhound 8/09/11
26
Embora eu concorde com as respostas dizendo que o segundo candidato é melhor, acho que também depende de quão "porcaria" era a sintaxe. Se ele esqueceu um ponto-e-vírgula, não é grande coisa, mas se era algo que nem parecia semelhante à linguagem de programação e a recorrente afirmou que eles tinham muita experiência com essa língua, então há algo errado
Thomas Bonini

Respostas:

125

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.

Thomas Owens
fonte
6
+1, mas às vezes é um indicador decente de quão confortável alguém está em um idioma específico. Pessoalmente, nunca coloco muito peso nele (definitivamente concordo que o algoritmo é o mais importante), mas não dói.
Demian Brecht
2
Para mim, o peso é o primeiro no processo de pensamento, o segundo no algoritmo e na lógica e, finalmente, na linguagem (com pontos de bônus entrando no pseudocódigo - mostra que você pode pensar abstratamente). Eu contrataria um bom solucionador de problemas que pudesse aprender e se adaptar aos idiomas antes de um mestre de um idioma específico (mesmo que esse idioma fosse o idioma de escolha atual da minha organização).
Thomas Owens
11
Uma coisa que notei sobre minha própria codificação - se estou trabalhando com vários idiomas, o compilador captura muito mais erros de sintaxe do que se estivesse trabalhando apenas com um.
Loren Pechtel 08/09/11
12
Eu sempre tenho pessoas que escrevem código no quadro branco. Já deparei com muitas pessoas que sabem as coisas apropriadas, mas que parecem não conseguir produzir código quando necessário.
dietbuddha
5
@dietbuddha Esses pontos se aplicam independentemente de como você faz a pergunta, a linguagem de implementação ou o pseudocódigo - todos os três. Uma única pergunta da entrevista também não consegue identificar os maus hábitos que um desenvolvedor pode ter, pois é bastante fácil ocultar seus maus hábitos por um breve período. Não vejo nenhuma evidência convincente para dizer outra coisa senão o fato de que as habilidades mais importantes para um engenheiro de software são a resolução de problemas e a comunicação, as quais são melhor abordadas colocando o desenvolvedor em uma situação do mundo real usando as ferramentas padrão ou usando pseudocódigo.
Thomas Owens
46

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.

FrustratedWithFormsDesigner
fonte
11
Exatamente. Você pode ensinar sintaxe (especialmente se eles já conhecem alguma outra sintaxe). Você não pode ensinar raciocínio sonoro com a mesma facilidade.
Tridus 9/09/11
19

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 python

keppla
fonte
15

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.

psr
fonte
15

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.

NimChimpsky
fonte
13

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.

NoChance
fonte
5

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.

hotpaw2
fonte
5

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.

Kevin Cline
fonte
5

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.

DeadMG
fonte
5

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.

gbjbaanb
fonte
3

Durante uma entrevista, o entrevistador está mais interessado em ver seu

  1. Abordagem ao problema
  2. Habilidade usada para resolver o problema e a
  3. Tempo necessário para fornecer uma solução adequada

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. ..

S.M.09
fonte
2

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 ....

Cervo
fonte
1

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.

Jose Faeti
fonte
3
Nunca me lembro de nenhum detalhe da sintaxe, mesmo das línguas que eu mesmo projetei. E não me lembro da sintaxe dos idiomas que uso há décadas também. Não é um problema, posso sempre procurar, tenho BNF impresso para todos os idiomas que estou usando. A sintaxe é a parte menos importante de qualquer linguagem, a semântica é muito mais importante.
SK-logic
@ SK-logic: Eu concordo inteiramente, mas muitas vezes os caras vinham aqui dizendo que eram capazes de programar na linguagem xxx, então eles nem conseguiam se lembrar se o ponto e vírgula era necessário ou não. É fácil aprender a sintaxe de um novo idioma, mas se estou procurando alguém fluente em um determinado idioma, deve ser assim. Além disso, eu já apontei que a lógica é muito mais importante que a sintaxe.
Jose Faeti 8/09/11
1

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).

Vatine
fonte
1

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:

  • se eu precisar preencher uma posição simples de desenvolvedor, levaria o cara com uma boa compreensão da sintaxe C ++. Ele não brilha, mas não deve provocar muitas catástrofes.
  • se eu precisar preencher uma posição de desenvolvedor líder, também não aceitaria. Um desenvolvedor líder deve ter experiência e lógica.

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).

Matthieu M.
fonte
1

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.

Ian
fonte
0

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).

MattBelanger
fonte
0

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).

HLGEM
fonte