Vous les connaissez, ces erreurs qui n'ont aucun sens. Où ressemble à un gremlin vient de sauter au plus profond de tes frites et a gâché quelque chose. Faites-vous une promenade, écrivez des choses, appelez un oncle?
Pour ces problèmes vraiment horribles, ma stratégie va généralement comme suit.
Expérience et Google. Continuez à essayer de résoudre le problème. La plupart du temps, cela résout le problème dans une heure ou moins.
Donc cela n'a pas fonctionné. Prendre une pause. Prenez un café, parlez de quelque chose de sans rapport avec un collègue. Poussez le problème de votre esprit. Lorsque vous regardez le problème 5 ou 10 minutes plus tard, vous le regardez d'une perspective légèrement différente. La plupart du temps, cela fonctionne.
Dans ce cas, il n'a pas. Donc, passez 10 à 30 minutes de 10 à 30 minutes. Puis appelez dans un collègue. Mais avant de faire, faites quelques notes; Vous voulez démontrer le problème, reproduisez-le, puis liste des choses que vous avez essayées et surtout de prouver que vous les avez essayés. Alors faites une course sèche en premier. Définissez des marques de livres dans le code, fermez tous les documents ouverts superflus, etc. Vous pouvez également résoudre le problème vous-même, ou lorsque vous démontrez le problème, vous ne perdrez pas leur temps.
Demandez à votre collègue de vous faire prouver toutes vos hypothèses. Est-ce que ce régleur est en train d'être invoqué? Cette méthode renvoie-t-elle vraiment ce que vous prétendez c'est? Vous pensez que cet objet n'est pas nul - montrez-leur que ce n'est pas null.
La plupart du temps, soit la démonstration du problème vous fera comprendre que vous n'avez pas essayé toutes les possibilités ou que votre collègue verra votre erreur.
Si cela ne fonctionne pas son temps pour devenir sérieux. Document exactement ce que vous essayez de faire, ce que vous avez essayé et pourquoi cela n'a pas fonctionné. Envoyez-en mail à tous vos collègues. Postez-le donc. À ce stade, le document doit être un parfait SO Question.
Pendant que vous attendez des réponses, Google Google Google. Essayez chaque permutation de la question que vous avez. Ouvrir un tas d'onglets. Vous n'allez probablement pas avoir une réponse par ce point, mais vous recherchez des idées, des possibilités, des façons différentes d'aborder le problème.
Faites autre chose, si vous avez passé 5 heures à un problème, il est temps de le laisser pour un autre jour. Peut-être que vous aurez une réponse utile. Peut-être que lorsque vous attaquez le problème le lendemain, ce sera évident.
Si rien de cela ne fonctionne, il est temps de rechercher une solution différente. Peut-être que vous pouvez utiliser une méthode différente, une technologie différente. Peut-être devriez-vous envisager d'abandonner la fonctionnalité pour l'instant. Vous facturez-vous le client à l'heure? Travaillez-vous pour une entreprise sur une application interne? Vous devez escalader ceci au propriétaire et leur dire "Look, j'ai dépensé des x heures à ce sujet et n'a fait aucun progrès, est le prix des coûts en vaut la peine?". Vous ne voulez pas aller à votre patron et leur dire que vous avez passé 16 heures à un problème que pour eux de se retourner et de dire que cela n'a pas d'importance, sautez-le pour cette version. Vous devez le savoir plus tôt.
Et si cela ne fonctionne pas? Eh bien, vos seules options sont de suivre le problème du problème ou de rechercher une expertise de l'industrie. Demandez aux experts en technologie sur Twitter. Envoyez votre fournisseur de technologie.
Quitter. Non, pas ton travail! Juste se lever et rentrer à la maison. Vous avez terminé pour la journée ou le week-end. 19 fois sur 20 lorsque vous revenez au problème suivant, la solution se présentera en une heure.
Avant dix heures, je voudrais obtenir de l'aide.
Un mot, timebox
, définissez une durée limitée pour travailler sur quelque chose, et si ce n'est pas résolu, passez à autre chose et revenez-y le lendemain avec une nouvelle perspective.
Cela et un autre ensemble d'yeux, vaut toujours plus que n'importe quel moment, vous pouvez perdre quelque chose à quelque chose.
Je ne passerais jamais plus de 45 minutes à une heure à essayer de résoudre quelque chose en une seule séance, il viole la loi des rendements décroissants.
Expliquez le problème à quelqu'un d'autre.
En expliquant le problème à quelqu'un d'autre, vous devez le clarifier: cela vous permet souvent de voir la solution.
(Un des magazines informatiques professionnels britanniques une fois proposé de vendre des découpes en carton de taille de vie d'un programmeur principal spécifiquement à cette fin.)
Je trouve dormir sur un problème (parfois pendant quelques jours) peut également aider.
J'ai un plan en trois étapes:
Chaque étape est une escalade si l'étape précédente a échoué. Il y a presque toujours quelque chose d'autre que je peux travailler au stade 2.
Dormir
Sinon, appelez quelqu'un à proximité et demandez-lui de regarder rapidement le code.
Souvent, des erreurs qui vous mèneraient longtemps pour trouver (car votre code) se trouvent très facilement par d'autres
Je fais généralement l'un des trois:
L'un des trois fait un bon travail de se distraire de la situation à portée de main. Je trouve que les distractions laissent mon cerveau subconscient mâcher quelque chose pendant un moment. Après une heure ou deux de cela, Bam, il y a la solution :-).
Construisez un harnais de test pour cibler ce défaut exact et l'isoler
Continuez simplement à éliminer le bon code .. tout en répliquant le défaut. Jusqu'à ce que vous cissiez la pièce exacte du code enveloppant l'erreur. Puis tracez le code.
Lecture recommandée:le programmeur pragmatique Spécifiquement Chapitre 10: Bullets de traceur
Vous pourriez voir si vous vous levez, stimulant et en pensant au problème vous aide à trouver une solution. Que vous soyez ou stimulez-vous, essayez de vous éloigner de l'ordinateur pendant que vous pensez.
Éditer:
La réponse courte:
Q: Comment abordez-vous des erreurs vraiment bizarres qui vous permettent de perplexe pendant plus de 10 heures?
A: Assurez-vous qu'ils n'arrivent jamais: comprendre votre conception, connaissez votre code, apprenez à utiliser votre débogueur.
Explication:
"Là où il semble qu'un gremlin vient de sauter au plus profond de tes frites et foiré quelque chose"
Cela ne devrait jamais arriver. Si c'est votre code, vous devriez avoir une très bonne idée de ce qui provoque l'erreur avant de tenter de le réparer.
Futhermore, lorsque vous écrivez votre code, vous devriez déjà savoir où et pourquoi il risque d'échouer.
Cela dit - demandant à un pair, en affectant ainsi, rétracter et rouler vos pas et faire une pause - toutes les suggestions mentionnées ci-dessus vous aideront.
L'autre chose, vous devez connaître vos outils - votre boîte à outils de débogage. Expérience de journalisation des points suspects de votre code, examinez attentivement votre pile d'appels, à l'aide de points d'arrêt et de montres conditionnels, etc., etc. Les compétences de débogage ne sont pas des extraits - ils font partie de la programmation.
Toutes ces suggestions sont excellentes. Cependant, j'utilise une technique assez souvent que je n'ai pas vu mentionné. Faites des listes pour organiser vos pensées sur le problème. Si j'ai un problème particulièrement collant, j'écris habituellement plusieurs listes telles que: des faits, des hypothèses, des questions, des symptômes, etc. Je trouve cela souvent dans le processus d'organisation des choses de cette manière que je découvre des hypothèses que je n'avais pas réalisé que j'avais ( Cela se révèle souvent tort), des questions que je n'avais pas réalisées doivent être posées, d'autres permutations que je peux vérifier, etc.
Prenez un bain.
Tout Rodney mckay fans?
Sérieusement, cependant, s'il y a un point commun de toutes ces réponses, il faut faire une pause et faire autre chose.
J'aime penser à cela comme reléguant le problème de votre subconscient. Même si nous ignorons autrement, nos esprits (semblent) continuer à travailler sur le problème, même lorsque nous faisons autre chose, comme prendre un bain .
Entrez étape par étape, descendez en montage. Qui appelle quoi, point de rupture sur l'accès à la mémoire. Cela attire généralement le virus du virus du virus.
Sinon, faites une promenade.
J'ai eu un problème similaire, une corruption de mémoire apparente dans l'objectif-C, que j'ai lutté pendant de nombreuses heures. Mais puis mes collègues et mes collègues ont juste pris une promenade pour le déjeuner et j'ai expliqué le problème (et un peu en particulier de faire de la désérialisation d'un objet dans sa méthode init), et a essentiellement expliqué tout le problème.
(Techy Détails: essentiellement, j'ai initialisé et renvoyé un objet sur autre chose que lui-même, il y avait donc deux allocs, mais un seul objet est retourné. La mémoire s'est déplacée et est devenue fou, se bloque et le débogueur ne savait pas vraiment quoi faire avec tout non plus).
Je n'ai vraiment pas aimé la réponse la plus ancrée, car même si cela fonctionne parfois, parfois, vous devez simplement comprendre le même jour, alors que je recommanderais, dans cet ordre, est la suivante:
Confirmez que cela vous arrive non seulement. Cela peut vous faire économiser beaucoup de temps. Peut-être avez-vous désinstallé un composant requis ou effectué une modification de votre environnement, et une exception est engloutie quelque part dans votre code. Si cela ne se produise que pour vous, j'utiliserais un outil de comparaison de l'environnement. J'ai récemment lu sur un logiciel appelé Envy, ce qui vous permet de faire exactement cela, bien que ce ne soit pas gratuit, cela coûte 10 USD.
Arrive à tout le monde? Bien, faites maintenant une histoire d'affichage sur le code et vérifiez pour les modifications récentes qui auraient pu provoquer l'erreur, directement ou indirectement.
Il n'y a pas de changements récents? Si c'est une erreur très spécifique (une exception), "Stackoverflow". Maintenant que cela ne sonne pas mieux que "Google It", mais je me sens bien de dire que je cherche d'abord Stackoverflow pour la recherche de programmation que Google. Si c'est un problème très connu, il est très probable que vous trouverez une solution ici. Sinon, postez une question sur le site Stackexchange associé. Vous pourriez avoir une réponse très rapide, ou même si vous ne le faites pas, votre question sera là-bas pendant que vous faites plus de recherches. C'est un avantage.
Si vous n'avez pas trouvé de réponse en ligne ou que ce n'est pas une erreur générale, passez à travers le code étape par étape, vérifiant si les résultats obtenus de chaque étape ont un sens pour le résultat que vous attendez. Allez commencer à finir sur chaque méthode et bas en haut sur une solution à plusieurs niveaux. (C'est-à-dire si vous dépourvez de problèmes de dépannage, commencez par le code qui récupère les enregistrements. Il n'a pas de sens de démarrer dans l'interface utilisateur si vous pouvez déterminer rapidement si la première étape est le problème).
Si après avoir traversé le code plusieurs fois, vous n'avez toujours pas trouvé ce qui ne va pas, appelez quelqu'un à en parler. Comme quelqu'un l'a déjà mentionné, on en parle à voix haute peut éclairer l'ampoule. Plus la programmation par paire est vraiment utile.
À ce stade, si c'est réalisable, vous allez à l'écart soit pendant un certain temps, soit pour la journée. J'ai lu un très vrai Tweet hier qui a dit "je suis allé me coucher penser" comment le FCK "et réveillé la pensée" mais bien sûr "". Tellement vrai.
Si vous n'avez toujours pas de réponse, j'oserais dire que vous pourriez essayer de refléter dans des tâches/méthodes/fonctions plus petites. Henry Ford a déclaré quelque chose comme "il n'y a pas de tâche si complexe qui ne peut être accompli en la rompant dans des tâches plus petites". À ce stade, si la solution est trop complexe et que vous n'avez pas compris soit par vous-même ni avec l'aide de quelqu'un d'autre, refactorisez le code dans des tâches plus petites. Même si vous ne finissez pas de le commiter, cela peut vous aider à trouver la raison.
Ajouter une instrumentation à votre code.
Tweet à ce sujet ??
Vous devez reculer. Ma devise est 'Si le problème est trop difficile, vous résolvez le mauvais problème ". Quelles sont vos hypothèses? Ne faites pas confiance à rien.
Le corollaire à celui-ci est "plus le problème du problème, la mourir la solution". La force de l'ordinateur est sa logique afin que vous ne puissiez pas gagner sur la logique. Vous avez un cerveau et devez sortir-le penser.
À des moments modernes, il y a tellement d'autres choses interagissant sur un système - pare-feu, AV, antispyware, mises à jour automatiques qui se produisent chaque nuit - vous devez faire face à des objectifs en mouvement.