Les compétences de débogage sont-elles importantes pour devenir un bon programmeur?


24

En plus des autres qualités, un programmeur doit-il avoir de bonnes compétences en débogage? Si j'ai un candidat qui n'a pas pu trouver l'erreur dans le programme donné, mais qui a pu résoudre tous les puzzles et programmes, dois-je le considérer pour le poste?

EDIT: - Les puzzles sont des boules rouges, bleues et rouges-bleues normales. Les programmes sont comme trouver des zéros continus dans un tableau. Le programme de débogage échoue en raison d'une condition qui devrait être> =, mais est plutôt>. Tout est sur papier.


13
A-t-il été autorisé à exécuter le programme ou a-t-il dû trouver l'erreur en regardant le code?
Michael K

9
Vous pouvez uniquement coder aussi bien que vous pouvez déboguer. les deux vont de pair dans mon livre.
Demian Kasier

3
certaines personnes y sont meilleures que d'autres. il est souvent difficile de repérer une erreur dans un morceau de code étranger - en particulier lors d'un entretien stressant.
leed25d

6
@Fanatic: uniquement si vous ne travaillez qu'avec votre propre code. La plupart du débogage que je fais au travail consiste à rechercher les erreurs des autres.
Mason Wheeler

3
@Manoj R, êtes-vous sûr de pouvoir trouver le même problème avec le même temps? Êtes-vous sûr que juste parce que la requérante ne trouve pas de problème sur papier en 20 minutes, elle ne serait pas en mesure de réussir avec Google (Oui, putain de Google) de son côté et quelques semaines de pratique?
Job

Réponses:


37

Oui c'est très important

À propos de ce candidat particulier, il est possible qu'il / elle ne soit pas assez familier avec la base de code x pour le déboguer.

Un bon résolveur de problèmes devrait être en mesure de déboguer, car tout ce qui est généralement requis est d'avoir une méthode / approche très logique.


1
Plus que toute autre compétence en programmation, le débogage vient avec l'expérience et a moins à voir avec le talent.
Pieter B

24

Si vous ne pouvez pas déboguer, vous n'êtes pas du tout un programmeur, et encore moins un bon.

Le débogage est une application réelle et pratique non seulement des compétences techniques mais aussi de la capacité d'analyse et des processus de réflexion. En conséquence, je dirais que c'est un test beaucoup plus utile et pertinent que les questions posées sur le tableau blanc ou les entretiens.

À moins que le travail que vous avez implique de passer toute la journée à répondre à des questions théoriques, vous avez besoin de quelqu'un qui peut appliquer toutes les compétences qu'il possède.

Ce que vous devez faire, c'est vous demander si c'était un test équitable de la capacité de débogage - pourraient-ils exécuter le code, mettre des points d'arrêt, etc., de la même manière que dans le monde réel? De quelle erreur s'agissait-il? Est-ce quelque chose que le compilateur prendrait et signalerait (dans ce cas, c'est une question assez inutile car ils n'auraient jamais besoin de la repérer)?

S'il a été simplement écrit sur papier, il s'agit essentiellement d'un test de lecture détaillé et c'est une compétence encore plus abstraite que votre question d'entretien technique moyenne et je dirais, à peu près sans valeur.


2
+1 pour "Demandez-vous si c'était un bon test de capacité de débogage" - On dirait que ce n'était pas le cas. Un test équitable aurait inclus du code exécutable avec un débogueur, c'est-à-dire les placer dans un environnement de travail normal et normal (étant donné qu'ils travailleront rarement sans débogueur).
doppelgreener

11

Règle d'embauche principale - en cas de doute, dites non.

Si vous avez besoin d'implémenter beaucoup de nouveau code pour pas cher - vous pouvez obtenir ce type, mais personnellement, je continuerais à chercher.


7
J'ai embauché beaucoup de gens au cours de mes années et j'ai regretté presque tous les candidats «peut-être» que j'ai embauchés.
JohnFx

10

À moins que le développeur ne puisse écrire du code propre tout le temps (absolument impossible), et ne travailler que sur des projets "verts" (ce ne sera jamais le cas), alors oui, les compétences de débogage sont absolument essentielles. Absolument. J'ai eu de l'expérience avec des développeurs qui n'aimaient tout simplement pas déboguer, alors ils sont devenus paresseux et ont jeté du code sur le mur à QA pour qu'ils les testent. Mais ces développeurs ne durent pas très longtemps.

Le développement de logiciels est un métier et une compétence en résolution de problèmes. Ces problèmes incluent à la fois les problèmes commerciaux et les problèmes avec leur code (et les autres). Soit dit en passant, de nombreux projets de maintenance concernent spécifiquement la correction de bogues, le débogage est donc une compétence absolument essentielle.


Une autre chose que je veux ajouter ... Une partie de notre processus d'entrevue ici, c'est que nous donnons au candidat un exercice pour déboguer une application et lui ajouter quelques petites fonctionnalités également. Chaque partie de ce processus est également considérée comme importante.
Mark Freedman

7

Je garderais à l'esprit qu'il existe de nombreux sites Web de type «questions d'entrevue» et qu'il est tout à fait possible d'étudier de nombreuses questions et énigmes. Une chose que vous ne pouvez pas étudier est le débogage de code que vous n'avez jamais vu auparavant. Soit vous avez écrit suffisamment de code pour savoir comment déboguer, soit vous ne l'avez pas fait. S'il s'agit d'un poste d'entrée de gamme, je n'exclurais pas le candidat, mais s'il prétend avoir de l'expérience avec la langue et ne peut pas déboguer le code, cela soulève certainement un drapeau rouge.


5

La principale différence que j'ai vue entre les programmeurs juniors et les programmeurs seniors est leur capacité à déboguer. L'habileté au débogage est quelque chose qui ne vient qu'avec de la pratique et de l'expérience.

Par exemple, pensez à un étrange bogue où un programme Java fonctionne correctement sur la console en mode interactif, mais échoue lorsque vous essayez d'utiliser un canal Unix pour la même entrée. Si vous avez déjà rencontré ce problème, vous pouvez vérifier qu'il new Scanner(System.in)n'est appelé qu'une seule fois; le bogue étant qu'il consomme le tampon lorsqu'il est canalisé, mais évidemment pas en mode interactif. Je m'attendrais à ce qu'un programmeur plus expérimenté identifie ce bug plus rapidement. Peut-être parce qu'ils l'ont déjà vécu ou parce qu'ils ont eu d'autres problèmes de mise en mémoire tampon dans le passé.

En ce qui concerne la résolution d'énigmes et l'écriture de nouveau code, bien que l'expérience soit importante, c'est quelque chose où un programmeur de niveau junior peut peut-être fonctionner aussi bien, voire mieux qu'un programmeur plus expérimenté. Autrement dit, l'intelligence et la compétence peuvent avoir un effet plus important, qui est indépendant de l'expérience.

Si vous êtes en mesure d'investir dans un programmeur débutant, qui peut avoir de nouvelles idées et peut aider l'équipe à "gélifier", et ils semblent bien écrire du nouveau code, allez-y et embauchez-les. Si vous recherchez un programmeur de niveau supérieur, ce manque de compétence de débogage peut être un signe d'avertissement majeur: ils peuvent avoir dix ans d'expérience, ce qui revient à vivre dix fois la première année.

En guise de remarque, il existe des moyens d'améliorer le débogage sans avoir au préalable 10 ans d'expérience. Je recommande le livre d'Andres Zeller Why Programs Fail: A Guide to Systematic Debugging comme moyen d'apprendre les principes scientifiques et de mieux comprendre comment reproduire, rechercher et corriger les défaillances.


Le débogage est donc quelque chose qui vient de la pratique et peut être appris et ne devrait pas avoir beaucoup de poids lors de la sélection des candidats.
Manoj R

1
Pour être clair: vous devriez peser lourdement pour les développeurs seniors, mais moins pour les développeurs juniors. Par exemple, quelqu'un qui vient de quitter l'université, qui a commencé à programmer sa première année, pourrait prendre 10 fois plus de temps pour déboguer quelque chose. Mais il y a de bonnes raisons d'investir dans des développeurs juniors.
Macneil

5

Cela dépend de votre environnement. Si vous jouez au sodoku et à d'autres puzzles toute la journée, ce serait peut-être un bon candidat.

Si cependant, vous avez parfois des bogues dans votre code, ou qu'il ne fonctionne pas toujours exactement comme prévu, je vous suggère de trouver quelqu'un de bon pour le dépannage.

Embaucher pour ce dont vous avez besoin, pas un idéal de ce que devrait être un programmeur.


3

En plus des autres qualités, un programmeur doit-il avoir de bonnes compétences en débogage?

Oui.

Le débogage de code fait partie de la résolution de problèmes. Je n'ai jamais rencontré de développeur qui a écrit du code parfait et zéro bogue. Un développeur déboguera soit son code, soit celui de quelqu'un d'autre. C'est une nécessité.

devrais-je le considérer pour le travail?

Peut-être que ça dépend.

Le fait de ne pas pouvoir déboguer un programme lors d'une entrevue ne devrait probablement pas être un facteur décisif si le demandeur était en mesure de terminer tous les autres puzzles et programmes de l'entrevue. Cela dépend vraiment de la profondeur et du souffle de l'entretien.

Combien de débogage la position implique-t-elle? Si beaucoup, alors peut-être plus de poids devrait être mis dans la façon dont un demandeur peut répondre à la question de débogage. Mais comme vous n'avez mentionné qu'une seule question de débogage a été posée, il ne semble pas que ce soit le cas.


2
+1 Pour réitérer le débogage, il est nécessaire, mais pas de rupture lors de l'entretien.
Gaurav

3

un programmeur doit-il avoir de bonnes compétences en débogage?

Oui. Cela dit, je vous demanderais de considérer la méthodologie de l'entrevue (c.-à-d. Style quiz / test) moins que parfaite (d'accord, imparfaite) dans la mesure où beaucoup de gens trouvent le code sur papier une expérience étrange et inconnue.

Étant donné que le débogage est un processus , pas la réponse ou le résultat (par exemple l'erreur ), je suggérerais d'utiliser un dialogue ou une discussion interactive comme meilleur moyen d'évaluer les capacités de débogage d'un candidat. Alors que la plupart des gens utilisent un système de débogage ad hoc informel, les bons candidats auront un schéma similaire en général, de poser des questions pour mieux comprendre le système ou les hypothèses et les exigences, puis isoler le problème (souvent diviser pour mieux régner) et comparer méthodiquement le code aux exigences, et évaluer les entrées / sorties attendues, plutôt que de changer bon gré mal gré un tas de choses à la fois jusqu'à ce que cela fonctionne.

J'exprime également des réserves sur les problèmes de puzzle lors des entretiens, notamment sous forme écrite, comme si le candidat n'avait pas les bonnes hypothèses de référentiel (l' astuce), le puzzle leur est peut-être insoluble. C'est-à-dire que de nombreux puzzles d'entrevue souffrent d'avoir un seul chemin correct, alors que la vie est compliquée et les pensées les plus créatives sont celles qui adoptent des approches étonnamment nouvelles pour résoudre un problème qui peut ne pas fonctionner avec un puzzle précuit particulier donné, avec une solution attendue . C'est comme attendre que tous les trompettistes jouent du jazz. Ceci peut être géré en posant la question comme une discussion interactive non conflictuelle (la pression peut confondre la créativité). Encore une fois, pour moi, la réponse est secondaire pour voir un bon processus de pensée s'exprimer. Vous devrez probablement leur demander de réfléchir à haute voix, mais cela a tendance à être plus productif selon mon expérience.

Je n'ai pas lu ou évalué pourquoi les programmes échouent de Zeller , mais je peux recommander le débogage par Agans comme une lecture courte et rapide qui peut aider à solidifier le processus de débogage ad hoc en un effort plus structuré, concret et organisé, ce qui peut aider à être plus efficace au débogage. Imprimez également une copie et accrochez-la dans votre armoire ou solution de contournement, l' affiche des règles de débogage , c'est un rappel parfait pour les mauvais jours où rien ne semble aller bien. J'ai peu de mauvais jours et je passe moins de temps à déboguer activement (lire: me gratter la tête avec confusion ) en essayant de les suivre dans l'esprit sinon dans la lettre.


Très bonne réponse. J'ai passé littéralement des jours à chercher la correction de bogue la plus simple et je suis littéralement tombé sur la correction d'un bogue délicat en quelques minutes. Un bon développeur doit avoir une stratégie raisonnable. Et cela dépend beaucoup de l'application. Supposons que votre application ne présente pas de problème lorsque vous insérez un ensemble d'instructions d'impression / journal ou exécutez la version avec des symboles. Et alors? Le demandeur doit au moins être capable d'articuler une sorte de stratégie cohérente.
SnoopDougieDoug

2

Je dirais que le débogage est essentiel, à moins que le programmeur ne soit si bon qu'il ne fasse jamais d'erreur. Je ne suis pas convaincu que cela soit impossible, mais je ne peux pas l'imaginer avec les langages et outils populaires actuels.

Je n'aime pas l'idée d'être mis sur le vif comme ça dans une interview. Si le candidat est nerveux (et qui ne l'est pas), il / elle pourrait tirer un blanc alors qu'en tant que programmeur, il pourrait être capable de gérer régulièrement de tels problèmes. Ensuite, s'il s'agissait d'un entretien bien connu ou d'un problème de test comp-sci, le candidat pourrait connaître le résultat par cœur, mais ne pas avoir la capacité de réfléchir à un nouveau problème. De plus, si le candidat n'est pas familier avec la langue, il devra se battre. De nombreux bugs sont difficiles car un bon programmeur sait ce qu'il voulait taper et son cerveau prend des raccourcis lors de la lecture du code. Je ne trouve pas l'utilisation de style C de = où == aurait dû être utilisé par inspection, car je sais quelle était l'intention, et mon cerveau prendra un raccourci d'analyse en le lisant.


1

Une bonne partie de la résolution de problèmes de programmation, et pour résoudre un problème, vous devez connaître le problème central, pas seulement les symptômes ou les incohérences. Le débogage est l'art d'identifier le problème principal.

  • identifier le problème principal
  • mieux en mesure de visualiser le flux

et beaucoup plus.


1

J'ajouterais un peu plus à la situation en soulignant l'erreur et en voyant la réaction de la personne. Sont-ils trop dramatiques à propos du type "D'oh! Je suis un idiot, c'était tellement stupide ...", trop apathique dans le camp "Ouais, quel que soit le type", ou était-il actif à écouter ce qui était mal avec une sorte d'excuses ou une remarque pour indiquer qu'ils obtiennent qu'ils ont foiré quelque chose qu'ils auraient dû résoudre? Juste quelque chose à penser dans des situations futures.

Déboguer en temps opportun est une grande compétence. C'est un peu différent de donner à quelqu'un un problème où il se corrige quand il se corrige. Parfois, des mesures agressives doivent être prises pour sauver le système, ce qui devrait être reconnu, car j'imagine que la plupart des entreprises ne souhaiteraient pas interrompre leurs ventes pendant des semaines pendant que quelqu'un corrige un bogue dans le logiciel de comptabilité utilisé par l'entreprise.


1

Le débogage est une compétence critique. En fait, je dirais plus que le dépannage est la compétence critique. Quelqu'un devrait savoir comment définir le problème (y compris les informations utilisateur à demander et les journaux à consulter), comment le reproduire, quelles sources de données il dispose pour diagnostiquer le problème et comment déboguer, puis comment réparer une chose sans casser autre chose. Cependant, il est difficile de déterminer cela lors d'un entretien.

Je lui donnerais un vrai problème à trouver et la possibilité d'utiliser les outils disponibles et lui demanderais ensuite quelles mesures il a prises pour trouver le problème ou quoi d'autre il pourrait faire s'il n'était pas en mesure de le trouver dans le temps imparti. Vous êtes vraiment à la recherche de quelqu'un qui attaque le problème de manière assez systématique et qui a plus d'outils dans sa boîte à outils que le débogueur et google (sauf au niveau Junior où il devrait au minimum essayer les deux (quelqu'un qui ne peut pas penser à essayer ces deux choses n'est probablement pas compétent ou au moins je ne prendrais pas la chance de lui) mais n'a probablement pas encore beaucoup d'outils de dépannage avancés).

Je donnerais plus de poids aux compétences de dépannage qu'aux réponses aux énigmes (enfin, je ne les poserais pas du tout) ou aux compétences de programmation démontrées. J'ai rarement vu un développeur qui peut bien dépanner qui ne peut pas aussi écrire du bon code ou faire les correctifs nécessaires. J'ai vu beaucoup de gens qui peuvent bricoler du code ensemble pour obtenir un produit "fonctionnel", mais ne pouvaient pas résoudre un problème si leur vie en dépendait. Surtout parce qu'ils ne comprennent pas vraiment ce qu'ils font ou comprennent le problème qu'ils essaient de résoudre. Les bons fauteurs de troubles savent identifier le vrai problème et pas seulement le symptôme. Ils savent également quelles questions poser pour définir le problème d'un nouveau développement.


1

Il y a 4 à 5 compétences clés dans n'importe quel emploi et la programmation n'est pas différente. Au niveau professionnel, vous devez être bon dans toutes les compétences fondamentales essentielles. Si vous en avez 4 sur 5, cela vous retiendra.

Pouvez-vous imaginer un vendeur qui peut présenter, convaincre, articuler, qualifier les clients, mais ne peut pas conclure l'affaire? Ils sont là et vous ne les voulez pas dans votre équipe de vente.

Le débogage est certainement une compétence de base dont un programmeur ne peut pas se passer.


0

J'ai un tel style de codage, qui nécessite un débogage criminel. Lorsque j'ai terminé avec 3 lignes de code, je l'exécute et le teste, en imprimant souvent quelques variables. Dans les cas, lorsque j'ai obtenu un résultat ou un comportement indésirable, j'ai mis de nombreux vidages dans mon code - au lieu de déboguer. J'utilise un vrai débogueur très rare. Etrange mais vrai.


0

Le débogage est la phase de développement logiciel qui survient après qu'un certain test a été effectué sur votre logiciel et qu'un bug a été découvert. C'est l'acte de rechercher et de corriger le bogue dans votre logiciel.Dans de nombreux cas, trouver le bogue nécessite généralement plus de temps que de le corriger.

Il s'agit du processus de suppression des bogues (les vulnérabilités) inhérents à l'application / au système informatique. Si cela n'est pas fait, les pirates peuvent profiter des bogues et effectuer diverses activités malveillantes:

1) Ils peuvent exposer la vulnérabilité du public entraînant une perte de revenus, d'affaires et de réputation pour les développeurs et les fournisseurs.

2) Les vers recherchent les systèmes vulnérables qu'ils peuvent exploiter et ainsi se copier sur ces serveurs. par exemple. En janvier 2003, le ver Slammer a profité de la vulnérabilité de MS SQL Server.

3) Où les vers ont été mentionnés, comment pouvons-nous oublier les virus? Les virus sont également lâchés par leurs développeurs qui profitent des bogues présents dans le programme dans le but principal d'une exposition indécente ...

4) Et si les programmes ne sont pas débogués correctement, les consommateurs ne se tiendront jamais bien s'ils n'en ont pas pour leur argent. Dans ce cas, vous n'avez même pas besoin d'un pirate informatique pour faire le sale boulot - vous pourriez tout aussi bien faire confiance au bon vieux public.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.