Perché le scuole non coprono i debugger? [chiuso]


12

Dopo l'ennesima domanda a casa su SO. Sembra che la stragrande maggioranza degli studenti non abbia idea di cosa sia un debugger o come usarlo. Sento che sapere come utilizzare un debugger è quasi altrettanto importante di altri fondamentali della programmazione.

  • La domanda è: il debug non dovrebbe essere insegnato e come usare i moderni strumenti di debug insieme ai principi di programmazione? In caso contrario, perché no.

2
Ehm ... stai dicendo che gdb è un moderno strumento di debug? Non è un cattivo debugger, ma certamente non è all'avanguardia.
Billy ONeal,

1
Concordo, ma ho anche risposto alla domanda se gli studenti usassero Visual Studio e non sapessero come o perché avrebbero usato un debugger.
Riesegui l'

@rerun: Ehm .. ahi. Non possono premere il pulsante "Riproduci" sull'IDE? (A proposito, ho fatto +1)
Billy ONeal l'

system.out print logging è l'ultimo bastione dei pigri e inetti

6
@Jarrod, una generalizzazione piuttosto ampia e forse eccessivamente. A volte semplicemente non è possibile utilizzare un debugger sul programma in cui si verifica il problema.

Risposte:


7

Non è tanto il caso che deve essere insegnato l'uso di debugger , ma le tecniche più generali di debug . Ciò include l'insegnamento su come utilizzare un debugger ovviamente ma anche varie altre tecniche importanti, ad es

  • pensiero critico
  • dividere e conquistare
  • debug printf, registrazione, ecc
  • controllo da banco
  • stress test

Come ulteriore vantaggio, molte delle tecniche possono anche essere applicate alla risoluzione dei problemi in settori diversi dalla programmazione.

C'è un bel libro su tutto questo argomento, che probabilmente dovrebbe essere richiesto per tutti gli studenti universitari e per tutti coloro che apprendono le basi della programmazione: Debugging di David J Agans .


8

I corsi di informatica terziaria sono pensati per insegnare agli studenti i fondamenti della programmazione , come hai già detto - questi concetti sono insegnati agli studenti nella speranza che possano raccogliere i concetti necessari e applicarli a una più ampia gamma di linguaggi di programmazione e serie di problemi.

Gli strumenti di debug, d'altra parte, sono un sottoinsieme nell'area di implementazione - ogni strumento è diverso per ogni lingua (anche se i concetti sono gli stessi). Siamo stati esposti a strumenti di debug ma non li abbiamo mai trattati in modo approfondito. Se avessimo trascorso più di una settimana in strumenti di debug, guarderei indietro - con il senno di poi - e lo riterrei una perdita di tempo. Preferirei conoscere la notazione di BigO o il polimorfismo. Tuttavia, se il potere di uno strumento di debug non è stato (con successo) trasmesso agli studenti, questa sarebbe una necessità assente.


3
+1. Tradotto: Perché non tutti usano MSVS, GCC / GDB, LLVM / CLANG, ecc.
Billy ONeal,

1
+1 anche se devo ammettere che sono d'accordo con @rerun; Un corso (o parte di uno) che ripercorre concetti e strumenti di base utilizzati in un negozio di software farebbe molto per rendere produttivi i neolaureati. Ho incontrato diversi che non sembravano comprendere il controllo del codice sorgente anche dopo averlo usato per un po '.
Ken Henderson,

molte delle competenze con cui gli sviluppatori medi trascorrono molto tempo lì sono coperte a scuola. Controllo del codice sorgente, gestione della configurazione in generale, esplorazione del codice, lettura del codice, processi di compilazione ecc. Mentre capisco che i corsi di laurea specialistica devono coprire gli aspetti teorici, penso che una classe di livello senor in cui gli studenti hanno lavorato con una grande base di codice esistente trova e corregge bug e farlo controllare nel codice e "distribuito" renderebbe molto più utile un nuovo sviluppatore.
Riesegui l'

3
Non sono assolutamente d'accordo. Se il codice reale viene scritto (poiché la scrittura del codice è un buon modo di mettere in pratica i concetti scientifici), gli studenti dovrebbero avere accesso a buoni modi di scrivere quel codice, e questo include l'uso di un debugger se necessario. Questo non sta togliendo tempo che potrebbe essere speso in notazione bigO - sta liberando il tempo che molti studenti trascorrono a fare bruta per farsi strada attraverso errori minori. Non si ottiene molto da quello. Inoltre, molti altri corsi di scienze (ad esempio la fisica) includono abilità pratiche di misurazione come parte del loro curriculum.
Inca,

2
L'uso di un debugger richiede la comprensione del funzionamento del computer, non solo del codice. Considererei questo un programma fondamentale . Ho incontrato troppi studenti che non hanno idea di cosa stia facendo il loro computer e questo non è un buon programmatore.
edA-qa mort-ora-y

2

Nella maggior parte dei corsi di programmazione introduttiva lo stato del programma è abbastanza semplice da poter eliminare eventuali bug con alcune dichiarazioni stampate. Potrebbe anche esserci il problema di costringere gli studenti a fare le cose a mano in modo da avere un'idea di come e dove nel codice si verificano determinati tipi di bug. Se non hai idea di dove cercare, un debugger sarà piuttosto inutile.


4
Un buon debugger è più facile da usare rispetto alle istruzioni di stampa. Le dichiarazioni di stampa richiedono che tu abbia in qualche modo un modo per serializzare i tuoi dati in una stringa, il che richiede il proprio codice (possibilmente guidato da bug) per eseguire la serializzazione. Ad esempio, un programma di elenchi collegati è facile da scorrere in un debugger, ma le istruzioni di stampa non aiuteranno uno studente che sta cercando di scrivere un algoritmo trasversale di elenchi collegati, poiché sarebbe necessario quell'algoritmo per scrivere le giuste istruzioni di stampa .
Billy ONeal,

2
@Billy, quindi passare attraverso il codice sbagliato in qualche modo li aiuterà?
Neil Butterworth,

1
@Billi ONeal, ti sbagli. Non esiste un debugger di cui stai parlando. Il passaggio interattivo attraverso il programma è utile solo quando hai già identificato il problema con la registrazione di debug. Mai nella mia pratica (> 20 anni) ho dovuto usare un debugger con il mio codice: affermazioni e registrazioni adeguate erano sempre sufficienti. Sto solo usando quei dannati strumenti con il codice delle librerie e le cose legacy. E, tra l'altro, essere in grado di serializzare qualsiasi struttura di dati in qualcosa di leggibile è sempre una buona idea. Alcune lingue / ambienti lo danno gratuitamente.
SK-logic,

1
@Billy ONeal, come esploreresti la memoria di un dispositivo microcontrollore, collegato a una porta seriale? E, credo che non sia una buona idea esporre gli strumenti di aggiornamento ai linguaggi di basso livello con puntatori e cose prima che siano abbastanza preparati in strutture di dati e algoritmi. A quel punto sapranno come eseguire correttamente il debug.
SK-logic,

1
@Billy ONeal, la parte più difficile consiste nell'identificare il momento giusto in cui ispezionare un valore in un debug (tra l'altro, nella maggior parte dei casi è ancora qualcosa come chiamare un metodo .dump (), non un'ispezione diretta della memoria) o per stampare un valore serializzato. Con un'adeguata infrastruttura di registrazione del debug in atto, il problema viene ridotto a un'analisi dei file di registro. Nella maggior parte dei casi un semplice grepfa il lavoro. Nessun passo, nessun breakpoint condizionato - solo grep.
SK-logic,

2

Non è così importante Non ne uso quasi mai uno e non l'ho mai fatto. Il modo migliore per eseguire il debug del codice è:

  • non scrivere i bug in primo luogo
  • se li scrivi, correggili pensando, non immergendoti nel debugger

E per molti software moderni e multi-thread, i debugger hanno l'effetto di nascondere i bug anziché scoprirli. E sicuramente non dovrebbero essere "insegnati" a livello di laurea, non più di quanto uno insegnerebbe come usare un word processor.


6
Penso che questo dipenda. Se stai cercando di abituarti al comportamento di una base di codice grande e scarsamente documentata che non hai scritto, un debugger è uno dei modi più veloci per abituarsi a ciò che la base di codice sta facendo. Se stai scrivendo tutto il codice, certo, non avrai bisogno di un debugger spesso, ma non tutti noi siamo in quel posto. +1
Billy ONeal,

1
@Billy Dobbiamo accettare di differire. Cerchi di conoscere un enorme server di trading MT con un debugger.
Neil Butterworth,

@Neil: non ho mai affrontato personalmente quel genere di cose ... ma ho già eseguito il debug del codice MT senza problemi. Forse sono viziato da MSVC ++ - i debugger lì mostrano che ciò che i vari thread stanno facendo è davvero semplice. Ma se stavo eseguendo il debug nelle versioni precedenti al 2008 (penso che fosse allora che è stato aggiunto) potrei vedere come ciò potrebbe rendere le cose più difficili.
Billy ONeal,

@Neil: non fraintendermi: non sto dicendo che il debugger sia un sostituto del pensiero, o che dovrebbe essere l'unica cosa che guardi. Sto solo dicendo che è uno strumento che in alcuni casi può semplificare la comprensione. Se un debugger sta causando più confusione, è generalmente facile dire che sta causando più confusione (perché stai diventando più confuso), ed è allora che si spegne il debugger e si prova qualcos'altro. È utile in alcuni casi, ma non è un sostituto per guardare il codice / input / output e pensare a cosa sta succedendo.
Billy ONeal,

2
So che stai volando in faccia alla saggezza ricevuta da queste parti. Ma sei in buona compagnia con persone come Linus Torvalds, Larry Wall, Brian Kernighan e Rob Pike.
btilly

0

Il debug dovrebbe essere insegnato perché gli studenti sono umani e gli umani commettono tutti i tipi di errori, alcuni dei quali richiedono l'acquisizione di alcuni dati sperimentali (informazioni di debug) prima che si verifichi l'illuminazione relativa a un determinato errore.

Il debugging non viene insegnato a causa della premessa (forse ereditata dal dipartimento di matematica) che i programmi dovrebbero essere corretti in base alla progettazione, forse anche in modo dimostrabile. E quindi gli studenti non dovrebbero "sperimentare" con la programmazione corretta. Tuttavia, questo ignora il processo di produzione nel mondo reale di esseri umani imperfetti che eseguono il software per modificare le specifiche in base alle pressioni programmate e così via.


Hmm .. forse la mia scuola è solo diversa, ma non è così che vanno le cose alla CWRU.
Billy ONeal,

Probabilmente dipende dall'albero ereditario del dipartimento storico del corso di programmazione in questione.
hotpaw2,

Non sono sicuro di dove stai ottenendo tutto questo. Tutte le lezioni introduttive trascorrono alcune lezioni su come rintracciare i bug.
davidk01,

@ davidk01 - Questo non spiega l'osservazione del PO, che ho sentito, non di frequente, ma più di una volta prima.
hotpaw2,

@ hotpaw2: cosa non spiega l'osservazione del PO? Solo perché gli studenti hanno difficoltà a imparare a eseguire il debug dei programmi non significa che non viene insegnato quale sia la conclusione a cui stai saltando. Ho seguito diversi corsi di programmazione sia come studente universitario che come studente universitario. In ogni classe l'istruttore ha trascorso almeno una lezione per esaminare un programma errato e correggerlo al fine di dimostrare alcune comuni tecniche di debug.
davidk01,

0

Questa domanda mi è estranea. Nella mia università l'uso del debugger (JDB e il debugger Eclipse) è stato insegnato già dalla prima sequenza informatica del primo anno. L'uso di debugger e altri strumenti di test è stato nuovamente insegnato nel corso di test del software.

Personalmente trovo incredibilmente difficile credere che una buona scuola che stia tentando di preparare le persone all'entrata nella forza lavoro non stia insegnando le corrette tecniche di debug e test. Ovviamente non possono coprirne tutti gli aspetti, ma possono almeno insegnare le basi in classe.


0

Scoprilo da solo

Non avevo bisogno e non volevo che un professore o un TA prendessero del tempo per insegnarmi qualcosa che avrei potuto facilmente capire da solo. Sono lì per insegnarmi i concetti difficili e guidare l'apprendimento. Non sono e non dovrebbero essere lì, quindi non è necessario RTFM.

Scopri come imparare

Il college dovrebbe imparare a imparare, non solo avere la mano trattata su ogni argomento che non conosci. Se tieni costantemente la mano durante questo processo, fallirai miseramente nel mondo reale.

In salita, in entrambi i modi, attraverso la neve

Quando sono andato a scuola non si sono nemmeno preoccupati di insegnarti la lingua. Ci si aspettava che lo prendessi a tuo piacimento. Ti darebbero il progetto e le strutture. Stava a te rintracciare le informazioni necessarie per completare l'implementazione e presentare un programma di lavoro. Abbastanza simile al mondo reale, tranne che con l'orario d'ufficio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.