Pourquoi les écoles ne couvrent-elles pas les débogueurs? [fermé]

12

Après encore une autre question de devoirs sur SO. Il semble que la grande majorité des étudiants n'aient aucune idée de ce qu'est un débogueur ni de la façon de l'utiliser. Je pense que savoir comment utiliser un débogueur est presque aussi important que les autres fondamentaux de la programmation.

  • La question est de savoir si le débogage ne devrait pas être enseigné et comment utiliser les outils de débogage modernes parallèlement aux principes de base de la programmation? Sinon pourquoi pas.
rediffusion
la source
2
Euh .. vous dites que gdb est un outil de débogage moderne ? Ce n'est pas un mauvais débogueur, mais ce n'est certainement pas à la pointe de la technologie.
Billy ONeal
1
Je serais d'accord, mais j'ai également répondu à la question: les étudiants utilisent Visual Studio et ne savent pas comment ni pourquoi ils utiliseraient un débogueur.
relancez le
@rerun: Euh .. aïe. Ils ne peuvent pas appuyer sur le bouton "jouer" sur l'IDE? (BTW, j'ai +1)
Billy ONeal
system.out print logging est le dernier bastion des paresseux et des ineptes
6
@Jarrod, une généralisation assez large et peut-être trop. Parfois, vous ne pouvez tout simplement pas utiliser un débogueur sur votre programme où le problème se produit.

Réponses:

7

Ce n'est pas tellement le cas que l'utilisation de débogueurs doit être enseignée, mais les techniques plus générales de débogage . Cela comprendrait bien sûr comment utiliser un débogueur, mais également diverses autres techniques importantes, par exemple

  • Esprit critique
  • diviser et conquérir
  • débogage printf, journalisation, etc.
  • vérification de bureau
  • tests de résistance

Comme avantage supplémentaire, de nombreuses techniques peuvent également être appliquées à la résolution de problèmes dans des domaines autres que la programmation.

Il y a un assez bon livre sur tout ce sujet, qui devrait probablement être une lecture obligatoire pour tous les étudiants de premier cycle et tous ceux qui apprennent les bases de la programmation: le débogage par David J Agans .

Paul R
la source
8

Les cours d'informatique tertiaire sont conçus pour enseigner aux étudiants les principes de base de la programmation , comme vous l'avez mentionné - ces concepts sont enseignés aux étudiants dans l'espoir qu'ils appréhendent les concepts nécessaires et l'appliquent à un plus large éventail de langages de programmation et d'ensembles de problèmes.

Les outils de débogage, d'autre part, sont un sous-ensemble dans la zone d' implémentation - chaque outil est différent pour chaque langue (même si les concepts sont les mêmes). Nous étions exposés à des outils de débogage, mais nous ne les avons jamais vraiment traités en profondeur. Si nous passions plus d'une semaine sur des outils de débogage, je regarderais en arrière - avec du recul - et considérerais cela comme une perte de temps. Je préfère en savoir plus sur la notation BigO ou le polymorphisme. Cependant, si la puissance d'un outil de débogage n'a pas été (avec succès) transmise aux étudiants, ce serait alors une nécessité absente.

JK
la source
3
+1. Traduit: Parce que tout le monde n'utilise pas MSVS, GCC / GDB, LLVM / CLANG, etc.
Billy ONeal
1
+1 même si je dois admettre que je suis d'accord avec @rerun; Un cours (ou une partie d'un cours) qui passe en revue les concepts et outils de base utilisés dans un magasin de logiciels contribuerait grandement à rendre les nouveaux diplômés productifs. J'en ai rencontré plusieurs qui ne semblaient pas comprendre le contrôle de code source même après l'avoir utilisé pendant un certain temps.
Ken Henderson
de nombreuses compétences avec lesquelles les développeurs moyens passent beaucoup de temps sont couvertes à l'école. Contrôle des sources, gestion de la configuration en général, exploration de code, lecture de code, processus de construction, etc. et le faire vérifier dans le code et "déployer" rendrait un nouveau développeur beaucoup plus utile.
relancez le
3
Je suis totalement en désaccord. Si du code réel est en cours d'écriture (parce que l'écriture de code est un bon moyen de mettre en pratique les concepts scientifiques), les étudiants devraient avoir accès à de bonnes façons d'écrire ce code, et cela inclut l'utilisation d'un débogueur si nécessaire. Cela ne supprime pas le temps qui pourrait être consacré à la notation bigO - cela libère du temps que de nombreux étudiants consacrent à la brutalisation de leur chemin à travers des erreurs mineures. Il n'y a rien à gagner de cela. En outre, de nombreux autres cours de sciences (physique par exemple) incluent des compétences de mesure pratiques dans le cadre de leur programme d'études.
Inca
2
L'utilisation d'un débogueur nécessite de comprendre le fonctionnement de l'ordinateur, pas seulement le code. Je considérerais cela comme une programmation fondamentale . J'ai rencontré trop d'étudiants qui n'ont aucune idée de ce que fait réellement leur ordinateur, et cela ne fait pas un bon programmeur.
edA-qa mort-ora-y
2

Dans la plupart des cours de programmation d'introduction, l'état du programme est suffisamment simple pour que vous puissiez éliminer tous les bogues avec quelques instructions d'impression. Il peut également être nécessaire de forcer les élèves à faire les choses à la main afin qu'ils aient une idée de comment et où dans le code certains types de bogues se produisent. Si vous ne savez pas où chercher, un débogueur va être assez inutile.

davidk01
la source
4
Un bon débogueur est plus facile à utiliser que les instructions print. Les instructions d'impression nécessitent que vous ayez en quelque sorte un moyen de sérialiser vos données en une chaîne, ce qui nécessite son propre code (éventuellement bug) pour effectuer la sérialisation. Par exemple, un programme de liste liée est facile à parcourir dans un débogueur, mais les instructions d'impression ne vont pas aider un élève qui essaie d'écrire un algorithme transversal de liste liée - car vous auriez besoin de cet algorithme pour écrire les bonnes déclarations d'impression .
Billy ONeal
2
@Billy, donc passer par le mauvais code va en quelque sorte les aider?
Neil Butterworth
1
@Billi ONeal, vous vous trompez. Un débogueur dont vous parlez n'existe pas. La progression interactive dans le programme n'est utile que si vous avez déjà identifié le problème de la journalisation du débogage. Jamais dans ma pratique (> 20 ans), je n'ai dû utiliser un débogueur avec mon propre code - les assertions et la journalisation adéquates étaient toujours suffisantes. J'utilise uniquement ces maudits outils avec le code des bibliothèques et les trucs hérités. Et, au fait, pouvoir sérialiser n'importe quelle structure de données en quelque chose de lisible est toujours une bonne idée. Certaines langues / certains environnements offrent cela gratuitement.
SK-logic
1
@Billy ONeal, comment feriez-vous pour parcourir une mémoire d'un microcontrôleur connecté à un port série? Et, je crois que ce n'est pas une si bonne idée d'exposer les plus récents aux langages de bas niveau avec des pointeurs et des trucs avant qu'ils soient suffisamment alphabétisés dans les structures de données et les algorithmes. À ce moment-là, ils sauront comment déboguer correctement.
SK-logic
1
@Billy ONeal, la partie la plus difficile est d'identifier le bon moment pour inspecter une valeur dans un débogueur (btw., Dans la plupart des cas, c'est toujours quelque chose comme appeler une méthode .dump (), pas une inspection directe de la mémoire) ou pour imprimer une valeur sérialisée. Avec une infrastructure de journalisation de débogage en place, le problème est réduit à une analyse des fichiers journaux. Dans la plupart des cas, un simple grepfait le travail. Pas de progression, pas de points d'arrêt conditionnels - juste grep.
SK-logic
2

Ce n'est pas si important. Je n'en utilise presque jamais et je n'en ai jamais utilisé. La meilleure façon de déboguer du code est:

  • n'écrivez pas les bogues en premier lieu
  • si vous les écrivez, corrigez-les en pensant, pas en plongeant dans le débogueur

Et pour beaucoup de logiciels modernes et multithreads, les débogueurs ont pour effet de masquer les bogues plutôt que de les découvrir. Et ils ne devraient certainement pas être "enseignés" au niveau du diplôme, pas plus que l'on n'enseignerait à utiliser un traitement de texte.

Neil Butterworth
la source
6
Je pense que celui-ci dépend. Si vous essayez de vous habituer au comportement d'une base de code volumineuse et mal documentée que vous n'avez pas écrite, un débogueur est l'un des moyens les plus rapides pour vous habituer à ce que fait la base de code. Si vous écrivez tout le code, bien sûr, vous n'aurez pas souvent besoin d'un débogueur, mais nous ne sommes pas tous à cet endroit. +1
Billy ONeal
1
@Billy Nous devons accepter de différer. Vous essayez d'apprendre à connaître un énorme serveur de trading MT avec un débogueur.
Neil Butterworth
@Neil: Je n'ai jamais personnellement traité de ce genre de choses ... mais j'ai déjà débogué du code MT sans problème. Peut-être que je suis gâté par MSVC ++ - les débogueurs là-bas rendent très facile de montrer ce que font les différents threads. Mais si je déboguais dans des versions antérieures à 2008 (je pense que c'est là que cela a été ajouté), je pouvais voir comment cela pourrait rendre les choses plus difficiles.
Billy ONeal
@Neil: Ne vous méprenez pas - je ne dis pas que le débogueur est un substitut à la réflexion, ou que ce devrait être la seule chose que vous regardez. Je dis simplement que c'est un outil qui, dans certains cas, peut faciliter la compréhension de quelque chose. Si un débogueur cause plus de confusion, il est généralement facile de dire qu'il cause plus de confusion (parce que vous devenez plus confus), et c'est à ce moment que vous désactivez le débogueur et essayez autre chose. C'est utile dans certains cas, mais cela ne remplace pas la recherche de code / entrée / sortie et la réflexion sur ce qui se passe.
Billy ONeal
2
Je sais que vous faites voler le visage de la sagesse reçue ici. Mais vous êtes en bonne compagnie avec des gens comme Linus Torvalds, Larry Wall, Brian Kernighan et Rob Pike.
btilly
0

Le débogage doit être enseigné parce que les étudiants sont des humains et que les humains font toutes sortes d'erreurs, dont certaines nécessitent l'acquisition de données expérimentales (informations de débogage) avant toute illumination concernant une erreur donnée.

Le débogage n'est pas enseigné en raison de la prémisse (peut-être héritée du département de mathématiques) que les programmes devraient être corrects par conception, peut-être même de manière prouvable. Et donc les étudiants ne devraient pas «expérimenter» correctement la programmation. Cependant, cela ignore le processus de fabrication dans le monde réel d'humains imparfaits qui lancent des logiciels selon des spécifications changeantes sous des pressions de calendrier, etc.

hotpaw2
la source
Hmm .. peut-être que mon école est juste différente, mais ce n'est pas comme ça que les choses se font à CWRU.
Billy ONeal
Dépend probablement de l'arbre d'héritage du département historique du cours de programmation en question.
hotpaw2
Je ne sais pas où tu trouves tout ça. Toutes les classes d'introduction passent quelques conférences sur la façon de dépister les bogues.
davidk01
@ davidk01 - Cela n'explique pas l'observation du PO, que j'ai entendu, pas souvent, mais plus d'une fois auparavant.
hotpaw2
@ hotpaw2: Qu'est-ce qui n'explique pas l'observation du PO? Ce n'est pas parce que les étudiants ont du mal à apprendre à déboguer des programmes que ce n'est pas enseigné, ce qui est la conclusion à laquelle vous sautez. J'ai suivi plusieurs cours de programmation en tant qu'étudiant de premier cycle et en tant qu'étudiant diplômé. Dans chaque classe, l'instructeur a passé au moins une conférence pour passer en revue un programme incorrect et le corriger afin de démontrer certaines techniques de débogage courantes.
davidk01
0

Cette question m'est étrangère. À mon université, l'utilisation du débogueur (JDB et le débogueur Eclipse) a été enseignée dès la première séquence informatique de première année. L'utilisation de débogueurs et d'autres outils de test a été enseignée à nouveau dans le cours sur les tests de logiciels.

Personnellement, je trouve incroyablement difficile de croire que toute bonne école qui tente de préparer les gens à entrer sur le marché du travail n'enseigne pas les techniques de débogage et de test appropriées. Ils ne peuvent évidemment pas en couvrir tous les aspects, mais ils peuvent au moins enseigner les bases en classe.

Thomas Owens
la source
0

Découvrez-le par vous-même

Je n'avais pas besoin et je ne voulais pas qu'un professeur ou un TA prenne le temps de m'enseigner quelque chose que je pourrais facilement comprendre par moi-même. Ils sont là pour m'enseigner les concepts difficiles et guider l'apprentissage. Ils ne sont pas et ne devraient pas être là pour que vous n'ayez pas à RTFM.

Apprenez à apprendre

L'université devrait viser à apprendre à apprendre, pas seulement à tenir la main sur chaque sujet que vous ne connaissez pas. Si vous avez constamment la main dans ce processus, vous échouerez misérablement dans le monde réel.

Montée, dans les deux sens, à travers la neige

Quand je suis allé à l'école, ils n'ont pas pris la peine de vous enseigner la langue non plus. On s'attendait à ce que vous le récupériez à votre rythme. Ils vous donneraient le projet et les installations. Il vous appartenait de rechercher les informations dont vous aviez besoin pour terminer la mise en œuvre et soumettre un programme de travail. Assez similaire au monde réel, sauf avec les heures de bureau.

Dietbuddha
la source