As habilidades de depuração são importantes para se tornar um bom programador?

24

Juntamente com as outras qualidades, um programador precisa de boas habilidades de depuração? Se eu tiver um candidato que não foi capaz de encontrar o erro no programa fornecido, mas conseguiu resolver todos os quebra-cabeças e programas, devo considerá-lo para o trabalho?

EDIT: - Os quebra-cabeças são bolas normais de vermelho, azul e vermelho-azul. Os programas são como encontrar zeros contínuos em uma matriz. O programa de depuração é algo que falha devido à condição que deve ser> =, mas é>. Tudo está no papel.

Manoj R
fonte
13
Ele teve permissão para executar o programa ou precisou encontrar o erro ao visualizar o código?
Michael K
9
Você pode codificar apenas o melhor que pode depurar. os dois andam de mãos dadas no meu livro.
Demian Kasier
3
algumas pessoas são melhores nisso do que outras. geralmente é difícil identificar um erro em um código estrangeiro - especialmente durante uma entrevista estressante.
leed25d
6
@ Fanatic: Somente se você estiver trabalhando apenas com seu próprio código. A maior parte da depuração que faço no trabalho está desenterrando os erros de outras pessoas.
Mason Wheeler
3
@ Manoj R, você tem certeza de que poderá encontrar o mesmo problema com a mesma quantidade de tempo? Você tem certeza de que, apenas pelo fato de a requerente não encontrar um problema no papel em 20 minutos, ela não seria capaz de lidar com o Google (sim, porra do Google) do seu lado e algumas semanas de prática?
Job

Respostas:

37

Sim é muito importante

Sobre esse candidato em particular, é possível que ele não estivesse familiarizado o suficiente com a base de código x para depurá-lo.

Um bom solucionador de problemas deve ser capaz de depurar, pois geralmente é necessário ter um método / abordagem muito lógico.

Noite escura
fonte
11
Mais do que qualquer outra habilidade em programação, a depuração vem com experiência e tem menos a ver com talento.
Pieter B
24

Se você não pode depurar, praticamente não é um programador, muito menos um bom programador.

A depuração é uma aplicação prática real, não apenas das habilidades técnicas, mas também da capacidade de análise e dos processos de pensamento. Como resultado, eu o classificaria como um teste muito mais útil e relevante do que perguntas do quadro branco ou da entrevista.

A menos que o trabalho que você tenha envolva passar o dia todo respondendo perguntas teóricas, você precisa de alguém que possa aplicar as habilidades que possui.

O que você precisa fazer é se perguntar se foi um teste justo da capacidade de depuração - eles poderiam executar o código, colocar pontos de interrupção e assim por diante, da mesma maneira que no mundo real? Que tipo de erro foi esse? É algo que o compilador pegaria e sinalizaria (nesse caso, é uma pergunta sem sentido, pois eles nunca precisariam identificá-la)?

Se foi escrito apenas no papel, é basicamente apenas um teste de leitura detalhado e essa é uma habilidade ainda mais abstrata do que a sua pergunta técnica de entrevista técnica, e eu diria, praticamente inútil.

Jon Hopkins
fonte
2
+1 em "Pergunte a si mesmo se foi um teste justo da capacidade de depuração" - Parece que não. Um teste justo incluiria código executável com um depurador, ou seja, colocá-los em um ambiente de trabalho natural e normal (considerando que eles raramente estarão trabalhando sem o depurador).
doppelgreener
11

Regra principal de contratação - em caso de dúvida, diga não.

Se você precisar implementar um monte de código novo e barato - você pode conseguir esse cara, mas pessoalmente eu continuaria pesquisando.

BarsMonster
fonte
7
Contratei muitas pessoas nos meus anos e me arrependi de quase todos os candidatos "Talvez" que eu contratei.
JohnFx
10

A menos que o desenvolvedor possa escrever código limpo o tempo todo (absolutamente impossível) e trabalhar apenas em projetos de "campo verde" (nunca será o caso), então sim, as habilidades de depuração são absolutamente essenciais. Absolutamente. Eu tive experiência com desenvolvedores que simplesmente não gostam de depurar, então eles ficaram com preguiça e jogaram código por cima do muro para o controle de qualidade para que eles testassem. Mas esses desenvolvedores não duram muito tempo.

O desenvolvimento de software é um ofício e uma habilidade para resolver problemas. Esses problemas incluem problemas de negócios e problemas com o código deles (e de outros). A propósito, muitos projetos de manutenção são especificamente sobre a correção de bugs, portanto a depuração é uma habilidade absolutamente essencial.

Mark Freedman
fonte
Outra coisa que quero acrescentar ... Parte do nosso processo de entrevista aqui é que damos ao candidato um exercício para depurar um aplicativo e adicionar alguns pequenos recursos a ele também. Cada parte desse processo é tratada igualmente como importante.
Mark Freedman
7

Eu tenho em mente que existem muitos sites do tipo "pergunta para entrevista", e é perfeitamente possível estudar muitas perguntas e quebra-cabeças. Uma coisa para a qual você não pode estudar é o código de depuração que você nunca viu antes. Você escreveu código suficiente para saber como depurar ou não. Se for uma posição de nível básico, eu não descartaria o candidato, mas se ele alegar ter experiência com o idioma e não conseguir depurar o código nele, certamente levantará uma bandeira vermelha.

TMN
fonte
5

A principal diferença que eu vi entre programadores juniores e programadores seniores é sua habilidade em depurar. Habilidade na depuração é algo que só vem com prática e experiência.

Por exemplo, pense em um bug estranho no qual um programa Java funcione bem no console no modo interativo, mas falha ao tentar usar um canal Unix para a mesma entrada. Se você já encontrou esse problema antes, verifique se new Scanner(System.in)é chamado apenas uma vez; o erro é que ele consome o buffer quando canalizado, mas obviamente não quando está no modo interativo. Eu esperaria que um programador mais sênior identificasse esse bug mais rapidamente. Talvez porque já tenham experimentado isso antes ou porque já tiveram outros problemas com o armazenamento em buffer no passado.

Quanto à resolução de quebra-cabeças e à escrita de novo código, embora a experiência seja importante, é algo em que um programador de nível júnior talvez possa ter um desempenho tão bom quanto, ou melhor ainda, que um programador mais sênior. Ou seja, inteligência e habilidade podem ter um efeito maior, independente da experiência.

Se você está em uma posição de investir em um programador júnior, que pode ter novas idéias e ajudar a equipe a "gelar", e parece bom escrever um novo código, vá em frente e contrate-o. Se você estiver procurando por um programador de nível sênior, essa falta de habilidade de depuração pode ser um grande sinal de aviso: eles podem ter dez anos de experiência que equivale a experimentar o primeiro ano dez vezes.

Como uma observação lateral, há maneiras de melhorar a depuração sem ter 10 anos de experiência primeiro. Eu recomendo o livro Por que os programas falham: um guia para a depuração sistemática como um meio de aprender princípios científicos e entender melhor como reproduzir, encontrar e corrigir falhas.

Macneil
fonte
Portanto, a depuração é algo que vem da prática e pode ser aprendido, e não deve ser dado muito peso ao selecionar candidatos.
Manoj R
11
Para ser claro: você deve pesar bastante para desenvolvedores seniores, mas menos para desenvolvedores juniores. Por exemplo, alguém que acabou de terminar a faculdade, que começou a programar seu primeiro ano, pode demorar 10 vezes mais para depurar alguma coisa. Mas há boas razões para investir em desenvolvedores juniores.
Macneil
5

Depende do seu ambiente. Se você jogar sodoku e outros quebra-cabeças o dia todo, talvez seja um bom candidato.

Se, no entanto, às vezes houver erros no seu código, ou ele nem sempre funciona exatamente como o esperado, sugiro que você consiga alguém bom na solução de problemas.

Contrate o que você precisa, não um ideal do que um programador deve ser.

JohnFx
fonte
3

Juntamente com as outras qualidades, um programador precisa de boas habilidades de depuração?

Sim.

O código de depuração é parte da solução de problemas. Eu nunca encontrei um desenvolvedor que escrevesse código perfeito e zero bugs. Um desenvolvedor estará depurando seu código ou o de outra pessoa. É uma necessidade.

devo considerá-lo para o trabalho?

Talvez depende.

A impossibilidade de depurar um programa em uma entrevista provavelmente não deve ser um desrespeito se o candidato conseguir concluir todos os outros quebra-cabeças e programas da entrevista. Realmente depende da profundidade e da respiração da entrevista.

Quanta depuração a posição implica? Se muito, talvez seja necessário dar mais importância à capacidade de o candidato responder à pergunta de depuração. Mas como você mencionou apenas que uma pergunta de depuração foi feita, parece que não.

esponja
fonte
2
+1 Para reiterar a depuração é necessário, mas não é necessário interromper o negócio durante a entrevista.
precisa
3

um programador precisa de boas habilidades de depuração?

Sim. Dito isso, eu pediria que você considerasse a metodologia da entrevista (ou seja, estilo de teste / teste) menos que perfeita (ok, falha), pois muitas pessoas acham o código no papel uma experiência estranha e desconhecida.

Como a depuração é um processo , não a resposta ou o resultado (por exemplo, o erro ), sugiro usar um diálogo ou discussão interativa como um meio melhor para avaliar as habilidades de depuração dos candidatos. Embora a maioria das pessoas use um sistema informal de depuração ad hoc, bons candidatos terão um padrão semelhante em geral, de fazer perguntas para entender o sistema ou suposições e requisitos, depois isolar o problema (geralmente dividir e conquistar) e comparar metodicamente o código para os requisitos, e avaliar se espera de entrada / saída, em vez de um , querendo ou não mudar um monte de coisas ao mesmo tempo ao acaso até que ele funciona.

Também expresso reservas sobre problemas com quebra-cabeças durante as entrevistas, particularmente na forma escrita, como se o candidato não tivesse as suposições corretas da estrutura de referência (o truque), o quebra-cabeça pode ser insolúvel para eles. Ou seja, muitos quebra-cabeças de entrevistas sofrem por ter um único caminho correto, enquanto a vida é complicada e os pensamentos mais criativos são os que adotam abordagens surpreendentemente novas para resolver um problema que pode não funcionar com um determinado quebra-cabeça pré-cozido, com uma solução esperada. . É como esperar que todos os trompetistas tocassem jazz. Isso pode ser gerenciado com a pergunta como uma discussão interativa sem confronto (a pressão pode confundir a criatividade). Novamente, para mim, a resposta é secundária para ver um processo de bom pensamento sendo expresso. Você provavelmente precisará pedir que eles pensem em voz alta, mas isso tende a ser mais produtivo na minha experiência.

Não li ou avaliei Por que os programas falham do Zeller , mas posso recomendar a Depuração por Agans como uma leitura curta e rápida que pode ajudar a solidificar o processo de depuração ad-hoc em um esforço mais estruturado, concreto e organizado, que pode ajudar a seja mais eficiente na depuração. Imprima também uma cópia e pendure-a em seu cubículo ou solução alternativa, o pôster Regras de depuração , é um lembrete perfeito para aqueles dias ruins em que nada parece dar certo. Tenho alguns dias ruins e passo menos tempo ativamente depurando (leia-se: coçando a cabeça em confusão ) tentando segui-los em espírito, se não em letra.

mctylr
fonte
Ótima resposta. Passei literalmente dias pesquisando a correção de bug mais simples e, literalmente, tropeçou em corrigir um bug complicado em minutos. Um bom desenvolvedor deve ter uma estratégia razoável. E isso depende muito do aplicativo. Digamos que seu aplicativo não exiba um problema quando você coloca várias instruções de impressão / log ou executa a versão com símbolos. O que então? O requerente deve pelo menos ser capaz de articular algum tipo de estratégia coerente.
SnoopDougieDoug
2

Eu diria que a depuração é essencial, a menos que o programador seja tão bom que ele nunca cometa erros. Não estou convencido de que isso seja impossível, mas não consigo imaginá-lo com as ferramentas e linguagens populares atuais.

Não gosto do conceito de ser colocado no local assim em uma entrevista. Se o candidato estiver nervoso (e quem não estiver), ele poderá deixar um espaço em branco, enquanto programador, ele poderá rotineiramente lidar com esses problemas. Então, se fosse um problema bem conhecido de entrevista ou teste de comp-sci, o candidato poderia saber o resultado de maneira mecânica, mas não teria a capacidade de pensar em um novo problema. Além disso, se o candidato não estiver familiarizado com o idioma, ele terá que lutar. Muitos bugs são difíceis porque um bom programador sabe o que ele quis digitar e seu cérebro usa atalhos ao ler o código. Não consigo encontrar o uso de = where == no estilo C onde deveria ter sido usado por inspeção, porque sei qual era a intenção e meu cérebro utilizará um atalho de análise para lê-lo.

Omega Centauri
fonte
1

Uma boa parte da programação de solução de problemas e para solucionar um problema é necessário conhecer o problema principal, não apenas sintomas ou inconsistências. Depurar é a arte de identificar o problema principal.

  • identificar o problema central
  • melhor capaz de visualizar o fluxo

e muitos mais.

Srikanth Remani
fonte
1

Eu acrescentaria um pouco mais à situação ao apontar o erro e ver que reação a pessoa tem. Eles são excessivamente dramáticos sobre o tipo "D'oh! Eu sou um idiota, isso foi tão burro ...", excessivamente apático no campo "Sim, qualquer que seja o cara", ou houve uma escuta ativa sobre o que era errado com algum tipo de pedido de desculpas ou observação para indicar que eles entendem que eles estragaram algo que deveriam ter resolvido? Apenas algo para se pensar em situações futuras.

Depurar em tempo hábil é uma grande habilidade. Isso é um pouco diferente de dar a alguém um problema em que ele é corrigido quando é corrigido. Às vezes, é preciso tomar medidas agressivas para salvar o sistema, o que deve ser reconhecido, já que eu imagino que a maioria das empresas não gostaria de interromper as vendas por semanas, enquanto alguém corrige um bug no software de contabilidade usado pela empresa.

JB King
fonte
1

Depurar é uma habilidade crítica. Na verdade, eu diria mais que a solução de problemas é a habilidade crítica. Alguém deve saber como definir o problema (incluindo quais informações do usuário solicitar e quais logs examinar), como reproduzi-las, quais fontes de dados ele tem disponível para diagnosticar o problema e como depurar e como corrigir uma coisa sem quebrar outra coisa. No entanto, determinar que durante uma entrevista é difícil.

Eu daria a ele um problema real para encontrar e a oportunidade de usar as ferramentas disponíveis e, em seguida, perguntaria quais as medidas que ele tomou para encontrar o problema ou o que mais ele poderia fazer se não conseguisse encontrar o problema no tempo previsto. Você está realmente procurando por alguém que ataque o problema de maneira sistemática e que tenha mais ferramentas em seu kit de ferramentas do que apenas o depurador e o google (exceto no nível Junior, quando ele deveria, no mínimo, tentar os dois (alguém que não consegue pensar em tente essas duas coisas provavelmente não é competente ou pelo menos eu não me arriscaria), mas provavelmente ainda não possui muitas ferramentas avançadas de solução de problemas).

Eu daria mais peso às habilidades de resolução de problemas do que as respostas a quebra-cabeças (bem, eu não perguntaria isso a todos) ou a habilidades de programação demonstradas. Eu raramente vi um desenvolvedor que pode solucionar problemas bem, que também não pode escrever um bom código ou fazer as correções necessárias. Eu já vi muitas pessoas que conseguem juntar algum código para obter o produto "Working", mas não conseguem resolver um problema se a vida deles depende disso. Principalmente porque eles não entendem o que estão fazendo ou entendem o problema que estão tentando resolver. Os bons solucionadores de problemas sabem como identificar o problema real e não apenas o sintoma. Assim, eles sabem quais perguntas devem ser feitas para definir o problema para novos desenvolvimentos.

HLGEM
fonte
1

Existem 4 a 5 habilidades principais em qualquer trabalho e a programação não é diferente. No nível profissional, você deve ser bom em todas as principais habilidades fundamentais. Se você tiver 4 em 5, ele ainda o impedirá.

Você pode imaginar um vendedor que possa apresentar, convencer, articular, qualificar clientes, mas não pode fechar o negócio? Eles estão lá fora e você não os quer em sua equipe de vendas.

A depuração é definitivamente uma habilidade essencial que um programador não pode ficar sem.

user39741
fonte
0

Eu tenho esse estilo de codificação, que requer depuração miminal. Quando termino com três linhas de código, eu o executo e testo, geralmente imprimindo algumas variáveis. Nos casos, quando obtive resultado ou comportamento indesejado, coloquei muitos despejos no meu código - em vez de depurar. Eu uso o depurador real muito raro. Estranho mas verdade.

ern0
fonte
0

Depuração é a fase no desenvolvimento de software que ocorre após um determinado teste no seu software e um bug foi descoberto. É o ato de pesquisar e corrigir o bug no seu software. Em muitos casos, encontrar o bug geralmente requer mais tempo para corrigi-lo.

É o processo de remover os bugs (as vulnerabilidades) inerentes ao aplicativo / sistema do computador. Se isso não for feito, os hackers podem tirar proveito dos bugs e realizar diversas atividades maliciosas:

1) Eles podem expor a vulnerabilidade ao público, levando a uma perda de receita, negócios e reputação para os desenvolvedores e fornecedores.

2) Os worms pesquisam sistemas vulneráveis ​​que eles podem explorar e, assim, se copiam nesses servidores. por exemplo. Em janeiro de 2003, o Slammer Worm aproveitou a vulnerabilidade no MS SQL Server.

3) Onde os worms foram mencionados, como podemos esquecer os vírus. Os vírus também são perdidos por seus desenvolvedores que aproveitam os bugs presentes no programa com o objetivo principal de exposição indecente ...

4) E se os programas não forem depurados corretamente, os consumidores nunca serão mantidos se não receberem o dinheiro. Nesse caso, você nem precisa de um hacker para fazer o trabalho sujo - você também pode confiar no bom e velho público.

Shylendra Madda
fonte