Por que as escolas não cobrem depuradores? [fechadas]

12

Depois de mais uma pergunta de lição de casa no SO. Parece que a grande maioria dos estudantes não tem idéia do que é um depurador ou como usá-lo. Eu sinto que saber usar um depurador é quase tão importante quanto outro fundamental da programação.

  • A questão não deve ser a depuração e como usar as ferramentas modernas de depuração, além dos princípios básicos de programação? Se não, por que não?
reexecutar
fonte
2
Erm .. você está dizendo que o gdb é uma ferramenta moderna de depuração? Não é um depurador ruim, mas certamente não é o estado da arte.
Billy ONeal
1
Concordo, mas também respondi à pergunta: os alunos usam o visual studio e não sabem como ou por que usariam um depurador.
executar novamente
@rerun: Erm ... ai. Eles não podem pressionar o botão "play" no IDE? (BTW, eu marquei com +1)
Billy ONeal 11/11
logging impressão system.out é o último bastião do preguiçoso e inepto
6
@ Jarrod, uma generalização bastante ampla e talvez exagerada. Às vezes, você simplesmente não pode usar um depurador no seu programa em que o problema ocorre.

Respostas:

7

Não é tanto o caso que o uso de depuradores que precisa ser ensinado, mas as técnicas mais gerais de depuração . Isso incluiria o ensino de como usar um depurador, é claro, mas também várias outras técnicas importantes, por exemplo

  • pensamento crítico
  • dividir e conquistar
  • depuração printf, registro, etc
  • verificação de mesa
  • teste de estresse

Como um benefício adicional, muitas das técnicas também podem ser aplicadas à solução de problemas em outras áreas além da programação.

Há um livro bastante bom sobre esse assunto, que provavelmente deve ser uma leitura obrigatória para todos os estudantes de graduação e para todos que aprendem o básico da programação: Depuração por David J. Agans .

Paul R
fonte
8

Os cursos terciários de ciência da computação são adaptados para ensinar aos alunos os fundamentos de programação , como você mencionou - esses conceitos são ensinados aos alunos na esperança de que eles coloquem os conceitos necessários e os apliquem a uma ampla variedade de linguagens de programação e conjuntos de problemas.

As ferramentas de depuração, por outro lado, são um subconjunto na área de implementação - cada ferramenta é diferente para cada idioma (mesmo que os conceitos sejam os mesmos). Fomos expostos a ferramentas de depuração, mas nunca as abordamos em profundidade. Se passássemos mais de uma semana em ferramentas de depuração, eu olharia para trás - em retrospectiva - e consideraria isso uma perda de tempo. Prefiro aprender sobre a notação BigO ou polimorfismo. No entanto, se o poder de uma ferramenta de depuração não foi (com sucesso) transmitido aos alunos, isso seria uma necessidade ausente.

JK
fonte
3
+1. Traduzido: Porque nem todo mundo usa MSVS, GCC / GDB, LLVM / CLANG, etc.
Billy ONeal
1
+1, embora eu deva admitir que concordo com @rerun; Um curso (ou parte de um) que aborda conceitos e ferramentas básicos usados ​​em uma loja de software ajudaria bastante a obter novos graduados produtivos. Encontrei vários que pareciam não entender o controle de origem mesmo depois de usá-lo por um tempo.
Ken Henderson
muitas das habilidades com as quais os desenvolvedores comuns passam muito tempo são abordadas na escola. Controle de origem, gerenciamento de configuração em geral, exploração de código, leitura de código, processos de compilação, etc. Embora eu compreenda que os graus de CS precisam cobrir os aspectos teóricos, acho que uma classe de nível senor em que os alunos trabalharam com uma grande base de código existente encontra e corrige bugs e verificá-lo no código e "implantado" tornaria um novo desenvolvedor muito mais útil.
executar novamente
3
Eu discordo totalmente. Se um código real estiver sendo escrito (porque escrever um código é uma boa maneira de praticar os conceitos científicos), os alunos devem ter acesso a boas maneiras de escrever esse código, e isso inclui o uso de um depurador, se necessário. Isso não está tirando um tempo que poderia ser gasto com a notação BigO - está liberando o tempo que muitos estudantes gastam em brutamontes, forçando seu caminho a erros menores. Nada se ganha muito com isso. Além disso, muitos outros cursos de ciências (física, por exemplo) incluem habilidades práticas de medição como parte de seu currículo.
Inca
2
Usar um depurador exige entender como o computador funciona, não apenas o código. Eu consideraria isso uma programação fundamental . Eu encontrei muitos estudantes que simplesmente não têm idéia do que o computador está realmente fazendo, e isso não é um bom programador.
EdA-qa mort-ora-y
2

Na maioria dos cursos introdutórios de programação, o estado do programa é simples o suficiente para eliminar todos os erros com algumas instruções de impressão. Também pode haver a questão de forçar os alunos a fazer as coisas manualmente, para que tenham uma idéia de como e onde no código ocorrem certos tipos de erros. Se você não tem idéia de onde procurar, um depurador será bastante inútil.

davidk01
fonte
4
Um bom depurador é mais fácil de usar do que instruções de impressão. As instruções de impressão exigem que você tenha uma maneira de serializar seus dados em uma string, o que exige seu próprio código (possivelmente com erros) para fazer a serialização. Por exemplo, é fácil percorrer um programa de lista vinculada em um depurador, mas as instruções de impressão não ajudarão um aluno que está tentando escrever o algoritmo transversal de lista vinculada - porque você precisaria desse algoritmo para escrever as instruções de impressão corretas .
Billy ONeal
2
@ Billy então percorrer o código errado de alguma forma vai ajudá-los?
Neil Butterworth
1
@ Billi ONeal, você está errado. Um depurador de que você está falando não existe. O passo interativo pelo programa só é útil quando você já identificou o problema com o log de depuração. Nunca na minha prática (> 20 anos) eu tive que usar um depurador com meu próprio código - asserções e logs adequados sempre foram suficientes. Só estou usando essas malditas ferramentas com o código de bibliotecas e o legado. E, por outro lado, ser capaz de serializar qualquer estrutura de dados em algo legível é sempre uma boa idéia. Alguns idiomas / ambientes oferecem isso de graça.
SK-logic
1
@ Billy ONeal, como você procuraria na memória de um dispositivo de microcontrolador conectado a uma porta serial? E acredito que não é uma boa idéia expor os mais recentes às linguagens de baixo nível com ponteiros e outras coisas antes que eles sejam alfabetizados o suficiente em estruturas e algoritmos de dados. A essa altura, eles saberão como depurar corretamente.
SK-logic
1
@ Billy ONeal, a parte mais difícil é identificar o momento certo para inspecionar um valor em um depurador (btw., Na maioria dos casos, ainda é algo como chamar um método .dump (), não uma inspeção direta de memória) ou para imprimir um valor serializado. Com uma infraestrutura de log de depuração adequada, o problema é reduzido para uma análise dos arquivos de log. Na maioria dos casos, um simples grepfaz o trabalho. Sem pisar, sem pontos de interrupção condicionais - apenas grep.
SK-logic
2

Não é tão importante. Eu quase nunca uso um e nunca o usei. A melhor maneira de depurar código é:

  • não escreva os erros em primeiro lugar
  • se você os escrever, corrija-os pensando, não mergulhando no depurador

E, para muitos softwares modernos e multithread, os depuradores têm o efeito de ocultar bugs, em vez de descobri-los. E eles definitivamente não deveriam ser "ensinados" no nível de graduação, assim como ninguém ensinaria a usar um processador de texto.

Neil Butterworth
fonte
6
Eu acho que isso depende. Se você está tentando se acostumar com o comportamento de uma base de código grande e mal documentada que não escreveu, um depurador é uma das maneiras mais rápidas de se acostumar com o que a base de código está fazendo. Se você estiver escrevendo todo o código, com certeza, não precisará de um depurador frequentemente, mas nem todos nós estamos nesse lugar. 1
Billy ONeal 11/11
1
@ Billy Devemos concordar em diferir. Você tenta conhecer um enorme servidor de negociação MT com um depurador.
Neil Butterworth
@ Neil: Eu nunca lidei pessoalmente com esse tipo de coisa ... mas já depurei o código MT sem problemas. Talvez eu seja mimado pelo MSVC ++ - os depuradores de lá fazem mostrando o que os vários threads estão fazendo realmente fácil. Mas se eu estivesse depurando versões anteriores a 2008 (acho que foi quando isso foi adicionado), eu poderia ver como isso poderia dificultar as coisas.
Billy ONeal
@ Neil: Não me interpretem mal - não estou dizendo que o depurador é um substituto para o pensamento, ou que deve ser a única coisa que você olha. Só estou dizendo que é uma ferramenta que, em alguns casos, pode facilitar a compreensão de algo. Se um depurador está causando mais confusão, geralmente é fácil dizer que está causando mais confusão (porque você está ficando mais confuso), e é quando você desliga o depurador e tenta outra coisa. É útil em alguns casos, mas não substitui olhar para o código / entrada / saída e pensar no que está acontecendo.
Billy ONeal
2
Eu sei que você está exibindo a face da sabedoria recebida por aqui. Mas você está em boa companhia com pessoas como Linus Torvalds, Larry Wall, Brian Kernighan e Rob Pike.
btilly
0

A depuração deve ser ensinada porque os estudantes são humanos e os seres humanos cometem todos os tipos de erros, alguns dos quais requerem a aquisição de alguns dados experimentais (informações de depuração) antes que ocorra qualquer esclarecimento sobre um determinado erro.

A depuração não é ensinada por causa da premissa (talvez herdada do departamento de matemática) de que os programas devem estar corretos por design, talvez até de maneira provável. E, portanto, os alunos não devem "experimentar" a programação corretamente. No entanto, isso ignora o processo de fabricação no mundo real de seres humanos imperfeitos, acionando o software para alterar as especificações sob pressões programadas etc.

hotpaw2
fonte
Hmm ... talvez minha escola seja apenas diferente, mas não é assim que as coisas são feitas na CWRU.
Billy ONeal
Provavelmente depende da árvore de herança do departamento histórico do curso de programação em questão.
hotpaw2
Não tenho certeza de onde você está conseguindo tudo isso. Todas as aulas introdutórias passam algumas palestras sobre como rastrear bugs.
Davidk01 11/06/11
@ davidk01 - Isso não explica a observação do OP, que eu ouvi, não com frequência, mas mais de uma vez antes.
hotpaw2
@ hotpaw2: O que não explica a observação do OP? Só porque os alunos têm dificuldade em aprender a depurar programas não significa que não é ensinado a qual conclusão você está indo. Fiz vários cursos de programação tanto como estudante de graduação quanto como estudante de pós-graduação. Em todas as aulas, o instrutor passou pelo menos uma aula para revisar um programa incorreto e corrigi-lo, a fim de demonstrar algumas técnicas comuns de depuração.
Davidk01 11/06/11
0

Esta questão é estranha para mim. Na minha universidade, o uso do depurador (JDB e Eclipse) foi ensinado desde a primeira seqüência de ciências da computação no primeiro ano. O uso de depuradores e outras ferramentas de teste foi ensinado novamente no curso sobre teste de software.

Pessoalmente, acho incrivelmente difícil acreditar que qualquer boa escola que esteja tentando preparar pessoas para ingressar na força de trabalho não esteja ensinando sobre técnicas adequadas de depuração e teste. Obviamente, eles não podem cobrir todos os aspectos, mas podem pelo menos ensinar o básico na sala de aula.

Thomas Owens
fonte
0

Descobrir por conta própria

Eu não precisava e não queria que um professor ou AT se desse tempo para me ensinar algo que eu poderia descobrir facilmente por conta própria. Eles estão lá para me ensinar os conceitos difíceis e orientar o aprendizado. Eles não estão e não devem estar lá para que você não precise RTFM.

Aprenda como aprender

A faculdade deve aprender a aprender, e não apenas cuidar de todos os tópicos que você não conhece. Se você tem a mão constantemente nesse processo, irá falhar miseravelmente no mundo real.

Subindo, de duas maneiras, através da neve

Quando eu fui para a escola, eles também não se deram ao trabalho de ensinar o idioma. Você deveria buscá-lo em seu próprio tempo. Eles dariam a você o projeto e as instalações. Cabia a você rastrear as informações necessárias para concluir a implementação e enviar um programa de trabalho. Muito parecido com o mundo real, exceto no horário comercial.

dietbuddha
fonte