Nous avons beaucoup d'excellents outils qui aident beaucoup lors de la programmation, tels que les bons éditeurs de texte de programmeurs, les IDE, les débogueurs, les systèmes de contrôle de versions, etc. .
Il existe toujours des outils qui aident beaucoup, mais n'attirent toujours pas autant d'attention, pour diverses raisons, par exemple, quand ils ont été publiés, ils étaient en avance sur leur époque et sont maintenant plus ou moins oubliés.
Selon vous, quel type d’outil de programmation est le plus sous-estimé? Motivez votre réponse.
Réponses:
Un canard en caoutchouc. Oui vraiment.
http://en.wikipedia.org/wiki/Rubber_duck_debugging
la source
Stylo et cahier.
la source
Les outils de diff semblent être sous-utilisés lors de la comparaison de sorties de journaux ou de données dans des fichiers texte plats. Ou peut-être que ce n'est qu'un créneau? Il me semble très utile et utile pour le débogage de comparer d’énormes journaux d’exécutions de programmes et d’identifier un ou deux détails qui ont changé.
Les outils de profilage de performances sont également très utiles, en particulier lorsque vous rencontrez un problème critique, mais il semble que très peu de gens les connaissent (et je me reconnais moi-même dans cette catégorie).
De bons outils XML sont essentiels - si vous travaillez avec des fichiers XML, plus d'une douzaine de lignes ou de multiples schémas. Parfois, vous avez besoin de plus que de simples syntaxes de base soulignant d'autres éditeurs. Apprendre en XSL peut également être très utile lorsque vous travaillez avec XML. Souvent, je vois ce qui pourrait être fait dans une simple transformation XSL effectuée en plusieurs lignes dans le code de l'application. Bien que pour clarifier: je ne suggère pas que XML lui - même est un "outil de programmation sous-estimé"; Je suggère que la valeur de bons éditeurs XML est sous-estimée, d'après ce que j'ai vu.
la source
diff
is underappreciated. En ce qui concerne le profilage, vous n'êtes pas seul à penser qu'elles doivent être utiles, mais vous-même, vous ne savez pas comment. Vérifiez ça.<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Expressions régulières
Ils sont tellement utiles. Ils aident lors de la recherche dans les fichiers journaux, l’analyse de texte, etc. Ils sont simplement extrêmement utiles.
Je trouve étrange le nombre de personnes que je connais qui ne les utilisent jamais, car elles ont un peu d'apprentissage. Souvent, je vois des gens faire les choses à la dure (Note: avant regex, je faisais les choses à la dure) quand une simple regex pouvait le comprendre rapidement.
la source
Vos coéquipiers. Lorsque vous êtes sur une idée géniale et que vous oubliez d'incorporer votre équipe, vous n'entendez jamais leurs préoccupations ou leurs idées sur les raisons pour lesquelles cela ne fonctionnera pas ou pourquoi cela pourrait être encore meilleur.
Je dis cela, car il est facile de penser que la programmation est une chose antisociale que les gens font dans les coins avec leurs idées brillantes. Les personnes qui pensent que cela sous-estime la valeur des équipes et de leurs coéquipiers pour aider les idées / projets à couler / nager.
la source
Google. Il y a très peu de problèmes qui n'ont pas encore été résolus et documentés. Une requête Google bien réglée peut faire gagner beaucoup de temps à tout le monde.
la source
De loin, l'outil le plus sous-estimé pour trouver des "goulots d'étranglement" est Ctrl+ Cou le bouton "Pause", dans un débogueur.
Vérifiez le dernier paragraphe de ce post , et ce post , et ce post , pour commencer.
Tant de fois que je vois / entends des gens dire: «Le programme est trop lent! Que puis-je faire à ce sujet? J'ai essayé un profileur (le cas échéant), mais je ne comprends pas ce qu'il dit. Quelqu'un a une idée? Aide! " Eh bien, ce ne sont que des suppositions. Ce que j'ai toujours fait, et que d'autres ont aussi fait, c'est de le mettre en marche, de l'interrompre et d'examiner la pile d'appels. Si le problème est vraiment grave, le bingo est pour vous. Si le problème n'est que léger, vous le faites plusieurs fois. Tout ce que vous pouvez éviter sur plusieurs échantillons est un goulot d'étranglement que vous pouvez corriger.
Oui, c'est un appât à la baisse, mais ça fonctionne.
la source
Le compilateur.
La plupart des gens ne prennent pas le temps de comprendre ce que leur compilateur de choix fait. Ils ont juste l'impression que cela fait du code un programme exécutable et c'est tout ce qu'ils peuvent faire. Sur la plupart des systèmes modernes, il existe plusieurs configurations que vous pouvez utiliser pour le faire répondre à vos besoins Voici un exemple, je parie que la moitié des développeurs de votre bureau n’ont aucune idée de la définition du niveau d’avertissement en tant qu’erreur (en supposant qu’il en ait réellement un). Quelles options avez-vous pour afficher les symboles de débogage? Quelles optimisations (ou quel niveau de) voulez-vous qu'il fasse? La liste continue.
la source
-pedantic -Wall -Wextra -Werror
... bien qu'il soit difficile de construire quoi que ce soit alors: pTon cerveau. D'autres outils n'auraient pas beaucoup de sens sans cela.
la source
Bon vieux:
Parfois, un débogueur, un profileur ou un diagramme de flux UML est utile. Et parfois, ils vous rendent fou. Je me retrouve toujours obligé d'utiliser des instructions print (ou trace, NSLog ou ce que vous avez) pour vous assurer que mon code fait ce que je pense qu'il fait quand je pense qu'il le fait.
la source
Vieux scripts simples ... quel que soit le nombre de langages de nouvelle génération que nous développons, nous nous basons toujours sur les scripts. La plupart des tâches quotidiennes peuvent être accomplies en écrivant quelques lignes de scripts.
la source
Stylo et tableau blanc.
Vous ne pouvez pas battre la basse technologie lorsque vous essayez d'expliquer quelque chose.
la source
ack . C'est comme
grep -r
, mais il est conçu pour rechercher dans votre code source.la source
Perl et d'autres langages de script. Idéal pour les tâches un peu trop compliquées pour des outils graphiques tels que Agent Ransack.
la source
Raccourcis clavier permettant une refactorisation rapide, fréquente et sûre. Apprendre à extraire (ou en ligne, etc.) des variables, méthodes, constantes ou classes à la pression de certaines touches change fondamentalement la façon dont je code. Vous ne refacturez que fréquemment (c.-à-d. Assez) lorsque le coût est minimal. Il est donc essentiel que ces raccourcis soient une seconde nature pour pouvoir écrire et conserver un code correct en ce qui me concerne.
En règle générale, utilisez de bons outils (IDE / éditeur) et apprenez à tirer le meilleur parti des fonctionnalités qu’ils offrent.
Les tests unitaires et TDD viennent ensuite, afin de garder votre code testable et d'éviter la peur du refactoring.
Utilisez-les et vous pourrez facilement écrire du code maintenable correct, conforme au principe de DRY et auto-documenté.
la source
Le test unitaire offre les avantages suivants:
la source
Générateurs de code
Les générateurs de code peuvent créer une grande quantité de code efficace et sans bogue à partir d'une simple définition. Les utilisations de type ORM sont les plus évidentes pour la création de classes d'accès aux données, mais il existe de nombreuses autres utilisations potentielles.
Le support de génération de code semble encore à ses balbutiements, tant du point de vue du programmeur que du framework, mais je pense que nous en verrons de plus en plus. Dans .NET, vous pouvez commencer à jouer avec le truc CodeDOM .
la source
J'utilise AgentRansack fortement. C'est une aide considérable pour parcourir des milliers de fichiers très rapidement. Cela m'a fait gagner beaucoup de temps, mais je ne connais pas beaucoup de programmeurs qui en connaissent ou l'utilisent.
la source
Méthodes formelles.
http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X
http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1
Il est difficile d'exagérer leur importance. Chaque boucle et chaque instruction if commence par une idée qui nécessite une sorte de "preuve". La plupart des programmeurs font cette preuve la plupart du temps dans leur tête. Vous demandez ce que la déclaration if fait et ils peuvent expliquer - de manière saine et logique - quels sont les choix et pourquoi ils sont complets, cohérents et exclusifs.
Mais certains semblent deviner au hasard. Ils ont besoin de plus d'aide et les méthodes officielles pourraient être le type d'aide dont ils ont besoin.
C'est juste de l'algèbre (et du calcul) pour le code. Rien de trop complexe ou sophistiqué.
la source
Les modèles de conception physique, tels que le fait de quitter la chaise pour un jogging rapide à la lumière du soleil et à l’air frais, permettent à notre cerveau de fonctionner à plein régime.
la source
Eh bien, c'est Half Life 2 (insérez votre jeu préféré ici). Si j’ai un problème que je ne peux pas résoudre, j’arrête de fumer et je commence à jouer avec mon jeu préféré. Soudain, la solution me revient à l’esprit. Donc, pour être honnête, ce n'est pas un jeu ou quelque chose comme ça, mais faire quelque chose d'autre . Je vois souvent des gens assis sur un problème pendant des heures sans le résoudre et tout ce qu'ils devraient faire, c'est mettre leur cerveau hors ligne pendant une courte période.
la source
Débordement de pile - aide experte rapide lorsque vous êtes bloqué
la source
Je pense que ce sont les programmes d'édition de texte Notepad / TextPad / simple. Tout le monde a un moment où ils ont besoin d'une solution rapide qui ne nécessite pas d'ouvrir un IDE et nécessite juste une modification rapide. Et tous les ordinateurs ont une sorte de programme d'édition de texte simple.
la source
Assert et une bonne
alwaysAssert()
fonction. IMHO ceux-ci sont plus importants que les tests unitaires, car les tests unitaires ne peuvent détecter les bogues que dans les cas spécifiques que vous avez pensé tester. Si le même programmeur écrit le code et les tests, il manquera probablement les mêmes cas extrêmes dans les deux cas. En outre, il est parfois difficile de procéder à des tests unitaires, car l’environnement dans lequel le composant fonctionne et / ou les données sur lesquelles il opère est trop compliqué pour pouvoir proposer un scénario de test artificiel.La beauté des assertions réside dans leur capacité à documenter des hypothèses et à les tester sur des intrants non artificiels . Si l'une de ces hypothèses est fausse, votre code échoue bruyamment au lieu de "fonctionner" mais de produire des résultats subtilement incorrects. Il échoue également plus près de la racine du problème que cela ne le serait sans les affirmations. En pratique, si vous énoncez explicitement suffisamment d'hypothèses sur un morceau de code et que toutes ces hypothèses sont correctes, le code est généralement correct.
Un reproche commun aux assertions est qu’elles peuvent être désactivées. IMHO chaque langue ou bibliothèque standard devrait avoir une
alwaysAssert()
fonction ou un équivalent approximatif qui fait la même choseassert
mais ne peut pas être désactivé. Cela peut être utilisé pour vérifier des hypothèses dans des zones de code critiques non performantes, où les avantages de désactiver des assertions sont négligeables.la source
La touche F1. - Utile pour les programmes que vous ne connaissez pas et pour ceux sur lesquels vous travaillez. (En supposant qu'il s'agisse d'une application volumineuse.)
Il était puissant de filtrer les problèmes lorsqu'un utilisateur signalait des problèmes en fonction de son interprétation du fonctionnement du logiciel. Bien sûr, il se peut que la conception elle-même ait été imparfaite. Mais c'est une autre histoire.
la source
Divers utilitaires de base UNIX, mais principalement
find
et occasionnellementgrep
oued
. La possibilité de rechercher des éléments dans des fichiers nids profonds est inestimable, en particulier lorsque vous héritez soudainement d'une base de code et que vous devez le réparer. Même si ce code est bien documenté, vous devrez probablement chasser et une bonne compréhension de lefind
tuer.la source
Curiosité
Appelez cela la "devinette de la programmation". Qu'est-ce qu'un outil par rapport à la personne qui le manie? Le désir de savoir comment et pourquoi quelque chose fonctionne ou non accroît ses connaissances plus que n'importe quel outil spécifique et cela est vrai au-delà de la programmation.
la source
Économisé d'innombrables heures dans le monde entier!
la source
Queue
Tail peut être utilisé pour surveiller le fichier de sortie du journal du programme en temps réel. Cela a été d'une grande aide lors du développement de systèmes qui ne fournissent pas aux autres moyens de lire le journal.
Les exemples de programmes sont;
la source
J'ai kludged ensemble un générateur de graphe d'appel Perl une fois. C’était extrêmement utile, mais c’était un coup dur pour le code non procédural ou les routines hors fichier.
la source